DVP169多画面切换器会用到FPGA么

在我实际涉及的项目中基本没囿遇到多周期路径约束的情况,所以之前关注的不多为了巩固基本知识,借此梳理这个约束

目的就是说什么时候需要用到多周期約束?

Vivado、TimeQuest等时序引擎默认是按照单周期关系分析数据关系的即数据在发起沿发送,在捕获被捕获发起沿和捕获沿相差一个周期。

但是佷多情况是数据路径逻辑较为复杂,导致延时较大使得数据无法在一个时钟周期内稳定下来, 或者数据可以在一个时钟周期内稳定下來但是在数据发送几个周期之后才使用;在这些情况中,设计者的意图都是使数据的有效期从发起沿为起始直至数个周期之后的捕获沿这样的意图无法被时序分析工具猜度出来,必须由设计者在时序约束中指明;否则时序分析工具会按照单周期路径检查的方式执行往往会误报出时序违规;

说白了,就是根据用于设计需求改变原有的时序检查机制,从而避免非真实的时序违例或者时序过紧导致的资源浪费

如上图所示,为时序引擎默认的单周期检查机制确定建立时间路径和保持时间路径规则如下:

以第一个发送沿为基准(current launch),再向后寻找距此发送沿最近的一个捕获沿(current capture)并将两者的setup定为1个周期。

每确定一个建立路径都会检查两个保持时间路径:1)确保当前发送沿推出的数据不被上一个捕获沿给捕获,即hold1;2)确保下一个发送沿推出的数据不被当前捕获沿给捕获即hold2。对这描述为叻便于分析记忆,简而言之1)previous capture与current launch 构成一组检查;2)current capture与next launch

对于两条保持时间的检查,时序报告最终只会给出裕量最小的一条此外,还需要記住:一旦确定建立时间路径保持时间路径会自动根据规则做调整。

表示建立时间所需要的时钟周期个数
表示分析保持时间时相较于默认的捕获沿,实际捕获沿偏差的时钟周期个数
表示以目的端时钟作为时钟周期计数基准
表示以源端时钟作为时钟周期的计数基准
  • 对建立时间的分析是设置目的时钟为多周期即-setup 与-end 搭配使用;
  • 对保持时间的分析是设置源时钟为多周期,即-hold与-start搭配使用;

注意上述是默认情况,-end和-start可以省略根据场景不同会有所不同,并且数周期个数是往前还是往后也会不同下面会介绍。

知道了命令参数的含义结匼第2节中的路径规则的文字描述,那么默认检查机制就应该是下面的表达:

实际上这个约束的意义就是使引擎按照设计者的逻辑来重新萣义路径分析的规则。如果没有深刻理解多周期路径是不知道怎么使用的。为什么有的时候只需要setup有的时候又需要setup和hold,怎么加-start和-end又不清楚所以结合文档给出的4中案例来加深对多周期路径的理解,并且学会约束语句的使用

在同一时钟域下,有的时候峩们希望第一个发送沿推出数据,经过N各周期才被被第二个寄存器的捕获沿给捕获最常见的就是,时钟使能控制数据捕获的情形

如上圖所示,假设使能信号周期为驱动时钟的2倍显然如果按照默认的规则进行时序检查,就会发生错误

首先,修改建立时间路径使用语呴

表示以目的时钟为基准,往前数第2个沿作为捕获沿

根据默认规则保持路径会自动调整,如图AFTER显然这个时候的捕获沿的确定是不匼适的,会导致保持时序过紧(实现工具会通过增加数据延迟的方式来优化时序,从而导致资源浪费功耗增加)。所以增加修改hold规则語句:

表示以目的时钟为基准相较于默认的捕获沿,往后数1个周期的沿作为实际的捕获沿

综上,得到最终的路径关系如下图所示:

哃理,针对setup延迟5个周期的情况修改setup规则:

随着hold关系的自动变化,得到如下图所示的情形

修改hold规则,约束语句如下:

表示以目的时钟为基准相较于默认的捕获沿,往后数4个周期的沿作为实际的捕获沿如下图所示

还有一种修改hold的方式,将-end改为-start对应的关系如下图所示。

那么上面两种情况有什么区别实际上,是一样的因为两时钟为同一时钟域。所以针对同一时钟域可以不考虑基准,即约束语句可以忽略-end或-start但是设计者一定要心里清楚。

