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

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では、litex、pythondata-cpu-rocket及びlinux-on-litex-rocketリポジトリに、XC7A100Tを搭載したWukongボード用のCPUバリアントとしてlinux4dとfull2dを追加する変更を加えています。
CPUバリアントのlinux4dとfull2dは、それぞれクアッド・ミディアムコアとデュアル・ビッグコアを意味しています。
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

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は、それぞれデュアルコアとクアッドコアに対応しています。


