Restricción de la línea de reinicio

Estoy usando Quartus II para compilar mi diseño de Verilog y estoy trabajando para restringir adecuadamente mis señales.

Sé cómo restringir los relojes, por ejemplo:

create_clock -name clk_i -period "157 MHz" [get_ports clk_i]

También sé cómo restringir las señales de entrada en relación con un reloj, por ejemplo:

set_input_delay -clock clk_i 0 [get_ports data_i*]

Sin embargo, no sé cómo se debe restringir la línea de reinicio (asíncrona). ¿Cómo se restringen las líneas de reinicio?

Respuestas (1)

Por lo general, sincronizo mi restablecimiento asíncrono a través de una línea de retraso de algunos flip-flops (dependiendo de la configuración de FPGA para haberlos borrado), y solo uso ese restablecimiento sincronizado (incluso si lo estoy usando como un restablecimiento asíncrono).

En Xilinx-land, las herramientas pueden rastrear el tiempo desde el reloj utilizado en la línea de retardo hasta la entrada de reinicio (ya sea sincronizada o asíncrona) de sus flip-flops, por lo que no es necesaria una restricción de tiempo explícita. Me sorprendería si Quartus no puede hacer lo mismo.

No recomendaría intentar distribuir un reinicio verdaderamente asíncrono en todo el chip.

Si lo hace, tiene una pequeña posibilidad de que la liberación del reinicio asíncrono esté muy cerca del borde del reloj. Debido a la demora en el chip, algunos flipflops lo verán en un borde del reloj, y otros simplemente lo perderán y lo verán en el siguiente borde del reloj. En el peor de los casos, esos flip-flops formarán parte de un registro de estado (por ejemplo) y "parte" de la máquina de estado saldrá del reinicio antes que otra parte. Suelen ocurrir cosas malas. ¡Pero solo ocasionalmente, lo que hace que sea una pesadilla descubrirlo!