Running Debian on FPGA with RISC-V OoO CPU

debian-riscv-litex-naxriscv

Luffcaでは、Digilent社のFPGAボード用にRISC-V OoO CPUであるNaxRiscvのRV64GCのゲートウェアを作成し、Debianを実行することに成功しました。

関連記事は、こちら。

LiteX-NaxRiscv

NaxRiscvは、アウトオブオーダ実行(OoO)スーパースカラのRISC-V CPUであり、SoC builderのLiteXに統合されています。

Benchmarks on RISC-V OoO 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 OoO CPUであるNaxRiscvのRV64GCのゲートウェアを作成し、Debianを実行することに成功しました。