对于存在严重保持时间违例 (> 0.4 ns) 的路径,最好在对设计进行布线前先减少保持时间违例,以便于布线器使用布线绕行来修复其余较轻微的保持时间违例。如果发现保持时间修复导致布线拥塞,那么在布线前减少保持时间违例是很有帮助的。每个 phys_opt_design
保持时间修复选项都使用不同资源,并具有特定目标。根据器件使用率和期望的影响来使用适当的选项至关重要。在运行 phys_opt_design
进行保持时间修复前,重要的是确认设计已包含正确约束的时钟树以便最大程度降低偏差。
在时序元件之间插入下降沿边缘触发寄存器可将时序路径分为 2 个半周期路径,从而显著减少保持违例。您可在 phys_opt_design
实现步骤中使用 -insert_negative_edge_ffs
选项插入下降沿边缘触发寄存器。仅当路径包含触发器驱动,并且时序元件之间最多仅含 1 个 LUT 时,才考虑对此路径执行此项最优化。路径上的建立时序裕量在最优化后必须为正值并且足够大,否则将放弃最优化。
下图显示了在驱动 CMAC 块的触发器后插入的下降沿边缘触发寄存器。执行最优化前,触发器与驱动之间的保持时序裕量为 -0.492 ns。插入下降沿边缘触发寄存器(以蓝色高亮显示)后,建立和保持时序裕量均为正值。
此外,还可将 LUT1 延迟插入数据路径以减少保持时间违例。要插入 LUT1 延迟,请在 phys_opt_design
实现步骤中使用以下选项之一:
-
-hold_fix
- 执行 LUT1 插入,仅考量具有足够的正建立时序裕量的最大 WHS 违例路径。
-
-aggressive_hold_fix
- 执行 LUT1 插入,此方式比标准
-hold_fix
选项更激进。-aggressive_hold_fix
最优化会考量是否对大量保持时间违例路径执行 LUT1 插入,可用于以牺牲 LUT 使用率为代价显著减少设计 THS。
下图显示了在驱动 ILKN 块的触发器之后插入 LUT1 延迟的情况。最优化前,从触发器到 ILKN 的路径是设计中的 WHS 路径,其保持时序裕量为 -0.277 ns。插入 LUT1 延迟(以蓝色高亮显示)之后,保持时序裕量和建立时序裕量均仍为正值。