| name | vivado-analysis |
| description | 当用户需要 Vivado 设计分析、时序报告解释或时序收敛方面的帮助时使用此技能。这包括 report_timing 解释(slack 计算、路径分析、时钟 skew/不确定性)、report_timing_summary 签发验证、report_qor_assessment(QoR 评分 1-5,评估类别)、report_qor_suggestions(自动优化建议,.rqs 工作流程)、report_design_analysis(时序路径特性、复杂度/Rent 分析、拥塞分析)、report_methodology(设计规则符合性)、report_utilization(资源使用分析)、report_cdc(时钟域交叉检查)、report_drc(设计规则检查)、report_bus_skew、时序收敛策略(setup/hold 违规解决、拥塞缓解)、消息严重性管理以及设计检查豁免。此技能提供分析和解释知识——如需执行 TCL 命令使用 vivado-tcl,如需修改约束使用 vivado-constraints,如需更改实现策略使用 vivado-impl。 |
Vivado 设计分析与时序收敛指南
基于 UG906(v2025.2)。此技能帮助解释分析报告并做出时序收敛决策。完整命令语法请参阅 REFERENCE.md。如需执行 TCL,请使用 vivado-tcl。如需修改约束,请使用 vivado-constraints。如需实现策略,请使用 vivado-impl。
时序路径基础
四种常见路径类型:
1. 输入端口 → 寄存器 (受 set_input_delay 约束)
2. 寄存器 → 寄存器 (受时钟周期约束)
3. 寄存器 → 输出端口 (受 set_output_delay 约束)
4. 输入端口 → 输出端口 (组合路径,set_max_delay)
路径结构(三个部分):
源时钟路径 → 数据路径 → 目标时钟路径
(时钟源 (launch 引脚 (时钟源
到 launch 到 capture 到 capture
单元) 单元输入) 单元)
Slack 公式:
- 最大延迟(Setup/Recovery):
slack = data_required_time - data_arrival_time
- 最小延迟(Hold/Removal):
slack = data_arrival_time - data_required_time
最大/最小延迟分析工艺角选择
| 分析类型 | 源时钟 | 数据路径 | 目标时钟 |
|---|
| Setup/Recovery(最大延迟) | Slow_max | Slow_max | Slow_min |
| Setup/Recovery(最大延迟) | Fast_max | Fast_max | Fast_min |
| Hold/Removal(最小延迟) | Slow_min | Slow_min | Slow_max |
| Hold/Removal(最小延迟) | Fast_min | Fast_min | Fast_max |
关键规则: 来自不同工艺角的延迟在 slack 计算中绝不混合在同一条路径上。
报告选择指南
| 目标 | 命令 | 何时使用 |
|---|
| 快速时序签发 | report_timing_summary | 实现后,比特流前必需 |
| 分析特定路径 | report_timing -from/-to/-through | 调试特定失败路径 |
| 整体 QoR 评分(1-5) | report_qor_assessment | 布线后,评估收敛可能性 |
| 自动优化提示 | report_qor_suggestions | 时序收敛卡住时 |
| 路径特性 | report_design_analysis | 深入分析逻辑层级、扇出、物理分布 |
| 方法学符合性 | report_methodology | 流程早期捕获方法学违规 |
| 资源使用 | report_utilization | 综合或实现后 |
| CDC 检查 | report_cdc | 综合后,验证时钟域交叉 |
| 拥塞分析 | report_design_analysis -congestion | 布局后,如果时序恶化 |
| 设计规则检查 | report_drc | 比特流生成前 |
| 总线 skew | report_bus_skew | 如果存在 set_bus_skew 约束(不在 report_timing_summary 中) |
时序报告头字段
| 字段 | 含义 |
|---|
| Slack | 正值 = 满足时序。负值 = 违规 |
| Source | 起点单元 + launch 时钟(边沿、名称、周期) |
| Destination | 终点单元 + capture 时钟(边沿、名称、周期) |
| Path Group | 包含终点的时钟组(异步引脚 → async_default) |
| Path Type | Max(setup/recovery)或 Min(hold/removal);工艺角(Slow/Fast) |
| Requirement | 时钟周期(相同时钟)或最小正增量(不同时钟) |
| Data Path Delay | 逻辑部分的总延迟 |
| Logic Levels | 数据路径中每种原语类型的计数 |
| Clock Path Skew | 目标 - 源插入延迟 + CPR |
| CPR | Clock Pessimism Removal — 共享时钟电路校正 |
| Clock Uncertainty | TSJ + TIJ + DJ + PE + UU(见下方) |
时钟不确定性组成部分
| 组成部分 | 来源 |
|---|
| TSJ(总系统抖动) | 两个时钟上的组合系统抖动 |
| TIJ(总输入抖动) | 来自 set_input_jitter 约束 |
| DJ(离散抖动) | 硬件原语(MMCM/PLL) |
| PE(相位误差) | 时钟信号之间的相位变化 |
| UU(用户不确定性) | 来自 set_clock_uncertainty 约束 |
路径详情中的延迟类型
| 值 | 含义 |
|---|
| Unplaced | 单元未布局,延迟已估计 |
| Estimated | 单元已布局但未布线 |
| Routed | 最终布线延迟 |
时钟相移模式(器件默认值)
| 器件系列 | 默认模式 | 行为 |
|---|
| 7 Series | WAVEFORM | 修改时钟波形边沿 |
| UltraScale | WAVEFORM | 修改时钟波形边沿 |
| UltraScale+ | LATENCY | 建模为 MMCM/PLL 插入延迟 |
| Versal | LATENCY | 建模为 MMCM/PLL 插入延迟 |
警告: 将 7 Series/UltraScale 设计迁移到 UltraScale+ 会改变相移建模。审查并删除用于相移的遗留多周期路径约束。
QoR 评估解释(report_qor_assessment)
分数含义
| 分数 | 解释 | 操作 |
|---|
| 1 | 设计可能无法完成实现 | 需要重大重新设计 |
| 2 | 将完成但无法满足时序 | 需要显著优化 |
| 3 | 可能无法满足时序 | 需要针对性优化 |
| 4 | 可能满足时序 | 轻微调整可能就够 |
| 5 | 将满足时序 | 继续生成比特流 |
五个评估类别
| 类别 | 检查内容 |
|---|
| Utilization | 器件、SLR、Pblock 级别的资源使用 |
| Netlist | 逻辑结构、DONT_TOUCH 属性、高扇出网络 |
| Clocking | setup 和 hold 路径上的时钟 skew |
| Congestion | 导致布线拥塞的网表结构 |
| Timing | 每时钟组的 WNS/TNS/WHS/THS,网络/LUT 预算 |
每个显示 OK 或 REVIEW 状态。带星号(*)的项目不直接影响分数,但影响收敛。
ML 策略可用性
满足所有条件时可用:
- opt_design 使用 Explore 或 Default 指令运行
- phys_opt_design 已启用
- 设计完全布线
- UltraScale 或 UltraScale+ 器件系列
自动终止
设置 MIN_RQA_SCORE 属性(1-5)以自动终止低于阈值的运行。
QoR 建议工作流程
report_qor_suggestions ← 生成建议
↓
write_qor_suggestions file.rqs ← 导出到文件
↓
read_qor_suggestions file.rqs ← 在下次运行中导入
↓
Suggestions auto-apply ← 如果 AUTOMATIC=Yes
建议分类
| 维度 | 值 |
|---|
| 来源 | GENERATED(当前运行)/ EXISTING(从 .rqs 导入) |
| 状态 | APPLIED / FAILED TO APPLY |
| 生成阶段 | opt_design / place_design / phys_opt_design / route_design |
| 适用阶段 | 建议应在哪里应用 |
| 自动 | Yes(自动应用)/ No(需要手动操作) |
建议类别
Clocking、Congestion、Utilization、Timing、Netlist、XDC、Strategy
设计分析解释(report_design_analysis)
时序路径特性 — 五个类别
| 类别 | 字段 |
|---|
| Timing | Path Type, Requirement, Slack, Timing Exception |
| Logic | Start/End Pin Primitives, Pins, Logic Levels, Routes |
| Physical | Arch Boundary Crossings (IO/RAM/DSP/NOC), Pblock restrictions, Bounding Box, Net Fanout/Detour |
| Property | Combined LUT pairs, MARK_DEBUG, DONT_TOUCH, Fixed constraints |
| DFX | DFX Path Type, Boundary Nets, Boundary Fanout |
复杂度(Rent 指数)解释
| Rent 指数 | 复杂度 | 操作 |
|---|
| < 0.65 | 低到正常 | 无需操作 |
| 0.65 - 0.85 | 高 | 审查层次结构,考虑布局规划 |
| > 0.85 | 非常高 | 重新设计层次结构,减少连接 |
平均扇出: < 4 正常,4-5 布局困难,> 5 实现失败风险。
拥塞级别解释
| 级别 | 影响 | 操作 |
|---|
| 3-4 | 轻微 | 通常可接受,除非时序预算紧张 |
| 5+ | 显著 QoR 影响 | 应用拥塞缓解策略 |
时序收敛决策树
Setup 违规解决
检测到 Setup 违规
├─ 检查逻辑层级(report_design_analysis)
│ └─ 高逻辑层级 → 流水线寄存器 / 重定时(vivado-synth: -global_retiming)
├─ 检查扇出(report_design_analysis)
│ └─ 高扇出 → MAX_FANOUT 属性 / phys_opt 复制(vivado-impl)
├─ 检查物理分布(report_design_analysis -congestion)
│ └─ 大边界框 → Pblock 布局规划(vivado-constraints)
├─ 检查时钟 Skew
│ └─ 负 skew → 审查时钟树,BUFG 布局
└─ 检查时序异常
└─ 缺失/错误约束 → 在 XDC 中修复(vivado-constraints)
Hold 违规解决
检测到 Hold 违规
├─ 检查 fast-corner 延迟
│ └─ 非常短的数据路径 → 添加延迟单元(phys_opt_design hold fix)
├─ 检查时钟 Skew
│ └─ 大正 skew → 审查时钟树平衡
└─ 检查跨 SLR 路径(SSI 器件)
└─ SLR 交叉 → SLR 感知布局(vivado-impl)
拥塞缓解
拥塞级别 ≥ 5
├─ 检查利用率(report_utilization)
│ └─ > 80% LUT → 减小设计尺寸或使用面积优化综合
├─ 检查高扇出网络
│ └─ 复制驱动器(phys_opt_design 扇出优化)
├─ 尝试拥塞聚焦策略
│ └─ vivado-impl: Congestion_* 策略
└─ 布局规划
└─ 在器件上分散逻辑(Pblocks, vivado-constraints)
消息严重级别
| 严重性 | 含义 | 需要操作 |
|---|
| Status | 常规处理反馈 | 无 |
| Info | 过程/设计反馈 | 无 |
| Warning | 约束未按预期应用,可能导致次优结果 | 审查 |
| Critical Warning | 输入/约束不符合最佳实践,通常导致错误 | 建议修复 |
| Error | 停止设计流程的问题 | 必须修复 |
提示: 提升警告严重性:set_msg_config -id "Common 17-81" -new_severity "CRITICAL WARNING"
设计检查豁免系统
何时豁免
- 具有外部同步的已知安全 CDC 交叉
- 不适用于您的设计的 DRC 检查
- 被设计意图覆盖的方法学检查
豁免通配符
| 关键字 | 匹配 |
|---|
*CELL | 任何单元 |
*NET | 任何网络 |
*PIN | 任何引脚 |
*PORT | 任何端口 |
*CLOCK | 任何时钟 |
* | 任何字符串 |
豁免自动保存在检查点中。使用 write_waivers 导出,使用 read_xdc 或 source 导入。
无法删除 AMD IP 豁免。
综合分析与收敛技术
RTL 优化:整数范围约束
明确定义信号范围以减少逻辑深度:
// 之前:32 位计数器,深度比较器逻辑
reg [31:0] counter;
// 之后:范围约束,更小比较器
reg [9:0] counter; // 如果最大值 < 1024
深度内存分解
| 属性 | 目的 | 效果 |
|---|
| RAM_DECOMP | 控制内存分解策略 | 功耗 vs 面积权衡 |
| CASCADE_HEIGHT | 精细级联深度控制 | 限制 BRAM 级联链深度 |
RAMB 利用率(非 2 的幂深度)
当内存深度不是 2 的幂时,综合可能过度分配 BRAM。使用地址解码器手动分区以获得最佳利用率。检查 report_utilization 和综合日志以了解内存映射。
RAMB 输出寄存器推断
BRAM 输出触发器之前的多个逻辑层级阻止 DOA 寄存器推断 → 时序恶化。重构 RTL 以允许 BRAM 输出寄存器使用(参见 vivado-impl examples/ug906/ 的前后对比)。
可配置报告策略
| 策略 | 阶段 | 焦点 |
|---|
| Vivado 综合默认报告 | 综合 | 仅利用率 |
| Vivado 实现默认报告 | 实现 | 标准报告 |
| UltraFast 方法学报告 | 实现 | 方法学符合性 |
| Performance Explore 报告 | 实现 | 时序探索 |
| 时序收敛报告 | 实现 | 详细时序分析 |
| 无报告 | 两者 | 跳过所有报告 |