Diseños de memoria Verilog con múltiples puertos de lectura / escritura: ¿rendimiento deficiente del circuito cuando se sintetiza?

3

Estoy interesado en diseñar (con verilog) algunas estructuras de memoria que tengan varios puertos de lectura / escritura (digamos 3). He estado estudiando arquitectura y lo que he oído es que estas no son implementaciones de hardware triviales y pueden crear circuitos mucho más lentos.

Con verilog de comportamiento, me imagino que es bastante simple, algo así como:

always @ (posedge clk) begin
    if (read_enable) begin
        out1 <= mem[read_addr1];
        out2 <= mem[read_addr2];
        out3 <= mem[read_addr3];
    end
    //something similar if I want multiple writes
end

Suponiendo que se sintetice, ¿tendré un circuito lento y de mierda, y por qué? ¿Se puede aliviar con un diseño más personalizado utilizando puertas en lugar de códigos de comportamiento?

Gracias

    
pregunta JDS

1 respuesta

1

En primer lugar, ¿estás sintetizando un FPGA?

Este documento de Cypress muestra una memoria RAM de doble puerto como un diagrama de bloques. No queda muy claro a partir de ahí, pero la matriz de doble puerto en el centro es una matriz que tiene un doble conjunto de líneas: 2 selecciones de fila, 2 conjuntos de columnas de escritura, 2 conjuntos de columnas de lectura.

Es difícil escalar más allá de 2 porque entonces necesitas 3, 4, etc. juegos de cables, y la densidad de tu RAM disminuye a medida que te quedas sin espacio para los cables.

Si escribe Verilog que implica más de 2 puertos, la herramienta de síntesis lo construirá a partir de fracasos con multiplexores en el frente, lo que consumirá mucho más espacio que las celdas de RAM.

¿Por qué necesitas varios puertos? ¿Qué tamaño de RAM desea? La construcción de un árbitro de memoria en la parte frontal de una RAM normal puede ser la solución que desee.

    
respondido por el pjc50

Lea otras preguntas en las etiquetas