文章目录
一、什么是Virtual Clock
我们通常说的create_clock, create_generated_clock 都是real clock。而virtual clock则不挂在任何port或者pin上,只是虚拟创建出来的时钟。Virtual Clock是没有定义时钟源的时钟,而Real Clock是定义了时钟源的时钟。
Virtual clock与real clock的区别就在于是否有source,real clock有实实在在的source pin/port,沿着source可以trace到clock sink,可以对real clock做CTS;而virtual clock不行。
定义Real/Virtual clock cmd代码如下(示例):
# real clock, with source pin/port
create_clock -name "CLK" -period 10 -waveform [0 5] [get_ports clk]
# virtual clock
create_clock -name "CLK_V" -period 10 -waveform [0 5]
二、Virtual Clock的作用
我们通常会把input/output delay挂在virtual clock上,因为input/output delay约束本来就是指片外的时钟,所以挂在virtual clock上较为合理。
1. input/ouput dely
对于BLOCK,2个FF源于同一个clk,它们是同步的,所以RegA->RegB这条跨block的path需要检查timing;而对于BLOCK,这条path是看不见的,它只能看到RegA->PORT的path,即block内部看到的path比真实path要短。这样就需要对output port PORT 设output delay约束,delay value为从PORT到RegB/D的delay,如下图所示。
clock latency包括了clock source latency和clock network delay。
source latency是外部CLK source到BLOCK CLK port的delay;network latency是从CLK port 到RegA/CP的latency,这部分就是CTS后clock tree的长度。
当BLOCK中没有做clock tree 的时候,clock network delay 等于0, 是ideal的,这时候RegA到PORT这个path来说,用virtual clock还是用real clock效果都是一样的。
timing report 如下所示。
Startpoint: data_out_reg
(rising edge-triggered flip-flopclocked by clk_in)
Endpoint: PORT (output port clocked by clk_in)
PathGroup: clk_in
PathType: max
Point Incr Path
------------------------------