多周期路径+伪路径

1.4 两种时序例外

多周期路径

前面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿。如下图所示。
在这里插入图片描述
默认情况下,保持时间的检查是以建立时间的检查为前提,即总是在建立时间的前一个时钟周期确定保持时间检查。这个也不难理解,上面的图中,数据在时刻1的边沿被发起,建立时间的检查是在时刻2进行,而保持时间的检查是在时刻1(如果这里不能理解,再回头看看时钟周期约束详细介绍),因此保持时间的检查是在建立时间检查的前一个时钟沿。
但在实际的工程中,经常会碰到数据被发起后,由于路径过长或者逻辑延迟过长要经过多个时钟周期才能到达捕获寄存器;又或者在数据发起的几个周期后,后续逻辑才能使用。这时如果按照单周期路径进行时序检查,就会报出时序违规。因此就需要我们这一节所讲的多周期路径了。
多周期约束的语句是:

set_multicycle_path <numcycles> [-setup|-hold] [-start|-end] [-from <startpoints>] [-to <endpoints>] [-through <pins/cells/nets>]

在这里插入图片描述
对于建立时间,num_cycles是指对周期路径所需的时钟周期个数;对于保持时间,num_cycles是指相对于默认的捕获沿,实际捕获沿应回调的周期个数。
发起沿和捕获沿可能是同一个时钟,也可能是两个时钟,参数start和end就是选择参数时钟是发送端还是接收端。
a. start表示参考时钟为发送端(发端)所用时钟,对于保持时间的分析,若后面没有指定start或end,则默认为-start;
b. end表示参考时钟为捕获端(收端)所用时钟,对于建立时间分析,若后面没有指定start或end,则认为是-end;
上面这两句话也不难理解,因为setup_time是在下一个时钟沿进行捕获时钟的约束,因此默认是对接收端的约束;而houd-up-time是对同一个时钟沿的约束,目的是发送端不能太快,是对发送端的约束。
对于多周期路径来说,setup的num_cycles为1,hold的num_cycles为0;
多周期路径要分以下几种情况进行分析:

1. 单时钟域

即发起时钟和捕获时钟是同一个时钟,其多周期路径模型如下图所示。
在这里插入图片描述
单时钟域的多周期路径常见于带有使能的电路中,我们以双时钟周期路径为例,其实现电路如下:
在这里插入图片描述
若我们没有指定任何的约束,默认的建立/保持时间分析就像我们上面所讲的单周期路径,如下图所示。
在这里插入图片描述
但由于我们的数据经过了两个时钟周期才被捕获,因此建立时间的分析需要再延迟一个周期的时间。
采用如下的时序约束:
在这里插入图片描述
在建立时间被修改后,保持时间也会自动调整到捕获时钟沿的前一个时钟沿,如下图所示:
在这里插入图片描述
很明显,这个保持时间检查是不对的,因为保持时间的检查针对的是同一个时钟沿,因此我们要把保持时间往回调一个周期,需要再增加一句:

set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

这里加上-end参数是因为我们要把捕获时钟沿往前移,因此针对的是收端,但由于我们这边讲的是单时钟域,发送端和接收端是同一个,因此,-end可以省略。这样,完整的时钟约束如下:
在这里插入图片描述
约束完成后,建立保持时间检查如下图所示。
在这里插入图片描述
在单时钟域下,若数据经过N个周期达到,则约束如下所示:
在这里插入图片描述

2. 时钟相移

在这里插入图片描述
前面我们讨论的是在单时钟域下,发送端和接收端时钟是同频同相的,如果两个时钟同频不同相怎么处理?
在这里插入图片描述
如上图所示,时钟周期为4ns,接收端的时钟沿比发送端晚了0.3ns,若不进行约束,建立时间只有0.3ns,时序基本上不可能收敛;而保持时间则为3.7ns,过于丰富。可能有的朋友对保持时间会有疑惑,3.7ns是怎么来的?还记得我们之前讲的保持时间的定义吗,在0ns时捕获数据后,要再过3.7ns的时间发送端才会发出下一个数据,因此本次捕获的数据最短可持续3.7ns,即保持时间为3.7ns。
因此,在这种情况下,我们应该把捕获沿后移一个周期,约束如下:
在这里插入图片描述
对setup约束后,hold会自动向后移一个周期,此时的建立保持时间检查如下:
在这里插入图片描述
那如果接收端的时钟比发送端的时钟超前了怎么处理?
在这里插入图片描述
同样的,时钟周期为4ns,但接收端时钟超前了0.3ns,从图中可以看出,此时setup是3.7ns,而保持时间是0.3ns。这两个时间基本已经满足了xilinx器件的要求,因此无需进行约束。

