数字后端关于clock latency的一点学习

对于clock 一直感觉没有理解到实质,这篇文章是网上搜索到的,加以理解发了出来 

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。

 

现在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]

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那么好用。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值