如果布线后设计未满足时序要求但相差不大,通常是因为布局后存在较小的时序裕度。可在布局和物理最优化过程中收紧时序要求,以增大布线器的时序预算。为此,AMD 建议使用 set_clock_uncertainty
约束,原因如下:
- 它不修改时钟关系(时钟波形保持不变)。
- 它是对工具计算的时钟不确定性的补充(抖动,相位误差)。
- 它专用于
-from
和-to
选项指定的时钟域或时钟交汇。 - 通过对先前时钟不确定性约束应用 null 值,即可轻松将其复位。
在任何情况下,AMD 都建议您:
- 仅对无法满足建立时序的时钟或时钟交汇进行过约束。
- 仅将
-setup
选项用于收紧建立时间要求。注释: 如果您不指定该选项,那么将收紧建立时间和保持时间要求。 - 运行布线器步骤前将附加的不确定性复位。
过约束示例
设计布线前后,在具有 clk1
时钟域的路径上与时序相差 -0.2 ns,在从 clk2
到 clk3
的路径上与时序相差 -0.3 ns。
- 加载网表设计并应用标准约束。
- 应用附加时钟不确定性以对特定时钟进行过约束。
- 数值应至少达到违例总量。
- 约束只能应用于建立路径。
set_clock_uncertainty -from clk0 -to clk1 0.3 -setup set_clock_uncertainty -from clk2 -to clk3 0.4 -setup
- 运行流程直到布线步骤为止。最好能够满足预布线时序要求。
- 移除附加的不确定性。
set_clock_uncertainty -from clk0 -to clk1 0 -setup set_clock_uncertainty -from clk2 -to clk3 0 -setup
- 运行布线器。
在运行布线器后,您可以复查时序结果以评估过约束的优势。如果在布局后时序得到满足,但在布线后距离满足要求仍有差距,您可以增加不确定性的量并重试。
警告: 过约束不得超过 0.5 ns。设计过约束可能因实现工具引入额外的逻辑复制而导致功耗增加,并增加编译时间。
提示: 除过约束设计之外,另一种方法是更改每个路径组的相对优先级。默认情况下,在实现期间以相同优先级对每个时钟和用户定义路径组进行独立分析。您可使用
group_path -weight 2 -name
<ClockName>
选项为任意基于时钟的路径组设置更高的优先级。不得更改用户定义的路径组的优先级。