iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Software Development

Port Alpine Linux to open source RISC-V platform系列 第 10

LiteX/VexRiscv 簡介與使用 (二點五) 天地分隔

沒想竟然遇到連載途中的除錯困境XD
不過30天鐵人賽對筆者來說就像黑客松紀錄簿,也當作給作軟硬整合開發的人一個參考吧。

先來說一下遇到什麼狀況:

我們的終極目標,是完整的Alpine Linux on RV32GC,因為對於Linux mainline來說,唯一官方真正認可的最小公因數ABI set,就是RV32/64GC,而非soft-float、或著筆者在其他地方玩弄的RV32I Linux等等隨時都有可能build fail/runtime break的組態。

如先前所述,VexRiscv有完整的D extension支援,是在近一年、半年左右的事情。敝人過去持續跟進使用的過程中,它是慢慢地從IMA、IMAC演進到IMAFDC;前篇所提及的OrangeCrab開發版,依照上面使用的FPGA chip有兩個變種,一個是25F、另一個是85F,兩者相差了8萬個logic cell。之前為了開發簡便,我基本上都用Linux-on-Litex/VexRiscv的預設building script在做事,我有其他張比較大的開發版,logic cell的資源也多,例如Lattice自己本身的versa-5g,上面是使用ECP5-45F;這些較大的開發板上,打開FPU是沒什麼問題的。但是OrangeCrab上面,故事就比較悲劇一點,在VexRiscv IMAC組態底下,已經把LC吃了92%掉。想要強制開啟FPU組態(預設在25F上是關閉的),我們需要做出以下改動 — —

# /path/to/litex_root/litex/litex/soc/cores/cpu/vexriscv_smp/core.py
...
    aes_instruction      = False
    out_of_order_decoder = False
    wishbone_memory      = False
-    with_fpu             = False
+    with_fpu             = True
    cpu_per_fpu          = 1
    with_rvc             = True
...
-    parser.add_argument("--with-fpu"                    , default=Flase, action="store_true", help="Enable the F32/F64 FPU")
+    parser.add_argument("--with-fpu"                    , default=True, action="store_true", help="Enable the F32/F64 FPU")
-   parser.add_argument("--cpu-per-fpu"                 , default="4",         help="Maximal ratio between CPU count and FPU count. Will instanciate as many FPU as necessary.")
+   parser.add_argument("--cpu-per-fpu"                 , default="1",         help="Maximal ratio between CPU count and FPU count. Will instanciate as many FPU as necessary.")

然而這樣一打開,我們就會把僅剩的LC直接吃滿吃到超過100%。
嘗試調動yosys的一些optimization flags,還是不夠,我們勢必必須要打掉一些peripheral來節約LC的用量:

# /path/to/linux_on_litex_vexriscv/make.py
# OrangeCrab
            # Buses
-            "i2c",
+            #"i2c",
            # Storage
-            "spisdcard",
+           #"spisdcard",

直接把僅存的spi mode sdcard跟i2c給拆了,(其實還要退回2021年初的yosys使用比較暴力的ABC優化參數 -abc9 -nowidelut)這時nextpnr回報的LC用量終於勉強夠用,也能在。但是拆掉了spisdcard後,我們僅能透過LiteX BIOS中最後的fallback mode來進行Linux image、OpenSBI、rootfs image的loading。
但是serial傳輸遇到bit rotting的機會很高。
目前筆者還在努力想辦法解決當中XDDDD


上一篇
LiteX/VexRiscv 簡介與使用 (二) 始有晝夜
下一篇
LiteX/VexRiscv 簡介與使用 (二點七五) 斯有海與陸地植物
系列文
Port Alpine Linux to open source RISC-V platform30

尚未有邦友留言

立即登入留言