virtual-clock

  1. 什么是virtual clock
  2. 为什么要用virtual clock

mark

什么是virtual clock

指的是没有定义source(时钟源)的时钟。 通常用于对interface timing的约束,相关的sdc命令为set_input_delay set_output_delay。相对应,定义了source(时钟源)的时钟,就是real clock

示例:create_clock -name VCLK -period 10

为什么要用virtual clock

简单的说,设置virtual clock的好处就是可以在不影响real clock的情况下,指定virtual clock的clock network delay。

mark

我们知道,clock latency包括了clock source latency和clock network delay。当BLOCK中没有做clock tree 的时候,clock network delay 等于0, 这时候,RegA到PORT这个path来说,用virtual clock还是用real clock, 效果都是一样的。

但是,当BLOCK到了CTS阶段后,因为有BLOCK内部有clock network delay的存在,而RegB仅仅是个虚拟的寄存器,他的clock network delay是不存在的,这就会导致 RegA 到 PORT的timing path变得过于严格(与之相反,input 到 内部寄存器的path的setup check就会过于乐观)。那么我们可以对RegB设source latency。然而不幸的是,如果用的是real clock, 那么必然会导致RegA的clock的source latency也相应的改变。
这时候就体现出了virtual clock的好处。

示例: 用virtual clock对PORT加约束

set_output_delay -clock [get_clocks VCLK] -max 1 [get_port PORT] -add

假设我们对于RegB是用的virtual clock(如示例),在CTS之后,就可以对VCLK加上latency:set_clock_latency -clock VCLK $clock_network_delay。

而对于real clock,在CTS之后,都要由ideal clock设为propgated clock(set_propagated_clock), 这样,对于real clck,是不能够用set_clock_latency设置clock network delay的。

当然,用real clock也是有办法解决这个问题的,那就是修改input delay或者output delay。对于Figure1, 可以将output delay 减少 clock network delay一样的数值。

由于现在的PR工具都会在CTS之后自动进行update io latency的动作,我们完全没有非要用一个real clock,然后自己去在CTS之后去修正port的input delay或者output delay。

以上就是我们需要用virtual clock的目的。

mark


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 admin@graymount.top,也可以关注微信公众号"白山头"直接留言。

文章标题:virtual-clock

本文作者:白山头

发布时间:2020-03-28, 12:26:28

最后更新:2020-03-28, 12:04:24

原始链接:http://graymount.top/2020/03/28/virtual-clock/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录