English README is here
- アーキテクチャ:RV32I
- 特権モード: Machine modeのみ
- User-Level ISA Version 2.2
- Privileged ISA Version 1.11
- 割り込み:外部割り込み
- CPUバス:インテル Avalon-MM インターフェース
- パイプライン: 5ステージ(IF/ID/EX/MEM/WB stage)
- 言語:Chisel v.3.4
標準ではCyclone10LP(10CL025YU256C8G)を使用する前提となっています.
- クロス開発環境:下記条件全てを満たす環境
- Windows 10/WSL2が動作する環境
- Quartus Prime Lite v.20.1.1以上が動作すること
- scala/sbt環境が用意されていること
- Pyhton 3.7以上が動作すること
- FPGA要件:以下のいずれかの要件を満たすデバイス
- Cyclone 10LP(10CL010またはそれ以上のロジックエレメントを有するデバイス)
- PLLが1つ以上搭載,7000LE以上のロジック・エレメント,1KByte以上のOn-Chip RAMを確保できるintel FPGA
git clone https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv --with-arch=rv32i
sudo make
cd -
git clone http://github.com/panda5mt/KyogenRV
cd KyogenRV/
make sdk
GUI/CUIいずれかを選択することができます.CUIを使う手法はクラウド上またはオンプレのWindows PCを使用する際に有用です.
Quartus Primeを起動し,fpga/kyogenrv_fpga_top.qpf
プロジェクトを開きます.
メニュー -> Processing -> Start Compilation でコンパイルを開始します.
ビルド用スクリプトbuild_sdk.sh
をエディタで開き,Quartus Primeのインストールフォルダ,KyogenRVのディレクトリなどを設定します.
間違いがないことを確認したら,プロジェクトのルートで以下を実行します.
./build_sdk.sh
上記いずれの方法を採用した場合においても,先ずビルドエラーがないことを確認したのちに,Pin PlannerやPlatform Designerを用い各自のボード環境に適合するプロジェクトに修正するようにしてください.
fpga
フォルダに下記のファイルが生成されます.
- kyogenrv_fpga_top.sof
CUIを使用した場合は下記のファイルも生成されます.
- kyogenrv_fpga_top.svf
src/sw/main.c
を変更,改変すると参考になると思われます.
コードが複数のファイルから構成される場合,またはファイル名が異なる場合は,変更または追加されたファイルに応じsrc/sw/common2.mk
を書き換えてください.
保存後,
make c_all
./mk_intel_hex.py
によりintel hexを生成できます. FPGAプロジェクトをふくめてリビルドする場合は
make sdk
です.再度Quartus Primeを起動し,fpga/kyogenrv_fpga_top.qpf
プロジェクトを開きます.
メニュー -> Processing -> Start Compilation でコンパイルを開始します.
生成されたsofファイルをQuartus Programmer経由でFPGAのコンフィグを行います.
GUIと比較し手順はシンプルです. 下記を実行しリビルドします.
./build_sdk.sh
適宜,sofまたはsvfを使用しFPGAのコンフィグを行います.
以下はシミュレーションの際の手順です.FPGA実機を使用する際には必要ありません
riscv-toolchainが必要となります.以下の手順は導入が済んでいる前提で進めていきます.
git clone http://github.com/panda5mt/KyogenRV
cd KyogenRV/
make clean
make test
アセンブラファイルを書き換える場合は,src/sw/test.s
にアセンブラファイルを記述し,
make testでアセンブル,実行が可能となります.
コンソール上で各命令処理時の各ステージの挙動,終了後の汎用レジスタ(x0 ~ x31)の値を確認することができます.
任意のファイル名のriscvのアセンブラファイル*.sをsrc/sw/
に置き,以下を実行することでhexファイルを生成することができます.(複数ファイル可)
./build_asm.py
./mk_intel_hex.py
git clone http://github.com/panda5mt/KyogenRV
riscv-testsをcloneします.
git clone https://github.com/riscv/riscv-tests
cd riscv-tests
git submodule update --init --recursive
リンカスクリプトを修正します.
nano env/p/link.ld
'.text'セクションが0x00000000から開始するように修正します.
SECTIONS
{
. = 0x00000000; # -> ここを修正
.text.init : { *(.text.init) }
. = ALIGN(0x1000);
.tohost : { *(.tohost) }
. = ALIGN(0x1000);
.text : { *(.text) }
. = ALIGN(0x1000);
.data : { *(.data) }
.bss : { *(.bss) }
_end = .;
}
link.ldを保存しriscv-testsをビルドします.
autoconf
./configure --prefix=<your-kyogenRVs-root-dir>/tests/
make
make install
cd ../
KyogenRVのルートディレクトリに移動し,下記のようにコマンドを入力することにより,riscv-testsのシミュレーションが行えます.
cd KyogenRV/
make clean
make riscv-tests
git clone http://github.com/panda5mt/KyogenRV
cd KyogenRV/
make clean
make hdl
CPUの初歩的なステートマシンと命令メモリを読み込むロジックです
git clone http://github.com/panda5mt/KyogenRV -b 0.0.2 --depth 1
cd KyogenRV/
make test
RISCVの基本的な命令のデコードと演算のためのALUの実装です
git clone http://github.com/panda5mt/KyogenRV -b 0.0.9 --depth 1
cd KyogenRV/
make test
分岐命令の実装とフェッチした命令をフラッシュする実装です
git clone http://github.com/panda5mt/KyogenRV -b 0.0.10.3 --depth 1
cd KyogenRV/
src/sw/test.s
にアセンブラファイルを記述し,
プロジェクトのルートフォルダで以下の方法でアセンブルしてください.(riscv-toolchainが必要となります)
make asm
その後src/sw/test.hex
が生成されます.このhexをCPUにロードし実行結果を見るには
make test
を実行します.
項目3までシングルパイプラインでした.ここで5段パイプラインにします
git clone http://github.com/panda5mt/KyogenRV -b 0.0.10.10 --depth 1
cd KyogenRV/
src/sw/test.s
にアセンブラファイルを記述し,
プロジェクトのルートフォルダで以下の方法でアセンブルしてください.(riscv-toolchainが必要となります)
make clean
make asm
その後src/sw/test.hex
が生成されます.
このhexをChiselプロジェクトでCPUにロードし実行結果を見るには,
make test
とします.なお,asmファイルを書き換えた場合,Makefileが自動認識するので
make test
するだけでOKです.
項目4でパイプライン化をしたため,状況によってはデータハザードが発生します. この解決を行います.
git clone http://github.com/panda5mt/KyogenRV -b 0.0.10.15 --depth 1
cd KyogenRV/
src/sw/test.s
にアセンブラファイルを記述し,
プロジェクトのルートフォルダで以下の方法でアセンブルしてください.(riscv-toolchainが必要となります)
make clean
make asm
その後src/sw/test.hex
が生成されます.
このhexをChiselプロジェクトでCPUにロードし実行結果を見るには,
make test
とします.なお,asmファイルを書き換えた場合,Makefileが自動認識するので
make test
するだけでOKです.
最新のプロジェクトをCloneしてください