1. OpenROAD README.md
关于 OpenROAD
OpenROAD 是领先的半导体数字设计开源基础应用。OpenROAD 流程提供自主的、"无人在环路"(NHIL,No-Human-In-Loop)的设计流程,可在 24 小时内完成从 RTL 到 GDSII 的周转,用于快速的设计探索与物理设计实现。
#mermaid-svg-IyC2CRaJsQhtsrae{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:20px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IyC2CRaJsQhtsrae .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IyC2CRaJsQhtsrae .error-icon{fill:#552222;}#mermaid-svg-IyC2CRaJsQhtsrae .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IyC2CRaJsQhtsrae .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IyC2CRaJsQhtsrae .marker{fill:#666;stroke:#666;}#mermaid-svg-IyC2CRaJsQhtsrae .marker.cross{stroke:#666;}#mermaid-svg-IyC2CRaJsQhtsrae svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:20px;}#mermaid-svg-IyC2CRaJsQhtsrae p{margin:0;}#mermaid-svg-IyC2CRaJsQhtsrae .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#000000;}#mermaid-svg-IyC2CRaJsQhtsrae .cluster-label text{fill:#333;}#mermaid-svg-IyC2CRaJsQhtsrae .cluster-label span{color:#333;}#mermaid-svg-IyC2CRaJsQhtsrae .cluster-label span p{background-color:transparent;}#mermaid-svg-IyC2CRaJsQhtsrae .label text,#mermaid-svg-IyC2CRaJsQhtsrae span{fill:#000000;color:#000000;}#mermaid-svg-IyC2CRaJsQhtsrae .node rect,#mermaid-svg-IyC2CRaJsQhtsrae .node circle,#mermaid-svg-IyC2CRaJsQhtsrae .node ellipse,#mermaid-svg-IyC2CRaJsQhtsrae .node polygon,#mermaid-svg-IyC2CRaJsQhtsrae .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-svg-IyC2CRaJsQhtsrae .rough-node .label text,#mermaid-svg-IyC2CRaJsQhtsrae .node .label text,#mermaid-svg-IyC2CRaJsQhtsrae .image-shape .label,#mermaid-svg-IyC2CRaJsQhtsrae .icon-shape .label{text-anchor:middle;}#mermaid-svg-IyC2CRaJsQhtsrae .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IyC2CRaJsQhtsrae .rough-node .label,#mermaid-svg-IyC2CRaJsQhtsrae .node .label,#mermaid-svg-IyC2CRaJsQhtsrae .image-shape .label,#mermaid-svg-IyC2CRaJsQhtsrae .icon-shape .label{text-align:center;}#mermaid-svg-IyC2CRaJsQhtsrae .node.clickable{cursor:pointer;}#mermaid-svg-IyC2CRaJsQhtsrae .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-svg-IyC2CRaJsQhtsrae .arrowheadPath{fill:#333333;}#mermaid-svg-IyC2CRaJsQhtsrae .edgePath .path{stroke:#666;stroke-width:2.0px;}#mermaid-svg-IyC2CRaJsQhtsrae .flowchart-link{stroke:#666;fill:none;}#mermaid-svg-IyC2CRaJsQhtsrae .edgeLabel{background-color:white;text-align:center;}#mermaid-svg-IyC2CRaJsQhtsrae .edgeLabel p{background-color:white;}#mermaid-svg-IyC2CRaJsQhtsrae .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-svg-IyC2CRaJsQhtsrae .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-svg-IyC2CRaJsQhtsrae .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-svg-IyC2CRaJsQhtsrae .cluster text{fill:#333;}#mermaid-svg-IyC2CRaJsQhtsrae .cluster span{color:#333;}#mermaid-svg-IyC2CRaJsQhtsrae div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IyC2CRaJsQhtsrae .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-svg-IyC2CRaJsQhtsrae rect.text{fill:none;stroke-width:0;}#mermaid-svg-IyC2CRaJsQhtsrae .icon-shape,#mermaid-svg-IyC2CRaJsQhtsrae .image-shape{background-color:white;text-align:center;}#mermaid-svg-IyC2CRaJsQhtsrae .icon-shape p,#mermaid-svg-IyC2CRaJsQhtsrae .image-shape p{background-color:white;padding:2px;}#mermaid-svg-IyC2CRaJsQhtsrae .icon-shape .label rect,#mermaid-svg-IyC2CRaJsQhtsrae .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-svg-IyC2CRaJsQhtsrae .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IyC2CRaJsQhtsrae .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IyC2CRaJsQhtsrae :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ORFlow
FLOW
逻辑综合
布图规划
布局
时钟树综合
布线
收尾
Verilog
-
库文件
-
约束
GDSII
最终版图
OpenROAD 的使命
OpenROAD 旨在消除硬件设计中的成本、进度风险与不确定性壁垒,促进快速、低成本的 IC 设计软件与专业知识的开放获取,推动系统创新。OpenROAD 应用通过提供 Tcl 与 Python 绑定的 API,实现灵活的流程控制。
OpenROAD 已被应用于科研与商业项目,例如:
- 来自 OpenROAD 的
OpenROAD-flow-scripts - 来自 Efabless 的
OpenLane - 来自 Zero ASIC 的
Silicon Compiler - 来自 UC Berkeley 的
Hammer - 来自 IDEA-FASoC 的
OpenFASoC,用于混合信号设计流程
OpenROAD 通过软件开发与关键联盟中的积极协作与伙伴关系,培育了一个充满活力的用户生态系统。我们不断壮大的用户社区包括硬件设计师、软件工程师、业界合作者、VLSI 爱好者、学生与研究人员。
OpenROAD 大力倡导并支持以 IC 设计为基础的教育与人才培养计划,方式包括:在全球多所大学开设培训内容与课程;Google-SkyWater 穿梭流片(shuttle)计划(还包括 GlobalFoundries 穿梭流片);设计竞赛;以及 IC 设计研讨会。迄今为止,OpenROAD 流程已成功用于超过 600 次"硅就绪"(silicon-ready)流片,工艺节点最高达 12nm。
使用 OpenROAD-flow-scripts 入门
OpenROAD 提供 OpenROAD-flow-scripts 作为原生的、开箱即用的原型验证与流片流程。不过,它也支持基于底层工具、数据库与分析引擎创建任意的自定义流程控制器。请参阅此处的流程文档。
OpenROAD-flow-scripts(ORFS)是一个完全自主的 RTL-GDSII 流程,用于快速的架构与设计空间探索、QoR(结果质量)的早期预测,以及详细的物理设计实现。同时,ORFS 也允许通过 Tcl 命令与 Python API 进行人工干预,以便用户对各个流程阶段进行更精细的控制。
下图展示了 OpenROAD-flow-scripts 的主要阶段:
#mermaid-svg-OHMGtEX99qF319vc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OHMGtEX99qF319vc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OHMGtEX99qF319vc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OHMGtEX99qF319vc .error-icon{fill:#a44141;}#mermaid-svg-OHMGtEX99qF319vc .error-text{fill:#ddd;stroke:#ddd;}#mermaid-svg-OHMGtEX99qF319vc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OHMGtEX99qF319vc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OHMGtEX99qF319vc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OHMGtEX99qF319vc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OHMGtEX99qF319vc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OHMGtEX99qF319vc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OHMGtEX99qF319vc .marker{fill:lightgrey;stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .marker.cross{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OHMGtEX99qF319vc p{margin:0;}#mermaid-svg-OHMGtEX99qF319vc .edge{stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .section--1 rect,#mermaid-svg-OHMGtEX99qF319vc .section--1 path,#mermaid-svg-OHMGtEX99qF319vc .section--1 circle,#mermaid-svg-OHMGtEX99qF319vc .section--1 path{fill:#1f2020;}#mermaid-svg-OHMGtEX99qF319vc .section--1 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon--1{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge--1{stroke:#1f2020;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth--1{stroke-width:17;}#mermaid-svg-OHMGtEX99qF319vc .section--1 line{stroke:#e0dfdf;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-0 rect,#mermaid-svg-OHMGtEX99qF319vc .section-0 path,#mermaid-svg-OHMGtEX99qF319vc .section-0 circle,#mermaid-svg-OHMGtEX99qF319vc .section-0 path{fill:#0b0000;}#mermaid-svg-OHMGtEX99qF319vc .section-0 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-0{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-0{stroke:#0b0000;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-0{stroke-width:14;}#mermaid-svg-OHMGtEX99qF319vc .section-0 line{stroke:#f4ffff;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-1 rect,#mermaid-svg-OHMGtEX99qF319vc .section-1 path,#mermaid-svg-OHMGtEX99qF319vc .section-1 circle,#mermaid-svg-OHMGtEX99qF319vc .section-1 path{fill:#4d1037;}#mermaid-svg-OHMGtEX99qF319vc .section-1 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-1{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-1{stroke:#4d1037;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-1{stroke-width:11;}#mermaid-svg-OHMGtEX99qF319vc .section-1 line{stroke:#b2efc8;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-2 rect,#mermaid-svg-OHMGtEX99qF319vc .section-2 path,#mermaid-svg-OHMGtEX99qF319vc .section-2 circle,#mermaid-svg-OHMGtEX99qF319vc .section-2 path{fill:#3f5258;}#mermaid-svg-OHMGtEX99qF319vc .section-2 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-2{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-2{stroke:#3f5258;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-2{stroke-width:8;}#mermaid-svg-OHMGtEX99qF319vc .section-2 line{stroke:#c0ada7;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-3 rect,#mermaid-svg-OHMGtEX99qF319vc .section-3 path,#mermaid-svg-OHMGtEX99qF319vc .section-3 circle,#mermaid-svg-OHMGtEX99qF319vc .section-3 path{fill:#4f2f1b;}#mermaid-svg-OHMGtEX99qF319vc .section-3 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-3{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-3{stroke:#4f2f1b;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-3{stroke-width:5;}#mermaid-svg-OHMGtEX99qF319vc .section-3 line{stroke:#b0d0e4;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-4 rect,#mermaid-svg-OHMGtEX99qF319vc .section-4 path,#mermaid-svg-OHMGtEX99qF319vc .section-4 circle,#mermaid-svg-OHMGtEX99qF319vc .section-4 path{fill:#6e0a0a;}#mermaid-svg-OHMGtEX99qF319vc .section-4 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-4{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-4{stroke:#6e0a0a;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-4{stroke-width:2;}#mermaid-svg-OHMGtEX99qF319vc .section-4 line{stroke:#91f5f5;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-5 rect,#mermaid-svg-OHMGtEX99qF319vc .section-5 path,#mermaid-svg-OHMGtEX99qF319vc .section-5 circle,#mermaid-svg-OHMGtEX99qF319vc .section-5 path{fill:#3b0048;}#mermaid-svg-OHMGtEX99qF319vc .section-5 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-5{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-5{stroke:#3b0048;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-5{stroke-width:-1;}#mermaid-svg-OHMGtEX99qF319vc .section-5 line{stroke:#c4ffb7;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-6 rect,#mermaid-svg-OHMGtEX99qF319vc .section-6 path,#mermaid-svg-OHMGtEX99qF319vc .section-6 circle,#mermaid-svg-OHMGtEX99qF319vc .section-6 path{fill:#995a01;}#mermaid-svg-OHMGtEX99qF319vc .section-6 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-6{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-6{stroke:#995a01;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-6{stroke-width:-4;}#mermaid-svg-OHMGtEX99qF319vc .section-6 line{stroke:#66a5fe;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-7 rect,#mermaid-svg-OHMGtEX99qF319vc .section-7 path,#mermaid-svg-OHMGtEX99qF319vc .section-7 circle,#mermaid-svg-OHMGtEX99qF319vc .section-7 path{fill:#154706;}#mermaid-svg-OHMGtEX99qF319vc .section-7 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-7{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-7{stroke:#154706;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-7{stroke-width:-7;}#mermaid-svg-OHMGtEX99qF319vc .section-7 line{stroke:#eab8f9;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-8 rect,#mermaid-svg-OHMGtEX99qF319vc .section-8 path,#mermaid-svg-OHMGtEX99qF319vc .section-8 circle,#mermaid-svg-OHMGtEX99qF319vc .section-8 path{fill:#161722;}#mermaid-svg-OHMGtEX99qF319vc .section-8 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-8{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-8{stroke:#161722;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-8{stroke-width:-10;}#mermaid-svg-OHMGtEX99qF319vc .section-8 line{stroke:#e9e8dd;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-9 rect,#mermaid-svg-OHMGtEX99qF319vc .section-9 path,#mermaid-svg-OHMGtEX99qF319vc .section-9 circle,#mermaid-svg-OHMGtEX99qF319vc .section-9 path{fill:#00296f;}#mermaid-svg-OHMGtEX99qF319vc .section-9 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-9{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-9{stroke:#00296f;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-9{stroke-width:-13;}#mermaid-svg-OHMGtEX99qF319vc .section-9 line{stroke:#ffd690;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-10 rect,#mermaid-svg-OHMGtEX99qF319vc .section-10 path,#mermaid-svg-OHMGtEX99qF319vc .section-10 circle,#mermaid-svg-OHMGtEX99qF319vc .section-10 path{fill:#01629c;}#mermaid-svg-OHMGtEX99qF319vc .section-10 text{fill:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .node-icon-10{font-size:40px;color:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .section-edge-10{stroke:#01629c;}#mermaid-svg-OHMGtEX99qF319vc .edge-depth-10{stroke-width:-16;}#mermaid-svg-OHMGtEX99qF319vc .section-10 line{stroke:#fe9d63;stroke-width:3;}#mermaid-svg-OHMGtEX99qF319vc .lineWrapper line{stroke:lightgrey;}#mermaid-svg-OHMGtEX99qF319vc .disabled,#mermaid-svg-OHMGtEX99qF319vc .disabled circle,#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:lightgray;}#mermaid-svg-OHMGtEX99qF319vc .disabled text{fill:#efefef;}#mermaid-svg-OHMGtEX99qF319vc .section-root rect,#mermaid-svg-OHMGtEX99qF319vc .section-root path,#mermaid-svg-OHMGtEX99qF319vc .section-root circle{fill:hsl(180, 1.5873015873%, 48.3529411765%);}#mermaid-svg-OHMGtEX99qF319vc .section-root text{fill:#2c2c2c;}#mermaid-svg-OHMGtEX99qF319vc .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-OHMGtEX99qF319vc .edge{fill:none;}#mermaid-svg-OHMGtEX99qF319vc .eventWrapper{filter:brightness(120%);}#mermaid-svg-OHMGtEX99qF319vc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 逻辑综合 输入 RTL, SDC, .lib, .lef 逻辑综合 (Yosys) 输出文件 网表, SDC 布图规划 布图初始化 IO 布局 (随机) 时序驱动的混合尺寸布局 宏单元布局 衬底接触单元(tapcell)与阱连接(welltie)插入 PDN 生成 布局 无已放置 IO 的全局布局 IO 布局 (优化) 含已放置 IO 的全局布局 尺寸调整与缓冲 详细布局 时钟树综合 CTS 时序优化 填充单元(filler cell)插入 布线 全局布线 详细布线 收尾 金属填充(Metal Fill)插入 签核时序报告 生成 GDSII (KLayout) DRC/LVS 检查 (KLayout) 使用 OpenROAD-flow-scripts 完成 RTL-GDSII
以下是使用 OpenROAD 进行物理设计实现的主要步骤:
布图规划(Floorplanning)- 布图初始化------定义芯片面积与利用率
- IO 引脚布局(适用于无焊盘(pad)的设计)
- 衬底接触单元与阱连接插入
- PDN------供电网络创建
全局布局(Global Placement)- 宏单元布局(RAM、嵌入式宏)
- 标准单元布局
- 针对最大转换时间(max slew)、最大电容、最大扇出违例与过长导线的自动布局优化与修复
详细布局(Detailed Placement)- 布局合法化------对齐网格、遵守设计规则
- 用于早期估计的增量式时序分析
时钟树综合(Clock Tree Synthesis)- 为高扇出网络插入缓冲器并调整尺寸
建立/保持时序优化(Optimize setup/hold timing)全局布线(Global Routing)- 天线效应修复
- 生成布线引导
详细布线(Detailed Routing)- 布线合法化,执行 DRC 正确的布线以满足时序与功耗约束
芯片收尾(Chip Finishing)- 使用 OpenRCX 进行寄生参数提取
- 最终时序验证
- 最终物理验证
- 为可制造性插入虚拟金属填充(dummy metal fill)
- 使用 KLayout 或 Magic 对生成的 GDS 进行 DRC 签核
图形界面(GUI)
OpenROAD GUI 是一个功能强大的可视化、分析与调试工具,配有可定制的 Tcl 接口。下图展示了各个流程阶段的 GUI 视图,包括布图规划、布局拥塞、时钟树综合(CTS)与布线后的设计。
布图规划

