跳轉到

3.1 Yosys 與邏輯綜合的開源之路#

在 OpenROAD 的故事裡,綜合器 Yosys 是一個特別的存在:它比 OpenROAD 更早問世,由更小的人團隊打造,卻成為整個開源晶片運動的地基。要理解開源 EDA 為什麼能在 2010 年代末爆發,必須先理解 Yosys 為什麼在 2012 年前後出現,以及它解決了什麼三十年無解的問題。

綜合:從布林代數到電路#

邏輯綜合要解的問題,是把 RTL(暫存器轉移層級)描述轉換成由標準單元構成的閘級網表。這包含幾個步驟:解析 Verilog、做高層次最佳化(常數折疊、死碼消除、FSM 萃取)、技術無關的最佳化(以 AIG,And-Inverter Graph 為基礎的重寫與重整)、最後是 technology mapping——把最佳化後的邏輯映射到特定製程的實際 cell,例如 SkyWater 130nm 的 sky130_fd_sc_hd__nand2_1。映射時要考慮面積、延遲與功耗的取捨,並讀入 Liberty 檔來評估時序。

這個領域的理論基礎在 1980 至 1990 年代由學界打下:Berkeley 的 SIS、IBM 的 LGSynth'93 基準測試、以及 Alan Mishchenko 在 Berkeley 開發的 ABC——一個至今仍是業界最強的開源布林最佳化引擎。但理論開放,實作卻封閉:商業綜合器是 EDA 產業最昂貴的授權之一,學生與研究者能讀論文,卻看不到一個完整綜合器長什麼樣。

Clifford Wolf 與 Yosys 的誕生#

改變來自一個奧地利工程師。Clifford Wolf 是開源世界著名的獨行俠——他同時也是 TinyGL 與知名 3D 建模軟體 OpenSCAD 的作者。2012 年前後,他開始開發 Yosys,目標明確:做一個開源、框架化、可擴充的 Verilog 綜合器。Yosys 的架構哲學與眾不同:它不追求「內建所有演算法」,而是提供一個統一的內部表示(RTLIL)與完備的 pass 框架,讓每個最佳化都是一個獨立的 pass,任何研究者都能寫自己的 pass 掛上去。ABC 則被整合為 technology mapping 與邏輯最佳化的後端,兩個專案自此深度結合。

Yosys 的出現時機恰到好處。2010 年代初,FPGA 開源社群正在萌芽——Clifford 自己也在做 IceStorm(iCE40 FPGA 的開源 toolchain)的先期工作,而 FPGA 流程同樣需要一個綜合器。此後幾年,Yosys 成為幾乎所有開源硬體流程的前端:FPGA 有 Yosys + nextpnr,ASIC 有 Yosys + OpenROAD。2020 年代,Yosys 進一步被 YosysHQ 商業化維護,納入了 SymbiYosys(形式驗證)等生態,成為開源數位設計事實上的標準前端。

在 ORFS 中使用 Yosys#

在 ORFS 裡,綜合是流程的第一階段,由 synth target 驅動。背後是 Yosys 腳本(ORFS 內部的 synth.tcl),典型的操作包括讀入 RTL、展開層次、最佳化、以 abc -liberty 做 technology mapping:

cd flow
make DESIGN_CONFIG=./designs/sky130hd/gcd/config.mk synth

跑完後在 objects/sky130hd/gcd/base/1_synth.v 可以看到映射到 sky130hd 單元的網表,logs/ 與 reports/ 則有面積與時序報告。調整綜合行為的常用變數也在 config.mk:

export SYNTH_HIERARCHICAL = 1          # 階層式綜合,大型設計用
export ABC_AREA            = 1          # 偏向面積最佳化而非延遲
export SYNTH_CLOCK_UNCERTAINTY = 0.2   # 綜合階段的 clock uncertainty

理解一個細節有助於看懂整條流程:綜合階段的時序估算是「無線式」的——Yosys 只知道 cell 延遲(來自 Liberty),不知道連線延遲,因此必須留保守餘量;等到 OpenROAD 完成佈局佈線、OpenSTA 算出真實時序後,若與綜合預估偏差過大,就要回到綜合重新收斂。這個「綜合預估 vs. 簽核實測」的差距管理,是所有數位流程的永恆主題。

開放作為方法論#

Yosys 的歷史意義,最終不在它的 QoR 是否超越商業工具(就單點最佳化而言仍有差距),而在它證明了一件事:綜合器的每一個環節都可以被看見、被質疑、被改進。商業工具的綜合結果像神諭——工程師只能反覆試探;Yosys 的結果則像實驗室筆記——你可以打開中間表示 RTLIL,看到每個 pass 做了什麼。教育上,這讓「綜合」從黑箱課程變成白箱科學;研究上,這讓新演算法有了公平的公共基準。

回頭看整條開源鏈:Clifford Wolf 用一人之力補上了前端,OpenROAD 團隊用 DARPA 的資源補上了後端,SkyWater 開放了 PDK,ORFS 把它們縫成整體。這四塊拼圖在 2020 年前後合攏,開源晶片設計從此成為一條完整可行、可教、可學的路。下一章,我們就沿著這條路,走進實體設計的第一站——讀懂 PDK。