跳轉到

rueda 電子設計工具#

用 Rust 寫的一整套 IC 設計 EDA:硬體語言(Veryl、Fluxa)→ 模擬 → 合成 → FPGA 位元流或 ASIC 佈局, 再加上 RISC-V 軟體工具,以及在瀏覽器裡就能跑這一切的網頁 IDE。

本書以 /Users/Shared/ccc/project/rueda/ 為對象,逐章拆解這條流程的每一個環節: 它們為什麼長成那樣,而不是只說它們長成那樣。

目錄#

快速上手#

# 取得並建置
cd /Users/Shared/ccc/project/rueda
./build.sh                # target/release/reda 與 web/dist(--no-web:只建 reda)

# 一個指令跑完整條流程
reda sim counter.veryl                 # 跑測試平台(語言由副檔名決定)
reda sim fir.fx                        # Fluxa 程式的 test
reda synth -o adder.json adder.veryl   # 合成成閘級網表(yosys JSON / Verilog)
reda fpga --pnr veryl --pcf pins.pcf --bin top.bin top.veryl
reda asic --pdk sky130 --gds alu.gds alu.veryl
reda gatesim ice40 fifo.veryl          # 在合成後的網表上跑 testbench
reda emu --top Rv64Soc -o soc.wasm *.veryl
reda emu fir.fx                        # Fluxa 的 test,task 換成編譯後的版本
reda cc --run hello.c                  # 給 RISC-V SoC 的 C 程式,在指令集模擬器上執行
reda rvemu fw_payload.bin              # RV64 開發板模擬機(OpenSBI + Linux)
reda help [子指令]

三條閱讀路線#

路線 章節 適合
語言到硬體 1 → 2 → 4 → 5 → 6 想理解「RTL 如何變成晶片」
軟體到系統 1 → 3 → 7 → 8 → 9 想理解「一個程式如何在瀏覽器裡開 Linux」
EDA 演算法 1.1 → 4 → 5 → 6 想讀懂佈局繞線、LUT 覆蓋、時序分析

三條路線在第 4 章(網表 IR)會合流,因為網表是唯一的匯流點。

對應原始碼#

rueda/
├── reda/            reda 指令(每個工具一個子指令)
├── eda/             與語言無關的後端
│   ├── src/           網表、block RAM、輸出格式、閘級模擬、時序約束、功耗
│   ├── src/fpga/      iCE40 / ECP5 對應、自己的佈局繞線與位元流、虛擬 iCEBreaker
│   ├── src/asic/      標準單元流程:擺置、時脈樹、繞線、時序、DRC / LVS、GDS
│   ├── src/pdk/       Liberty / LEF / DEF、SKY130 綁定
│   ├── bits/          與前端共用的位元向量
│   └── tools/         SKY130 下載、KLayout 的 GDS / LVS / 天線檢查
├── veryl/           Veryl 語言(sim / synth / emu / examples / tutorial)
├── fluxa/           Fluxa 語言(sim / synth / emu / rv32i / rv64 / docs)
├── riscv/           RISC-V 軟體(rvtools:C 編譯器、組譯器、RV32 ISS)
│                      rvemu:RV64 開發板模擬機,含 WebAssembly JIT)
└── web/             網頁 IDE(TypeScript);wasm/:它的 WebAssembly 核心

本書的方法論#

貫穿全書的五條原則:

  1. 中介表示的選擇決定一切——網表 IR 選成位元層級 + yosys 內部命名,換來跨語言共用後端。
  2. 架構規則必須能被工具強制檢查——eda/ 不得依賴語言前端,由 Cargo 依賴圖保證。
  3. 同一語意、多種實作、交叉驗證——直譯 vs 編譯、RTL vs 閘級、內部 DRC vs KLayout。
  4. 兩套驗證策略要分層搭配——SAT / k-induction / BMC / 功能測試,按設計大小分配。
  5. 範圍控制與誠實——刻意不實作的東西要寫下來,沒檢查的規則要明說。