自动层次化宏单元布局

布局拥塞可视化

时钟树综合(CTS)

布线

PDK 支持
OpenROAD 应用本身与 PDK(工艺设计套件)无关。不过,它已在各种流程控制器的上下文下,针对特定 PDK 进行了测试与验证。
OpenLane 支持 SkyWater 130nm 与 GlobalFoundries 180nm。
OpenROAD-flow-scripts 支持多个公有与私有 PDK,包括:
开源 PDK
GF180- 180nmSKY130- 130nmNangate45- 45nmASAP7- 预测性 FinFET 7nm
专有 PDK
这些 PDK 仅在 OpenROAD-flow-scripts 中受支持。它们用于对照商业平台测试和校准 OpenROAD,以确保良好的 QoR。由于保密协议(NDA)限制,无法提供这些套件的 PDK 及平台相关文件。不过,如果您能够独立获取这些平台的访问权限,可以自行创建所需的平台相关文件。
GF55- 55nmGF12- 12nmIntel22- 22nmIntel16- 16nmTSMC65- 65nm
流片
通过 Google 赞助的 Efabless MPW 穿梭流片与 ChipIgnite 计划,OpenROAD 已在 SKY130 与 GF180 工艺上完成了超过 600 次流片的完整物理实现。
GF12LP 工艺上的 OpenTitan SoC------使用 OpenROAD 进行物理设计与优化

