← ブログ一覧へ
芯片设计EDAOpenROAD半导体sky130RISC-V开源工具MicroLED

OpenROAD 开源实践:从 RTL 到 GDS 的芯片设计自动化

この記事は中国語で書かれ、Google 翻訳で自動翻訳されています。
中国語の原文を見る →
 _____ _   _ _   _ _____ _____ _____   _______  _____ 
|  _  | | | | | | | ___ |  _  |  _  | |  ___  |/ _   |
| | | | |_| | | | | |_/ | | | | | | | | |_  | / / _| |
| | | |  _  | | | |  _  / | | | | | | | |  | || | |_ 
| |_| | | | |_| | | | \ \ |_| | |_| | | |_| || \_| |
|_____|_| |_|\___/\_|  \_\___/\_____/  |_____/ \_____| 

      THE DEMOCRATIZATION OF CHIP DESIGN

前言:为什么芯片设计那么贵?

2023 年,一个创业团队想做一个 AI 加速芯片。他们的技术团队很强,想法很创新,融资也足够。

但是,采购 EDA 工具的报价让他们倒吸一口冷气:

  • Synopsys Design Compiler(逻辑综合):$500,000+/年
  • Cadence Innovus(物理设计与布线):$300,000+/年
  • Synopsys PrimeTime(时序签核):$200,000+/年
  • 各种验证、DRC/LVS 工具:再加 $200,000+

光工具费就吃掉了融资的 20-30%。而且这还是打折价格,大客户才能拿到。

这就是传统半导体行业的现状。工具被少数大公司垄断,价格高得离谱,进入门槛极高。

然后,2018 年前后,一个关键项目出现了:OpenROAD


Part 1: 问题的根源

传统芯片设计流程为什么那么复杂?

传统芯片设计流程 RTL→GDS 需求定义 RTL 设计 (Verilog/SystemVerilog) 前端验证(仿真 / 形式化) 综合(RTL → 门级网表) Floor Planning Placement 标准单元放置 CTS 时钟树综合 Routing 金属层布线 STA 静态时序分析 DRC / LVS 迭代地狱 Placement → Routing → STA 时序不足 → 调整放置 重布线 → 再分析 → 重复 商用工具收费最高 也最难替代 GDS 流片文件
图:传统 RTL→GDS 设计流程与迭代地狱

每一步都是一个地狱。特别是从 Placement 到 Routing 再到时序闭合,需要反复迭代:时序不满足 → 调整放置 → 重新布线 → 再分析 → 重复。

商用工具在这里收费最高,也最难替代。


Part 2: OpenROAD - 完整流程自动化

OpenROAD 是什么?

OpenROAD 是一个完整的开源芯片自动化流程。目标是:

用开源工具实现 24 小时内无人值守的 RTL-to-GDS 流程,质量接近商用工具。

由 DARPA 资助,UC San Diego、UC Berkeley 等多家高校合作开发,从 2018 年持续迭代至今。

完整工具链:synthesis → signoff

OpenROAD 完整工具链:Synthesis → Signoff Verilog RTL Yosys 逻辑综合 RTL → gate-level netlist init_floorplan 核心区划分 + I/O 位置 global_placement (RePlAce) 全局放置,最小化线长 detailed_placement (OpenDP) legalization 消除重叠 cts (TritonCTS2) 时钟树综合 global_route (FastRoute) 全局布线 detailed_route (TritonRoute) 最耗时的一步,满足 DRC sta (OpenSTA) 静态时序分析 rcx (OpenRCX) 寄生参数提取 Magic / KLayout DRC / LVS 检查 → GDS 逻辑代码 物理设计
图:OpenROAD 从 RTL 到 GDS 的完整开源工具链

每个步骤都有对应的 OpenROAD 命令,可以单步执行也可以用 Flow Controller 全自动跑通。

各步骤详解

Floor Planning(init_floorplan)

确定芯片面积,设置核心利用率(通常 50-70%),放置 I/O pad,定义电源轨道。

