Estoy haciendo un diseño en vhdl para FPGA. Tengo un diseño de nivel superior que consta de 3 componentes: divisor de reloj, Módulo_1 y Módulo_2. La entidad de nivel superior tiene un puerto de entrada de reloj. Este reloj se divide por el divisor de reloj para obtener otros dos relojes: clock_1 y clock_2. Se alimentan a los puertos de reloj de Module_1 y Module_2 respectivamente.
Quiero restringir todos estos relojes. Entonces, ¿cómo decidir si se deben usar get_ports o get_pins o get_nets o get_registers? Usé get_ports para el reloj principal. ¿Qué hay de los otros dos? Puedo ver estos relojes generados en get_pins y get_nets y get_registers en el analizador de tiempo de Quartus II. Además, los nombres de los relojes se ven diferentes allí con algunos sufijos como '_var', '~clk', etc. ¿Existen reglas específicas para get_pins, get_nets y get_registers?
Las E/S del bloque de nivel superior se denominan puerto , las E/S de los subbloques se denominan pin . Entonces , los comandos get_ports
y get_pins
deben usarse en consecuencia.
Si el reloj principal es una entrada del bloque de nivel superior, get_ports
es el comando apropiado. Por ejemplo:
create_clock -name CLK [get_ports clock_main] ...
Dado que clock_1
y clock_2
son las entradas de los subbloques, get_pins
debe utilizarse en este caso.
create_clock -name CLK1 [get_pins Module_1/clock_1] ...
create_clock -name CLK2 [get_pins Module_2/clock_2] ...
Las señales distintas de las E/S se denominan net . Las redes se pueden recopilar y restringir mediante get_nets
el comando, sin embargo, la mayoría de las herramientas de síntesis las optimizan o cambian los nombres. Es mejor evitar el uso get_nets
si no es obligatorio. De lo contrario, la mayoría de las herramientas de síntesis requieren dont_touch
atributos o algo similar para mantener la red.
Normalmente no uso get_registers
el comando, porque Synopsys Design Compiler no lo admite, lo uso get_cells
en su lugar. Por el contrario, Quartus II soporta get_registers
según el manual SDC de Altera .
También se puede utilizar para restringir el reloj. El manual tiene el siguiente ejemplo:
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_registers clkdiv]
Alternativamente, puede usar get_pins
el comando. Tu decides.
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_pins clkdiv/Q]
Si tiene un divisor de reloj de este tipo en su diseño, es mejor restringirlo en el registro o pin Q que en la entrada de reloj de un subbloque (por ejemplo, Module_1
). De lo contrario, la herramienta de síntesis no sabe si la ruta lleva una señal de reloj entre el registro y el clock_1
pin. El retraso de la ruta no se incluye en el análisis de tiempos, etc.
Las herramientas de síntesis comúnmente agregan sufijos a los nombres de las señales y las celdas. Cada herramienta tiene sus propias reglas de nomenclatura. Por ejemplo, mi herramienta agrega _reg
sufijos a las señales que fallan.
mitu raj
usuario154136
mitu raj