将流片持续集成到 CI 中
OpenROAD 项目积极将成功流片的 MPW 穿梭设计纳入 CI 回归测试。设计实例包括:开源处理器内核、基于 RISC-V 的 SoC、加密货币矿机、机器人应用处理器、业余卫星无线电收发器、基于 OpenPower 的 Microwatt 等。
构建 OpenROAD
要在本地机器上构建 OpenROAD 工具,请按照此处的步骤操作。
第三方依赖:子模块 vs. Bazel BCR
OpenROAD 附带两套构建系统,它们获取第三方代码的方式不同:
- CMake :CMake 没有版本化依赖的中央注册库,因此第三方源码以 git 子模块的形式随附(vendor)在仓库中(参见
.gitmodules以及各子模块下嵌套的.gitmodules文件)。其中一些子模块看起来像 fork,但实际上只是锁定版本的上游代码树;它们的存在是为了让 CMake 有一个可指向的目录。这些是上游镜像------保留为子模块是因为这是 CMake 能够消费的形式。 - Bazel :按优先顺序,首选以下惯用方式:
- 来自 Bazel 中央注册库(BCR)的模块(
MODULE.bazel中的bazel_dep)。这是默认方式------版本锁定、有镜像、可复现,且无需子模块。 - 如果依赖不在 BCR 上,则直接使用
http_archive(首选)或模块扩展(module extension)拉取上游仓库。对于在 BCR 上存在但需要不同版本的模块,可以使用git_override(按提交锁定)或archive_override(按 URL + SHA256 锁定)。仅当上游未附带 BUILD 文件时才提供 BUILD 覆盖层。 - 真正的 fork(带有 OpenROAD 特定补丁)保留为 git 子模块,因为这也是 CMake 所需要的;Bazel 随后通过其本地路径引用它。
- 来自 Bazel 中央注册库(BCR)的模块(
经验法则:如果 Bazel 能从 BCR 或直接从上游仓库获取某个依赖,就不要仅为 Bazel 添加子模块。子模块是 CMake 一侧的折衷方案,而非 Bazel 构建的事实来源。
回归测试
./test/ 目录下有一组可执行的回归测试脚本。
shell
# 运行所有工具的测试
./test/regression
# 运行所有流程测试
./test/regression flow
# 运行 <tool> 的测试
./test/regression <tool>
# 运行某个 <tool> 的全部单元测试
cd src/<tool>
./test/regression
# 仅运行 <tool> 的 <TEST_NAME> 测试
cd src/<tool>
./test/regression <TEST_NAME>
流程测试会检查最差裕量(worst slack)等结果是否与参考值一致。使用 report_flow_metrics [test]... 可查看全部指标。
text
% 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
要更新失败的回归测试,请按以下说明操作:
tcl
# 更新日志文件(即 *ok 文件)
save_ok <TEST_NAME>
# 为使用流程测试的测试更新 "*.metrics" 文件
save_flow_metrics <TEST_NAME>
# 更新 "*.metrics_limits" 文件
save_flow_metrics_limits <TEST_NAME>
运行
text
openroad [-help] [-version] [-no_init] [-exit] [-gui]
[-threads count|max] [-log file_name] [-db file_name] cmd_file
-help 显示帮助并退出
-version 显示版本并退出
-no_init 不读取 .openroad 初始化文件
-threads count|max 使用 count 个线程
-no_splash 启动时不显示许可证启动画面
-exit 读取 cmd_file 后退出
-gui 以 GUI 模式启动
-python 以 Python 解释器启动 [仅限数据库操作]
-log <file_name> 将日志写入 <file_name>
-db <file_name> 启动时打开一个 .odb 数据库
cmd_file 加载并执行 cmd_file
除非指定了命令行选项 -no_init,OpenROAD 会加载 Tcl 命令文件 ~/.openroad。
随后,如果命令行上指定了 cmd_file,OpenROAD 会加载该命令文件。除非指定了 -exit 命令行标志,否则它会进入交互式 Tcl 命令解释器。
OpenROAD 应用所包含的可用工具/模块列表及其说明,请参阅此处。
Git 快速入门
OpenROAD 使用 Git 进行版本控制与代码贡献。
请参阅此处的贡献快速入门教程,熟悉相关流程。
理解警告与错误消息
遇到看不懂的 OpenROAD 警告或错误?我们编制了一张包含所有消息的表格,您或许可以在此处找到答案。
许可证
BSD 三条款许可证(BSD 3-Clause License)。详见
2. OpenROAD 中使用的软件
OpenROAD 是一个开源的 RTL-to-GDSII 数字芯片物理设计流程,由 DARPA IDEA 计划资助开发,目标是实现"24 小时内、无需人工干预"的自动化芯片设计。以下从设计步骤 、工具软件 和开源归属三个维度说明:
2.1. OpenROAD 完成的设计步骤
OpenROAD 覆盖从综合后网表 到可制造 GDSII 版图的完整后端物理设计流程,主要步骤如下 :
| 阶段 | 主要工作内容 |
|---|---|
| 1. Floorplanning(布局规划) | 定义芯片面积与利用率;IO 引脚放置;宏单元(Macro)放置;插入 Tap cell / Well tie;构建 PDN(电源分配网络) |
| 2. Global Placement(全局布局) | 标准单元与宏单元的全局放置;时序驱动与可布线性优化;自动修复 max slew、max capacitance、max fanout 违规 |
| 3. Detailed Placement(详细布局) | 合法化(Legalize)------对齐到网格、遵守设计规则;增量时序分析 |
| 4. Clock Tree Synthesis(CTS) | 插入缓冲器/反相器;构建低偏斜、低功耗的时钟树分布网络 |
| 5. Timing Optimization | Setup / Hold 时序优化;缓冲器插入与尺寸调整(Buffering & Sizing) |
| 6. Global Routing(全局布线) | 生成布线导引(Routing Guides);天线效应修复 |
| 7. Detailed Routing(详细布线) | 基于 MILP 的 panel 级详细布线;生成 DRC 正确的金属与通孔几何图形 |
| 8. Chip Finishing(芯片收尾) | 寄生参数提取(OpenRCX);最终时序验证;Filler cell 插入;Dummy metal fill |
| 9. Signoff(签核) | DRC、LVS、天线规则检查;导出 GDSII |
完整流程在 OpenROAD-flow-scripts(ORFS)中被实现为自动化流水线 。
2.2. 使用的工具软件
OpenROAD 采用模块化架构 ,各阶段由不同引擎完成,基于共享内存数据库 OpenDB 进行数据交换 :
2.2.1. 核心引擎(OpenROAD 项目原生/主导)
| 工具 | 功能 | 来源 |
|---|---|---|
| OpenDB | 共享内存数据库,统一数据模型 | OpenROAD 项目 |
| TritonFPlan | 布局规划、IO 放置、PDN 生成 | OpenROAD 项目 |
| RePlAce | 全局布局(分析优化 + 拥塞感知) | UC San Diego / OpenROAD |
| TritonCTS | 时钟树综合(H-tree、动态规划) | OpenROAD 项目 |
| FastRoute | 全局布线 | OpenROAD 项目 |
| TritonRoute | 详细布线 | UC San Diego,为 OpenROAD 开发 |
| OpenSTA | 静态时序分析(STA) | 最初独立开源,现主要由 OpenROAD 维护 |
| OpenRCX | 寄生参数提取(RC Extraction) | OpenROAD 项目 |
| PDNSim | 电源网络分析(IR Drop / EM) | OpenROAD 项目 |
| OpenROAD GUI | 可视化、调试、 congestion/CTS 分析 | OpenROAD 项目 |
2.2.2. 集成的第三方开源工具
| 工具 | 功能 | 来源/归属 |
|---|---|---|
| Yosys | RTL 逻辑综合、工艺映射 | YosysHQ(独立第三方开源项目) |
| ABC | 逻辑优化与技术映射 | UC Berkeley(常与 Yosys 联用) |
| Magic | DRC、LVS、Dummy fill、GDS 导出 | UC Berkeley(独立第三方开源项目) |
| Netgen | LVS(版图 vs 原理图)验证 | 独立第三方开源项目 |
| KLayout | GDS 合并、DRC 签核、版图可视化 | 独立第三方开源项目 |
2.3. 这些工具都是第三方开源项目吗?
不全是。 需要区分两类:
2.3. 1. OpenROAD 原生/主导维护的工具
如 TritonRoute、TritonCTS、TritonFPlan、OpenRCX、PDNSim、OpenDB 等,是 OpenROAD 项目(由 UC San Diego、Precision Innovations 等机构主导)专门为该流程从头开发 的引擎。它们虽然以开源许可(主要为 BSD 3-Clause)发布,但属于 OpenROAD 自身的核心组件,而非"第三方"项目 。
2.3.2. 第三方独立开源项目
如 Yosys 、Magic 、Netgen 、KLayout 等,在 OpenROAD 诞生之前就已存在,由各自的社区独立维护,后被 OpenROAD 集成到完整流程中作为前后端衔接或签核工具 。
总结 :OpenROAD 完整流程"built entirely on open-source tools" ,所有工具均为开源软件,但工具集合中既包含 OpenROAD 项目自研的核心引擎,也包含外部第三方开源工具。不存在商业闭源组件。
3. 不流片时OpenROAD 的闭环能力
不流片的情况下,OpenROAD 可以把闭环推进到"可流片就绪(tapeout-ready)的 GDSII + 签核级(signoff 风格)物理验证"------也就是版图生成后的 DRC/LVS 收敛、寄生参数提取后的最终时序确认。再往后(真正的流片、硅后测试)才需要晶圆厂。下面分层说明。
闭环能走到哪里
以 OpenROAD-flow-scripts(ORFS)为例,全流程是 RTL → GDSII,各环节自带验证反馈:
| 阶段 | 闭环中的验证手段 | 不流片能否完成 |
|---|---|---|
| 逻辑综合(Yosys) | 语法/可综合性检查;可用 Yosys equiv_* 做综合前后网表的形式等价验证 |
✅ |
| 布图规划 / 布局 | 时序驱动布局,内嵌 OpenSTA 增量时序分析、拥塞估计 | ✅ |
| 时钟树综合(CTS) | 时钟偏斜/延迟报告、建立/保持时序修复 | ✅ |
| 全局/详细布线 | TritonRoute 内部 DRC 检查、天线效应修复、布线 DRC 收敛 | ✅ |
| 收尾(Finishing) | OpenRCX 寄生提取(SPEF)→ 回注 OpenSTA 做最终时序签核报告 | ✅ |
| 物理验证 | 用 KLayout / Magic / netgen 对生成的 GDS 做 DRC 与 LVS(版图 vs 原理图一致性)检查 | ✅(开源 PDK 下) |
也就是说,"设计→实现→验证→修复→再验证"的迭代闭环完全在流片前闭合:你最终拿到的是一份 DRC 干净、LVS 通过、含真实寄生参数的最终时序报告、带签核 QoR 指标的 GDSII 文件------这已经是"送去流片前的最后一步"。OpenROAD 在 Sky130、GF180 上的 600+ 次成功流片正是这样验证出来的,很多 MPW 项目直接把这个结果送进晶圆厂。
但有三条边界要注意
1. 功能(逻辑)验证不在 OpenROAD 范围内。
OpenROAD 是物理设计工具,不验证"RTL 功能对不对"。完整闭环需要自己补上:
- 仿真:Verilator / Icarus Verilog + cocotb 测试平台;
- 形式验证:SymbiYosys(SVA 断言)、Yosys 等价性检查(保证综合/优化后网表与 RTL 功能一致);
- 这一步在 RTL 进入 OpenROAD 之前完成,与物理闭环拼接起来才是真正的"端到端"闭环。
2. 物理验证的"含金量"取决于 PDK。
- 开源 PDK(SKY130、GF180):有完整开放的 DRC/LVS 规则文件,Magic/KLayout/netgen 能做工坊认可的完整物理签核------这类工艺的闭环是"真闭环",流片成功率有实际背书。
- 专有 PDK(TSMC、Intel、GF12 等) :受 NDA 限制,代工厂的"黄金"签核规则(Calibre deck 等)不可用,OpenROAD 只能做内部 DRC 和保守的"构造即正确"设计,不能算真正的签核收敛------这正是之前那篇论文提到的"guardband"问题。
3. 缺少代工厂级精度与硅后环节。
相比商业签核流程(PrimeTime、StarRC、Calibre),OpenSTA/OpenRCX 的精度有差距,流程会靠加大裕量补偿;IR 压降/电迁移分析只有基础能力(OpenROAD 的 PSM 模块可做电源网格分析);工艺角覆盖、变异分析也不完整。而功耗实测、良率、硅后调试这些,只有流片之后才能闭环------这是任何"无流片"流程都无法跨越的物理边界。
总结
不流片时,OpenROAD 能把闭环做到 GDSII 就绪 + DRC/LVS/最终时序全通过(开源 PDK 下即为真实签核级);若再自行加上 Verilator/SymbiYosys 的功能验证,就是完整的"RTL 进、可流片版图出"的端到端闭环。唯一无法闭合的是硅本身------实际芯片的功耗、性能、良率,只能等流片后验证。