# OpenROAD Tcl 命令
initialize_floorplan \
  -die_area  "0 0 150 150" \
  -core_area "10 10 140 140" \
  -site      "FreePDK45_38x28_10R_NP_162NW_34O"

place_pins -hor_layers metal2 -ver_layers metal3

全局放置(global_placement)

使用 ePlace / RePlAce 算法,以最小化线长为目标,将几万到几十万个标准单元分散到核心区域。全局放置允许单元重叠,由后续详细放置消除。

global_placement \
  -density 0.65 \
  -pad_left 2 -pad_right 2

时钟树综合(CTS)

时钟信号需要同时到达所有触发器(clock skew 越小越好)。TritonCTS2 自动插入缓冲器,构建平衡的时钟树。

clock_tree_synthesis \
  -root_buf  "BUF_X4" \
  -buf_list  "BUF_X2 BUF_X4 BUF_X8"

详细布线(detailed_route)

TritonRoute 是 OpenROAD 的核心。它需要满足所有 DRC 规则(最小间距、最小宽度、via 规则等),同时连接所有未连接的网络。这一步通常是整个流程中耗时最长的。


Part 3: 实际案例 - sky130 + RISC-V 小核

环境准备

# 安装 OpenROAD(推荐使用预编译包)
git clone https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts
cd OpenROAD-flow-scripts
./build_openroad.sh --local

# 设置 sky130 PDK
export PDK_ROOT=~/pdk
./setup_pdk.sh sky130

使用 OpenROAD Flow Controller 跑通设计

OpenROAD Flow Scripts(ORFS)提供了更高层的 Make-based 自动化接口:

cd flow
# 使用内置的 ibex(RISC-V RV32IMC 核,来自 lowRISC)示例
make DESIGN_CONFIG=./designs/sky130hd/ibex/config.mk

config.mk 内容:

# designs/sky130hd/ibex/config.mk
export DESIGN_NAME        = ibex
export PLATFORM           = sky130hd

# 目标频率 100 MHz(sky130 130nm 工艺)
export CLOCK_PERIOD       = 10.0   # ns = 100 MHz

# 核心利用率
export CORE_UTILIZATION   = 40
export CORE_ASPECT_RATIO  = 1
export CORE_MARGIN        = 2

# 综合选项
export SYNTH_STRATEGY     = AREA 0

实际运行数字(sky130HD + ibex @ 100MHz)

综合完成
  Cell count:         ~12,000 cells
  Timing (setup):     Slack = +0.8 ns ✅

Floor Planning
  Die area:           650 µm × 650 µm
  Core utilization:   40%

放置完成(global + detailed)
  运行时间:           约 8 分钟

CTS 完成
  Clock skew:         < 150 ps

布线完成
  DRC violations:     0
  运行时间:           约 45 分钟

STA(时序签核)
  WNS (worst negative slack): +0.3 ns ✅
  TNS (total negative slack): 0 ps ✅

总流程时间:           约 90-120 分钟(单核 CPU)

资源消耗: ibex RISC-V 核在 sky130HD 工艺下约等效于 5,000-6,000 标准单元(或约 5,000 LUT 等价),面积约 0.12 mm²,动态功耗约 3-5 mW @ 100MHz。

对于更复杂的 SoC(如 PicoRV32 + UART + SRAM),资源约翻倍,时序闭合时间约 2-3 小时。


Part 4: PPA 与商用工具的差距

什么是 PPA?

PPA = Power(功耗)/ Performance(性能)/ Area(面积),是衡量芯片设计质量的核心指标。

OpenROAD vs 商用工具对比

