跳轉到

1. 認識 veryl2chip#

它能做什麼#

把一個用 Veryl 寫的數位電路設計,一路帶到「可以燒的 FPGA」或「可以送去做的晶片版圖」:

Veryl 原始碼
   │  v2c sim        模擬:跑 #[test] testbench,看波形
   ▼
閘級網表          v2c synth      合成:展開、最佳化成 AND / OR / XOR / MUX / 正反器
   │
   ├─► FPGA   v2c fpga       iCE40UP5K:LUT 對應 → 佈局 → 繞線 → 時序 → 位元流(iceprog 燒進 iCEBreaker)
   │
   └─► ASIC   v2c asic       標準元件對應 → 列式佈局 → 時脈樹 → 繞線 → 時序 → 功耗
                              (vlib 教學元件庫,或 SkyWater SKY130:再加 DRC 與 GDSII 版圖)

合成後的網表 → v2c gatesim   用同一個 testbench 再模擬一次,確認合成沒有改變行為
C 程式       → v2c cc        編譯給專案裡的 RISC-V SoC(也是用 Veryl 寫的)執行

全部工具都是這個專案自己寫的(模擬器、合成器、FPGA 佈局繞線與位元流、ASIC 後端、C 編譯器), 需要外部工具的地方只有:燒錄實體板子(iceprog)、選用的 nextpnr 佈局繞線,以及給開發者用的驗證工具。

兩種用法#

網頁 IDE 命令列 v2c
安裝 不用,打開網頁即可(線上版) cargo install veryl2chip-eda
適合 上課、實驗、看每個階段的圖、虛擬開發板 自動化、大設計、整合到其他流程
能力 模擬、波形、合成各階段的圖、FPGA / ASIC(含 SKY130)、虛擬開發板、C 程式 同樣的流程,輸出檔案(JSON、Verilog、.asc、.bin、DEF、GDS、VCD)

兩者用的是同一份程式(網頁裡跑的是編成 WebAssembly 的同一套 Rust 程式碼),結果相同。

名詞#

名詞 意思
頂層(top) 要模擬或合成的那個 module
testbench 帶 #[test(...)] 屬性、用來測試設計的 module;模擬時預設跑全部 testbench,合成時預設不碰它們
網表(netlist) 合成後由邏輯閘與正反器組成的電路
LUT / LC iCE40 FPGA 的 4 輸入查表 / 邏輯單元(LUT + 進位 + 正反器)
位元流(bitstream) 燒進 FPGA 的設定檔(.bin)
標準元件(standard cell) ASIC 用的現成邏輯閘版圖(NAND2、DFF…)
PDK 製程設計套件:元件庫、各層金屬規則、版圖(本專案支援 SkyWater SKY130)
Fmax 電路能跑的最高時脈頻率;iCEBreaker 的時脈是 12 MHz
DRC 設計規則檢查:金屬寬度、間距、短路、斷路
GDSII 晶片版圖的標準檔案格式(.gds)

這個專案裡有什麼#

目錄 內容
veryl-sim/ 模擬器(crate veryl2chip-sim)
veryl-eda/ 合成、FPGA、ASIC、C 編譯器、虛擬板引擎,以及 v2c 指令(crate veryl2chip-eda)
veryl-wasm/ 上面兩者編成 WebAssembly
web/ 網頁 IDE(web/dist/index.html)
examples/ 範例設計(加法器、狀態機、UART、VGA、RISC-V…)與 C 程式(examples/c/)
tutorial/ 從零開始的教學與虛擬實驗課
tools/ 下載 SKY130、檢查 GDS 等小工具
manual/ 本手冊