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。
