restricciones de ubicación de BlockRAM (Xilinx)

2

Tengo un módulo VHDL en el que se infieren varios RAM de bloque. Ahora me gustaría colocar estas RAM de bloque en una determinada región de mi FPGA (cerca de algunos pines IO).
¿Cómo hago esto usando las restricciones de Xilinx (archivo UCF)? ¿Puedo agrupar las RAM de bloque y definir una sola restricción de LOC para el grupo o tengo que restringir cada RAM de bloque individualmente?

El principal obstáculo para mí es que la cantidad de RAM en bloque depende de un genérico, por lo que no parece posible utilizar una restricción individual para cada RAM en bloque.

EDITAR: La razón por la que estoy intentando este enfoque es que no se pueden cumplir mis restricciones de tiempo. Todos los errores de temporización están relacionados con las RAM de bloque de un módulo. Al observar el resultado del PAR, puedo ver que las RAM de bloque crítico están dispersas en el centro del FPGA, en lugar de ubicarse cerca de los pines IO relevantes. Por lo tanto, quiero intentar guiar el PAR en la dirección en la que creo que se deben colocar las RAM de bloque. Los resultados de la sincronización deberían indicarme si mi consejo al PAR fue útil o no.

    
pregunta damage

1 respuesta

2

Bien, después de un intento de error, aquí es cómo logré hacerlo:

Primero se debe declarar un AREA_GROUP que abarca la parte del diseño que se restringirá (en el archivo UCF de proyectos).

INST "my_module/*" AREA_GROUP="pblock_my_module";

Esto crea un AREA_GROUP que contiene todo en la jerarquía de diseño "debajo" my_module . Ahora se puede definir un rango para las RAMs de bloque dentro de este AREA_GROUP .

AREA_GROUP "pblock_my_module" RANGE=RAMB8_X0Y0:RAMB8_X4Y12;

Los valores para el rango se pueden obtener a través de las herramientas de planificación de piso de los proveedores (por ejemplo, Xilinx ISE FPGA Editor). En el ejemplo anterior, todas las RAM de bloque (inferidas o instanciadas) dentro de my_module se colocarán en la esquina inferior izquierda del FPGA. Como hay muchas más RAM de bloque disponibles en esa región ( RANGE = RAMB8_X0Y0: RAMB8_X4Y12 ) de lo que se requiere, esta no es una colocación "dura" de las RAM de bloque, como la que se logra con la LOC restricción, pero más flexible.

Para obtener más información, consulte enlace

    
respondido por el damage

Lea otras preguntas en las etiquetas