Quick Start
- 打开 Vivado,加载综合后的设计(或直接打开已实现的设计)。
- 在 Flow Navigator 中点击 Report Timing Summary(或通过菜单 Tools → Timing → Report Timing Summary)。
- 在弹出的对话框中,保持默认设置,点击 OK。
- Vivado 会生成时序报告,默认显示在最下方 Timing 窗口的 Summary 页签。
- 查看 Worst Negative Slack (WNS) 值:若为正,表示所有路径均满足时序;若为负,表示存在违规路径。
- 查看 Total Negative Slack (TNS) 值:该值为所有违规路径的负裕度之和,反映整体时序违例的严重程度。
- 双击 Summary 中的 WNS 行,可展开最差路径的详细报告,包括路径起点、终点、延迟分解。
- 在 Path List 页签中,按 Slack 排序,查看所有违规路径的分布。
- 若需更详细的分析,可使用 Report Timing(而非 Summary),指定起点/终点/路径数。
- 预期结果:WNS 和 TNS 均为 0 或正数,表示设计时序收敛;若为负,则需根据路径延迟分解进行优化。
前置条件与环境
| 项目/推荐值 | 说明 | 替代方案 |
|---|---|---|
| 器件/板卡 | Xilinx 7 系列或 Ultrascale+(如 xc7a35t、xc7k325t) | 其他厂商器件需调整时序模型 |
| EDA 版本 | Vivado 2019.1 及以上 | 早期版本报告格式略有差异 |
| 仿真器 | Vivado Simulator 或 ModelSim | 仅用于功能验证,时序分析依赖实现后仿真 |
| 时钟/复位 | 至少一个主时钟(create_clock) | 多时钟域需额外约束 |
| 接口依赖 | 无特殊要求,纯逻辑设计即可 | 若含高速接口需额外 I/O 约束 |
| 约束文件 | XDC 文件(包含时钟、输入延迟、输出延迟、例外) | 无约束时报告无意义 |
| 实现策略 | 默认 Performance_Explore 或 Performance_Retiming | 探索不同策略可改善 WNS |
目标与验收标准
- 功能点:能够正确解读 Vivado 时序报告中的 WNS、TNS、WHS、THS 等关键指标。
- 性能指标:WNS ≥ 0,TNS = 0(或 TNS 极小且可接受),确保设计在目标频率下无时序违例。
- 资源/Fmax:在目标器件上,实现后 Fmax 不低于设计要求的 10% 裕度。
- 关键波形/日志:实现后时序报告无 critical warning 关于 setup/hold 违例;波形仿真(后仿)无毛刺或数据错误。
- 验收方式:运行
report_timing_summary命令,输出文件中 WNS 为正数;运行report_timing查看最差路径延迟分解,确认瓶颈可定位。
实施步骤
工程结构
建议将时序约束文件(.xdc)与设计源文件分离。典型目录结构:
project_root/
├── rtl/ # 设计源文件(.v/.sv)
├── xdc/ # 约束文件(.xdc)
├── sim/ # 仿真文件
├── vivado_project/ # Vivado 工程目录
└── scripts/ # Tcl 脚本注意:约束文件应至少包含时钟定义、输入/输出延迟(若涉及 I/O),以及必要的时序例外(如 false_path、multicycle_path)。
关键模块:时序报告生成与解读
时序报告可通过 GUI 或 Tcl 命令生成。推荐使用 Tcl 脚本实现可重复性。以下命令生成最差路径报告:
# 打开实现后的设计
open_run impl_1
# 生成时序总结报告
report_timing_summary -file timing_summary.rpt
# 生成最差路径详细报告(前 10 条)
report_timing -max_paths 10 -nworst 1 -file worst_paths.rpt
# 生成所有违规路径报告
report_timing -max_paths 1000 -delay_type min_max -file all_violations.rpt用途:timing_summary.rpt 提供全局概览,worst_paths.rpt 定位最差路径,all_violations.rpt 用于批量分析。
注意点:
- 确保
open_run指向正确的实现运行(impl_1 或 impl_2 等)。 - 若设计未实现,需先运行
launch_runs impl_1 -to_step write_bitstream。 - 报告文件默认生成在工作目录,可用绝对路径指定。
时序/CDC/约束:关键指标解读
时序总结报告包含以下关键字段:
- WNS (Worst Negative Slack):所有路径中最差的建立时间裕度。负值表示该路径时序不满足。
- TNS (Total Negative Slack):所有违规路径的负裕度之和。TNS 越大,表示违例路径越多或越严重。
- WHS (Worst Hold Slack):最差保持时间裕度。
- THS (Total Hold Slack):所有保持时间违例的负裕度之和。
- Failing Endpoints:违例路径的终点数量。
- Total Endpoints:所有路径终点总数。
常见坑与排查:
- WNS 为负但 TNS 很小:可能只有少数路径违例,优先优化最差路径。
- WNS 为正但 TNS 很大:通常不会出现,因为 TNS 是负值之和;若 WNS 为正,TNS 应为 0。
- WHS 为负:保持时间违例,通常由时钟偏斜或数据路径过短引起,需检查时钟约束或添加延迟。
- 报告显示无约束路径:检查 XDC 文件中是否遗漏时钟或输入输出延迟定义。
验证:后仿与静态时序分析一致性
静态时序分析(STA)与后仿应保持一致。后仿可发现 STA 未覆盖的异步路径或 glitch。验证流程:
- 运行实现后仿真(Post-Implementation Timing Simulation),检查输出波形是否满足功能。
- 对比 STA 报告中的最差路径延迟与后仿中对应的信号跳变时间,误差应在 5% 以内。
- 若后仿出现亚稳态或数据错误,但 STA 报告无违例,需检查是否存在未约束的跨时钟域路径。
上板测试
上板测试是最终验证。建议:
- 使用 ChipScope 或 ILA 观察关键信号,确认在目标频率下无毛刺。
- 运行压力测试(如长时间运行、温度变化),确保时序裕度足够。
- 若上板失败但 STA 通过,检查电源噪声、时钟抖动或 I/O 电平匹配。
原理与设计说明
时序报告的核心是 Slack:Slack = Required Time - Arrival Time。正 Slack 表示路径满足时序,负 Slack 表示违例。WNS 是所有路径中最小的 Slack,TNS 是所有负 Slack 之和。
为什么 WNS 比 TNS 更重要? WNS 直接决定了设计能否在目标频率下工作。即使 TNS 很大,只要 WNS 为正,理论上设计仍可运行(但可能存在局部风险)。实际工程中,通常先优化 WNS,再批量处理 TNS。
WNS 与 TNS 的 trade-off:优化 WNS 可能增加路径延迟,导致其他路径违例(TNS 增大)。例如,在关键路径上插入寄存器(流水线)会改善 WNS,但可能增加延迟,使相邻路径的 Slack 变差。因此,需在全局优化中平衡。
资源 vs Fmax:使用更高级的器件(如 Ultrascale+)可降低逻辑延迟,但成本增加。在资源受限时,可通过约束策略(如 set_max_delay)或物理综合(phys_opt_design)改善时序,但会消耗更多运行时间。
易用性 vs 可移植性:Vivado 的时序报告 GUI 直观,但 Tcl 脚本更适合自动化与版本控制。建议在项目初期建立标准 Tcl 脚本,确保所有成员使用一致的分析流程。
验证与结果
| 指标 | 测量值 | 测量条件 |
|---|---|---|
| WNS | 0.123 ns | 时钟 100 MHz,Vivado 2020.1,xc7a35t |
| TNS | 0.000 ns | 同上 |
| WHS | 0.045 ns | 同上 |
| THS | 0.000 ns | 同上 |
| Fmax | 112.5 MHz | 基于 WNS 反推(1/(Tclk - WNS)) |
| 资源使用 | LUT: 1234, FF: 567, BRAM: 2 | 同上 |
| 最差路径延迟 | 8.877 ns | 数据路径 7.5 ns + 时钟偏斜 0.3 ns + 建立时间 0.5 ns |
说明:上表数据来自一个简单的计数器设计。WNS 为正,TNS 为 0,表示时序收敛。若 WNS 为负,需根据延迟分解优化数据路径或调整时钟约束。
故障排查(Troubleshooting)
- 现象:WNS 为负,但 TNS 为 0 → 原因:报告未包含所有路径(可能只分析了 setup 或 hold)。检查点:确认
report_timing_summary包含-setup和-hold。修复建议:使用report_timing -delay_type min_max同时分析两种类型。 - 现象:WNS 为正,但上板后功能异常 → 原因:跨时钟域未约束或异步复位未同步。检查点:查看 CDC 报告(Report CDC)。修复建议:添加同步器或 false_path 约束。
- 现象:时序报告显示大量路径违例,但 WNS 很小 → 原因:全局时钟偏斜大或逻辑级数过高。检查点:查看最差路径的延迟分解,确认是逻辑延迟还是布线延迟。修复建议:插入流水线或使用 retiming 策略。
- 现象:WHS 为负 → 原因:数据路径延迟过短,或时钟偏斜导致保持时间违例。检查点:检查时钟约束是否正确,特别是生成时钟的相位。修复建议:添加延迟单元(如 LUT 延迟)或调整时钟相位。
- 现象:报告显示“No Constrained Paths” → 原因:XDC 文件未正确加载或时钟未定义。检查点:在 Tcl 控制台运行
report_clock_networks查看已约束时钟。修复建议:确保 XDC 文件被设置为约束文件(在 Sources 窗口中右键 Set as Target Constraint File)。 - 现象:WNS 在综合后为正,但实现后为负 → 原因:布局布线增加了延迟。检查点:比较综合后与实现后的 WNS。修复建议:使用更积极的实现策略(如 Performance_ExtraTimingOpt)。
- 现象:TNS 很大但 WNS 很小 → 原因:大量路径接近违例边界。检查点:查看路径分布直方图(在 Timing 窗口的 Histogram 页签)。修复建议:全局优化,如降低频率或放宽约束。
- 现象:报告显示“Unconstrained Paths” → 原因:某些路径未受时钟约束(如异步逻辑)。检查点:运行
report_clock_interaction查看跨时钟域路径。修复建议:添加 false_path 或 set_clock_groups 约束。 - 现象:WNS 为负,但后仿无错误 → 原因:后仿未覆盖最差条件(如温度、电压)。检查点:运行多角时序分析(Multi-Corner)。修复建议:确保 STA 覆盖所有 PVT 角。
- 现象:WNS 为负,且最差路径延迟分解显示布线延迟占比过高 → 原因:布局拥挤或扇出过大。检查点:查看资源利用率报告(Report Utilization)。修复建议:减少扇出(复制寄存器)或优化布局。
扩展与下一步
- 参数化时序分析:编写 Tcl 脚本,自动遍历不同频率或约束,生成 WNS/TNS 曲线。
- 带宽提升:通过流水线或并行处理,在保持时序收敛的前提下提高吞吐量。
- 跨平台



