Running Debian on FPGA with RISC-V Out-of-Order Core
Luffcaでは、Digilent社のFPGAボード用にRISC-V Out-of-Order CoreであるNaxRiscvのRV64GCのゲートウェアを作成し、Debianを実行することに成功しました。
NaxRiscvの関連記事は、こちら。
LiteX-NaxRiscv
NaxRiscvは、アウトオブオーダ実行スーパースカラのRISC-V Coreであり、SoC builderのLiteXに統合されています。
Benchmarks on RISC-V Out-of-Order Simulatorの記事で紹介したように、NaxRiscvは、32-bitと64-bit RISC-Vをサポートしています。
今回は、Digilent社のFPGAボードのNexys Video用に、RV64GC NaxRiscvのSoCのゲートウェアを作成しました。
Debian on FPGA with LiteX-NaxRiscv
Debianの実行には、マイクロSDカードを使用しています。Debian用マイクロSDカードには、Hardware — NaxRiscv documentationのリンクからダウンロードしたカーネル等とrootfsを用いています。
SoCの構成を変更する場合やNexys Video以外のFPGAボードを使用する場合には、dts/dtbを調整する必要があります。
Benchmarks on Debian
作成したゲートウェアをFPGAボードにロードし、Debian上でベンチマークのCoreMarkとWhetstoneを実行しました。
CoreMark
以下は、NaxSoftwareとほぼ同じオプションでビルドしたCoreMarkを実行したときのコンソール出力を示しています。
root@sid-rv64:~# ./coremark_nax64gc 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 13289 Total time (secs): 13.289000 Iterations/Sec : 451.501242 Iterations : 6000 Compiler version : GCC11.1.0 Compiler flags : -DPERFORMANCE_RUN=1 -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -lrt Memory location : Please put data memory location here (e.g. code in flash, data on heap etc) seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0xa14c Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 451.501242 / GCC11.1.0 -DPERFORMANCE_RUN=1 -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -lrt / Heap
NaxSoftwareとほぼ同じオプションの場合、CoreMarkスコアは450〜452です。動作周波数が100MHzなので、CoreMark/MHzは4.50〜4.52になります。NaxRiscvのRV64GCシミュレータのCoreMark/MHzは4.59だったので、似たスコアが得られています。
-O3 -funroll-loops
オプションだけでビルドしたCoreMarkのスコアは360〜370だったので、オプションの影響が大きいようです。
Whetstone
以下は、-O2
オプションでビルドしたWhetstoneを実行したときのコンソール出力を示しています。
root@sid-rv64:~# ./whetstone 100000 Loops: 100000, Iterations: 1, Duration: 59 sec. C Converted Double Precision Whetstones: 169.5 MIPS
WhetstoneのWMIPSは169.5〜172.4です。このため、WMIPS/MHzは1.69〜1.72になります。NaxRiscvのRV64GCシミュレータのWMIPS/MHzは0.976だったので、かなり差があります。
まとめ
Luffcaでは、FPGAボードのNexys Video用にRISC-V Out-of-Order CoreであるNaxRiscvのRV64GCのゲートウェアを作成し、Debianを実行することに成功しました。