Virtual Clock
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Virtual Clock相关的知识,希望对你有一定的参考价值。
参考技术A Virtual Clock1. What is virtual clock
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 "VirCLK" -period 10 -waveform [0 5]
2. Purpose of Virtual Clock
简单地说,Virtual clock就是用来帮助我们约束IO的。一图胜千言,请看下面的示意图(ps:安利online画电路图网站 schemeit ):
对于TOP,4个FF源于同一个clk,它们都是同步的,所以FF1->FF2,FF3->FF4这两条跨block的path都需要检查timing;而对于BLOCK,这两条path是看不见的,它只能看到A->FF2 和 FF3->B的path,即block内部看到的path比真实path要短。
这样就需要对input port A 设input delay约束,delay value为从FF1/CP到A的delay;对output port B 设output delay约束,delay value为从B到FF4/D的delay。
这样一来,data path上就能正确反映实际full path了,那么clock path呢?
对于FF1/CP–>FF2/D这条full path,在BLOCK内部,capture pin FF2/CP的latency可以通过clk source latency + clk network latency来得到,source latency是外部CLK source到BLOCK CLK port的delay,可以用set_clock_latency约束;network latency是从CLK port 到FF2/CP的latency,这部分就是CTS后clock tree的长度。
但是FF1/CP在BLOCK外部,无法获得其launch latency,如果不加约束,CTS后,由于launch和capture之间的skew,timing很难meet(in2reg hold,reg2out setup)。
那么如何约束FF1/CP或者FF4/CP的clk latency呢?
这就是virtual clock的真正用意,定义virtual clk,然后通过反标virtual clk的source latency来约束FF1/CP或FF4/CP的clk latency。
到这里我们就会发现,其实FF1/CP->FF2/D这条同一个clk约束的full path,其实被分成了vir clk和clk两个同步clk的跨clock domain之间的约束了。
原文链接:https://ileonsun.github.io/virtual-clock/
startTime = time.clock()AttributeError: module ‘time‘ has no attribute ‘clock
startTime = time.clock()AttributeError: module ‘time‘ has no attribute ‘clock
python 报错!
AttributeError module ‘time‘ has no attribute ‘clock‘
python3.8不支持clock了,替换成time.perf_counter()替换就可以了
?
?
文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。
?
若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)
以上是关于Virtual Clock的主要内容,如果未能解决你的问题,请参考以下文章
在虚拟继承中应该写“public virtual”还是“virtual public”?