时序约束之 set_multicyle_path (1)

在launch clk和capture clk在同一时钟域的情况下。下图摘自ug903.

默认情况下,setup和hold的关系如下:

设定约束:(使得setup edge后移3个Tcapture_clk,此时时序分析工具会默认将hold edge在setup edge的前1个Tcapture_clk)

set_multicycle_path  3  -setup  -from [get_pins  UFF0/Q]  -to  [get_pins UFF1/D]

如上约束在默认情况下,hold检查的沿应该是在T=20ns时刻(较setup capture edge早一个cycle)。这种检查机制好不好呢?显然不好。为什么呢?(可以自己画波形,其实波形已经在图3中了)。从图中看到这样的hold 检查方式,会导致hold可能过度悲观,很难满足hold time的要求。

因此,我们需要像单cycle check的情况一样,即hold检查的沿应该和launch clk的edge一致(T=0时刻)。这样我们的hold time check比较容易满足,也比较科学。那么如何实现这种想法呢?我们引进了如下约束命令:

set_multicycle_path  2 -hold -end   -from [get_pins  UFF0/Q]  -to  [get_pins UFF1/D]

这里面的数字“2”是指将默认的hold check edge往前推2个时钟周期,即从原来的T=20ns时刻往前移到T=0ns时刻。

因此,在我们给设计写约束文件时(定义multicycle path时),需要同时定义如下命令:

set_multicycle_path  N  -setup  -from [get_pins  UFF0/Q]  -to  [get_pins UFF1/D]

set_multicycle_path  N-1  -hold -end  -from [get_pins  UFF0/Q]  -to  [get_pins UFF1/D]

如果只定义了-setup 3 而没有定义-hold时,工具hold check时, 默认的 clock edge为capture  edge(setup timing check时)前一个cycle的那个edge。

此图摘自ug903.

备注:-start选项对应launch clk edge的移动,-end选项对应capture clk edge的移动。在缺省的情况下,默认setup 对应 -end,hold对应 -start。

下面这个视频讲解了多周期路径,以及在什么情况下使用多周期路径,建议学习:

https://www.bilibili.com/video/BV12v411L7xs

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值