如果是含有门控时钟的网络也可以使用generated_clock来定义时钟,如图一所示带有门控的时钟网络,主时钟为的端口(port)为clk_a, generate_clock可以定位在门控时钟的输出PIN为inst1/Y ,可以这么定义门控时钟
create_clock -period 4 -waveform [0 2] -name clk_a [get_ports clk_a]
create_generated_clock -name clock_a_ctrol -divide_by 1
-source clk_a [get_pins inst1/Y ]
图一:门控时钟网络
关于门控时序的检查在以前的章节中已经讲过,可以查看一下早期的内容,在这里就不再赘述了。
genereated_clock 不仅仅应用在分频 时钟,还可以应用倍频时钟,一般倍频时钟采用PLL IP才能产生倍频时钟, PLL不仅能产生时钟,而且能具有相位锁定的功能,这就是平常所有说的鉴频鉴相器也就是PLL, PLL需要从外时钟或者晶振时钟送到PLL的参考时钟,通过前分频配置位控制M 位,后分频配置位N位控制位,可以实现多种不同组合的输出时钟频率。图二是一个简单的二倍频时钟,其中clk_ax2是clk_a的倍频时钟,可以进行如下约束:
create_clock -period 8 -waveform [0 4] -name clk_a [get_ports clk_a]
create_generated_clock -name clk_ax2 -source clk_a -multiply_by 2
[get_pins PLL/clk_2x ]
图二:倍频时钟clk_ax2 是clk_a的2倍频时钟
下面介绍边沿移位定义产生generated_clock如图三所示,
首先用edges定义了clk_a 采用源时钟clk_ax2的第一个沿 第三个沿 和第五个沿来定义clk_a的周期wave_form,
而clk_a_shift的时钟的源时钟也是clk_ax2,这个时钟的wave_form 是这样的
采用clk_ax2的第一个沿保持相同移动ns,
clk_a_shift第二个沿采用clk_ax2 的第一个沿移动2ns
clk_a_shift第三个沿采用clk_ax2 的第五个沿移动0ns
形成了clk_a_shift的wave_form时钟波形的不同占空比。
create_clock -period 4 -waveform [0 2] -name clk_ax2 [get_ports clk_a]
create_generated_clock -name clk_a -source clk_ax2 [get_pins uand1/Y]
-edges {1 3 5}
create_generated_clock -name clk_a_shift -source clk_ax2
-edges {1 1 5} -edge_shift {0 2 0} [get_pins uand2/Y]
图三:定义edge_shift 定义时钟