Running 32-bit Linux on FPGAs with RISC-V Out-of-Order Core

linux-litex-naxriscv32

Luffcaでは、Digilent社のFPGAボード用にRISC-V Out-of-Order CoreであるNaxRiscvのSoCのゲートウェアを作成し、32-bit Linuxを実行することに成功しました。

NaxRiscvの関連記事は、こちら。

LiteX-NaxRiscv

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

以前の記事で紹介したように、NaxRiscvは、32-bitと64-bit RISC-Vをサポートしています。

今回は、Digilent社のFPGAボードのArty A7-35TとNexys Video用に、32-bit NaxRiscv SoCのゲートウェアを作成しました。

Linux on LiteX-NaxRiscv

LiteX-NaxRiscvには、Linux on LiteX-VexRiscvのように、Linuxの動作環境を構築するリポジトリはありませんが、32-bit NaxRiscvの場合、Linux on LiteX-VexRiscvの成果物を利用して、Linuxを動作させることができます。

ただし、SoCの構成に合わせてdts/dtbを調整する必要があります。

Running Benchmarks on Hardware

作成したSoCのゲートウェアをFPGAボードにロードし、ベンチマークのCoreMarkとDhrystoneを実行しました。

CoreMark

以下は、-O3オプションでビルドしたCoreMarkを実行したときのコンソール出力を示しています。

root@buildroot:~# coremark_o3
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 14985
Total time (secs): 14.985000
Iterations/Sec   : 400.400400
Iterations       : 6000
Compiler version : GCC10.3.0
Compiler flags   : -O3   -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 : 400.400400 / GCC10.3.0 -O3   -lrt / Heap

-O3オプションの場合、CoreMarkスコアは392〜401です。
動作周波数が100MHzなので、CoreMark/MHzは3.92〜4.01になります。
NaxRiscvのシミュレータのCoreMark/MHzは4.70なので、少し差があります。
なお、buildrootのデフォルト構成の-O2オプションの場合、CoreMarkスコアは366〜368です。

Dhrystone

以下は、-O3オプションでビルドしたDhrystoneを実行したときのコンソール出力を示しています。

root@buildroot:~# dhrystone_o3 1000000

Dhrystone Benchmark, Version 2.1 (Language: C)

Program compiled without 'register' attribute

Execution starts, 1000000 runs through Dhrystone
Execution ends

...

Microseconds for one run through Dhrystone:    2.5 
Dhrystones per Second:                      403225.8 

-O3オプションの場合、Dhrystoneスコアは371,747〜403,225です。
DMIPSとDMIPS/MHzは、それぞれ211〜229と2.11〜2.29になります。
NaxRiscvのシミュレータのDMIPS/MHzは2.60なので、少し差があります。
なお、buildrootのデフォルト構成の-O2オプションの場合、Dhrystoneスコアは198,807〜202,429です。

まとめ

Luffcaでは、LiteX-NaxRiscvを用いてDigilent社のFPGAボード用にNaxRiscvのSoCのゲートウェアを作成し、32-bit Linuxを実行することに成功しました。