本文由知乎
赵俊军
授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19
8.3 多周期路径
在某些情况下,两个触发器之间的数据路径可能需要一个以上的时钟周期才能传播通过逻辑。在这种情况下,这条组合逻辑路径会被定义为多周期路径(multicycle path)。虽然数据还是会在每个时钟沿上都被捕获触发器捕获,但我们需要告知STA在指定数量的时钟周期之后才会出现有效的捕获时钟沿。
图8-14是一个示例。由于数据路径最多需要三个时钟周期,因此应指定三个周期的多周期建立时间检查。为此需要指定如下的多周期建立时间约束:
![图8-14](https://i-blog.csdnimg.cn/blog_migrate/fdb82384b1ad06412f95d8db5b9f1b98.jpeg)
-
create_clock -name CLKM -period 10 [get_ports CLKM]
-
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
多周期建立时间约束规定,建立时间检查时从UFF0 / CK到UFF1 / D的路径最多可以花费三个时钟周期,这意味着设计每三个周期才会使用一次UFF1 / Q引脚上输出的数据,而不是每个周期都使用。
以下是一份具有多周期约束的建立时间路径报告:
![](https://i-blog.csdnimg.cn/blog_migrate/3e1fb2aa8d2ac56de6c75bc3507f9dc1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/97be1f78f65a3c8e4912f1694ff35093.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c7881ba43cde62668e98bd2e8bb08243.jpeg)
注意,现在捕获触发器的时钟沿距离发起触发器的时钟沿三个时钟周期,为30ns。
现在,我们来检查一下多周期路径上的保持时间检查。在最常见的情况下,我们希望保持时间检查保持不变(与单周期路径一致),如图8-14所示,这样可使数据在三个时钟周期之内任意进行改变。只有指定多周期保持时间为2,才可以获得与单周期建立时间检查情况相同的保持时间检查。这是因为在没有这样的多周期保持时间约束的情况下,默认的保持时间检查是在建立时间捕获沿的前一个有效时钟沿上执行的,这显然不是我们希望的。我们需要将执行保持时间检查的时钟沿移动到默认时钟沿之前的两个周期,因此指定了多周期保持时间为2。预期的检查如图8-15所示,通过多周期保持时间约束,数据路径的最小延迟可以小于一个时钟周期。
![图8-15](https://i-blog.csdnimg.cn/blog_migrate/7e50bca2dea0a7648046e27bd2266e91.jpeg)
- set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
多周期保持时间约束命令中的周期数指定了从默认保持时间检查沿(建立时间捕获沿之前的一个有效沿)需要移回多少个时钟周期。 以下是一份保持时间检查的路径报告:
![img](pic/v2-e287504a7ce5a03f6db6c992ad9af5d7_720w.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3d53529a5f2e017785b15ba30527e00e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b9b368fa1fe918df165103141e14b48e.jpeg)
由于此路径的多周期建立时间约束为3,因此其默认保持时间检查是在建立时间捕获沿之前的有效时钟沿上执行的。在大多数设计中,如果最大路径(或建立时间)需要N个时钟周期,则大于(N-1)个时钟周期的最小路径约束是不可行的。通过指定两个周期的多周期保持时间约束,可以将保持时间检查时钟沿移回到数据发起沿处(即0ns处),如上面的路径报告中所示。
因此在大多数设计中,指定为N(周期)的多周期建立时间约束应伴随着指定为N-1(周期)的多周期保持时间约束。
如果指定了N个周期的多周期建立时间约束,但缺少了相应的N-1个周期的多周期保持时间约束,会发生什么情况呢?在这种情况下,会在建立时间捕获沿之前的一个周期时钟沿上执行保持时间检查。图8-16显示了仅约束多周期建立时间为3个周期时,进行这种保持时间检查的情况。
![图8-16](https://i-blog.csdnimg.cn/blog_migrate/62df6e9e59b83745bc31d5d440eef5fe.jpeg)
如图所示,这规定了数据只能在建立时间捕获沿之前的一个周期内进行改变。因此,数据路径必须具有至少两个时钟周期的最小延迟才能满足此要求。以下是这种情况的路径报告:
![](https://i-blog.csdnimg.cn/blog_migrate/40d9a185472fede8490df370341e1e9a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/7250c5d80210ef17b77812d36aa6da77.jpeg)