我是靠谱客的博主 兴奋飞机,最近开发中收集的这篇文章主要介绍静态时序分析—虚拟时钟(virtual clock)与I/O延时约束,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.什么是虚拟时钟?

虚拟时钟(virtual clock)是存在但没有clock source(pin/port)定义的时钟,仅作为输入输出端口延时约束的参考时钟。定义方式如下例:

create_clock -name virtual_clock -period 10 -waveform {0 5} ;#虚拟时钟不需要[get_pins /get_ports],不加waveform默认50% duty cycle。所以加不加-waveform {0 5}效果是一样的。

与虚拟时钟相关的端口约束为set_input_delay和set_output_delay。

2.IO端口约束

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

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

a084aa61323a488ab8e9c048b64d0348.jpg

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

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

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

22a7acd947064019ab708b1a459e6ff4.jpg

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

3.virtual clock VS real clock

问题来了,如上图例,这个$CLK用虚拟时钟好还是用真实时钟好呢?这里先说结论,用真实时钟更好。

我们在CTS之前,clock latency都是0,真实时钟和虚拟时钟都一样,区别就在于CTS之后,真实的reg有network latency了(clock latency分为source latency+network)。而虚拟寄存器的latency还是0。

静态时序分析: clock latency

现在的PR工具都会在CTS之后自动update io latency(ICC2叫compute_clock_latency),所以使用real clock的话会在timing报告里属于input/output port的clock network delay 部分显示:

clock network delay (propagated) xxx

这个值是工具计算的值(应该是取中位数)。

如果使用虚拟时钟的话,这里显示的就是:

clock network delay (ideal) 0

所以,要想使用虚拟时钟,又不至于过分乐观或悲观的话,就需要添加set_clock_latency -source xx [get_clocks CLK_VIRTUAL],这样CTS之后仍会保留io latency的值,只不过这个值就需要人工计算,或者使用经验值了,并没有使用real clock那么好用。

 

 

 

 

 

 

 

最后

以上就是兴奋飞机为你收集整理的静态时序分析—虚拟时钟(virtual clock)与I/O延时约束的全部内容,希望文章能够帮你解决静态时序分析—虚拟时钟(virtual clock)与I/O延时约束所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部