3. 慢时钟到快时钟的多周期

当发起时钟慢于捕获时钟时,我们应该如何处理?
在这里插入图片描述
假设捕获时间频率是发起时钟频率的3倍,在没有任何约束的情况下,Vivado默认会按照如下图所示的建立保持时间进行分析。
在这里插入图片描述
但我们可以通过约束让建立时间的要求更容易满足,即
在这里插入图片描述
跟上面讲的一样,设置里setup,hold会自动变化,但我们不希望hold变化,因此再增加:
在这里插入图片描述
这里由于发起和捕获是两个时钟,因此-end菜蔬是不可省的。加上时序约束后,Vivado会按照下面的方式进行时序分析。
在这里插入图片描述

4. 快时钟到慢时钟的多周期

当发起时钟快于捕获时钟,我们应该如何处理?
在这里插入图片描述
假设发起时钟频率是捕获时钟频率的3倍,在没有任何约束的情况下,Vivado默认会按照如下图所示的建立保持时间进行分析。
在这里插入图片描述
同理,我们可以通过约束,让时序条件更加宽裕。
在这里插入图片描述
这里的hold约束中没有加-end参数,这样的话默认就是-start,是因为我们把发起时间回调2分周期,如下图所示。
在这里插入图片描述
针对上面讲的几种多周期路径,总结如下:
在这里插入图片描述

伪路径

什么是伪路径?伪路径指的是该路径存在,但该路径的电路功能不会发生或者无需时序约束。如果路径上的电路不会发生,那Vivado综合后会自动优化掉,因此我们无需考虑这种情况。
为什么要创建伪路径?创建伪路径可以减少工具优化时间,增强实现效果,避免在不需要进行时序约束的地方花较多的时间忽略了真正需要进行优化的地方。
伪路径一般用于:
a. 跨时钟域
b. 一上电就被写入数据的寄存器
c. 异步复位或者测试逻辑
d. 异步双端口RAM
可以看到,伪路径主要就是在异步时钟的处理上,我们上一节讲的多周期路径中,也存在跨时钟域的情况,但我们讲的是两个同步的时钟域。
伪路径约束为:

set_false_path [-setup] [-hold] [-from <node_list>] [-to <node_list>] [-through <node_list>]

需要注意的是,-through是有先后顺序的,下面的两个约束是不同的约束:
在这里插入图片描述
因为它们经过的先后顺序不同,伪路径的约束是单向的,并非双向的,若两个时钟域相互之间都有数据传输,则应该采用如下约束:
在这里插入图片描述
也可以直接采用如下的方式,与上述两行约束等效:
在这里插入图片描述
还有一些其他的约束,比如case analysis、disabling timing和bus_skew等,由于平时用的比较少,这里就不讲了。

5. xdc约束的优先级

在xdc文件中,按约束的先后顺序依次执行,因此,针对同一个时钟的不同约束,只有最后一条约束生效。
虽然在执行顺序上是从前到后,但优先级却不同,就像四则运算一样,±x/都是按照从左到右的顺序执行,但是x/的优先级比±要高。
时序例外的优先级从高到低为:

  1. Clock Groups(set_clock_groups)
  2. False Path(set_false_path)
  3. Maximum Delay Path(set_max_delay) and Minimum Delay Path(set_min_delay)
  4. Multicycle Paths(set_multicycle_path)

set_bus_skew约束并不影响上述优先级且不与上述的约束冲突,原因在于set_bus_skew并不是某条路径上的约束,二十路径与路径之间的约束。
对于不同的约束,定义的约精细,优先级越高。各对象的约束优先级从高打的为:

1. ports->pins->cells
2. clcoks

路径声明的有限级从高到低位:

1. -from -through -to
2. -from -to
3. -from -through
4. -from
5. -through -to
6. -to
7. -through

优先考虑对象,再考虑路径。
Example1:
在这里插入图片描述
改约束中,第一条约束会覆盖第二条约束。
Example2:
在这里插入图片描述
改约束中,第一条约束会覆盖第二条约束。
Example3:
在这里插入图片描述
在这个约束中,两条都会存在,这也使得时序分析时序收敛的难度更大,因为这两条语句合并成了:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值