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 / Genus | Innovus / ICC2 |
| 别名 | Gate-level Netlist | Post-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 或时序 |
参考
- C. E. Cummings, “RTL Coding Styles That Yield Simulation and Synthesis Mismatches,” SNUG San Jose, 1999,见Paradigm Works技术文库
- IEEE 1364.1-2002: Verilog Register Transfer Level Synthesis(已撤销,仍可作可综合子集的参考)
Discussion
Loading comments…
Checking sign-in…