综合是什么:RTL 怎么变成门级网表,为什么同样代码结果不同
更新时间:2026-09-05。本文是「集成电路大类 · 芯片设计」入门层(beginner)第十二篇新正文。从代码到门电路 里我们手算过「一段 always 会变成触发器+MUX+加法器」。真实工程里这件事不是人画的,而是 EDA 工具自动完成的——这一步就叫综合(synthesis)。它是「设计」与「实现」之间的桥梁,进阶细节见 逻辑综合上手,后续布局布线见 P&R 入门。
本文要回答的问题
- 综合到底做了什么?输入是什么、输出是什么?
- 「门级网表」和 RTL 代码有什么区别?
- 为什么同一份 RTL,综合出来的面积/速度/功耗会差很多?
- 综合在整个流程里处于什么位置?
一、一句话定义
综合 = 把行为级的 RTL 代码,自动翻译成目标工艺下、由具体标准单元(门、触发器)连成的「门级网表(gate-level netlist)」,并在满足时序约束的前提下尽量优化面积/功耗。
- 输入:你的 RTL(Verilog/SystemVerilog)+ 目标工艺库(某 foundry 某节点的标准单元时序/面积/功耗数据,见 摩尔定律与工艺节点)+ 约束(目标时钟频率、输入输出延迟等)。
- 输出:门级网表——一张「用哪些标准单元、它们之间怎么连线」的清单,是后续布局布线的输入。
二、综合内部三步走
- 翻译 / 展平(elaboration / translation):读入 RTL,把
always、if、+等解析成与工艺无关的通用布尔逻辑(通用门、触发器、算术运算符),先得到一个「中性」的逻辑表示。这一步只保证功能等价,不做优化。 - 逻辑优化(logic optimization):对布尔表达式做化简、常量传播、死逻辑消除、资源共享(两个互斥的加法复用同一个加法器)等,在不改变功能的前提下减少门数、缩短路径。
- 工艺映射(technology mapping):把优化后的通用逻辑,映射到目标工艺库的具体标准单元——用这个 foundry 这个节点真实存在的与门、或门、触发器、加法器单元去实现,并根据时序约束选择「驱动强度大但更快更费电」还是「小而省」的单元版本。
走完三步,行为代码就变成了「一堆真实单元 + 连线」的网表。
三、为什么「同一份 RTL,综合结果不同」
这正是 从代码到门电路 埋的伏笔。综合不是一一对应翻译,而是在约束下求解权衡,结果取决于三个输入:
| 影响因素 | 怎么变 | 后果 |
|---|---|---|
| 工艺库不同 | 28nm 库 vs 5nm 库,单元速度/面积/功耗天差地别 | 同样功能,5nm 更快更省面积但更贵 |
| 时序约束不同 | 目标时钟 200MHz 还是 1GHz | 频率定高,工具被迫用大驱动单元、并行展开、面积功耗都涨 |
| 优化目标不同 | 优先面积、速度还是功耗 | 面积优先会共享资源、串行化;速度优先会复制电路、铺大单元 |
所以「这段代码占多少门」脱离工艺和约束是没有标准答案的。工具会反复做工艺映射 + 尺寸调整(sizing)+ 结构重组,努力在「满足时序(setup/hold)」的前提下把面积/功耗压下去。时序约束写在 SDC 文件里,时序能否满足由 静态时序分析 判定。
四、网表是什么:电路的「元件清单 + 接线表」
门级网表逻辑上和你的 RTL 功能等价,但形态完全不同:它不再有 always、if 这些行为结构,而是一长串「实例化某个标准单元、输入接哪些线、输出接哪根线」的连接关系。可以理解为一张物料清单(BOM)+ 接线表:
- 物料:用了哪些标准单元(多少个 DFF、哪些与或门、哪种加法器);
- 接线:这些单元的引脚怎么连起来。
网表还能再做门级仿真(带真实延迟,见 仿真是什么),也是后端 布局布线 摆放这些单元、连金属线的依据。
五、综合在全流程的位置
综合后通常会做一次初步时序/面积评估:如果关键路径差太多,要么回头改微架构/RTL(如加流水线级、缩短组合路径),要么调整约束——这是前端和后端之间反复迭代的一环(见 芯片设计全流程)。
六、这一篇在知识体系里的位置
- 想动手了解约束、工艺库、关键路径报告怎么读 → 逻辑综合上手;
- 想看综合出的网表怎么摆到硅片上 → 布局规划入门、P&R 入门、物理实现;
- 想知道「时序不满足」到底怎么算 → 时序为什么不满足、静态时序分析入门;
- 想知道门级网表怎么变成图纸交给工厂 → GDSII 与版图、tape-out 是什么。
总结
一句话总结:综合是用 Design Compiler/Genus 这类 EDA 工具把行为级 RTL 自动翻译成目标工艺标准单元连成的门级网表——内部经「翻译展平 → 逻辑优化(化简、资源共享)→ 工艺映射(绑定到 foundry 具体单元并选驱动强度)」三步,输入除了 RTL 还有工艺库和时序约束、输出是一张「元件清单加接线表」式的网表;正因为这是在约束下做面积/速度/功耗权衡,同一份 RTL 换工艺、换目标频率、换优化目标,综合出的结果可以大不相同,脱离工艺和约束谈「占多少门」没有意义;综合是前端设计与后端物理实现之间的桥梁,之后接 DFT、布局布线和 STA 签核,时序不收敛时还要回头改 RTL。