generated clock
考虑上图所示的例子,时钟在驱动触发器(flip-2)之前经过二分频的触发器(或flip-1)。问题是时钟端口上的时钟定义以及与时钟相关的其他定义,如uncertainty不确定性,不会通过时序逻辑传播;在这种情况下,不会传播到二分频触发器(或flip-1)的输出。因此,要使flop-2受到时钟的约束,需要在flop-1的输出处施加新的时钟定义。
推荐的方法是在flop1 的输出处创建一个generated clock,在它与主时钟之间建立关系。
create_clock -period 2 [get_ports CLK]
set_clock_uncertainty -setup 0.25 [get_clocks CLK]
create_generated_clock -divide_by 2 -name -CLK_SLW -source [get_ports CLK] [get_pins div2flop/out]
set_clock_uncertainty -setup 0.4 [get_clocks CLK_SLW]
在本例中,我们实际上将2ns的周期增加一倍,使其成为4ns。然后,我们为generated clock命名CLK_SLW,并将源指定为名为CLK的端口。最后,我们将generated clock应用于一个名为div2flop/out的引脚上。由于我们指定源时钟为端口CLK,如果源时钟周期发生变化,generated clock周期也将自动更新。然后,我们也可以应用其他约束,如uncertainty。
异步时钟