本文根据 OpenROAD 文档与 OpenROAD-flow-scripts 教程翻译整理,按 “项目概览 → 流程与生态 → ORFS 实操 → GUI 与各阶段 → 故障排查 → 回归测试与运行” 的顺序重排;保留关键概念、表格、图片和图示说明,并为每张图片补充 中文图题与要点解读。😊
🛠️ 说明:OpenROAD 的 构建与安装(Bazel、依赖安装、CMake、Docker 镜像构建等)一笔带过;各工具的详细软件用法(完整命令、参数、日志和脚本细节)也 一笔带过,仅保留流程概念、关键结果与图片解读。具体命令请参考官方 README、示例脚本和
*_test.tcl。本文重点在 流程理解与结果分析。✨
📑 目录
-
1. 🌟 OpenROAD 概览 -
2. 🎯 OpenROAD 使命与生态 -
3. 🔄 OpenROAD-flow-scripts 与 RTL-GDSII 时间线 -
4. 🖥️ GUI 总览
4.1 🏗️ 布局规划
4.2 🧩 自动层次化宏单元放置
4.3 🌡️ 布局拥塞可视化
4.4 ⏱️ CTS
4.5 🛤️ 布线 -
5. 🏭 PDK 支持与 Tapeout -
6. 🧪 回归测试与运行(构建与软件用法略) -
7. 📚 OpenROAD Flow Scripts 教程:环境与设计配置 -
8. ▶️ 运行自动化 RTL-to-GDS 流程 -
9. 📊 查看结果与日志 -
10. 🖱️ OpenROAD GUI 使用 -
11. 🔬 流程阶段与结果分析 -
12. 🚑 故障排查:全局布线拥塞 -
13. ✅ 小结
1. 🌟 OpenROAD 概览
OpenROAD 是领先的 开源半导体数字设计基础应用。OpenROAD 流程提供 自主、无人在环(Autonomous, No-Human-In-Loop, NHIL)的 RTL-GDSII 流程,可在 24 小时内完成周转,用于快速设计探索和物理设计实现。⚡
图中要点:
-
• 展示 OpenROAD 作为 开源数字设计基础应用 的总体定位。 -
• 用于建立 RTL 到 GDSII 自主流程 的整体认知。
2. 🎯 OpenROAD 使命与生态
OpenROAD 旨在 消除硬件设计中的成本、进度风险和不确定性障碍,推动开放获取快速、低成本的 IC 设计软件、专业知识和系统创新。OpenROAD 通过 Tcl 与 Python 绑定的 API 实现灵活的流程控制。🧠
OpenROAD 被用于研究和商业应用,例如:
-
• OpenROAD-flow-scripts:来自 OpenROAD -
• OpenLane:来自 Efabless -
• Silicon Compiler:来自 Zero ASIC -
• Hammer:来自 UC Berkeley -
• OpenFASoC:来自 IDEA-FASoC,用于混合信号设计流程
OpenROAD 通过软件开发和关键联盟促进 活跃生态。用户社区包括硬件设计者、软件工程师、产业合作者、VLSI 爱好者、学生和研究人员。OpenROAD 支持 IC 设计教育和人才培养,包括全球多所大学的培训内容与课程、Google-SkyWater shuttle、GlobalFoundries shuttle、设计竞赛和 IC 设计工作坊。OpenROAD 流程已在 600 多个可流片 tapeout 中成功使用,工艺最高到 12nm。🏆
3. 🔄 OpenROAD-flow-scripts 与 RTL-GDSII 时间线
OpenROAD 提供 OpenROAD-flow-scripts(ORFS) 作为原生、可直接使用的原型和 tapeout 流程;同时也可基于底层工具、数据库和分析引擎创建 自定义流程控制器。ORFS 是面向 快速架构与设计空间探索、早期 QoR 预测和详细物理设计实现 的全自动 RTL-GDSII 流程,也支持通过 Tcl 命令和 Python API 对单个流程阶段进行人工干预。🔧
图中要点:
-
• 展示 ORFS 的 RTL-GDSII 时间线:综合、布局规划、布局、CTS、布线、收尾。 -
• 用于理解 全自动流程的阶段划分 与各阶段输入输出。
使用 OpenROAD 进行物理设计实现的主要步骤:
-
• 布局规划:初始化芯片面积与利用率、IO 引脚放置、Tap cell 与 well tie 插入、PDN 创建 -
• 全局布局:宏单元放置、标准单元放置、自动布局优化与修复 -
• 详细布局:合法化布局、增量时序分析 -
• 时钟树综合:为高扇出网络插入缓冲器和尺寸调整 -
• 优化 setup/hold 时序 -
• 全局布线:天线修复、创建布线 guide -
• 详细布线:合法化布线、DRC 正确布线 -
• 芯片收尾:寄生提取、最终时序与物理验证、dummy metal fill、DRC signoff
📌 各阶段具体命令与脚本用法 从略,请参考官方工具 README 与
*_test.tcl示例。
4. 🖥️ GUI 总览
OpenROAD GUI 是 强大的可视化、分析和调试工具,具有可定制 Tcl 接口。下图展示布局规划、布局拥塞、CTS 和布线后设计的 GUI 视图。🎨
4.1 🏗️ 布局规划
图 4-1:ibex 布局规划(Floorplan)
图中要点:
-
• 展示 ibex 设计 的 die/core 区域、IO、宏单元和电源网络。 -
• 用于检查 初始面积、利用率与布局规划结果。
4.2 🧩 自动层次化宏单元放置
图 4-2:Ariane133 自动层次化宏单元放置
图中要点:
-
• 展示大型设计中 宏模块的自动层次化摆放。 -
• 用于评估 宏分布、通道和核心区利用。
4.3 🌡️ 布局拥塞可视化
图 4-3:布局拥塞热图(Placement Congestion)
图中要点:
-
• 热图颜色表示布局密度/拥塞程度。 -
• 用于 定位高密度区域 并指导布局调整。
4.4 ⏱️ CTS
图 4-4:时钟树综合(CTS)后的时钟布线
图中要点:
-
• 展示 时钟树综合后的时钟网络与缓冲器分布。 -
• 用于检查 时钟树结构和时钟布线。
4.5 🛤️ 布线
图 4-5:ibex 布线(Routing)
图中要点:
-
• 展示 布线后标准单元、宏单元和金属布线。 -
• 用于 最终版图检查和布线质量评估。
5. 🏭 PDK 支持与 Tapeout
OpenROAD 应用 与 PDK 无关,但在不同流程控制器中已针对特定 PDK 测试和验证。OpenLane 支持 SkyWater 130nm 和 GlobalFoundries 180nm。OpenROAD-flow-scripts 支持多种公共和私有 PDK。📦
🟢 开源 PDK
-
• GF180:180nm -
• SKY130:130nm -
• Nangate45:45nm -
• ASAP7:预测型 FinFET 7nm
🔒 专有 PDK
这些 PDK 仅在 OpenROAD-flow-scripts 中支持,用于对照商业平台测试和校准 OpenROAD,确保良好 QoR。由于 NDA 限制,PDK 和平台专用文件不能提供;如可独立获取平台,可自行创建平台专用文件。
-
• GF55:55nm -
• GF12:12nm -
• Intel22:22nm -
• Intel16:16nm -
• TSMC65:65nm
OpenROAD 已通过 Google 赞助的 Efabless MPW shuttle 和 ChipIgnite 项目,在 SKY130 与 GF180 上完成 600 多个 tapeout 的完整物理实现。🎉
图 5-1:MPW shuttle 流片项目
图中要点:
-
• 展示 MPW shuttle 流片项目相关图像。 -
• 说明 OpenROAD 在 开源流片生态 中的实际应用。
🏛️ OpenTitan SoC 在 GF12LP 上的物理设计与优化
图 5-2:OpenTitan SoC 在 GF12LP 上的物理设计
图中要点:
-
• 展示 OpenTitan SoC 在 GF12LP 上的物理设计结果。 -
• 说明 OpenROAD 可用于 较大型 SoC 和先进节点探索。
🔁 持续 Tapeout 集成到 CI
OpenROAD 项目将成功流片的 MPW shuttle 设计加入 CI 回归测试,例如 Open 处理器核、基于 RISC-V 的 SoC、加密货币矿机、机器人应用处理器、业余卫星无线电收发器、基于 OpenPower 的 Microwatt 等。
6. 🧪 回归测试与运行(构建与软件用法略)
🛠️ 构建与安装一笔带过:Bazel 构建、依赖安装、CMake 旧构建、Docker 镜像构建等请参考官方文档,本文不展开。
💻 软件详细用法也一笔带过:OpenROAD 命令行完整选项、回归测试全部命令、工具脚本参数等不逐一列出,仅保留概念与结果示例。
6.1 🧪 回归测试
回归测试注册在 BUILD 文件中,测试文件位于 ./test/ 和 src/<tool>/test/。Tcl 测试以 -tcl_test 结尾,Python 测试以 -py_test 结尾;Flow 测试会检查 worst slack 等结果与参考值。具体命令见官方文档。
查看 flow 测试指标示例:
% report_flow_metrics gcd_nangate45
insts area util slack_min slack_max tns_max clk_skew max_slew max_cap max_fanout DPL ANT drv
gcd_nangate45 368 564 8.8 0.112 -0.015 -0.1 0.004 0 0 0 0 0 0
📌 失败回归更新方式、
OPENROAD_EXE设置、按工具运行测试等 从略,见官方回归测试说明。
6.2 ▶️ 运行 OpenROAD
OpenROAD 可通过命令行启动,支持 GUI 模式、交互式 Tcl、Python 解释器、日志写入和启动时加载 .odb 数据库 等模式。完整命令行选项 从略,请参考 openroad -help 与官方文档。📜
许可证:BSD 3-Clause License,见 LICENSE 文件。
7. 📚 OpenROAD Flow Scripts 教程:环境与设计配置
本教程描述使用 OpenROAD Flow Scripts 从 RTL 到 GDS 运行完整 OpenROAD 流程,并包含关键流程阶段的设计与手动使用示例,帮助理解 OpenROAD 应用流程、数据组织、GUI 和命令。🎓
适用对象:
-
• 具备基本 VLSI 设计流程理解、希望学习安装和完整 RTL-to-GDS 流程的 初学者。 -
• 已熟悉 OpenROAD 应用和流程、希望学习特定功能与命令的 用户。
用户指南:
-
• 教程要求 ORFS 构建的 特定目录结构,不要修改结构或底层文件,否则流程执行会出问题。 -
• 可运行完整 RTL-to-GDS 流程,也可 独立学习特定流程部分。 -
• 报告、日志和图像可能随版本更新变化,但主流程和命令结构一般适用。 -
• 问题提交到 OpenROAD-flow-scripts GitHub Issues。
7.1 🌱 环境设置
使用 bash 运行命令和脚本。环境与安装优先参考官方文档;使用 Docker 可快速获得可用环境。🐳
7.2 ⚙️ 配置设计
在 flow 目录查看平台配置与设计配置。config.mk 包含平台所需变量,不建议修改平台变量定义。设计专用配置变量如下:
添加新设计见 AddingNewDesign,属于 高级用户步骤。具体配置命令 从略。
7.3 ⏰ 时序约束与 SystemVerilog 输入
ibex 的最小时序约束示例为时钟定义:
create_clock -name core_clock -period 17.4 [get_ports {clk_i}]
SystemVerilog 输入位于 ./designs/src/ibex_sv/,设计定义在 ibex_core.sv。详细文件查看命令 从略。
8. ▶️ 运行自动化 RTL-to-GDS 流程
OpenROAD 应用使用 Tcl 脚本调用开源工具,从综合到最终 .gds 文件创建,无需人工干预。本教程也介绍重要流程阶段的交互式 Tcl 命令;具体命令与参数 从略。🤖
可访问的流程阶段与工具 README 包括:综合、数据库、布局规划、引脚放置、芯片级连接、宏单元放置、Tapcell 插入、PDN 分析、IR Drop 分析、全局布局、时序分析、详细布局、Resizer 时序优化、时钟树综合、全局布线、天线规则检查、详细布线、金属填充、寄生提取、版图生成(KLayout)。
8.1 🎯 设计目标
使用 sky130hd 运行 ibex 的自动化 RTL-to-GDS 流程。目标:
-
• 面积: -
• 最小要求 die 尺寸: 0 0 798 800(微米) -
• 核心尺寸: 2 2 796 798(微米) -
• 时序: -
• 满足时序的时钟周期: 17.4 ns
ibex 在 8 核、16GB RAM 机器上约 8 分钟,运行时间因配置而异。运行命令、清理命令和分阶段清理命令 从略,见 ORFS Makefile 与官方教程。
8.2 📂 目录结构与结果
在 flow 下可见:
designs logs Makefile objects platforms reports results scripts test util
-
• designs/sky130hd/ibex:设计 makefile、SDC、autotuner 和 routing 文件。 -
• platforms:OpenROAD flow 支持的公共 PDK:asap7 nangate45 sky130hd sky130hs sky130io sky130ram。 -
• objects/sky130hd/ibex/base:ABC 约束和临时库文件。 -
• logs/sky130hd/ibex/base:各流程阶段日志。 -
• results/sky130hd/ibex/base:.v/.sdc/.odb/.def/.spef等结果。 -
• reports/sky130hd/ibex/base:拥塞、DRC、设计统计、天线日志等报告。
日志文件示例:
结果文件示例:
报告文件说明:
流程完成时创建合并最终 GDS,生成 6_1_merged.gds 并复制为 6_final.gds。具体日志文本 从略。
9. 📊 查看结果与日志
ORFS 为每个流程阶段加 前缀,便于理解和调试失败阶段。🔍 具体报告命令 从略,以下仅保留结果示例。
9.1 📐 面积
示例:
Design area 191262 u^2 30% utilization.
9.2 ⏱️ 时序
示例:
worst slack -0.99
tns -1.29
wns -0.99
9.3 ⚡ 功耗
示例输出:
--------------------------------------------------------------------------
Group Internal Switching Leakage Total
Power Power Power Power
----------------------------------------------------------------
Sequential 5.58e-03 6.12e-04 1.67e-08 6.19e-03 19.0%
Combinational 9.23e-03 1.71e-02 4.90e-08 2.63e-02 81.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.48e-02 1.77e-02 6.57e-08 3.25e-02 100.0%
45.6% 54.4% 0.0%
10. 🖱️ OpenROAD GUI 使用
GUI 允许用户通过 详细可视化和定制选项 选择、控制、高亮和导航设计层次及设计对象(net、pin、instance、path 等)。除版图外的窗口都是 可停靠窗口,可从 Windows 菜单关闭和重新打开。远程访问时需使用 ssh -Y 或 -X 启用 X11 转发。🌐
本节学习:可视化设计层次、加载 ODB 做布局规划和版图可视化、追踪综合时钟树、使用热图查看拥塞和布局效果、查看和追踪关键时序路径、设置显示控制、从 Inspector 缩放对象。具体 GUI 点击步骤与 Tcl 命令 从略,保留图片与要点。
若已完成 RTL-GDS 流程,查看 ./results/sky130hd/ibex/base/ 下最终 GDS。make gui_final 会读取 .odb、加载 .spef 并启动 GUI。
图 10-1:ibex 最终数据库版图(布线后 DEF)
图中要点:
-
• 展示 ibex 布线后 DEF 版图。 -
• 用于检查 最终布局、布线和宏/标准单元分布。
10.1 🔎 可视化设计对象与连接
左侧 Display Control 窗口显示 Layers、Nets、Instances、Blockages、Heatmaps 等对象的 颜色、可见性和选择选项。右侧 Inspector 窗口可检查选中对象详情和时序报告。可选择性显示/隐藏对象并观察影响。
10.2 🌳 追踪时钟树
通过 Windows → Clock Tree Viewer 打开时钟树查看器,点击 Update 查看综合时钟树;查看结构时可在左侧禁用金属 Layers。
图 10-2:Clock Tree Viewer 菜单入口
图中要点:
-
• 展示 Clock Tree Viewer 菜单位置。 -
• 用于 打开时钟树查看器并更新时钟树。
图 10-3:ibex 综合时钟树
图中要点:
-
• 展示 ibex 综合时钟树结构。 -
• 用于检查 缓冲器层次、时钟分支和时钟网络。
10.3 🌡️ 热图
通过 Tools → Heat Maps 可查看 Placement Density、Routing Congestion、Power Density 等热图;左侧 Display Control 可展开对应热图项并设置显示范围。具体操作 从略。
图 10-4:布局密度热图(Placement Heat Map)
图中要点:
-
• 展示 50%–100% 范围的布局密度热图。 -
• 用于 识别高密度区域和布局拥塞。
图 10-5:布线拥塞热图(Routing Congestion Heat Map)
图中要点:
-
• 展示 布线拥塞热图。 -
• 用于 定位全局布线资源紧张区域。
图 10-6:功耗密度热图(Power Density Heat Map)
图中要点:
-
• 展示 功耗密度热图。 -
• 用于观察 高功耗区域和潜在热点。
10.4 ⏱️ 查看时序报告
通过 Timing → Options 打开时序报告视图,可选择 Paths 更新路径数量,并切换 Setup / Hold 标签查看每段路径的 required arrival time 和 slack。具体命令 从略。
图 10-7:时序报告入口
图中要点:
-
• 展示 Timing Report 入口/视图。 -
• 用于 打开时序路径查看界面。
图 10-8:时序路径更新与路径数量
图中要点:
-
• 展示 路径更新和路径数量显示。 -
• 用于选择 Setup/Hold 路径组 并查看每段路径的 到达时间与 slack。
每个 Setup/Hold 路径组包含 pin name, Time, Delay, Slew, Load 等值,覆盖 clock-to-register、register-to-register、register-to-output 数据路径。
10.5 📏 使用标尺
通过 Tools → Ruler K 打开标尺,可测量设计中任意两个对象距离或金属层长宽。示例中 VDD 与 VSS 层距离为 11.970。
图 10-9:标尺工具(Ruler Tool)
图中要点:
-
• 展示 标尺工具。 -
• 示例中 VDD 与 VSS 层距离为 11.970。
10.6 🧭 DRC Viewer
可通过 Windows → DRC Viewer 加载 5_route_drc.rpt 追踪 DRC 违规。若有违规会记录在报告中,否则为空。具体加载与修复命令 从略。
图 10-10:DRC 报告加载(DRC Report Load)
图中要点:
-
• 展示 DRC 报告加载入口。 -
• 用于将 DRC 报告载入 GUI 并定位违规。
图 10-11:gcd 设计 DRC 违规加载
图中要点:
-
• 展示 gcd 设计 DRC 违规加载结果。 -
• X 标记在设计中标出 DRC 违规位置。
图 10-12:查看 DRC 违规(Short)
图中要点:
-
• 展示 短接违规的局部视图。 -
• output53存在重叠,导致 short violation。
📌 示例中
output51与output53初始坐标相同导致重叠;调整output53坐标后重新布线可得到 0 违规。具体 DEF 修改与脚本 从略。
10.7 💻 Tcl 命令接口
GUI 底部 TCL commands 可执行 OpenROAD-flow-scripts Tcl 命令,输入 help 可查看可用命令。具体命令列表 从略。
10.8 🎨 定制 GUI
可创建自定义菜单栏、工具栏按钮、对话框等。示例通过 Tcl create_toolbar_button 创建 Load_LEF 按钮加载 sky130 .tlef 和 merged.lef。具体脚本 从略。
图 10-13:默认 OpenROAD GUI
图中要点:
-
• 展示 默认 OpenROAD GUI。 -
• 用于说明 自定义工具栏按钮的起点。
图 10-14:Load_LEF 工具栏按钮
图中要点:
-
• 展示 新增的 Load_LEF 按钮。 -
• 用于说明 GUI 工具栏定制结果。
图 10-15:加载 sky130 LEF 文件
图中要点:
-
• 展示 加载 sky130 LEF 后的 GUI。 -
• 用于说明 通过自定义按钮加载技术文件。
11. 🔬 流程阶段与结果分析
OpenROAD 流程 全自动,但用户可干预以探索、分析并优化 PPA。下面保留各阶段概念、结果与图片;具体命令、参数与脚本用法从略,请参考官方 README 和示例脚本。📈
11.1 🧪 综合探索:面积与时序优化
使用 ABC_AREA 和 ABC_SPEED 探索综合优化:ABC_AREA=1 面积优化,ABC_SPEED=1 时序优化。修改设计 config.mk 并重跑即可,具体命令 从略。
gcd 综合结果对比:
📌 注意:面积优化结果最好在布局规划后检查最终影响。先放宽
.sdc约束再重跑 观察面积影响;否则 repair design 命令会为满足时序增加面积。
11.2 🏗️ 布局规划
布局规划可基于 core/die 绝对坐标,也可基于 core 利用率。参考 init_floorplan1.tcl / init_floorplan2.tcl,具体命令 从略。
图 11-1:绝对坐标布局规划(Absolute Floorplan)
图中要点:
-
• 展示 绝对 die/core 坐标定义的布局规划。 -
• 用于理解 die 与 core 区域关系。
图 11-2:相对利用率布局规划(Relative Floorplan)
图中要点:
-
• 展示 按核心利用率生成的布局规划。 -
• 用于比较 绝对坐标与利用率驱动方式。
11.3 📍 IO 引脚放置
引脚放置在 die 边界的 track grid 上,以最小化线长,并按 min-area 规则 创建金属形状。参考 place_pin4.tcl,具体命令 从略。
图 11-3:引脚放置(Place Pin)
图中要点:
-
• 展示 引脚在 die 边界的放置结果。 -
• 用于检查 引脚分布和金属形状。
图 11-4:框选缩放引脚
图中要点:
-
• 展示 框选缩放操作。 -
• 用于 定位特定引脚区域。
图 11-5:放大后的 clk 引脚
图中要点:
-
• 展示 放大后的 clk 引脚。 -
• 用于检查 引脚形状与边界对齐。
11.4 🔲 芯片级 IO Pad 放置
使用 Tcl 脚本为 coyote 设计生成 I/O pad ring。ICeWall 用于围绕设计外围放置 IO 单元,并与网表中的 IO 单元关联。参考 skywater130_coyote_tc.tcl,具体命令 从略。
图 11-6:coyote 设计 IO pad ring
图中要点:
-
• 展示 coyote 设计的 IO pad ring。 -
• 用于检查 pad 在外围的排列和连接。
11.5 🔌 电源规划与分析
使用 gcd 创建电源网格并运行功耗分析。Pdngen 用于电源规划,PDNSim 用于静态 IR 分析。参考 core_grid_snap.tcl / gcd_test_vdd.tcl,具体命令 从略。
图 11-7:gcd 电源分配网络(PDN)
图中要点:
-
• 展示 gcd 的电源分配网络。 -
• 用于检查 电源条带、网格和连接。
IR Drop 分析:IR drop 是电源网格金属线在到达标准单元电源引脚前的 电压降,会影响单元速度和芯片性能。PDNSim 可报告 worst IR drop、worst current density,检查 浮空 PDN 条带,并可写 SPICE 网表。示例报告:
########## IR report #################
Worstcase voltage: 1.10e+00 V
Average IR drop : 1.68e-04 V
Worstcase IR drop: 2.98e-04 V
######################################
11.6 🧷 Tapcell 插入
Tap cell 是非功能单元,可带 well tie、substrate tie 或两者,帮助 tie VDD/GND 电平,防止 漂移和闩锁。End cap/boundary cell 放在每行布局两端终止行,保护边界标准单元栅极。Tap cell 在 宏单元放置和电源轨创建之后 放置,即 pre-placement 阶段,按固定间隔放入每行,最大距离须符合技术库 DRC。参考 gcd_nangate45.tcl,具体命令 从略。
图 11-8:Tapcell 插入表示(基本)
图中要点:
-
• 展示 tapcell/endcap 插入的基本表示。 -
• 用于理解 行端和规则间隔放置。
图 11-9:宏单元周围 Tapcell 插入表示
图中要点:
-
• 展示 宏单元周围 tapcell 插入表示。 -
• 用于理解 宏周边规则和边界处理。
图 11-10:Tapcell 插入结果
图中要点:
-
• 展示 gcd 设计 tap cell 插入结果。 -
• 用于检查 规则间隔和行端单元。
11.7 🔗 Tie Cell
Tie cell 是特殊标准单元,为逻辑门输入提供 高/低信号。网表中引脚接 0/1(如 .A(1'b0) 或 .IN(1'b1))时插入 tie cell。参考 tiecells.tcl,具体命令 从略。Nangate45 示例日志:
[INFO IFP-0030] Inserted 1 tiecells using LOGIC0_X1/Z.
[INFO IFP-0030] Inserted 1 tiecells using LOGIC1_X1/Z.
11.8 🧱 宏单元与标准单元布局
布局密度影响标准单元在核心区的分散程度。参考 macro01.tcl,具体命令 从略。密度 0.7 与 0.6 的对比如下。
图 11-11:布局密度 0.7
图中要点:
-
• 展示 密度 0.7 下宏单元与标准单元整体布局。 -
• 用于比较 不同密度对核心区利用的影响。
图 11-12:密度 0.7 局部视图
图中要点:
-
• 展示 宏单元与标准单元局部摆放。 -
• 用于检查 通道和局部密度。
图 11-13:布局密度 0.6
图中要点:
-
• 展示 密度 0.6 下整体布局。 -
• 用于观察 标准单元更分散的布局效果。
图 11-14:密度 0.6 局部视图
图中要点:
-
• 展示 密度 0.6 下宏与标准单元局部。 -
• 用于比较 局部拥塞变化。
带 halo 间距的宏单元放置:参考 mpl/test,通过 macro_placement -halo {0.5 0.5} 在宏周围增加 0.5 微米 H/V halo,改善布线资源。具体命令 从略。
图 11-15:无 halo 间距的 gcd 宏放置
图中要点:
-
• 展示 无 halo 时宏单元间距。 -
• 用于对比 布线资源影响。
图 11-16:带 0.5 微米 halo 的 gcd 宏放置
图中要点:
-
• 展示 带 0.5 微米 halo 的宏放置。 -
• 用于 改善宏周围布线资源。
定义布局密度:修改 ibex config.mk 中 CORE_UTILIZATION = 40 和 PLACE_DENSITY_LB_ADDON = 0.1 后重跑,具体命令 从略。
图 11-17:ibex 布局密度 60
图中要点:
-
• 展示 ibex 布局密度 60 的视图。 -
• 用于观察 默认布局密度效果。
图 11-18:ibex 布局密度 50 热图
图中要点:
-
• 展示 修改利用率与密度后的布局热图。 -
• 说明 CORE_UTILIZATION从 20 到 40、密度从 0.60 到 0.50 后标准单元更分散。
11.9 ⚙️ 时序优化
repair_design 用于修复 max slew、max capacitance、max fanout 违规,并在长线上降低 RC 延迟;repair_timing 用于修复 setup/hold 违规,支持多角分析。具体命令、参数和日志 从略,参考 repair_slew1.tcl、repair_setup4.tcl、repair_hold10.tcl 等示例。
📌 示例中:
repair_design可将 31 个 max slew 违规修复到 0;repair_timing -setup可插入缓冲器和 resize 实例,必要时放宽时钟周期;repair_timing -hold可插入 hold buffer 将 worst slack 从负值修复为正。具体数值见官方示例日志。
11.10 🌳 时钟树综合
clock_tree_synthesis 执行 CTS。ORFS 在布局后自动生成 平衡时钟树。参考 simple_test.tcl / balance_levels.tcl,具体命令与参数 从略。
图 11-19:CTS 前版图
图中要点:
-
• 展示 CTS 前时钟网络和单元布局。 -
• 用于对比 CTS 后缓冲器插入效果。
图 11-20:CTS 后版图
图中要点:
-
• 展示 CTS 后时钟缓冲器和网络。 -
• 用于检查 时钟树构建结果。
图 11-21:不平衡时钟树
图中要点:
-
• 展示 未平衡时钟树结构。 -
• 用于说明 CTS 前的分支不平衡。
图 11-22:平衡时钟树
图中要点:
-
• 展示 CTS 后平衡时钟树。 -
• 用于检查 缓冲器和分支平衡结果。
报告时钟偏斜:report_clock_skew 可查看 latency、CRPR 和 skew。ibex CTS 日志示例显示 pre-repair、post-repair 和 final 的 skew 数据;具体日志 从略。
报告 CTS 指标:report_cts 可查看 clock roots、buffers inserted、clock subnets 和 sinks 数量。示例:
[INFO CTS-0003] Total number of Clock Roots: 1.
[INFO CTS-0004] Total number of Buffers Inserted: 35.
[INFO CTS-0005] Total number of Clock Subnets: 35.
[INFO CTS-0006] Total number of Sinks: 301.
11.11 🧩 添加填充单元
Filler cell 填充详细布局实例间空隙,连接行内电源/地轨,无逻辑连接,为 VDD/VSS 提供连续性并含衬底 nwell 连接以改善偏置。参考 fillers1.tcl,具体命令 从略。
图 11-23:未插入填充单元的布局
图中要点:
-
• 展示 未插入 filler 的布局空隙。 -
• 用于对比 填充单元效果。
图 11-24:填充单元插入后的布局
图中要点:
-
• 展示 filler cell 填充后的行内空隙。 -
• 用于检查 电源/地轨连续性。
11.12 🛤️ 全局布线
全局布线器 分析可用布线资源并自动分配,避免 H/V overflow 违规,生成 GCell 拥塞报告,包含总资源、需求、利用率、位置和 H/V 违规状态。无违规可进入详细布线。参考 gcd.tcl,具体命令 从略。日志示例显示各层 Resource、Demand、Usage 和 Overflow 为 0,Total wirelength 为 10598 um,Routed nets 为 563。
图 11-25:全局布线结果
图中要点:
-
• 展示 全局布线后的 guide/布线视图。 -
• 用于检查 资源分配和拥塞情况。
11.13 🧵 详细布线
TritonRoute 是面向现代工业设计的开源详细布线器,包含 pin access 分析、track assignment、初始详细布线、search and repair 和 DRC 引擎。参考 gcd_nangate45.tcl,具体命令与参数 从略。成功布线日志示例:Number of violations = 0,Total wire length = 5680 um,vias = 2223。
图 11-26:详细布线结果
图中要点:
-
• 展示 详细布线后的版图。 -
• 用于检查 DRC 正确布线和布线质量。
11.14 📡 天线检查
天线违规 发生在天线比超过 PDK 规定值 时。天线比是 gate area 与 gate oxide area 之比,电荷收集量由导体面积/尺寸决定。该工具检查天线违规并报告违规网络。参考 ant_check.tcl,具体命令 从略。示例日志:
[INFO ANT-0002] Found 1 net violations.
[INFO ANT-0001] Found 2 pin violations.
violation count = 1
Net net50 violations: 1
11.15 🧱 金属填充
金属填充 是先进节点保证可制造性和良率的必要步骤,用金属多边形填充设计附近空白区域,保证晶圆平坦化。该模块插入 浮动金属填充形状,满足金属密度设计规则并遵守 DRC,由 JSON 配置文件 驱动。具体命令 从略。
图 11-27:金属填充前的布线版图
图中要点:
-
• 展示 金属填充前的布线版图。 -
• 用于对比 填充后金属密度。
图 11-28:金属填充后的版图
图中要点:
-
• 展示 金属填充后的版图。 -
• 可在 Misc中启用Fills复选框查看填充。
11.16 🔬 寄生提取
OpenRCX 是 Parasitic Extraction(PEX/RCX) 工具,基于 OpenDB 设计 API,根据 LEF/DEF 布局模型 提取布线设计,将 电阻、耦合电容和接地电容 存储到 OpenDB 对象,可选生成 .spef。参考 45_gcd.tcl,具体命令 从略。日志摘要显示完成 RC segment 生成、耦合电容提取和 SPEF 写出。
12. 🚑 故障排查:全局布线拥塞
全局布线器有功能帮助理解设计 高拥塞。拥塞热图可用于任何设计,见热图部分。若设计有拥塞问题,会以错误结束:
[ERROR GRT-0118] Routing congestion too high.
参考 congestion5.tcl,具体命令 从略。
图 12-1:布线拥塞导致失败
图中要点:
-
• 展示 布线拥塞导致失败的版图。 -
• 用于 定位拥塞区域。
图 12-2:布线拥塞热图
图中要点:
-
• 展示 布线拥塞热图。 -
• 用于分析 GCell 资源与需求不匹配区域。
12.1 📝 导出拥塞信息到文本文件
可在 global_route 命令中加入 -congestion_report_file 导出拥塞报告;具体参数 从略。
12.2 📍 将溢出 GCell 可视化为标记
加载拥塞报告后,DRC Viewer 可显示拥塞 GCell 摘要并在 GUI 中加入标记;在 Inspector 窗口可查看布线资源详情,使用 zoom_to 放大。具体操作 从略。
图 12-3:GCell 拥塞标记
图中要点:
-
• 展示 拥塞 GCell 标记。 -
• 用于在版图中 定位溢出区域。
图 12-4:Inspector 缩放选项
图中要点:
-
• 展示 Inspector 中的缩放选项。 -
• 用于 放大查看特定 GCell。
图 12-5:放大后的拥塞 GCell
图中要点:
-
• 展示 放大后的拥塞 GCell。 -
• 用于进一步分析 布线资源和溢出原因。
13. ✅ 小结
OpenROAD 提供了从 RTL 到 GDSII 的开源自主数字设计流程,ORFS 则将 综合、布局规划、布局、CTS、布线、收尾、DRC/LVS、寄生提取 等阶段组织为可复现的自动化流程。通过 GUI、Tcl/Python API、热图、时序报告、DRC Viewer 和分阶段命令,用户既可使用 全自动 NHIL 流程,也可在关键阶段进行 手动分析和优化。其生态覆盖 开源与专有 PDK、教育、研究、商业应用和 600 多个 tapeout,并以 BSD 3-Clause 许可证 开放。🌟
本文对构建与各工具详细软件用法均一笔带过,具体命令请参考官方 README、示例脚本和
openroad -help。 🚀

