G2 是一个在你自己的 Linux 机器上运行的芯片设计平台。项目、模块、库、签核场景和设计数据都在同一个网页里,每次工具运行结束,关键数字马上就能看到。这个系列是最快的入门方式:大约 27 分钟,只用 G2 自带的开源工具,从下载做到一个完成布局布线、跑完签核时序的模块。
这篇文章是 8 集视频的文字版。每一节包含该集视频、它展示了什么,以及跟着做需要的命令和数字。全部内容都可以用免费的 G2 社区版 完成。
| 平台 | G2 v1.0.0 社区版,在 Linux 上通过浏览器使用的工作环境 |
| 工具 | Yosys、OpenROAD、OpenRCX 与 OpenSTA(另外也附带 Verilator、Magic 与 Netgen) |
| PDK | Nangate45、SkyWater 130 与 ASAP7,附可直接运行的演示案例 |
| 设计 | 每一集都用 Nangate45 上的 gcd |
| 结果 | v01 签核时离 1 GHz 差 1.95 ns;v02 修正约束后只差 9 ps |
预告
一分钟认识 G2
1:13在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
所有东西都在同一个网页里:项目、模块、库、场景和设计数据。预告片展示一个真实的模块 gcd,从 RTL 经过布局布线做到签核时序,每个阶段和每个结果都在同一张表里。每次工具运行都会立刻显示关键数字:时序、密度和运行时间,不用再 grep 日志。时序失败时,可以打开任何一条路径,看清楚延迟从哪里来。
在背后,G2 为每一份设计数据做版本管理,所以你永远知道哪个网表产生了哪个结果。还有一个熟悉 G2 操作步骤的 AI 助手,可以帮你运行流程。这一切都在一个下载包里,OpenROAD、Yosys、OpenSTA、PDK 和演示案例都已包含。
第一部分:安装设置
#1安装与启动
3:07在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
G2 社区版放在 GitHub 上,需要的东西都在一个发布包里。G2 平台可以运行在 Ubuntu 22.04 及以上,以及 Rocky 或 RHEL 8 及以上。附带的 OpenROAD、Yosys 和 Verilator 需要 glibc 2.35 及以上,也就是 Ubuntu 22.04 及以上。
G2 需要几个标准的 Linux 工具。在 Ubuntu 上一行就能装好,这也是唯一需要 sudo 的步骤:
sudo apt-get install -y xterm tcsh vim-gtk3 firefox tcl coreutils gzip
接着下载发布包(约 530 MB)并解压。G2 没有安装程序,也不需要 root 权限。里面有 G2 本身、一个附带的 Node.js 运行环境,以及包含 Nangate45、sky130 和 ASAP7 的 pdk 目录。开源 EDA 工具在 g2/free 里。
wget https://github.com/DeepDataFlow/G2/releases/download/v1.0.0/G2_v1.0.0.tar.gz
tar zxvf G2_v1.0.0.tar.gz
mkdir g2
cd g2
../G2_v1.0.0/g2/bin/g2init
source g2.rc
g2
工作区是存放项目和数据的地方。g2init 会选一个空闲端口、建立工作区目录,并写出 g2.rc;它负责设置环境,把 G2 和所有附带工具加进 PATH。g2 会在自己的窗口里启动服务器。服务器会打印一个带 token 的登录 URL:把整个 URL 连同 token 一起复制到 Firefox。
首页是你的项目列表。新建一个项目,项目页面上 G2 的每个部分都有一个标签页:
| 标签页 | 内容 |
|---|---|
| Impl | 实现:工具在这里运行 |
| Spec | 项目设定 |
| Blk | 每个模块的目标,例如速度和面积 |
| Scen | 签核场景:模式与 PVT corner |
| LIM | 库管理器 |
| DDM | 设计数据管理器,为设计数据做版本管理 |
| SCM | 脚本 |
以后每次回来只要三条命令:cd 进工作区、source g2.rc、g2。
#2一条命令建立演示项目
3:55在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
G2 为三个 PDK 都附带了演示案例,这个系列用 Nangate45。build.sh 是一小串步骤:建立项目、定义签核场景、指向 PDK、安装库,再建立 gcd 和 spm 两个模块。每一步都可以在界面上手动完成,脚本只是帮你省时间。
$G2_ROOT/demo_case/nangate45/build.sh # 也有 sky130/ 与 asap7/
新项目里每个标签页的内容:
- Spec 是整个项目的设定:tech LEF、RC 文件,以及综合用的 corner。
- Scen 有两个模式:functional 和 shift,每个模式有四个 PVT corner:125 °C 与 −40 °C 下的慢速、快速和典型。之后每次时序分析都会用到它们。
- LIM 里已经以
v1版本装好 Nangate45 标准单元。G2 解析了每一个 liberty 文件,所以可以直接浏览单元、面积和引脚功能。存储器 macro 也用同样的方式管理。 - Blk 是每个模块的目标。
gcd的时钟是 1 GHz,占地 600 × 600 µm。每个模块也会按名称和版本列出它用到的库,这样每个流程都知道要加载哪些库。 - DDM 里已经放好了
gcd的 RTL。
第二部分:从 RTL 到签核
#3用 Yosys、OpenROAD 和 OpenSTA 从 RTL 到 GDS
6:16在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
在 G2 里,每一次实现尝试都是一个版本。版本一开始是一个空目录,流程一个一个签出到里面。这一集为 gcd 建立 v01。
先做综合,它也带出整个系列最重要的一点:每个 G2 流程都有同样的视图,顺序也一样。
| 视图 | 作用 |
|---|---|
| Script | 拉取运行脚本 |
| LIM | 选择库 |
| DDM | 连接输入数据 |
| Exec | 运行工具:Gen 生成运行脚本,Run 启动工具 |
| QA | 检查清单 |
| Chkin | 把结果发布到 DDM |
在 Yosys 上学会这几个视图,OpenROAD、OpenSTA 和其他所有流程也就都会了。DDM 视图清楚显示这次运行用哪些输入数据:这里是 RTL 版本 v2 和综合用的 SDC。运行结束后,QoR 会解析日志和报告,填进单元数、寄存器数和错误数的卡片,不用读日志就知道成功了没有。Check-in 把网表以 syn v01 发布到 DDM。这就是交接:下一个流程从 DDM 取网表,而不是从这个目录。
OpenROAD 有同样的视图,流程分成八个任务:init、floorplan、placement、时钟树综合、post-CTS、routing、post-route 和 finish。每个任务都有自己的子页面和日志。Gen all、Run all,每个任务都会报告状态和 QoR:运行时间、错误、每个场景的时序和密度。

