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查看最差路径,分析是逻辑级数过多、驱动能力不足还是约束过紧。

WNS为负时,优先检查时钟约束是否合理、输入输出延迟是否过紧、是否存在组合逻辑环路。若约束无误,则需回到RTL优化关键路径,如插入流水线、拆分复杂运算、减少逻辑级数。

五、门级网表与SDC交付

综合输出的门级网表是后端布局布线的输入,SDC则贯穿整个后端流程。网表必须与SDC一致,否则时序分析结果无意义。交付前应确认:

  • 网表端口与RTL顶层端口一致,无悬空或多余端口。
  • SDC中的时钟、输入输出延迟、伪路径等约束完整且与设计意图一致。
  • 网表中无未映射的通用逻辑单元,所有单元均来自目标工艺库。
  • 报告中的WNS、TNS、面积、功耗指标已记录,作为后续对比基线。

以下SVG展示了从RTL到门级网表与SDC的完整数据流,以及综合报告中的关键指标检查点:

Genus综合流程与关键指标检查 RTL代码 .sv / .v 工艺库 .lib / .lef SDC约束 时钟/IO延迟/伪路径 Genus综合引擎 syn_generic syn_map syn_opt 优化策略 资源共享 / 时钟门控 多阈值 / 尺寸调整 门级网表 .v 输出SDC .sdc 综合 报告 WNS TNS 面积/功耗 关键指标检查 WNS ≥ 0 ? 否 → 定位关键路径 TNS 接近 0 ? 否 → 检查违例路径数 面积 ≤ 预算 ? 否 → 资源共享/尺寸优化 功耗 ≤ 预算 ? 否 → 时钟门控/多阈值

综合报告中的WNS和TNS是判断时序是否收敛的直接依据。若WNS为负,需通过report_timing定位关键路径,分析是逻辑级数、驱动能力还是约束问题。面积和功耗则需与设计预算对比,若超标,可回到综合策略中调整优化选项,或在RTL层面做架构级优化。

综合阶段不修复保持时间违例,但需确保SDC中已正确设置时钟不确定性。若综合后WNS为正但后端布局布线后出现负值,通常是互连延迟估计不足所致,需在综合时预留更多余量。

掌握Genus综合流程、时序约束驱动机制以及面积功耗优化策略,能够帮助后端工程师在项目早期发现并解决潜在问题,为后续布局布线打下坚实基础。