Running Dual-Core RISC-V Linux on Cheap FPGA Board

linux-tang-primer

Luffcaでは、約2,000円で購入したSipeed社のTang Primer用にデュアルコア 32-bit RISC-V SoCを作成し、Linuxを実行することに成功しました。

上記RV32IMACのデュアルコアSoCに加え、単精度と倍精度の浮動小数点拡張をサポートするRV32IMAFDCのシングルコアSoCでも、Linuxを実行することに成功しています。

関連記事は、こちら。

Sipeed Tang Primer

Sipeed社のTang Primerは、Anlogic社のFPGA EG4S20BG256を用いた、安価なFPGAボードです。このボードは約2,000円で購入しましたが、製造終了しているようです。

Tang Primerは、20k LUTsのFPGAを搭載しており、以前の記事で紹介したようにRISC-V CPUを動作させることができます。

Main Issues to Run RISC-V Linux on Tang Primer

SoCビルダーのLiteX等を用いて、Tang Primer上でLinuxを動作させるための主な課題は、以下の通りです。

  • ゲートウェア
    • 8MiB SDRAMのサポート
    • CPUの構成変更
    • MicroSDカードのサポート
  • ソフトウェア
    • Linuxカーネルのサイズ縮小
    • OpenSBIの構成変更

Tang PrimerのSRAMは約130KiBだけなので、8MiBのSDRAMのサポート追加とLinuxカーネルのサイズ縮小が必須でした。

Linux Capable SoC for Tang Primer

linux-tang-primer-soc

デュアルコアSoCの主な仕様は、以下の通りです。

  • CPU: デュアルコア 32-bit RISC-V
    • ISA: RV32IMAC
  • 動作周波数: 24 MHz
  • SDRAM: 8 MiB
  • ROM: 64 KiB
  • UART: 1 ch
  • MicroSDカードのサポート

シングルコアSoCの場合、CPUの仕様だけが以下のように変わります。

  • CPU: シングルコア 32-bit RISC-V
    • ISA: RV32IMAFDC (RV32GC)

注:CPUにはLiteX用のVexRiscvを用いています。

RISC-V Linux on Tang Primer

アイキャッチ画像は、rootfsとしてBusyBoxを使用したときのログイン画面です。

デュアルコアSoCにおいてcat /proc/cpuinfoを実行したときの出力は以下のようになっており、2つのコアが認識されています。

/ # cat /proc/cpuinfo
processor	: 0
hart		: 0
isa		: rv32imac
mmu		: sv32

processor	: 1
hart		: 1
isa		: rv32imac
mmu		: sv32

同様に、シングルコアSoCの出力は以下のようになっており、isaが変化した1つのコアが認識されています。

/ # cat /proc/cpuinfo
processor	: 0
hart		: 0
isa		: rv32imafdc
mmu		: sv32

まとめ

Luffcaでは、Sipeed社のTang Primer用にRV32IMACのデュアルコアSoCとRV32IMAFDCのシングルコアSoCを作成し、RISC-V Linuxを実行することに成功しました。