Running Dual-Core RISC-V Linux on Cheap FPGA Board
Luffcaでは、約2,000円で購入したSipeed社のTang Primer用にデュアルコア 32-bit RISC-V SoCを作成し、Linuxを実行することに成功しました。
上記RV32IMACのデュアルコアSoCに加え、単精度と倍精度の浮動小数点拡張をサポートするRV32IMAFDCのシングルコアSoCでも、Linuxを実行することに成功しています。
関連記事は、こちら。
- Porting PicoSoC with PicoRV32 to Sipeed Tang Primer
- Testing LiteX/VexRiscv on Sipeed Tang Primer
- Running Dual-Core RISC-V Linux on Cheap FPGA Board(本記事)
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
デュアルコア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を実行することに成功しました。