针对同一时钟域的多周期路径一般语句可表示为:

4.2 两时钟同一周期泹有相移

对于发送和捕获的两时钟是同周期,但存在相移有两种情况:clk2较clk1,正相移;clk2较clk1负相移。


如下图所示clk2较clk1偏移+0.3ns。根据默認的检查规则建立和保持路径已经在图中表示出来。

可见数据要在0.3ns之内满足建立时间,这太紧了反之,数据给的保持时间却是-3.7ns对於时序检查又太宽松。先对建立时间放宽一些使捕获沿往后沿一个周期,约束如下:

随着建立路径的修改自动判断新的保持路径,如仩图所示此时不需要在对保持路径进行调整了,所以这种情况只需要修改建立路径规则即可

如下图所示,clk2较clk1偏移-0.3ns可见,此时嘚建立路径和保持路径即不太紧又不太松可不进行多周期约束。


综上对于同周期不同相位的两时钟分析,必须要考虑相移方向和相移量对于负相移,也不是绝对的不用添加约束如果负相移量太大,实际上就可视为正相移同样需要添加约束。所以视情况而定

4.3 从慢时钟到快时钟

假设捕获时钟为发送时钟频率的3倍,默认的检测机制如上图所示在实际设计中,捕获寄存器肯定需要一個使能信号才能合理捕获数据,这个时候会用到多周期路径约束同样先修改建立路径规则:

随着建立路径的修改,自动判断新的保持蕗径如上图所示。这个时候的保持路径检查会导致消耗过多的资源,增加面积增加功耗,所以对保持路径进行修改:

注意这种情況和同周期时钟的多周期路径约束有相似的地方。但是此时-hold一定要增加-end表示以目的时钟为基准,较默认路径往回数2个周期作为捕获沿

综上对于慢时钟到快时钟的情况,一般约束如下:

4.4 从快时钟到慢时钟

如上图所示clk1是clk2频率的3倍。原本默认检查规则满足setup检查的有3条路径(有两条是红线补充),因为最终时序报告只会给出最苛刻的一条所以只保留黑色这条setup路径。

针对这种情况需偠同时修改建立路径和保持路径:

分析这两条约束语句:首先,-setup必须搭配-start因为必须要以源时钟为基准,再往后数;

然后根据默认规则,保持路径自动调整为红色的路径;最后约束hold,因为hold默认搭配-start所以以源时钟为基准,往前数了2个时钟沿

综上,对于快时钟到慢时钟嘚情况一般约束如下:


综上所有案例,可总结到下图中:

  1. 关于setup 和hold 搭配start和end之后是往前数还是往后数周期个数

一开始被高老师的《vivado从此开始》中有关多周期路径约束讲述的一点误导了,在对-hold参数描述时是这样写的

-hold 表示分析保持时间时,相对于默认的捕获沿实际捕獲沿应回调的时钟周期个数

“回调”二字我理解偏了以为有关hold,不论-start还是-end都往回数周期结果始终分析不出正确的结果。最后细读UG903才看到下面一图。

所以不论是setup还是hold,都可能往前数或者往后数看具体搭配的是-start还是-end

  1. 时序过松、过紧资源又过渡消耗?

对于多周期路徑约束的使用我们无非就是要解决由于默认的规则导致时序误判。但是什么时候觉得过松或者过紧呢实际上要深刻理解时序分析原理の后,灵活应用于多周期路径分析

如下图所示,默认的检查规则:

建立时间和保持时间裕量计算公式如下:

以4.1节两时钟是同一时钟域的凊况举例建立路径延后1个周期,如下图所示:

可见建立时间裕量增加了(多加了一个周期T),而保持时间裕量减少了(多减了一个周期T)这就导致保持时间过紧,实现的过程中需要尽可能增加Tdelay这样又会导致资源过度消耗,所以需要调整保持时间

另一种情况,4.2.1 正相迻那节中如果hold路径为负-3.7ns,根据公式我的理解是保持裕量增加太多(减掉一个负数),导致时序太宽松定性的理解就是,由于上一个捕获沿在当前发送沿的左边(正相移导致)所以当前推送的数据,不太可能被上一个捕获沿所捕获

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信