接着是签核。OpenRCX 从绕线后的版图提取寄生参数,把 SPEF 签入 DDM。OpenSTA 的 Gen all 会为 Scen 标签页里的每个场景各建一次运行:两个模式乘四个 corner,每个场景的最差 slack 一目了然。
签核也抓到了问题。在慢速 corner,setup 差了将近 2 ns(−1.95 ns)。模块规格写的是 1 GHz,但布局布线的约束用的是 4 ns 的时钟。这正是签核存在的意义,第 5 集会修正它。
这一集点过的所有操作都可以写成脚本,适合回归测试或每晚构建:
$G2_ROOT/demo_case/nangate45/gcd_rtl2gds.sh
#4设计数据管理(DDM)
2:26在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
在 G2 里,流程从不直接读彼此的目录。每个流程都从设计数据管理器 DDM 取得输入,再把输出发布回 DDM。

DDM 标签页显示项目里的每个模块和每种数据类型。gcd 有 RTL、综合网表、每个模式的 SDC,以及每个布局布线阶段之后的快照。每种数据类型可以有很多版本,其中一个是发布(publish)版本:下游流程默认使用的就是它。
每个版本都记得自己从哪里来。网表 syn v01 是 impl/gcd/v01 里的 Yosys 运行产生的,点一下就回到那次运行,看得到它的日志和 QoR。在使用端,每个流程和任务都有 DDM 视图:OpenROAD 的 init 任务读取 syn v01 和布局布线约束。想试别的约束,就在那里改版本再重新运行,不用复制文件。
底层就是普通的目录和符号链接。没有需要维护的数据库,在 shell 里就能查看一切。对任何结果都能回答两个问题:哪些数据产生了它,以及哪次运行产生了那些数据。
第三部分:比较与调试
#5并排比较多次实现结果
4:15在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
这个实验只改一处。v02 在 DDM 里用了新的布局布线约束 sdc_apr_func v02,时钟改成 1 ns,与规格一致。每个版本都是独立的,v01 完全不受影响。流程照常运行,OpenROAD 的 init 任务现在读的是 sdc_apr_func v02。有一个细节很重要:要等输入存在之后再签出 OpenRCX 和 OpenSTA,它们才会绑定到 v02 的版图。

