RTL 与四级网表:同一份逻辑怎样逐级「物理化」(F1)
字段定义可查 EDA 数据格式,本篇沿数据流回答另一个问题:同一份逻辑在整条流程里以多少种表示存在?它们谁派生谁、功能为什么不能变、物理信息为什么只增?为什么同一时刻目录里会躺着三四个网表,哪个才算数? 这正是 S1→S2→S3→S4 横向贯穿的一条表示演化线。
一、四种表示:抽象逐级下降,物理逐级增加

- ① RTL:描述行为与结构,没有工艺单元,也没有坐标。
- ② 门级网表(gate-netlist,S2):已映射到某 PDK 的标准单元和硬宏,只有连接关系,没有物理位置。
- ③ 布局后网表(placed-netlist,S3):每个单元实例拿到合法坐标,插入了物理-only 单元(filler/tap/去耦单元),UPF 隔离/电平移位/保持单元在此落地。
- ④ 布线后网表(routed-netlist,S4):加上真实金属互连与完整时钟树,是寄生提取与签核的逻辑基准。
二、为什么功能不能变:LEC 逐级对拍
每一级都可能因为工具优化、DFT 插入、ECO 而改动,因此用**形式等价(LEC)**把相邻两级钉死:RTL↔综合网表、综合网表↔DFT 网表、网表↔各阶段网表、网表↔最终 LVS 源。等价检查不依赖激励,证明的是「变换保功能」。任何一级跳过 LEC,后面所有「时序 clean」都是在验证一颗可能已经变了的芯片。
三、为什么同一时刻有多份网表:三条分叉轴
| 分叉轴 | 并存的版本 | 区别 |
|---|---|---|
| 流程成熟度 | gate / placed / routed | 物理信息量不同,下游按阶段取用 |
| 功能 vs 测试 | functional netlist / DFT netlist | DFT 版插入扫描链、压缩逻辑、测试引脚 |
| 电源意图 | pre-UPF / power-ready | 后者含隔离、保持、电平移位与电源开关 |
最典型的混淆是功能网表与 DFT 网表:DFT 插入改变了网表(多了扫描逻辑),必须单独再做一次 LEC,并在文件名、tag、签收单上显式区分。要流片/做 LVS 的是含 DFT 与电源单元的最终版,而早期时序分析可能仍在功能版上跑——两线必须有明确的合并点与主版本声明。
四、主从关系:谁是事实源、谁是派生物
bash
RTL(逻辑事实源)
└─ 综合网表(派生物)
├─ DFT 网表(派生物,需 LEC)
└─ 物理网表 placed→routed(派生物,坐标/连线在 DEF)
最终:routed 网表 + routed DEF 必须同源(原子版本,见 S4)关键纪律:逻辑的事实源始终是 RTL,任何后端 ECO 若改了网表,都必须回灌 RTL 或留下可追溯的 ECO 凭证,否则下一次重综合会悄悄抹掉修复。网表本身不允许手改后不回写——这就是「主版本只能有一个,派生物可以有多个」。
五、典型交接事故
| 事故 | 根因 | 拦截 |
|---|---|---|
| 签的不是要做的芯片 | functional 与 DFT 网表混用 | 文件名/tag/签收单标明版本,LVS 用最终版 |
| ECO 修复被重综合冲掉 | 改网表未回灌 RTL | functional/mask ECO 必须有回灌凭证 |
| 网表与 DEF 对不上 | 两版数据非同源发布 | routed 网表与 DEF 作为原子版本(S4) |
| 插入 DFT 后功能不等价 | 未对 DFT 网表重做 LEC | 每次插链/改网表后强制 LEC |
| 物理单元污染逻辑比对 | filler/tap 被当成逻辑差异 | LEC 设置物理-only 单元的不可比规则 |
相关与延伸
总结
RTL 到门级/布局后/布线后是「功能不变、物理只增」的四级表示,每一级都靠 LEC 对拍保等价;网表因成熟度、DFT、电源意图而多份并存,但逻辑主版本永远是 RTL,任何网表修改都必须可回灌、可追溯。