从 RTL 到最终 GDS每一步在做什么,用了哪些文件,Tcl 脚本是怎么驱动这些步骤的?
💡 首先:什么是“后端”?
后端(Backend)指的是从综合(RTL → 门级网表)之后,到版图生成(GDS)这一整个物理实现流程。通常以门级网表(Netlist)作为起点,以 GDSII 文件为终点。
📘 目录预览(和你提到的9个步骤一一对应):
读入设计网表和库文件
初始化设计
设置时钟
设置时序约束
逻辑放置
时钟树综合
全局+详细布线
报告时序/功耗/面积
保存设计结果
我会在每一步标明:
这一步是干什么的
输入文件有哪些、各自内容
输出文件有哪些
Tcl 脚本中的作用
1. 读入设计网表和技术库
read_verilog ./design/netlist.v
read_liberty ./lib/typical.lib
read_def ./design/floorplan.def
read_lef ./tech/tech.lef
✅ 目的:
将设计的结构(网表)、工艺信息、物理布局约束导入工具。
📂 输入文件说明:
| 文件类型 | 扩展名 | 内容简介 |
|---|---|---|
| 门级网表 | .v (Verilog) | 综合后的电路描述(门、触发器、连线) |
| 标准单元库 | .lib (Liberty) | 时序、电源、面积等信息(逻辑级别) |
| 工艺库 | .lef (Library Exchange Format) | 单元的物理尺寸、pin 位置等(物理级别) |
| 初始布局 | .def (Design Exchange Format) | 初步规划的布局:芯片边界、宏单元位置等 |
📤 输出:EDA 工具内部数据结构(无外部文件)
2. 初始化设计
initialize_design -top top_module
✅ 目的:
设置顶层模块,工具将准备内部数据结构,建立连接图等。
📂 输入:
.v网表中定义的模块名
3. 设置时钟
create_clock -name clk -period 10 [get_ports clk]
✅ 目的:
建立时钟对象,供时序分析、布局等使用。
📂 输入:
- 顶层模块中定义的
clk端口
4. 设置时序约束
set_input_delay 1.0 -clock clk [all_inputs]
set_output_delay 1.0 -clock clk [all_outputs]
✅ 目的:
描述 I/O 的数据有效时间范围,确保时序分析合理。
📂 输入:
- 约束数据(可在
.sdc文件中提前写好)
5. 逻辑放置
place_opt
✅ 目的:
将门级单元放置在芯片布局中合适的位置,优化布线、时序。
📂 输入:
LEF/DEF 提供物理边界信息
.lib 提供延迟和面积信息
📤 输出:
- 中间放置结果(可写出新的
.def)
6. 时钟树综合(CTS)
clock_opt
✅ 目的:
插入缓冲器,平衡时钟到达时间(Skew),保证同步性。
📂 输入:
时钟定义(来自 create_clock)
电路结构(来自放置结果)
7. 全局 + 详细布线
route_opt
✅ 目的:
连接所有元件的物理连线,避免电阻、电容过大或串扰等问题。
📂 输入:
放置结果
工艺层信息(LEF)
📤 输出:
- 完整布线版图(可写出 DEF)
8. 报告时序、功耗、面积
report_timing > reports/timing.rpt
report_area > reports/area.rpt
report_power > reports/power.rpt
✅ 目的:
分析设计是否满足时序、电源和面积等需求。
📤 输出:
.rpt报告文件,供人工检查或后续分析脚本使用
9. 保存设计结果
write_def ./results/final.def
write_verilog ./results/final_netlist.v
✅ 目的:
导出最终的物理布局和更新后的网表
📤 输出:
| 文件 | 内容 |
|---|---|
.def | 最终版图信息(单元位置、布线) |
.v | 更新后的网表,可能包含插入的时钟树缓冲器等 |
🧪 ATPG 和 SDF 是在哪一步?
✅ ATPG(Automatic Test Pattern Generation)
阶段:布局布线之后
使用“插入 Scan Chain”后的网表
使用工具如 Tessent、DFT Compiler
生成文件:
.patterns(测试向量)、.stuck-at报告等
✅ SDF(Standard Delay Format)
阶段:布线完成 + 时序分析之后
工具从布线后的电路中抽取延迟,导出
.sdf文件用于门级仿真或后仿
🧭 总结一下“后端流程的核心输入输出”:
| 阶段 | 输入文件 | 输出文件 |
|---|---|---|
| 初始 | RTL(综合后得网表.v) + lib + lef + def | 无 |
| 布局布线 | .v + .lib + .lef + .def | .def + .v(更新) |
| 时序分析 | 设计数据结构 | .sdf + .rpt |
| ATPG | 带 scan 的网表 + layout | scan netlist + patterns |
| Tapeout | 完整的版图 | GDSII、LEF、DEF、SDF、网表、Lib |