大数跨境

OpenROAD 中文整理:开源数字 IC 设计流程与 OpenROAD-flow-scripts 教程

OpenROAD 中文整理:开源数字 IC 设计流程与 OpenROAD-flow-scripts 教程 ai算法芯片与系统
2026-11-03
6
导读:OpenROAD是开源数字集成电路物理设计平台,提供从RTL到GDSII的自主流程,集成综合、布局、布线、时序功耗和DRC分析。它用于快速设计探索与PPA优化,支持多PDK和图形调试,降低芯片设计门槛

 

本文根据 OpenROAD 文档与 OpenROAD-flow-scripts 教程翻译整理,按 “项目概览 → 流程与生态 → ORFS 实操 → GUI 与各阶段 → 故障排查 → 回归测试与运行” 的顺序重排;保留关键概念、表格、图片和图示说明,并为每张图片补充 中文图题与要点解读。😊

🛠️ 说明:OpenROAD 的 构建与安装(Bazel、依赖安装、CMake、Docker 镜像构建等)一笔带过;各工具的详细软件用法(完整命令、参数、日志和脚本细节)也 一笔带过,仅保留流程概念、关键结果与图片解读。具体命令请参考官方 README、示例脚本和 *_test.tcl。本文重点在 流程理解与结果分析。✨


📑 目录

  1. 1. 🌟 OpenROAD 概览
  2. 2. 🎯 OpenROAD 使命与生态
  3. 3. 🔄 OpenROAD-flow-scripts 与 RTL-GDSII 时间线
  4. 4. 🖥️ GUI 总览
        4.1 🏗️ 布局规划
        4.2 🧩 自动层次化宏单元放置
        4.3 🌡️ 布局拥塞可视化
        4.4 ⏱️ CTS
        4.5 🛤️ 布线
  5. 5. 🏭 PDK 支持与 Tapeout
  6. 6. 🧪 回归测试与运行(构建与软件用法略)
  7. 7. 📚 OpenROAD Flow Scripts 教程:环境与设计配置
  8. 8. ▶️ 运行自动化 RTL-to-GDS 流程
  9. 9. 📊 查看结果与日志
  10. 10. 🖱️ OpenROAD GUI 使用
  11. 11. 🔬 流程阶段与结果分析
  12. 12. 🚑 故障排查:全局布线拥塞
  13. 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 🏗️ 布局规划

ibex_floorplan

图 4-1:ibex 布局规划(Floorplan)

图中要点:

  • • 展示 ibex 设计 的 die/core 区域、IO、宏单元和电源网络。
  • • 用于检查 初始面积、利用率与布局规划结果。

4.2 🧩 自动层次化宏单元放置

Ariane133

图 4-2:Ariane133 自动层次化宏单元放置

图中要点:

  • • 展示大型设计中 宏模块的自动层次化摆放。
  • • 用于评估 宏分布、通道和核心区利用。

4.3 🌡️ 布局拥塞可视化

pl_congestion

图 4-3:布局拥塞热图(Placement Congestion)

图中要点:

  • • 热图颜色表示布局密度/拥塞程度。
  • • 用于 定位高密度区域 并指导布局调整。

4.4 ⏱️ CTS

clk_routing

图 4-4:时钟树综合(CTS)后的时钟布线

图中要点:

  • • 展示 时钟树综合后的时钟网络与缓冲器分布。
  • • 用于检查 时钟树结构和时钟布线。

4.5 🛤️ 布线

ibex_routing

图 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 的完整物理实现。🎉

shuttle

图 5-1:MPW shuttle 流片项目

图中要点:

  • • 展示 MPW shuttle 流片项目相关图像。
  • • 说明 OpenROAD 在 开源流片生态 中的实际应用。

🏛️ OpenTitan SoC 在 GF12LP 上的物理设计与优化

OpenTitan_SoC

图 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 包含平台所需变量,不建议修改平台变量定义。设计专用配置变量如下:

变量名
描述
PLATFORM
指定 PDK
DESIGN_NAME
设计顶层模块名
VERILOG_FILES
设计 Verilog 文件或描述模块的 JSON 文件路径
SDC_FILE
设计 .sdc 文件路径
CORE_UTILIZATION
核心利用率百分比
PLACE_DENSITY
期望布局密度;1 表示紧密,0 表示分散

添加新设计见 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、设计统计、天线日志等报告。