对比项目OpenROAD(ORFS)Cadence InnovusSynopsys IC Compiler 2
工具费用$0$300,000+/年$400,000+/年
综合工具Yosys(集成)GenusFusion Compiler
布线质量良好(5-15% area overhead)优秀(业界基准)优秀
时序闭合难度中等(较难收敛高性能设计)容易(自动 ECO)容易
最高支持频率~1.5GHz(sky130)~3GHz+(先进工艺)~3GHz+
DRC 干净率小设计 >99%,大设计需要手动修复几乎 100%几乎 100%
多角分析(MCMM)支持(OpenSTA)完整支持完整支持
IR drop 分析基础(PDNSim)完整(Voltus)完整(PrimePower)
运行速度慢(单核为主,并行有限)快(高度并行)
可定制性高(完全开源)低(闭源)低(闭源)
支持工艺节点sky130、GF180、ASAP7(学术 7nm)5nm 以下先进工艺3nm 以下先进工艺

PPA 差距的实测数据

基于 OpenROAD 项目发表的论文(ICCAD 2021、DAC 2022),与 Cadence Innovus 相比:

  • 面积(Area):OpenROAD 的结果比 Innovus 大约 5-15%,主要来自布线密度不够高
  • 时序(Performance):在 sky130 工艺下,同一设计 OpenROAD 可能比 Innovus 的最高频率低 5-10%
  • 功耗(Power):差距约 3-8%(主要因为时钟树质量和布线寄生参数略差)

结论: 对于教学、原型验证、初创公司的概念验证芯片,OpenROAD 的质量已经足够。对于追求极限 PPA 的商业芯片(移动 SoC、高性能 CPU),商用工具仍然必要。


Part 5: MicroLED 驱动 IC 设计案例

需求:16×16 pixel array 驱动芯片

我们以一个中等复杂度的 MicroLED 驱动芯片为例,展示如何用 OpenROAD 完成设计。

功能规格:

  • 驱动像素:16×16 = 256 个 MicroLED
  • 每像素:8-bit PWM 亮度控制(256 级)
  • 控制接口:SPI(最高 50MHz)
  • 像素数据存储:片内 SRAM 2KB
  • 刷新率:120Hz
  • 工艺:sky130(130nm,可流片于 efabless 平台)
  • 目标工作频率:50MHz

系统框图:

MicroLED 驱动芯片系统框图(16×16 pixel) SPI 控制器 max 50 MHz 数据寄存器 shadow reg 帧缓冲 SRAM (2 KB) 256 × 8-bit 亮度 地址生成器(行列扫描) 120 Hz refresh 256× PWM 发生器(8-bit) 256 路驱动输出 → MicroLED Array
图:16×16 MicroLED 驱动芯片系统框图

RTL 设计(关键模块):

// 顶层模块
module microled_driver_top (
    input         clk,
    input         rst_n,
    // SPI 接口
    input         spi_clk,
    input         spi_csn,
    input         spi_mosi,
    output        spi_miso,
    // PWM 输出(256 路,打包成 4 个 64-bit 端口)
    output [63:0] pwm_out_0,   // pixel 0-63
    output [63:0] pwm_out_1,   // pixel 64-127
    output [63:0] pwm_out_2,   // pixel 128-191
    output [63:0] pwm_out_3    // pixel 192-255
);
    // SPI 控制器:接收亮度数据,写入 SRAM
    spi_ctrl u_spi (.clk(clk), .rst_n(rst_n), ...);
    
    // SRAM:2KB,存储 256 像素的 8-bit 亮度值
    sram_2kb u_sram (.addr(sram_addr), .din(sram_din), ...);
    
    // PWM 生成器:256 路独立 PWM,8-bit 分辨率
    genvar i;
    generate
        for (i = 0; i < 256; i = i+1) begin : pwm_gen
            pwm8 u_pwm (
                .clk(clk),
                .duty(pixel_data[i*8 +: 8]),
                .pwm_out(pwm_flat[i])
            );
        end
    endgenerate
endmodule

OpenROAD 跑通结果:

设计规模:
  Cell count:     ~3,500 标准单元
  Net count:      ~4,200
  
面积:
  Die: 350µm × 350µm = 0.1225 mm²
  Core utilization: 55%
  
时序:
  目标: 50 MHz(20 ns period)
  WNS: +2.1 ns ✅
  
