Skip to content

Verilog 可综合性

Verilog Synthesis

VCS - Synopsys 的仿真工具(Simulator) DC - 综合工具 Synopsys 的 Design Compiler (DC)

什么是综合?

综合就是把 RTL 代码(描述”做什么”)自动翻译成由标准单元连接而成的Gate-level Netlist(描述”用什么搭”),并在满足时序、面积、功耗约束下做优化的过程。

可综合 vs 不可综合 速查表

表 1:可综合语法
类别关键字 / 符号综合后映射到
基本门原语and or nand nor xor xnor not buf标准单元库中的逻辑门
控制结构if-else、case / casez多路选择器(MUX)或优先级编码器
算术/逻辑运算+ - * & | ^ ~加法器、乘法器、位运算门
关系运算&& | == > >= < <= != !比较器
位操作>> << & | {} (拼接)移位器、布线、无实际逻辑
赋值语句=、<=、assign组合逻辑连线或寄存器输入
过程块always (含 always @(*)、always @(posedge clk))组合逻辑 / 时序逻辑
表 2:不可综合语法
关键字 / 符号不可综合原因典型用途
initial硬件没有”仅执行一次”的概念testbench 初值、ROM 预加载
forever描述无限循环,无法映射到有限硬件testbench 时钟生成
while / repeat循环次数运行时决定,硬件无法展开testbench 迭代激励
fork-join并行进程模型,综合器不支持testbench 并发激励
UDP用户自定义原语,综合工具不识别库单元建模
task / force / release一般不可综合(function 中无时序的可综合)testbench 和调试
系统函数 $display $time $monitor $finish仿真器特性,无硬件对应打印、仿真控制
=== / !==比较包含 x/z,真实硬件无法区分testbench 中比较未知态
#delay (如 #10)综合时被静默忽略,不报错 ⚠️testbench 控制时序

⚠️ 特别提醒:#delay 在综合时被忽略而不报错,意味着你可能写出仿真对、综合后行为完全不一样的代码。这是 RTL/仿真不一致的常见源头之一。

如何理解Netlist

前端的 Netlist 是”设计意图的实现”,后端的 Netlist 是”物理实现的验证”。

数字芯片流片前至少有前端、后端两个关键 Netlist 里程碑;实际流程里中间还有多个过渡版本。但它们都是同一个 Netlist 的演进

对比表
对比维度前端 Netlist(综合后)后端 Netlist(P&R 后)
产生阶段逻辑综合布局布线(P&R)
工具DC / GenusInnovus / ICC2
别名Gate-level NetlistPost-layout Netlist
含物理信息❌ 无✅ 有(位置、走线)
含时钟树❌ 理想时钟✅ 真实时钟树
含寄生参数❌ 无 RC✅ 有(SPEF 文件)
时序精度估算(WLM/线负载模型)精确(实际走线 RC)
下游去向交给后端 P&R导出 GDSII 流片
后端每一步都可能改动 Netlist,典型操作:
阶段会对 Netlist 做什么
DFT 插入把普通 DFF 替换成扫描 DFF,连成扫描链
Placement插 Buffer 修时序、调整驱动强度(X1 → X2)
CTS新增一大堆 Clock Buffer / Inverter
Routing再插 Buffer 修 DRV/时序,可能改动单元
ECO小范围手动/自动修 bug 或时序

参考

Discussion

Loading comments…

Checking sign-in…