日志文件示例:

logs


1_1_yosys.log 3_1_place_gp.log 5_2_route.log
2_1_floorplan.log 3_2_place_iop.log 6_1_merge.log
2_2_floorplan_io.log 3_3_resizer.log 6_report.log
2_3_tdms_place.log 3_4_opendp.log

2_4_floorplan_macro.log 4_1_cts.log

2_5_floorplan_tapcell.log 4_2_cts_fillcell.log

2_6_floorplan_pdn.log 5_1_grt.log

结果文件示例:

results


1_1_yosys.v 3_1_place_gp.odb 5_route.sdc
1_synth.sdc 3_2_place_iop.odb 6_1_fill.odb
1_synth.v 3_3_place_resized.odb 6_1_fill.sdc
2_1_floorplan.odb 3_4_place_dp.odb 6_1_merged.gds
2_2_floorplan_io.odb 3_place.odb 6_final.odb
2_3_floorplan_tdms.odb 3_place.sdc 6_final.gds
2_4_floorplan_macro.odb 4_1_cts.odb 6_final.sdc
2_5_floorplan_tapcell.odb 4_2_cts_fillcell.odb 6_final.spef
2_6_floorplan_pdn.odb 4_cts.odb 6_final.v
2_floorplan.odb 4_cts.sdc output_guide.mod
2_floorplan.sdc 4_cts.v route.guide
2_floorplan.v 5_route.odb updated_clks.sdc

报告文件说明:

文件名
描述
congestion.rpt
若发生全局布线拥塞
5_route_drc.rpt
若发生 DRC 违规
final_clocks.webp
CTS 后提取图像参考
final_resizer.webp
Resizer 后提取图像参考
synth_check.txt
综合警告/错误消息
antenna.log
天线检查日志
final_placement.webp
最终布局后提取图像
final.webp
布线后提取图像
synth_stat.txt
综合后设计统计日志

流程完成时创建合并最终 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。

ibex_final_db

图 10-1:ibex 最终数据库版图(布线后 DEF)

图中要点:

  • • 展示 ibex 布线后 DEF 版图。
  • • 用于检查 最终布局、布线和宏/标准单元分布。

10.1 🔎 可视化设计对象与连接

左侧 Display Control 窗口显示 Layers、Nets、Instances、Blockages、Heatmaps 等对象的 颜色、可见性和选择选项。右侧 Inspector 窗口可检查选中对象详情和时序报告。可选择性显示/隐藏对象并观察影响。

10.2 🌳 追踪时钟树

通过 Windows → Clock Tree Viewer 打开时钟树查看器,点击 Update 查看综合时钟树;查看结构时可在左侧禁用金属 Layers。

cts_viewer

图 10-2:Clock Tree Viewer 菜单入口

图中要点:

  • • 展示 Clock Tree Viewer 菜单位置。
  • • 用于 打开时钟树查看器并更新时钟树。
ibex_clock_tree

图 10-3:ibex 综合时钟树

图中要点:

  • • 展示 ibex 综合时钟树结构。
  • • 用于检查 缓冲器层次、时钟分支和时钟网络。

10.3 🌡️ 热图

通过 Tools → Heat Maps 可查看 Placement Density、Routing Congestion、Power Density 等热图;左侧 Display Control 可展开对应热图项并设置显示范围。具体操作 从略。

placement_heat_map

图 10-4:布局密度热图(Placement Heat Map)

图中要点:

  • • 展示 50%–100% 范围的布局密度热图。
  • • 用于 识别高密度区域和布局拥塞。
routing_heat_map

图 10-5:布线拥塞热图(Routing Congestion Heat Map)

图中要点:

  • • 展示 布线拥塞热图。
  • • 用于 定位全局布线资源紧张区域。
power_heat_map

图 10-6:功耗密度热图(Power Density Heat Map)

图中要点:

  • • 展示 功耗密度热图。
  • • 用于观察 高功耗区域和潜在热点。

10.4 ⏱️ 查看时序报告

通过 Timing → Options 打开时序报告视图,可选择 Paths 更新路径数量,并切换 Setup / Hold 标签查看每段路径的 required arrival time 和 slack。具体命令 从略。

Timing report option

图 10-7:时序报告入口

图中要点:

  • • 展示 Timing Report 入口/视图。
  • • 用于 打开时序路径查看界面。
Clock Path Update

图 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。

Ruler Tool

