逻辑综合实操:让 DC/Genus 交出一份可签的网表(C1)
数据流侧见 S2 综合交接与 F1 网表;本篇握工具本身:Design Compiler(
dc_shell)和 Cadence Genus 的脚本怎么组织、约束与库怎么喂、报告怎么读、什么时候该用 topographical/多角模式。算法原理在 EDA 算法。
一、脚本流水线

| 步骤 | DC(dc_shell) | Genus |
|---|---|---|
| 库 | set target_library / link_library / synthetic_library | set_db library(多库 .lib/.db) |
| 读 RTL | analyze + elaborate top | read_hdl + elaborate |
| 约束 | source xxx.sdc + current_design/link | read_sdc + read_upf |
| 综合 | compile_ultra(含拓扑估的 -topo) | syn_generic→syn_map→syn_opt |
| 写出 | write -format verilog、write_sdc | write_hdl、write_sdc、write_spef(估) |
link 阶段就决定成败一半:找不到 cell(库没配对)、多顶层、黑盒未消,都会在这暴露;绝不在 link warning 没清零时 compile。
二、喂进去的三类输入
- 库视图:每个 PVT 角一套 .db/.lib(见 F3 Liberty),target(映射目标)与 link(含 IP/IO 库)要分清;
- 约束:完整 SDC——时钟、IO 延迟、false/multicycle 例外;综合是约束第一次被真实执行的地方,未约束路径报告必须看;
- UPF/物理指引:多电源域读 UPF;大设计用 topographical 模式喂 floorplan 估计(线延迟更接近后端),减少「综合绿、后端红」。
三、报告怎么读(QoR 四件套)
| 报告 | 命令(DC) | 看什么 |
|---|---|---|
| 时序 | report_timing | WNS/WNS、最差路径 startpoint/endpoint、数据/时钟分量 |
| 约束覆盖 | report_constraint -all_violators、report_timing -loops | 未约束路径、组合环、例外是否生效 |
| 面积 | report_area | 组合/时序/黑盒面积、利用率参照 |
| 功耗 | report_power | 需活动率(F6 SAIF 反标),否则默认翻转率不可信 |
读报告的正确姿势:先确认约束完备性(没约束的路径天然全绿,最危险),再看最差路径的可优化性(逻辑级数/扇出),最后才看汇总数字。
四、关键开关与多角
- retiming:跨寄存器搬移组合逻辑平衡周期,提升频率但改变寄存器位置(要确认与 DFT/形式验证兼容);
- compile_ultra / topographical:高阶优化与布线拥塞/线延迟估计;先进节点强烈建议 topo;
- 多角综合(MCMM):用 setup/hold 双目标角综合,避免单角最优在 hold 角翻车(与 X2 同构);
- DFT 准备:scan 触发器替换、test 时钟/模式约束、
set_dft_signal,保证 F9 ATPG 有可插链结构; - 增量/二次综合:
compile -incremental在 ECO 与约束微调后复用结果(呼应 X3)。
五、典型翻车点
| 症状 | 根因 | 处置 |
|---|---|---|
| 综合全绿后端大面积红 | 线延迟估计过于理想 | topographical + 早期 floorplan |
| 某路径 0 违例可疑 | 漏约束/错误 false path | 报未约束路径 + 例外评审 |
| 功耗数字离谱 | 无真实活动率 | 反标 SAIF(F6) |
| 换库后面积翻倍 | target/link 库错配 | 库脚本版本锁定(F10) |
| LEC 不过 | 综合做了未认可优化 | 保留 SVF/对比要点,形式方法对齐 |
相关与延伸
总结
综合实操是「配对库→analyze/elaborate→清零 link warning→喂入完整 SDC/UPF→在 topographical+多角下 compile_ultra」,读报告先查约束完备与未约束路径、再查最差路径可优化性、最后才看面积功耗;功耗必须反标 SAIF、DFT 要在同一轮准备好,而任何「过于漂亮」的绿色都先怀疑漏约束。