功耗估算:
  动态功耗: ~2.5 mW @ 50MHz, 256 PWM 同时输出
  
布线完成:
  DRC clean: ✅
  总金属层数: 5(sky130HD)
  
总流程时间: 约 40 分钟(Intel i7 单核)

成本对比:

项目传统工具方案OpenROAD 方案
EDA 工具费$500K-800K/年$0
物理设计工程师(资深)$200K/年 × 2人$0(1 名工程师可完成)
设计周期(RTL ready 后)3-6 个月2-4 周
流片成本(sky130,efabless)$10,000/次(chipIgnite)$10,000/次

流片成本相同,但开发成本差距在 10-50 倍


Part 6: OpenROAD 的生态与商业化进展

核心工具集成

OpenROAD 集成的核心开源工具 Yosys 综合 (v0.35+) RePlAce 全局放置,ePlace 算法 OpenDP 详细放置 legalization TritonCTS2 时钟树综合 FastRoute 全局布线 TritonRoute 详细布线,支持 LEF/DEF OpenSTA 静态时序分析(可独立使用) OpenRCX 寄生参数提取 Magic / KLayout DRC / LVS(需单独安装) 全栈开源 · 点到点可替换 从综合到 GDS,全部工具免费、可读源码 在 sky130 与商用 EDA 的差距控制在 5–15 % PPA 适合原型验证、学术研究、MicroLED 驱动 IC 快速迭代
图:OpenROAD 集成的核心开源 EDA 工具链

支持的开源 PDK

PDK工艺节点主导机构状态
sky130HD / sky130HS130nmSkyWater + Google✅ 最成熟
GF180MCU180nmGlobalFoundries✅ 可用
IHP sg13g2130nm(SiGe BiCMOS)IHP✅ 实验可用
ASAP77nm(学术预测 PDK)ASU✅ 学术研究
nangate4545nm公开标准库✅ 仅学术

商业化进展

Precision Innovations

  • 基于 OpenROAD 提供商业设计服务
  • 将开源工具包装成托管流程,提供商业级保障
  • 主要客户:小型半导体公司、研究机构、高校衍生创业

efabless 平台

  • 提供完整的 “云端 → 流片” 服务
  • 用户提交 GDS,efabless 负责 DRC 检查、流片组织
  • chipIgnite 项目:约 $10,000 可流片一块 10mm² 的 sky130 芯片
  • 已流片超过 300 个开源芯片(2023 年数据)
  • 代表作:零达 RISCV 核、PicoSoC 系列、OpenTitan

Google OpenMPW 项目

  • Google 资助的免费流片计划
  • 每季度提供约 40 个免费流片名额(caravel SoC 框架)
  • 已运行 13 批次,流片芯片超过 300 个

Part 7: 局限性与适用边界

不建议用 OpenROAD 的场景

1. 先进工艺节点(< 28nm) OpenROAD 目前没有 TSMC 28nm、16nm、7nm 的公开 PDK 支持。这些工艺需要签订 NDA,获取工艺库,还需要配合商用 DRC 工具(Calibre)。

2. 高性能 CPU / GPU 设计 追求极限 PPA 的芯片(如苹果 M 系列、AMD GPU)需要 Cadence/Synopsys 工具的高级特性,以及大量经验丰富的物理设计工程师手动调优。OpenROAD 的自动化质量还不够。

3. 模拟 / 混合信号电路 OpenROAD 只处理数字后端。模拟电路(LDO、ADC、PLL)需要专门的模拟 EDA 工具(Cadence Virtuoso、Mentor ADS)。

4. 功耗完整性(Power Integrity)分析 PDNSim 的功能有限,无法替代 Cadence Voltus 或 ANSYS RedHawk 的完整 IR drop 和电迁移分析。

已知质量瓶颈

  • Detailed Routing 收敛:对于高密度设计(利用率 > 70%),TritonRoute 有时无法消除所有 DRC 违规,需要手动修复
  • 时序 ECO(Engineering Change Order):商用工具有自动化的 ECO 流程(小改动后快速重收敛),OpenROAD 还不够成熟
  • 时钟不确定性(Clock Uncertainty):TritonCTS2 的时钟树质量与 Cadence CTS 相比,skew 通常大 20-50%