图 10-9:标尺工具(Ruler Tool)

图中要点:

  • • 展示 标尺工具。
  • • 示例中 VDD 与 VSS 层距离为 11.970。

10.6 🧭 DRC Viewer

可通过 Windows → DRC Viewer 加载 5_route_drc.rpt 追踪 DRC 违规。若有违规会记录在报告中,否则为空。具体加载与修复命令 从略。

DRC Report Load

图 10-10:DRC 报告加载(DRC Report Load)

图中要点:

  • • 展示 DRC 报告加载入口。
  • • 用于将 DRC 报告载入 GUI 并定位违规。
gcd DRC issue load

图 10-11:gcd 设计 DRC 违规加载

图中要点:

  • • 展示 gcd 设计 DRC 违规加载结果。
  • • X 标记在设计中标出 DRC 违规位置。
View DRC Violation

图 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。具体脚本 从略。

Default GUI

图 10-13:默认 OpenROAD GUI

图中要点:

  • • 展示 默认 OpenROAD GUI。
  • • 用于说明 自定义工具栏按钮的起点。
Load LEF toolbar button

图 10-14:Load_LEF 工具栏按钮

图中要点:

  • • 展示 新增的 Load_LEF 按钮。
  • • 用于说明 GUI 工具栏定制结果。
sky130 LEF file load

图 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 综合结果对比:

Synthesis Statistics
ABC_SPEED
ABC_AREA
Number of wires
224
224
Number of wire bits
270
270
Number of cells
234
234
Chip area
2083.248000
2083.248000
Final Design Area
Design area 4295 u^2 6% utilization.
Design area 4074 u^2 6% utilization.

📌 注意:面积优化结果最好在布局规划后检查最终影响。先放宽 .sdc 约束再重跑 观察面积影响;否则 repair design 命令会为满足时序增加面积。

11.2 🏗️ 布局规划

布局规划可基于 core/die 绝对坐标,也可基于 core 利用率。参考 init_floorplan1.tcl / init_floorplan2.tcl,具体命令 从略。

Absolute Floorplan

图 11-1:绝对坐标布局规划(Absolute Floorplan)

图中要点:

  • • 展示 绝对 die/core 坐标定义的布局规划。
  • • 用于理解 die 与 core 区域关系。
Relative Floorplan

图 11-2:相对利用率布局规划(Relative Floorplan)

图中要点:

  • • 展示 按核心利用率生成的布局规划。
  • • 用于比较 绝对坐标与利用率驱动方式。

11.3 📍 IO 引脚放置

引脚放置在 die 边界的 track grid 上,以最小化线长,并按 min-area 规则 创建金属形状。参考 place_pin4.tcl,具体命令 从略。

place_pin

图 11-3:引脚放置(Place Pin)

图中要点:

  • • 展示 引脚在 die 边界的放置结果。
  • • 用于检查 引脚分布和金属形状。
pin_zoom

图 11-4:框选缩放引脚

图中要点:

  • • 展示 框选缩放操作。
  • • 用于 定位特定引脚区域。
pin_zoomed

图 11-5:放大后的 clk 引脚

图中要点:

  • • 展示 放大后的 clk 引脚。
  • • 用于检查 引脚形状与边界对齐。

11.4 🔲 芯片级 IO Pad 放置

使用 Tcl 脚本为 coyote 设计生成 I/O pad ring。ICeWall 用于围绕设计外围放置 IO 单元,并与网表中的 IO 单元关联。参考 skywater130_coyote_tc.tcl,具体命令 从略。

coyote pad ring

图 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,具体命令 从略。

gcd PDN GUI

图 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,具体命令 从略。

Tapcell insertion representation

图 11-8:Tapcell 插入表示(基本)

图中要点:

  • • 展示 tapcell/endcap 插入的基本表示。
  • • 用于理解 行端和规则间隔放置。
Tapcell insertion around macro representation

图 11-9:宏单元周围 Tapcell 插入表示

图中要点:

  • • 展示 宏单元周围 tapcell 插入表示。
  • • 用于理解 宏周边规则和边界处理。
Tap_Cell_Insertion

图 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 的对比如下。

With density 0.7

图 11-11:布局密度 0.7

图中要点:

  • • 展示 密度 0.7 下宏单元与标准单元整体布局。
  • • 用于比较 不同密度对核心区利用的影响。
Zoomed view of macro and std cell placement

