什么是综合(Synthesis)?
更新时间:2026-09-21。问题驱动短答页。入门见 综合入门,原理见 逻辑综合,RTL 编码风格见 可综合编码风格。
一句话回答
综合(Synthesis)是把你写的可综合 Verilog/VHDL(RTL 行为描述),在指定的「标准单元库 + 时序/面积/功耗约束」下,自动翻译并优化成一张由真实与/或/非、触发器等标准单元连接而成的「门级网表」的过程。 它是「硬件代码」变成「具体电路」的第一道关键转换。
三步
- 翻译(elaboration/translation):把 RTL 解析成与工艺无关的通用布尔逻辑(GTECH/通用门)。
- 逻辑优化(optimization):做布尔化简、常量传播、资源共享、retiming 等,压面积/提时序/降功耗。
- 工艺映射(mapping/binding):用目标标准单元库(.lib,见 标准单元库)里真实存在的门替换通用逻辑,并按约束(SDC,见 SDC 约束)取舍。
输出是门级网表(Verilog netlist)+ 时序/面积/功耗报告。
综合 ≠ 布局布线
- 逻辑综合:决定「用哪些门、怎么连」,还没有物理坐标,连线延迟只是估计。
- 布局布线(P&R):决定这些门「摆在哪、怎么走线」,才有真实布线延迟,见 布局布线、物理设计。
- FPGA 里综合后映射到的是 LUT/FF/BRAM/DSP 等资源,再跑 place & route,见 FPGA 设计流程。
常见坑:不可综合代码
- 延时语句:
#10、initial(多数工具仅仿真)、forever等只用于 testbench。 - 意外锁存器:
always @(*)里 if/case 分支没给所有输出赋默认值,见 锁存器陷阱。 - 异步反馈、无复位推断、除以变量、
$display等系统任务。 - 约束缺失或过松/过紧:综合不看你想要的频率,只看 SDC;约束错则报告无意义,见 时序违例怎么修。
- 以为「能仿真过」=「能综合/电路对」:仿真验证行为,综合检查可综合性与时序,两回事。
总结
综合把可综合 RTL 在标准单元库和 SDC 约束下,经翻译、逻辑优化、工艺映射三步转成门级网表,是代码到电路的第一道转换;它决定用哪些门但还没有物理位置,物理位置要靠后续布局布线;写 RTL 时必须规避 #delay、意外锁存器等不可综合结构,并给全、给对约束。