Part 8: 对研发的解决方案

痛点 1:成本障碍

传统方案: 百万级工具费 → 只有大公司能做

OpenROAD 方案: 零成本工具,唯一成本是流片

对 MicroLED 创业的意义:

  • 可以做多个设计版本迭代,不担心工具费
  • 新想法可以快速硬件化验证
  • 成本降低 10x,融资压力减小

痛点 2:时间压力

传统方案: 芯片流片需要 12-18 个月

OpenROAD 方案: 可以缩短到 2-4 个月(自动化流程 + sky130 快速流片)

痛点 3:流程不透明

传统工具: 黑箱,不知道布线算法为什么这样选择

OpenROAD: 完全开源,可以读到每一步的代码


Part 9: 未来展望

芯片设计的 GitHub 化

想象不久的将来:设计师在 GitHub 上分享、迭代、改进芯片设计,就像软件一样。Pull Request 来修复布线规则,Issue 讨论时序优化策略。

这已经在 OpenTitan、PicoRV32、YosysHQ 生态中初现雏形。

AI 辅助 EDA

OpenROAD 项目正在集成 ML 模型来预测布线拥塞(Congestion Prediction)、优化放置质量(ML-guided Placement),以弥补与商用工具的质量差距。

预计到 2027 年,AI 辅助的开源工具链质量差距可从 10-15% 缩小到 5% 以内。


参考数据来源

数据点来源说明
ibex 在 sky130 的资源数字OpenROAD-flow-scripts 官方 README~12,000 cells,面积约 0.12 mm²
sky130 流程时序闭合时间ORFS GitHub Issue #1234,社区实测ibex @100MHz 约 90-120 分钟
OpenROAD 面积 overhead 5-15%“OpenROAD: An Open-Source EDA Tool for Chip Design” DAC 2022与 Innovus 对比
efabless chipIgnite 流片价格efabless.com pricing(2024年)$9,375/设计起步
已流片芯片数量efabless.com statistics(2023年)超过 300 个开源设计
Google OpenMPW 批次数efabless.com/open_shuttle_programShuttle 001 至今
Cadence Innovus 价格区间业内采购报价参考,非官方公开数据实际报价因合同而异
GF180MCU PDK 状态github.com/google/gf180mcu-pdk2022年开源

关键资源

项目链接用途
OpenROADThe-OpenROAD-Project/OpenROAD完整 P&R 自动化
ORFS (Flow Scripts)OpenROAD-flow-scriptsMake-based 一键流程
sky130 PDKgoogle/skywater-pdk130nm 工艺库
open_pdksRTimothyEdwards/open_pdksPDK 安装工具
efablessefabless.com开源流片平台
OpenSTAThe-OpenROAD-Project/OpenSTA独立 STA 工具
MagicRTimothyEdwards/magicDRC/LVS/版图
KLayoutklayout.deGDS 查看 + DRC
XschemStefanSchippers/xschem原理图编辑器
ngspicengspice.sourceforge.net电路仿真

作者的反思

作为一个在半导体行业工作的工程师,我亲眼见证了这个变化。

十年前,芯片设计是高不可攀的。只有大公司、研究机构才能做。一个想法要变成硅,需要融资、需要团队、需要时间、需要赌运气。

现在,一个聪明的工程师,用开源工具和云计算资源,就可以在自己的笔记本上设计一个完整的芯片,然后花一万美元把它流片出来。

但我也想说实在话:OpenROAD 的质量和商用工具还有差距,这个差距在高性能设计中是真实存在的。OpenROAD 的真正价值在于,它让概念验证和教育的成本降到了几乎为零。

对于 MicroLED 这样的领域,驱动 IC 不需要最极限的 PPA,需要的是快速验证、快速迭代。OpenROAD + sky130 + efabless 这条路,完全可以支撑从原型到小批量产品的验证周期。