图 11-12:密度 0.7 局部视图

图中要点:

  • • 展示 宏单元与标准单元局部摆放。
  • • 用于检查 通道和局部密度。
With density 0.6

图 11-13:布局密度 0.6

图中要点:

  • • 展示 密度 0.6 下整体布局。
  • • 用于观察 标准单元更分散的布局效果。
Zoomed view of macro and std cell placement

图 11-14:密度 0.6 局部视图

图中要点:

  • • 展示 密度 0.6 下宏与标准单元局部。
  • • 用于比较 局部拥塞变化。

带 halo 间距的宏单元放置:参考 mpl/test,通过 macro_placement -halo {0.5 0.5} 在宏周围增加 0.5 微米 H/V halo,改善布线资源。具体命令 从略。

gcd without halo spacing

图 11-15:无 halo 间距的 gcd 宏放置

图中要点:

  • • 展示 无 halo 时宏单元间距。
  • • 用于对比 布线资源影响。
gcd with halo spacing

图 11-16:带 0.5 微米 halo 的 gcd 宏放置

图中要点:

  • • 展示 带 0.5 微米 halo 的宏放置。
  • • 用于 改善宏周围布线资源。

定义布局密度:修改 ibex config.mk 中 CORE_UTILIZATION = 40 和 PLACE_DENSITY_LB_ADDON = 0.1 后重跑,具体命令 从略。

ibex placement density 60

图 11-17:ibex 布局密度 60

图中要点:

  • • 展示 ibex 布局密度 60 的视图。
  • • 用于观察 默认布局密度效果。
ibex placement density 50

图 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,具体命令与参数 从略。

Layout before CTS

图 11-19:CTS 前版图

图中要点:

  • • 展示 CTS 前时钟网络和单元布局。
  • • 用于对比 CTS 后缓冲器插入效果。
Layout after CTS

图 11-20:CTS 后版图

图中要点:

  • • 展示 CTS 后时钟缓冲器和网络。
  • • 用于检查 时钟树构建结果。
Unbalanced Clock tree

图 11-21:不平衡时钟树

图中要点:

  • • 展示 未平衡时钟树结构。
  • • 用于说明 CTS 前的分支不平衡。
Balanced Clock Tree

图 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,具体命令 从略。

Without_Fill_Cell_Insertion

图 11-23:未插入填充单元的布局

图中要点:

  • • 展示 未插入 filler 的布局空隙。
  • • 用于对比 填充单元效果。
Fill_Cell_Insertion

图 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。

Global Route

图 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。

Detail Routing

图 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 配置文件 驱动。具体命令 从略。

Detail Routing

图 11-27:金属填充前的布线版图

图中要点:

  • • 展示 金属填充前的布线版图。
  • • 用于对比 填充后金属密度。
Metal Fill

图 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,具体命令 从略。

Routing_Congestion

图 12-1:布线拥塞导致失败

图中要点:

  • • 展示 布线拥塞导致失败的版图。
  • • 用于 定位拥塞区域。
congestion_heatmap

图 12-2:布线拥塞热图

图中要点:

  • • 展示 布线拥塞热图。
  • • 用于分析 GCell 资源与需求不匹配区域。

12.1 📝 导出拥塞信息到文本文件

可在 global_route 命令中加入 -congestion_report_file 导出拥塞报告;具体参数 从略。

12.2 📍 将溢出 GCell 可视化为标记

加载拥塞报告后,DRC Viewer 可显示拥塞 GCell 摘要并在 GUI 中加入标记;在 Inspector 窗口可查看布线资源详情,使用 zoom_to 放大。具体操作 从略。

GCell_marker

图 12-3:GCell 拥塞标记

图中要点:

  • • 展示 拥塞 GCell 标记。
  • • 用于在版图中 定位溢出区域。
zoom_options

图 12-4:Inspector 缩放选项

图中要点:

  • • 展示 Inspector 中的缩放选项。
  • • 用于 放大查看特定 GCell。
zoomto_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。 🚀

 


【声明】内容源于网络
0
0
ai算法芯片与系统
长期关注ai领域,算法,芯片,软件(系统,框架,编译器,算子库)等联合设计
内容 245
粉丝 0
ai算法芯片与系统 长期关注ai领域,算法,芯片,软件(系统,框架,编译器,算子库)等联合设计
总阅读7.4k
粉丝0
内容245