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


<<:  Day 4 jest的生命周期

>>:  19.移转 Aras PLM大小事-表单团队权限

人脸辨识-day14 系统建置

人脸辨识建置的类型有两种: 第一种为使用云端计算,因需要使用云端计算,所以需要确保网路连线顺畅,在将...

【Day 23】React 关於 Hook(3)

关於 Hook 的方法与实作 useContext useContext 可以使元件跨越层级直接传递...

MyBatis 前导

MyBatis前导 ...

【Day 08】欢迎来到实力至上主义的 Shellcode (下) - Windows x86 Shellcode

环境 Windows 10 21H1 Visual Studio 2019 NASM 2.14.02...

找LeetCode上简单的题目来撑过30天啦(DAY9)

题号:104 标题:Maximum Depth of Binary Tree难度:Easy Give...