4. 逻辑综合基础
逻辑综合是把RTL代码转换为门级网表的关键步骤,也是数字后端实现的起点。在Cadence流程中,Genus承担了这一角色。综合质量直接决定后续布局布线能否收敛,因此理解Genus的综合流程、时序约束驱动机制以及面积与功耗优化策略,是后端工程师必须掌握的基本功。
一、Genus综合流程概览
Genus的综合流程可以概括为“读入设计—施加约束—综合映射—优化—输出结果”几个阶段。典型脚本如下:
# 1. 读入工艺库与RTL
read_libs /path/to/tsmc28_ss.lib
read_hdl -sv ./rtl/top.sv
elaborate top
# 2. 读入时序约束
read_sdc ./constraints/top.sdc
# 3. 综合与优化
set_db syn_generic_effort high
set_db syn_map_effort high
syn_generic
syn_map
syn_opt
# 4. 输出网表与SDC
write_hdl > ./output/top_netlist.v
write_sdc > ./output/top.sdc
report_timing > ./report/timing.rpt
report_area > ./report/area.rpt
report_power > ./report/power.rpt
其中syn_generic完成与工艺无关的逻辑优化,syn_map将通用逻辑映射到目标工艺库的标准单元,syn_opt在映射基础上做时序、面积和功耗的进一步优化。三个步骤并非必须严格分开,但分开执行便于定位问题。
二、时序约束驱动综合
时序约束是综合的“指挥棒”。Genus根据SDC中的时钟定义、输入输出延迟、多周期路径、伪路径等约束,决定优化方向。若约束缺失或错误,综合结果可能完全偏离预期。
核心约束包括:
create_clock:定义时钟周期与波形,是时序分析的基准。set_input_delay / set_output_delay:描述外部逻辑对端口时序的影响。set_clock_uncertainty:预留时钟抖动与偏斜余量。set_false_path / set_multicycle_path:排除异步路径或放宽多周期路径。
例如,一个200MHz时钟的约束如下:
create_clock -name clk -period 5.0 [get_ports clk]
set_clock_uncertainty 0.15 [get_clocks clk]
set_input_delay 1.2 -clock clk [get_ports data_in*]
set_output_delay 1.5 -clock clk [get_ports data_out*]
set_false_path -from [get_ports rst_n]
综合时,Genus会优先满足建立时间(setup)约束,因为综合阶段通常不处理保持时间(hold),保持时间由后端布局布线阶段修复。若综合后WNS为负,说明关键路径无法在目标周期内完成,需要回到RTL或约束层面调整。
三、面积与功耗优化策略
面积和功耗优化往往与时序优化存在矛盾。Genus提供了多种策略供权衡:
- 资源共享:多个运算操作复用同一硬件资源,减少面积,但可能增加关键路径延迟。
- 操作符排序:调整运算顺序,缩短关键路径,可能略微增加面积。
- 时钟门控:在RTL中插入时钟门控单元,降低动态功耗,Genus可自动识别并插入。
- 多阈值电压单元:在关键路径使用低阈值单元提升速度,非关键路径使用高阈值单元降低漏电。
- 尺寸调整:对关键路径上的单元增大驱动能力,非关键路径减小尺寸以节省面积和功耗。
实际项目中,通常先以时序为目标综合,再在满足时序的前提下逐步优化面积和功耗。Genus的syn_opt支持-area、-power等选项,但需注意不要过度优化导致时序回退。
四、综合报告解读
综合完成后,必须检查四类关键指标:
| 指标 | 含义 | 判断标准 |
|---|---|---|
| WNS | 最差负时序裕量 | ≥0为时序收敛,<0需修复 |
| TNS | 总负时序裕量 | 越接近0越好,反映违例路径总量 |
| 面积 | 标准单元总面积 | 与预算对比,评估资源利用率 |
| 功耗 | 动态+静态功耗 | 与功耗预算对比,关注时钟树功耗占比 |
例如,某设计综合后报告显示:WNS = -0.32ns,TNS = -1.85ns,面积 = 125000μm²,总功耗 = 85mW。这说明存在时序违例,需要定位关键路径。可通过report_timing -max_paths 10查看最差路径,分析是逻辑级数过多、驱动能力不足还是约束过紧。
五、门级网表与SDC交付
综合输出的门级网表是后端布局布线的输入,SDC则贯穿整个后端流程。网表必须与SDC一致,否则时序分析结果无意义。交付前应确认:
- 网表端口与RTL顶层端口一致,无悬空或多余端口。
- SDC中的时钟、输入输出延迟、伪路径等约束完整且与设计意图一致。
- 网表中无未映射的通用逻辑单元,所有单元均来自目标工艺库。
- 报告中的WNS、TNS、面积、功耗指标已记录,作为后续对比基线。
以下SVG展示了从RTL到门级网表与SDC的完整数据流,以及综合报告中的关键指标检查点:
综合报告中的WNS和TNS是判断时序是否收敛的直接依据。若WNS为负,需通过report_timing定位关键路径,分析是逻辑级数、驱动能力还是约束问题。面积和功耗则需与设计预算对比,若超标,可回到综合策略中调整优化选项,或在RTL层面做架构级优化。
掌握Genus综合流程、时序约束驱动机制以及面积功耗优化策略,能够帮助后端工程师在项目早期发现并解决潜在问题,为后续布局布线打下坚实基础。