Exceptions
This section contains the following topics:
■ “Multicycle Exceptions” 多周期选择
■ “False Paths” on page 1–20 伪路径
Multicycle Exceptions
这部分描述的约束命令是create_clock 和set_multicycle_path。
默认情况下,Timequest Analyser使用单周期分析寄存器之间的 setup relationship(Note:即一个Launch沿对应的latch延间隔时长) 和 hold relationship(即hold check得到的时长)。这就造成了最严格的setup 和hold 时序要求。
然而,多周期则可用来削弱这种严格的约束关系。
Figure 1–15展示了一个简单的寄存器路径约束。(Note:这部分参看之前的一篇文章《
不同时钟域之间的多周期路径》)
多周期可以应用于所有的clock-to-clock transfer或者单独的寄存器individual register。在clock-to-clock transfer应用Multicycles,会影响所有源端到目的端的setup relationship 和hold relationship。Example 1–17展示了一个多周期约束。
Example 1–17. Multicycle Clock-to-Clock
create_clock -period 10 [ get_ports clkA ]
create_clock -period 5 [ get_ports clkB ]
set_multicycle_path -from [ get_clocks {clkA }] - to [ get_clocks {clkB }] - setup - end 2(Note:CLKA和CLKB之间没有offset,所以设置Multicycle=2,即CLKB往后数第二个上升沿,即蓝色箭头指向的位置)
在Example 1–17中,setup relationship 的约束条件更加宽松,因为多了一个时钟周期。这样reg1 和reg2 就有了一个长达12.5ns的setup relationship而不是默认单周期时候的5ns。而reg2和reg3之间的setup relationship没有受影响(Note:为什么会没有影响呢)。
将多周期multicycles 应用于单独的寄存器,那么仅仅会影响指定寄存器的setup hold relationship。Example 1–18 展示了对单独寄存器的多周期约束。
Example 1–18. Multicycle Register-to-Register
create_clock -period 10 [ get_ports clkA ]
create_clock -period 5 [ get_ports clkB ]
set_multicycle_path -from [ get_pins {reg1 |q }] - to [get_pins { reg2| d }] - setup - end 2
在
Example 1–18中,从reg1到reg2的setup relationship 通过增加了额外的一个时钟,变得更加宽松。这就使得reg1 、reg2的setup relationship长达12.5ns而不是5ns。而reg2和reg3之间的setup relationship没有受影响 。
如果想得到更多关于多周期约束的分析,请查阅 Best Practices for the TimeQuest Timing Analyzer章节, in volume 3 of the Quartus II Handbook.
文章评论(0条评论)
登录后参与讨论