时序分析基本概念介绍——Virtual Clock


一、什么是Virtual Clock

我们通常说的create_clock, create_generated_clock 都是real clock。而virtual clock则不挂在任何port或者pin上,只是虚拟创建出来的时钟。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 "CLK_V" -period 10 -waveform [0 5]

二、Virtual Clock的作用

我们通常会把input/output delay挂在virtual clock上,因为input/output delay约束本来就是指片外的时钟,所以挂在virtual clock上较为合理。

1. input/ouput dely

对于BLOCK,2个FF源于同一个clk,它们是同步的,所以RegA->RegB这条跨block的path需要检查timing;而对于BLOCK,这条path是看不见的,它只能看到RegA->PORT的path,即block内部看到的path比真实path要短。这样就需要对output port PORT 设output delay约束,delay value为从PORT到RegB/D的delay,如下图所示。
在这里插入图片描述
clock latency包括了clock source latency和clock network delay。
source latency是外部CLK source到BLOCK CLK port的delay;network latency是从CLK port 到RegA/CP的latency,这部分就是CTS后clock tree的长度。

当BLOCK中没有做clock tree 的时候,clock network delay 等于0, 是ideal的,这时候RegA到PORT这个path来说,用virtual clock还是用real clock效果都是一样的。

timing report 如下所示。

  Startpoint: data_out_reg
              (rising edge-triggered flip-flopclocked by clk_in)
  Endpoint: PORT (output port clocked by clk_in)
  PathGroup: clk_in
  PathType: max

  Point                                   Incr       Path
 -----------------------------------------------------------
  clock clk_in (rise edge)                0.00       0.00
  clock network delay (ideal)             0.00       0.00
  data_out_reg/CK (DFFQXL)                0.00       0.00 r
  data_out_reg/Q (DFFQXL)                 1.00 *     1.00 f
  U2/Y(CLKINVX1)                          1.00*      2.00 r
  PORT (out)                              0.00       2.00 r
  data arrival time                                  2.00

  clock clk_in (rise edge)                10.00      10.00
  clock network delay (ideal)             0.00       10.00
  output external delay                   -8.00      2.00
  data required time                                 2.00
 -----------------------------------------------------------
  data required time                                 2.00
  data arrival time                                  -2.00
 -----------------------------------------------------------
  slack(MET)                                         0.00

但是,当BLOCK到了CTS阶段后,因为有BLOCK内部有clock network delay的存在,而RegB仅仅是个虚拟的寄存器,他的clock tree是不存在的,因此,RegB的clock network delay也就是0,这就会导致 RegA 到 PORT的setup timing path变得过于严格(与之相反,input 到 内部寄存器的path的setup check就会过于乐观),即timing很难meet(in2reg hold,reg2out setup)
timing report 如下所示。

Startpoint: data_out_reg
             (rising edge-triggered flip-flop clocked by clk_in)
 Endpoint: PORT (output port clocked by clk_in)
  PathGroup: clk_in
  PathType: max

  Point                                    Incr       Path
 -----------------------------------------------------------
  clock clk_in (rise edge)                0.00       0.00
  clock network delay (propagated)        1.50       1.50
  data_out_reg/CK (DFFQXL)                0.00       1.50 r
  data_out_reg/Q (DFFQXL)                 1.00 *     2.50 f
  U2/Y(CLKINVX1)                          1.00*      3.50 r
  PORT (out)                              0.00       3.50 r
  data arrival time                                  3.50

  clock clk_in (rise edge)                10.00      10.00
  clock network delay (propagated)        0.00       10.00
  output external delay                  -8.00       2.00
  data required time                                 2.00
 -----------------------------------------------------------
  data required time                                 2.00
  data arrival time                                 -3.50
 -----------------------------------------------------------
  slack(VIOLATED)                                   -1.50

data path上由于增加了1.5ns的clock network latency,而发生了时序违例。这是因为设置output_delay参考的clock path上没有clock latency。

解决方案如下:

  1. 如果用real clock,修改input delay或者output delay。对于上面的示例, 可以将output delay 减少clock network delay一样的数值,另外为了保持和CTS后的结果一致,在综合的时候还需要通过set_clock_latency设置clock network delay

  2. 对于RegB 是用的virtual clock(VCLK),在CTS之后,就可以对VCLK加上latency。而对于real clock,在CTS之后,都要由ideal clock设为propgated clock(set_propagated_clock *), 因此对于real clck,是不能够用set_clock_latency设置clock network delay的。

代码如下(示例):

set_clock_latency -clock VCLK $clock_network_delay

2. virtual clock

Virtual clock就是用来帮助我们约束IO的,设置virtual clock的好处就是可以在不影响real clock的情况下,指定clock的clock network delay
假如DUA里面的register全部由CLK_CORE驱动,但是ROW_IN和STATE_O的related_clock分别为CLK_SAD和CLK_CFG,这种情况下,可以使用virtual clock来约束IO,如下图所示。
在这里插入图片描述

代码如下(示例):

create_clock -name VIRTUAL_CLK_SAD -period 10 -waveform {2 8}
create_clock -name VIRTUAL_CLK_CFG -period 8 -waveform {0 4}
create_clock -period 10 [get_ports CLK_CORE]
set_input_delay -clock VIRTUAL_CLK_SAD -max 2.7 [get_ports ROW_IN]
set_input_delay -clock VIRTUAL_CLK_CFG -max 4.5 [get_ports STATE_O]

下面是in2reg波形图。
在这里插入图片描述
下面是reg2out波形图。
在这里插入图片描述

三、什么情况下Virtual Clock不再适用

当input/output ports由片外的时钟约束时,使用virtual clock比较合理。但是当input/output ports由内部的clock驱动时,则不能再使用virtual clock,需要使用真实的clocks

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值