在模块层级,Status 视图把两个版本并排显示。阶段选择器切换要看的指标:前端显示综合数字,APR 显示布局布线,Signoff 显示各场景的时序。v01 离 1 GHz 差了将近 2 ns,v02 只差 9 ps。Column 按钮可以精确选择要显示哪些指标,只想找一个数字时很方便。再往上一层,可以一次看到项目里的所有模块,这是项目负责人每天早上要看的画面。
#6用 tpath 调试时序路径
2:19在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
这次看的场景是慢速 corner 的 setup,0.81 V、125 °C。原始的 OpenSTA 报告有几千行,平常只能滚动和 grep。tpath 会解析并汇总它。首先是每个路径组的最差 slack,马上就能看出问题出在哪一类路径:寄存器到寄存器差了 9 ps,而输入到寄存器(+0.145 ns)和寄存器到输出(+0.247 ns)都通过。接着是按 slack 排序的所有路径。

打开一条路径,tpath 会显示它的起点和终点、发射和捕获时钟,以及 slack。然后把路径拆成几个部分:数据逻辑花了 0.978 ns,捕获的触发器需要 30 ps 的 setup,刚好超过 1 ns 的周期。这次运行用的是理想时钟,时钟延迟和 skew 都是零,所以要修的是逻辑,不是时钟树。这条路径的原始报告文字点一下就能打开。tpath 也能读取 PrimeTime、Tempus/Innovus、DC 和 Fusion Compiler 的时序报告。
第四部分:AI 助手
#7芯片设计流程的 AI 助手
3:09在 YouTube 观看(英文) ↗在 Bilibili 观看(英文) ↗
G2 的 AI 助手通过 skill 获得知识。每个 skill 是一项 G2 任务的分步操作程序:建立项目或模块、安装库,或运行 Yosys、OpenROAD、OpenSTA。skill 是纯文本,列出的步骤和第 3 集一样:签出、拉取脚本、拉取库、生成、运行、签入。助手遵循 G2 真正的操作程序,而不是自己发明一套。
视频里用 opencode 作为 agent。把 agent 说明和 skill 复制进工作区,然后启动:
cd $G2_SYS
cp $G2_ROOT/aiagent/AGENTS.md .
mkdir .opencode
cp -r $G2_ROOT/aiagent/skills .opencode/
opencode
- 问它怎么做,例如 “How do I run OpenROAD for gcd?”,它会解释,但不会运行任何东西。
- 叫它去做,例如 “Create a new version v03 for gcd in nangate45”,新版本马上出现在浏览器里。
- 更大的任务,例如 “Run yosys on gcd v03 and check the netlist into DDM”,它会先订计划,再一步步执行,用的命令和界面按钮背后的一样。结果就是一次普通的 G2 运行,有同样的 QoR 卡片和同样的 DDM 签入,你可以检查,也可以手动重做。
- 缺东西时它不会乱猜。叫它 “Run yosys on spm”(这个模块还没有版本)时,它会停下来,问你要不要先建立
v01。
接下来
这就是 G2:每个流程都有网页界面、设计数据有版本管理,还有一个熟悉操作程序的助手。
- 下载:GitHub 上的 G2 社区版。
- 视频:Bilibili 合集 与 YouTube 播放列表。
- 下一步,真实的设计:RISC-V 实战:从 RTL 到签核 用同样的流程在 sky130 上完成一个 RISC-V 核心,RISC-V SoC 实战:从模块到芯片 再把它做成一整颗芯片。
- 关于 G2 的问题:support@deepdataflow.com。授权与合作:sales@deepdataflow.com。