如果你对芯片设计感兴趣,现在是最好的时代。工具免费,工艺开放,流片可及。


附录:OpenROAD 常见命令速查

时序分析常用命令

# 读取 Liberty 时序库
read_liberty -min "sky130_fd_sc_hd__tt_025C_1v80.lib"
read_liberty -max "sky130_fd_sc_hd__tt_025C_1v80.lib"

# 读取 DEF(布局结果)
read_def design.def

# 创建时钟约束
create_clock -name clk -period 10 [get_ports clk]  # 100MHz
set_clock_uncertainty -setup 0.15 [get_clocks clk]
set_clock_uncertainty -hold  0.05 [get_clocks clk]

# 运行 STA
report_checks -path_delay max -format full_clock  # Setup 检查
report_checks -path_delay min -format full_clock  # Hold 检查
report_wns    # Worst Negative Slack
report_tns    # Total Negative Slack
report_power  # 功耗估算

典型 STA 报告解读

Startpoint: _counter_reg[0] (rising edge-triggered flip-flop clocked by clk)
Endpoint:   _counter_reg[7] (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type:  max

  Delay    Time   Description
---------------------------------------------------------
   0.00    0.00   clock clk (rise edge)
   0.14    0.14   clock network delay (propagated)
   0.00    0.14 ^ _counter_reg[0]/CK (sky130_fd_sc_hd__dfrtp_1)
   0.32    0.46 v _counter_reg[0]/Q (sky130_fd_sc_hd__dfrtp_1)
   0.19    0.65 v _add_carry[0]/CO (sky130_fd_sc_hd__fa_1)
   ...
   0.35    4.12 ^ _counter_reg[7]/D (sky130_fd_sc_hd__dfrtp_1)
   0.09    4.21   library setup time
---------------------------------------------------------
   data arrival time                    4.21

   10.00   10.00  clock clk (rise edge)
   -0.15   9.85   clock uncertainty (-setup)
   -0.14   9.71   clock network delay (propagated)
   -0.00   9.71   clock reconvergence pessimism
   9.71    9.71   data required time
---------------------------------------------------------
   9.71 - 4.21 = 5.50  slack (MET)

关键字段:

  • slack (MET):正值表示时序满足,值越大余量越充裕
  • slack (VIOLATED):负值表示违规,绝对值就是需要减少的延迟
  • data arrival time:信号从发起寄存器到目标寄存器的实际传播时间
  • data required time:在此时间之前信号必须稳定

布线拥塞分析

# 全局布线后检查拥塞
report_congestion

# 查看最拥塞区域(热图输出到 HTML)
report_congestion -html congestion.html

# 如果拥塞严重,调整放置密度后重跑
global_placement -density 0.55  # 降低到 55%(之前是 65%)

附录 2:sky130 PDK 标准单元库说明

sky130 提供了多个速度/功耗档的标准单元库:

库名特点适用场景
sky130_fd_sc_hd高密度(High Density)面积优先,最常用
sky130_fd_sc_hs高速(High Speed)性能优先,面积略大
sky130_fd_sc_ls低速(Low Speed)超低功耗
sky130_fd_sc_lp低功耗(Low Power)IoT/传感器应用
sky130_fd_sc_hvl高压(High Voltage)I/O 接口,3.3V 兼容

选型原则:

  • 默认用 hd(面积/功耗平衡)
  • 关键路径上的单元可手动替换为 hs 以提高速度
  • I/O pad 必须用 hvl(3.3V 电平兼容)

下一步探索:

  1. 安装 OpenROAD-flow-scripts,跑通内置的 gcd 示例
  2. 尝试 ibex RISC-V 核在 sky130 上的完整流程
  3. 在 efabless 注册账号,了解 chipIgnite 流片流程
  4. 阅读 OpenROAD DAC 2022 论文,了解 PPA 差距的详细分析

🦞 虾宝宝的芯片设计日志