restricción de Vivado LOC a través del código Verilog

0

Estoy tratando de establecer una restricción LOC mientras se especifica en el código verilog (a través del atributo verilog). Investigaciones anteriores en Internet dieron razones para pensar que este tipo de construcción debería funcionar:

///////////////////////////////////////////////////////////////// code begins

module wrapper(in, out);

    input in;

    output out;

    (* BEL="A6LUT", LOC="SLICE_X4Y4") INVERT inverter_instance1(in, out);

endmodule


module INVERT(in, out);

    input in;

    output out;

    assign out = !in;

endmodule

///////////////////////////////////////////////////////////////// code ends

Sin embargo, cuando se implementa, Vivado simplemente ignora la sintaxis de ese atributo e implementa la LUT en el segmento X0Y1 de forma predeterminada. ¿Alguna idea sobre lo que está pasando aquí?

    
pregunta Guillermo. D. S.

1 respuesta

0

Debes comenzar por leer la guía de restricciones de Xilinx.

Hice eso por ti y lo encontré como código de ejemplo:

// synthesis attribute loc [of] {instance_name|signal_name} [is] location;

El documento no es muy claro, ya que exactamente dónde debe colocar ese código, pero recordé que debería estar justo antes del punto y coma final. En cuyo caso deberías usar /* ... */

INVERT inverter_instance1(in, out) /*  Here */ ;

Lo probé con el siguiente código y el inversor se movió de la ubicación X0Y5 (sin restricciones) a X4Y4 (con restricciones).

module invrt(input in, output out);
   INV inverter_instance1(out, in) /*  synthesis BEL="A6LUT", LOC="SLICE_X4Y4" ; */;
endmodule
    
respondido por el Oldfart

Lea otras preguntas en las etiquetas