Skip to content
RISC-V Software Simulation
C++ Assembly C Dockerfile Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
rv32i-sample-src
src Close #8: Hello RISC-V!の出力確認 May 2, 2019
.gitignore
LICENSE
Makefile
README.md Update README.md May 3, 2019
WORKSPACE Bazel環境構築 Apr 23, 2019

README.md

rv32i-sim

ss

アーキテクチャ理解を深めるために、RISC-V 基本整数ISAであるrv32iとELFローダーをC++で実装しています。 gccでコンパイルした生成物を直接読み込んで実行することができます。

プレゼン資料

https://kamiyaowl.github.io/presentation/dist/lets-impl-rv32i.html#1

制約(+Known Issue)

  • ELFファイルの種類に動的リンクが含まれるものは使用できない

ElfLoaderはProgram Headerのp_typeがLOADのものだけをMemにロードします。

  • 使用できる命令セットはiのみ

マシンモードを実装していないため、例外であったり例えば_exit()ecallでもプロセッサは停止します。CSRも実装されていないので割り込みや例外の取得などは行うことはできません。

テスト方法

rv32i向けテストコードのビルド

ビルドツールを実行できるDockerfileを用意しています。

$ cd /rv32i-sample-src
$ docker-compose up

hello.cからhello.shello.oを生成し、objdumpした結果を表示します。

エミュレータ本体のビルド

必要なソースコードはすべて/srcに配置しています。bazelを使用していますが、vscode用のtaskを用意しているのでこちらでもビルド可能です。

また実行時に上書き可能ですが、バイナリの所在をハードコードしてしまっているので気になるようでしたら修正してください。 またデバッグ情報の表示レベルも変更可能です。

/src/main.cpp

$ make build

実行

先にバイナリのパスを変更していない場合、実行時の第1引数にhello.oの場所を指定して実行してください。

License

MIT License

You can’t perform that action at this time.