Get_ports vs Get_pins vs Get_nets vs Get_registers

2

Estoy haciendo un diseño en vhdl para FPGA. Tengo un diseño de nivel superior que consta de 3 componentes: divisor de reloj, Module_1 y Module_2. La entidad de nivel superior tiene un puerto de entrada de reloj. Este reloj está dividido por el divisor de reloj para obtener otros dos relojes: clock_1 y clock_2. Se alimentan a los puertos de reloj 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? Utilicé get_ports para el reloj principal. ¿Qué hay de los otros dos? Puedo ver estos relojes generados bajo get_pins y get_nets y get_registers en el analizador de temporización de Quartus II. También los nombres de los relojes se ven diferentes allí con algunos sufijos como '_var', '~ clk', etc. ¿Hay alguna regla específica para get_pins y get_nets y get_registers?

    
pregunta MITU RAJ

1 respuesta

3

Las E / S del bloque de nivel superior se denominan puerto , las E / S de los subbloques se denominan pin . Por lo tanto, 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, en este caso se debe usar get_pins .

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 recolectar y restringir usando el comando get_nets , sin embargo, la mayoría de las herramientas de síntesis las optimizan o cambian los nombres. Es mejor evitar usar get_nets si no es obligatorio. De lo contrario, la mayoría de las herramientas de síntesis requieren el atributo dont_touch o algo similar para mantener la red.

Normalmente no uso el comando get_registers , porque no es compatible con el compilador de diseño de Synopsys, en su lugar utilizo get_cells . Por el contrario, Quartus II admite get_registers según manual del SDC de Altera . p>

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, puedes usar el comando get_pins . 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 en el 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 transporta una señal de reloj entre el registro y el pin clock_1 . El retraso de la ruta no se incluye en el análisis de tiempo, etc.

Las herramientas de síntesis comúnmente agregan sufijos a los nombres de señales y celdas. Cada herramienta tiene sus propias reglas de denominación. Por ejemplo, mi herramienta agrega el sufijo _reg a las señales flopped.

    
respondido por el ahmedus

Lea otras preguntas en las etiquetas