← richliu.com / 文章
中文 EN

Run Verilog Program on Lattice ECP5 Versa with OpenSource Tools

2025-10-11 FPGA ECP5 Verilog IC Design 開源工具

這篇記錄在 Lattice ECP5 Versa EVB 上使用純開源工具鏈跑 Verilog 的過程。 起因是發現手上的板子(LFE5UM-45F)Lattice Diamond 不支援,只好往開源方向找。

時脈設定的坑

最大的障礙是找到正確的 FPGA 時脈輸入腳位。 根據板子的 User Manual,板載有一個 100 MHz LVDS 振盪器接在 P3 和 P4 差分輸入, 但文件裡沒有把這個資訊整理成表格,需要自己從 litex-board 的專案裡挖出來。

腳位對應(ecp5evn.lpf)

FREQUENCY PORT "clk" 100.0 MHz;
LOCATE COMP "clk"   SITE "P3";
IOBUF PORT  "clk"   IO_TYPE=LVDS;

LOCATE COMP "rst"   SITE "T1";
IOBUF PORT  "rst"   IO_TYPE=LVCMOS33;

LOCATE COMP "led[0]" SITE "E16";
IOBUF PORT  "led[0]" IO_TYPE=LVCMOS33;
# ... led[1]~led[7] 依此類推

簡單 8-bit CPU 設計

以一個簡單的 8-bit CPU 驗證整個流程,指令集包含:

4 個通用暫存器,16-bit 指令格式,程式記憶體裡塞了一段計算 1+10 的測試序列。

開源工具鏈

Makefile 自動化整個流程

VERILOG_SRC = cpu.v
LPF         = ecp5evn.lpf
DEVICE      = LFE5UM-45F-8BG381C
PACKAGE     = BG381

synth:
	yosys -p "synth_ecp5 -json cpu.json" $(VERILOG_SRC)

pnr:
	nextpnr-ecp5 --device $(DEVICE) --package $(PACKAGE) \
	    --json cpu.json --lpf $(LPF) --textcfg cpu.config

pack:
	ecppack cpu.config cpu.bit

prog:
	openFPGALoader -b ecp5_evn cpu.bit

sim:
	verilator --cc --trace cpu.v --exe sim_main.cpp
	make -C obj_dir -f Vcpu.mk

驗證流程

先用 Verilator 做仿真(生成 VCD 波形),確認邏輯正確後再燒到硬體。 這個步驟可以省下不少 debug 時間。