跳转到主要内容
瑞苏盈科专栏
我与瑞苏盈科板卡的开发故事

Vivado 报告三阶段检查:方法论 DRC 全解

文章来源:FPGA入门到精通

report_methodology 是 Vivado 里专门检查设计是否符合 UltraFast 设计方法学的 DRC 体系,按设计阶段分为 RTL lint 检查、综合后网表/约束检查、实现后时序检查三档,检查集随阶段自动切换。

它与 report_drc、check_timing 是三个不同维度的闸门:DRC 查「设计对不对」,Methodology 查「方法对不对」,check_timing 查「约束全不全」。

工程模式下实现阶段默认自动运行,所有 Critical Warning 与大部分 Warning 必须解决,否则直接威胁 QoR、时序分析准确性乃至上板硬件稳定性。

report_methodology 是什么?

report_methodology 检查的是「你按 UltraFast 方法学设计了吗」:约束写没写对、RAMB/DSP 流水线加没加、时钟拓扑合不合规、有没有误用异步例外。

这些问题仿真实测不出来,综合也不报错,但会在上板后以偶发故障的形式爆出来。

三命令的分工:

什么时候该想起它,判断很朴素:仿真过了上板崩、QoR 上不去、时序报告越看越不对,先跑一份 methodology 报告,问题往往就列在表里。

有个原因值得说透:仿真验证的是功能正确性,约束问题在仿真里根本不体现。

仿真模型不检查约束,未约束的时钟、缺失的跨域例外、误用的异步例外,仿真照样跑得欢,要等实现后 report_timing_summary 才暴露,那时候定位成本已经翻了几倍。

methodology 报告的价值就是在综合后这个节点,把这类问题提前拦下来。

三阶段检查体系:同一命令,不同检查集

同一个 report_methodology 命令,在不同设计阶段给出不同结论:

检查集随阶段自动切换,AMD 建议每个设计阶段都运行,并在进入下一阶段前把 Critical Warning 与 Warning 解决掉。

工程模式(Project Mode)下,工具默认在 opt_design 或 route_design 期间自动运行 Report Methodology,不用手动触发;

非工程模式(Non-Project)要自己把命令写进 Tcl 流水线。

怎么跑:Tcl 命令与 IDE

Tcl 命令方式(需先打开设计):

open_checkpoint synth_1/synth.dcp report_methodology -name methodology_1 -file methodology.txt   预期:methodology.txt 生成,按规则族分组列出违例,每条带编号、位置与严重等级(Critical Warning / Warning)。

IDE 方式:Reports > Report Methodology(Project Mode 下也可走 Flow Navigator 的 Implementation 流程)。

运行时机,四个节点必须重跑:

●首次综合完成时 

●添加重大模块后 

●发生重大约束变更后 

●时钟电路(clocking)变更后 

常见规则族速查:SYNTH / TIMING / CLKC / PDRC

两个容易误读的点。

一是 SYNTH-6/11/12/13(RAMB/DSP 可选流水线)在相关原语输入/输出路径 setup slack 满足阈值(UG835:-slack_lesser_than 默认 2 ns)时不报告,

性能余量足够时工具自动放过,不用处理。

二是 TIMING 族的 CDC 相关检查(同步时钟间误用异步例外、时钟组缺失),正是 W35 CDC 主题周说的那类约束隐患,methodology 报告是抓它们的工具。

TIMING 族的检查粒度很细,举例:bus skew 无效(多位总线跨时钟域没有正确约束)、OSERDESE3 跨 SLR skew、GT 最小脉宽这类约束正确性问题,都在 TIMING 族覆盖范围。

这类问题在仿真里全是「看起来正常」,却是上板偶发故障的高发区。

违例处理与豁免(waiver)

●AMD 官方 IP 的违例已预先评估核查,报告里直接列出,不用自己排查 

●某条违例确实不影响设计,必须明确理解违例含义与影响后才能忽略 

●可安全忽略的违例走 waiver 机制豁免,详见 UG906 Design Analysis and Closure Techniques 

红线一句话:Critical Warning 必须清零,Warning 大部分需处理,才能保证 QoR 良好、时序分析准确、硬件稳定。

实战:综合后四步检查清单

UG949 第 5 章 Design Implementation 给了综合后四步,直接落地成命令流。

第一步,检查和清理 DRC(默认规则 + 方法论 + 时序三份报告):

report_drc -name drc_1 -file drc.txt report_methodology -name methodology_1 -file methodology.txt report_timing_summary -name timing_1 -file timing_summary.txt   预期:三份报告都生成。

尽早发现并纠正违规,避免进入实现后爆雷。

第二步,检查综合日志的 Critical Warning:

set_param messaging.defaultLimit 1000   预期:超过 100 次重复的消息只写前 100 条,调大 messaging.defaultLimit 能看全。

确认所有 Critical Warning / Warning 与设计预期一致,重点清理 Critical Warnings。

第三步,检查时序约束:无脏约束,排查「约束未被加载或应用」的 Critical Warning 与 Warning。

第四步,满足综合后时序:

report_timing_summary -max_paths 100 -file synth_timing.txt 

预期:综合后 WNS 为负,说明后续实现大概率难收敛,需要回到 RTL 或约束改进,不要带着负 slack 往下推。

排错三例:报告跑出来为空,先确认设计阶段对了(elaborated 阶段跑不出实现后检查);

工程模式下自动运行的方法论结果,去 Reports 窗口的 Methodology 标签页看,找不到就 open 对应 run 后手动重跑;

Critical Warning 反复出现,先看是不是 waiver 没生效或约束根本没加载,用 check_timing 查约束覆盖。

小结速查

非工程模式(Non-Project)流程里,把命令写进 Tcl 流水线固定节点,每次 build 自动出报告:

read_checkpoint impl_1.dcp report_methodology -file methodology_final.txt   签核时把 methodology 报告与 DRC、时序报告一并归档,

作为设计质量证据(DO-254 等合规项目尤其必要)。

新项目开工第一次综合就跑 methodology,把历史欠账拦在项目早期。