无论端口是否已约束,均可使用 report_timing
命令识别设计中端口的相关时钟。定义完所有时序时钟后,即可报告进出 I/O 端口的最差路径、创建与报告的时钟相关的 I/O 延迟约束,并为进出设计的其他时钟重新运行相同的时序报告。如果发现端口与多个时钟相关,请创建对应的约束并重复此过程。
例如,din
输入端口与设计中的 clk1
时钟和 clk2
时钟相关:
report_timing -from [get_ports din] -sort_by group
此报告显示 din
端口与 clk1
相关。输入延迟约束为(同时适用于该示例中的最小和最大延迟):
set_input_delay -clock clk1 5 [get_ports din]
使用先前所用的命令重新运行时序分析,并观察发现 din
与 clk2
同样有关,原因在于 -sort_by group
选项,该选项针对每个端点时钟报告 N 条路径。您可添加对应的延迟约束并重新运行报告以确认 din
端口与其他时钟无关。
您还可使用“Timing Summary”(时序汇总)报告并选中 -report_unconstrained
选项来运行同样的分析。设计中仅有时钟约束的情况下,“Unconstrained Paths”(未约束的路径)部分显示结果如下:
------------------------------------------------
| Unconstrained Path Table
------------------------------------------------
Path Group From Clock To Clock
---------- ---------- --------
(none)
(none) clk1
(none) clk2
(none) clk1
(none) clk2
不含时钟名称(或者在 Vivado IDE 中显示 <NONE>)的字段表示一组路径,这组路径的起点(源时钟)或端点(目标时钟)与时钟无关联。未约束的 I/O 端口归为此类别。您可浏览报告其余部分以检索其名称。例如,在 Vivado IDE 中,通过选择“clk1
to NONE”类别的“Setup”路径,即可在“To”列中看到由 clk1
驱动的端口:
图 1. 获取未约束的输出端口的列表
在存储器中添加并应用新约束后,必须重新运行报告以确定哪些端口仍处于未约束状态。对于大多数设计来说,必须增加报告路径的数量,以确保报告中已列出所有 I/O 路径。