オープンソース
RISCBoyは、ゼロから設計されたオープンソースのポータブルゲームコンソールです
RISCBoy is an open-source portable games console, designed from scratch (github.com)
要約
RISCBoyは、RISC-Vアーキテクチャを採用したオープンソースのポータブルゲームコンソールです。2001年のゲームボーイアドバンスを彷彿とさせる設計で、合成可能なVerilog 2005で記述されており、iCE40-HX8k FPGAへの搭載を目指しています。RV32IMC命令セットをサポートし、RISC-Vコンプライアンススイートをパスしています。PCBレイアウトや開発ツールチェーンの構築方法も詳細に説明されています。
全文翻訳
RISCBoy
RISCBoyは、ゼロから設計されたオープンソースのポータブルゲームコンソールです。これには以下が含まれます。
RISC-V互換CPU
ラスタグラフィックスパイプラインおよびディスプレイコントローラー
その他のチップインフラストラクチャ:バスファブリック、メモリコントローラー、UART、GPIOなど
KiCadでのPCBレイアウト
これは、RISC-Vが存在した2001年のパラレルユニバースからのゲームボーイアドバンスです。子供時代の携帯ゲーム機へのラブレターであり、それらを動かしていたテクノロジーへの午前3時の酔っ払いメッセージです。
設計は合成可能なVerilog 2005で記述されており、iCE40-HX8k FPGAに収まるように意図されています。これは7680個のロジックエレメントを持つLUT4ベースのFPGAであり、32ビットゲームコンソールを収めるには、バールとワセリン、あるいは単に慎重な設計が必要かもしれません。HX8kはかつてオープンソースのIcestorm FPGAツールチェーンがターゲットとする最大のFPGAでしたが、そのツールチェーンはそれ以上のものへと進んでいます。詳細情報はドキュメントで見つけることができます。
プロセッサはRV32IMC命令セットをサポートしており、これらの命令に対するRISC-Vコンプライアンススイート、riscv-formal検証スイート、および命令フロントエンドの一貫性と基本的なバスコンプライアンスのための私の独自のフォーマルプロパティチェックの一部をパスしています。また、MモードCSR、例外、およびベクター化された外部割り込みのためのシンプルな準拠拡張もサポートしています。
クローニング
このリポジトリは、HDLおよびテスト用のサブモジュールを使用しています。
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
または
git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive
注:プロセッサのスタンドアロンテストを実行するには、再帰的なサブモジュール更新が必要です。これはRISCBoyゲートウェアのビルドには必要ありません。
RV32IMCツールチェーンのビルド
RV32IMCツールチェーンは、ソフトウェアベースのテストのコンパイルに必要です。RISC-V GNU Toolchain GitHubの指示に従ってください。ただし、configure行は異なります。
# Ubuntu 20.04 の前提条件
sudo apt install -y autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
cd /tmp
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
# ./configure 引数が最も重要な違いです
./configure --prefix=/opt/riscv --with-arch=rv32imc --with-abi=ilp32 --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
sudo mkdir /opt/riscv
sudo chown $(whoami) /opt/riscv
make -j $(nproc)
より小さなFPGA、例えばiCE40 UP5kでは、RISCBoyは高性能なRV32IMCバージョンではなく、プロセッサのより小さなRV32Iバリアントを使用するように構成できます。コンパイラはRISCBoyで利用可能なISAバリアントのいずれもサポートしますが、--with-multilib引数を通じて、これらのバリアントの標準ライブラリを生成するようにツールチェーンビルドスクリプトに指示する必要もあります。RV32IMC標準ライブラリとリンクされたRV32I実行可能ファイルをRV32I専用プロセッサで実行すると、大変なことになります!
シミュレーション
シミュレーションフローはXilinx ISIM 14.xによって駆動されます。makefilesはscripts/フォルダにあります。これはLinux版のISIMでのみテストされています。また、これらのテストを実行するためにRISC-Vコンプライアンススイートをチェックアウトする必要があります(gitがKiCadディレクトリを検索してライブラリ構造について不平を言うのを防ぐために--が必要です)。
$ git submodule update --init --recursive
これが準備できたら、以下を実行できるようになるはずです。
. sourceme
cd test
./runtests
これにより、すべてのHDLレベルのテストが実行されます。ソフトウェアテストにはRV32ICツールチェーンが必要です。ISIMがデフォルト以外の場所にインストールされている場合は、sourcemeの一部のパスを調整する必要があるかもしれません。テストをグラフィカルにデバッグするには、そのmakefileを直接実行します。
cd system
make TEST=helloworld gui
PCB
画像はRev A PCBを示しています。これはiTeadの4層5x5cmプロトタイピングサービスと互換性があり、現在10枚で65ドルです。回路図はここで(pdf)表示できます。Rev Bはかなり異なるものになるでしょう。ゲートウェアとブートローダーが成熟するのを待っています。現在の開発ハードウェアは、私のSnowflake FPGAボードとよく似ています。
合成
iCE40のFPGA合成にはオープンソースのツールチェーンが使用されます。既存のmakefilesを使用してこのプロジェクトをビルドしたい場合は、まず私が使用したツールチェーンをビルドする必要があります。
Yosys (合成用)
nextpnr (配置配線用)
Project Icestorm (ビットストリーム生成用)
注:これらはLinuxでのみビルドしました。Windowsでもビルド可能だと聞いていますが、試していません。しかし、Raspberry Piでもビルド可能で、これは素晴らしいです。
ツールチェーンが配置されたら、以下を実行します。
. sourceme
cd synth
make -f HX8k-EVN.mk bit
Lattice HX8k評価ボードに適したFPGAイメージを生成します。ECP5についても非常に実験的なサポート(つまり、私の主な開発プラットフォームではありません)があり、Lattice LEF5UM5G-85F-EVN評価ボード用のボードファイルがあります。
make -f ECP5-EVN.mk BUILD=full bit
このビルドは、RISCBoy開発ハードウェアの外部512KiB、16ビット幅SRAMを、TrellisがECP5 sysmemブロックから構築する内部256KiB、32ビット幅同期メモリに置き換えます。
ディレクトリ構造
board: メインRISCBoy PCBおよび開発中に使用されたその他の小型ボード用のKiCadファイル
doc: LaTeXソースとドキュメント用の図、および最新のビルド済みPDF
hdl: RISCBoyゲートウェアのVerilogソース。
busfabric: AHB-liteクロスバーおよびAPBペリフェラルファブリック
graphics: ピクセル処理ユニットのソース
hazard5: RISC-Vプロセッサのソース。これは完全に自己完結型です。
mem: メモリコントローラー、およびメモリの推論/注入ラッパーとモデル
peris: UART、SPI、PWMなどの小さなペリフェラル
riscboy_core: RISCBoyを構成するコンポーネントをインスタンス化および接続するための構造モジュール
riscboy_fpga: いくつかの異なるFPGAおよびボードのトップレベルラッパー:IOを接続し、クロックとリセットを提供します
reference: RISCBoyで使用される標準(例:RISC-V命令セット)のいくつかのPDF
scripts: どこにも配置できないジャンク
software: システムレベルテストに使用されるCファイルの緩いコレクション。まだ実用的なソフトウェアツリーではありません。
synth: 全体システム合成の実行用作業ディレクトリ。トップレベルmakefiles、ピン制約ファイル。
test: 回帰テスト。一部はVerilogテストベンチであり、他はプロセッサまたはシステム全体のシミュレーションで実行されるソフトウェアテストケースです。