Restricciones de tiempo para relojes isócronos

4

En mi diseño Verilog, tengo dos relojes de la misma frecuencia, pero de diferente fase. En este momento, mis restricciones de tiempo se ven así:

create_clock -name clk1 -period "150 MHz" [get_ports clk1]
create_clock -name clk2 -period "150 MHz" [get_ports clk2]

El problema es que el compilador no se queja cuando las señales cruzan los dos dominios de tiempo, aunque debería hacerlo porque los dos relojes son asíncronos y se requiere protección contra metástasis.

El "hack" de cambiar una de las frecuencias a 150.01 Mhz funciona, pero es un hack. ¿Existe una forma adecuada de establecer restricciones de tiempo para los relojes isócronos?

Editar : estoy usando Altera Quartus II como mi compilador.

    
pregunta Randomblue

3 respuestas

4

Coloque los relojes en diferentes grupos de reloj . Esto les permite tener la misma fase y frecuencia, y ser considerados asíncronos para el análisis de tiempo. Para un archivo .sdc de Quartus II, usaría esta sintaxis:

create_clock -period "100 Mhz" -name {CONF_CLK}  [get_ports {CONF_CLK}]
create_clock -period "100 Mhz" -name {PCIE_CLK} [get_ports {PCIE_CLK}]
create_clock -period "645 Mhz" -name {GXB_REFCLK} [get_ports {GXB_REFCLK}]

# Specify clocks are unrelated by assinging to seperate asynchronus groups
set_clock_groups -asynchronous -group {CONF_CLK} -group {PCIE_CLK} -group {GXB_REFCLK}

Y sí, -period puede ser una frecuencia o un período de tiempo, dependiendo de las unidades especificadas.

    
respondido por el shuckc
5

Puede usar -phase con create_generated_clock . Por ejemplo, a continuación hay dos relojes de 125.0 MHz, pero el segundo se desplaza 90 grados:

create_generated_clock                                                  \
    -source {pll0|altpll_component|auto_generated|pll1|inclk[0]}        \
    -divide_by 4 -multiply_by 5 -duty_cycle 50.00                       \
    -name clk_125                                                       \
    {pll0|altpll_component|auto_generated|pll1|clk[0]}

create_generated_clock                                                  \
    -source {pll0|altpll_component|auto_generated|pll1|inclk[0]}        \
    -divide_by 4 -multiply_by 5 -phase 90.00 -duty_cycle 50.00          \
    -name clk_125_90                                                    \
    {pll0|altpll_component|auto_generated|pll1|clk[2]}
    
respondido por el user8459
1

La herramienta supone que los relojes están alineados con el flanco ascendente, creo, a menos que se especifique lo contrario. Es por eso que la herramienta no se queja.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas