Booting RISC-V Debian in LiteX/Rocket on FPGA boards

debian-riscv-litex-rocket

Luffcaでは、LiteXを用いて64-bit RISC-VのRocket ChipのSoCを構成し、2種類のFPGAボード(Qmtech社のWukongボードとDigilent社のNexys Video)上で、RISC-V Debianをブートすることに成功しました。
これらのSoCは、https://github.com/litex-hub/linux-on-litex-rocket等をベースにしています。
アイキャッチ画像は、クアッドコアSoCのNexys VideoにUART接続したターミナル上で、htopを実行しているときの様子です。

LiteX/Rocket

Luffcaでは、litexpythondata-cpu-rocket及びlinux-on-litex-rocketリポジトリに、XC7A100Tを搭載したWukongボード用のCPUバリアントとしてlinux4dfull2dを追加する変更を加えています。
CPUバリアントのlinux4dfull2dは、それぞれクアッド・ミディアムコアとデュアル・ビッグコアを意味しています。
XC7A200Tを搭載したNexys Videoの場合、最大でクアッド・ビッグコアのfull4dに対応します。
下の表に示すように、LiteXを用いたSoCは、周辺のIPコアが小さいためか、こちら記事で紹介したVivadoを用いたSoC(vivado-risc-v)の2倍のコア数に対応可能です。

FPGA board Max bigcore
vivado-risc-v LiteX/Rocket
Wukongボード シングル デュアル
Nexys Video デュアル クアッド

OpenSBI for LiteX/Rocket

debian-riscv-litex-rocket-2

Luffcaでは、OpenSBIをLiteX/Rocketに移植済です。
このため、BBL(Berkeley Boot Loader)を用いたboot.binではなく、boot.jsonを使用してブートさせています。
なお、ブートシーケンスは、下記の通りです。
OpenSBI -> Linux -> Debian等のrootfs

Debian rootfs for LiteX/Rocket

Debianのrootfsは、Boot-Debian-On-Litex-Rocket Step3: Build Debian rootfsの記載のように、systemdの代わりにsysvinitを使用しています。
今回は、releasesに用意されているrootfsを使用して、Debianをブートしました。
なお、Debian環境としてvivado-risc-vと比較すると、halt時等にRCUのstallが発生しており、まだ不安定な印象です。

まとめ

Luffcaでは、LiteXを用いて64-bit RISC-VのRocket ChipのSoCを構成し、Qmtech社のWukongボードとDigilent社のNexys Video上で、RISC-V Debianをブートすることに成功しました。
LiteXを用いたWukongボードとNexys VideoのSoCは、それぞれデュアルコアとクアッドコアに対応しています。