La forma más común de definir relojes síncronos o asíncronos entre sí es el comando set_clock_groups
. El comando create_generated_clock
no es obligatorio para que los relojes estén sincronizados.
Si el reloj A y B se definen de la siguiente manera, mi síntesis y las herramientas STA las clasifican de forma síncrona, pero no confío en eso y defino explícitamente mis grupos de reloj.
create_clock -name CLK_A -period 10 -waveform "0 5" [get_ports A]
create_generated_clock -name CLK_B -source CLK_A -divide_by 2 [get_ports B]
Los relojes enumerados después del mismo interruptor -group
se vuelven síncronos. Tenga en cuenta que CLK_A y CLK_B también serán asíncronos a cualquier otro reloj (X e Y en este caso).
set_clock_groups -asynchronous -group {CLK_A CLK_B}
Supongamos que el reloj X e Y tienen las siguientes restricciones.
create_clock -name CLK_X -period 20 -waveform "0 10" [get_ports X]
create_clock -name CLK_Y -period 15 -waveform "5 10" [get_ports Y]
Si los agrupamos en grupos diferentes, se vuelven asíncronos.
set_clock_groups -asynchronous -group CLK_X -group CLK_Y
Ahora tenemos 3 grupos de reloj en total. También podríamos definirlos con un solo comando de la siguiente manera.
set_clock_groups -asynchronous -group {CLK_A CLK_B} -group CLK_X -group CLK_Y