Loading

后端基础——虚拟时钟

导言:根据定义,虚拟时钟是没有时钟源的时钟,也就是说虚拟时钟是被定义的,但未与任何引脚(pin)/端口(port)关联的时钟。虚拟时钟用作设置input delay/output delay的参考(reference)。

 

STA有四种时序路径,分别是:in2reg,reg2reg,reg2out和in2out,其中三种都与input或output port相关,而工具并不知道input port和output port外部延时,所以需要对其加以约束。

后端时序分析时,我们把四种时序路径都当做reg2reg来分析,以in2reg为例,如下图,我们在block外假设一个虚拟的寄存器UFF0。

 

 现在INP1 to UFF1的path就变成了UFF0 to UFF1了,只需要设置好外部延迟即可,设置方式如下:

set_input_delay -max (Tclk2q+Tc1) [get_ports INP1] -clock [get_clocks $CLK]

同理,如果是reg2out,就可以在output port后假定一个虚拟寄存器:

set_output_delay -max (Tc2 + Tsetup) [get_ports OUTB] -clock [get_clocks $CLK]

 

通常RTL设计要求对时序收敛留下足够裕量,综合阶段可根据设计工艺需求,设置IO的input/output为时钟周期的40%-60%。但是,芯片timing sign-off阶段会偶尔遇到IO时序少量违例,比如,输入reg的hold违例、输出reg的setup违例,本质原因是EDA时序分析工具会在输出输入外部假定一个理想化的不带clock propagation time的寄存器做时序分析,在CTS后,实际的clk会带有clock latency。如果设置input / output delay的参考是实际的clk,则data path上由于增加了X个ns的clock latency,而发生了时序违例。正是因为设置output_delay参考的clock path上没有clock latency。同样,data path上由于增加了X个ns的clock latency,而使得input2reg路径增加了1.5ns的余量。这是因为设置input_delay参考的clock path上没有clock latency。

由此会导致output port约束变得更悲观。同理,会导致input port约束变得更乐观。

为此,我们需要生成一个没有相应时钟pin/port的vclk,然后分别设置clk和vclk各自的clock latency。使得input/output的参考clk为vclk,便可修复时序违例,只不过这个值就需要人工计算,或者使用经验值了。

参考:

静态时序分析—虚拟时钟(virtual clock)与I/O延时约束_拾陆楼的博客-CSDN博客

clock latency 总结_半夏之夜的博客-CSDN博客

在接口时序约束中为什么设置虚拟时钟(virtual clock)? - 知乎 (zhihu.com)

虚拟时钟(Virtual clock)_虚拟时钟的作用_杰出的胡兵的博客-CSDN博客

虚拟时钟(Virtual Clock) - 知乎 (zhihu.com)

 数字后端——时钟树综合_沧海一升的博客-CSDN博客

posted @ 2023-03-22 13:34  Haowen_Zhao  阅读(2021)  评论(0编辑  收藏  举报