Relación de aspecto óptima para almacenar datos en Block RAM

Estoy trabajando en Xilinx virtex 4 FPGA. Quiero almacenar algunos coeficientes de filtro en Block RAM.
Específicamente, tengo muchos conjuntos de filtros, cada conjunto tiene 64 coeficientes, cada coeficiente es de 18 bits. Cada conjunto debe mapearse en un Block RAM distinto.

De la guía del usuario de Virtex 4 (enlace a pdf), dice que un Block RAM almacena 18 Kbits de datos que se pueden configurar en cualquier "relación de aspecto" desde 16Kx1, 8Kx2 hasta 512x36.

Entonces, si programo el Block RAM para que tenga 512 coeficientes, entonces tengo 36 Block RAM distintos a mi disposición.

Mi pregunta es, ¿puedo reducir esta relación de aspecto para programar Block RAM para almacenar 64 coeficientes, en cuyo caso tendré 288 Block RAM distintos a mi disposición (64 x 288 = 18K)?

Si la respuesta es NO, ¿cómo debo almacenar mis coeficientes para usar los recursos mínimos de RAM del bloque?

Respuestas (1)

No, has entendido mal el concepto de "relación de aspecto".

Cada chip tiene un número fijo de bloques de RAM; Puede encontrar este número en la hoja de datos.

Cada uno de esos bloques de RAM tiene 18 000 bits y se puede configurar para acceder a esos bits de varias maneras diferentes, desde 16 000 palabras de 1 bit cada una hasta 512 palabras de 36 bits cada una. En el primer caso, puede leer o escribir un bit a la vez; en este último caso, puede leer o escribir 36 bits a la vez.

Para sus coeficientes de filtro, probablemente querrá configurar el bloque de RAM como 1024 palabras de 18 bits cada una. Podrá tener un filtro para cada bloque de RAM en su dispositivo y estará "desperdiciando" la mayor parte de la capacidad de cada bloque de RAM.

Hay algunos trucos que puede probar para admitir más de un filtro por bloque de RAM:

  • Si el direccionamiento de todos los filtros se ejecuta en bloque, puede configurar el bloque de RAM como 512 palabras de 36 bits y luego dividir el bus de datos de 36 bits en dos buses de 18 bits, enviando los datos a dos filtros separados. .

  • Si no necesita la función de puerto dual de las RAM de bloque, puede usar el segundo puerto para alimentar un segundo filtro. Ate la dirección MSB baja en un puerto y alta en el otro.

  • Si se aplican las dos condiciones anteriores, posiblemente podría usar ambas técnicas juntas para mantener coeficientes para cuatro filtros en cada bloque de RAM.

Gracias por aclarar eso. Entonces estás diciendo que debería declarar mi RAM como reg [35:0] RAM1 [511:0] . Luego almacene 2 conjuntos de coeficientes de filtro de 0 a 63 y otros 2 conjuntos de coeficientes de filtro de 256 a 319 negando el MSB de la dirección. Así que esta es la forma más óptima, ¿verdad? Porque todavía no estoy haciendo uso de las 256 ubicaciones restantes, ¿verdad?
Otra pregunta de seguimiento es, ¿no puedo reducir la relación de aspecto a 64 x 288? Porque en este caso, puedo almacenar 16 conjuntos de coeficientes de filtro utilizando así las ubicaciones de RAM completas. ¿Virtux 4 permite esta relación de aspecto?
No, 512x36 es la relación de aspecto más amplia que admite el hardware. Para usar más de la memoria restante, tendría que hacer doble reloj (o más) las RAM con respecto a los filtros.