Rocket Chipでベンチマークプログラムをシミュレーションする
Rocket Chipでベンチマークプログラムをシミュレーションする
Rocket Chipでベンチマークプログラム(qsort)をシミュレーションしてみる。
環境
- Ubuntu 16.04 LTS on virtualbox(MacOS)
- Processor core : 2
- Memory : 2 GB
前準備
リポジトリからRocket Chipをダウンロード
git clone https://github.com/freechipsproject/rocket-chip.git --recurse-submodules
javaのインストール
Rocket ChipのChselを動作させるためにjavaをインストール。
sudo apt-get install openjdk-8-jdk
RISC-VのISSをインストール
以下を参照してISSをインストールする。
RISC-VのInstruction Set Simulator(ISS)を試す[追記:インストールされるツール群] - k0b0's record.
シミュレーション用のverilogファイル(Rocke Chipの回路記述)を生成
以下のコマンドを実行してシミュレーション用のファイル(Chsel記述)をコンパイルしてVerilog(.v)ファイルを生成する。生成されたファイル(.v)は"./rocket-chip/emulator/generated-src"に"freechips.rocketchip.system.DefaultConfig.v"として格納される。(このファイルはベンチマークプログラムをシミュレーションする際に使用される。)
$ cd ./rocket-chip/emulator $ make
qsourtベンチマークプログラムのコンパイルと実行
ベンチマークプログラムのコンパイル
$ cd ./rocket-chip/riscv-tools/riscv-tests/benchmarks $ make
ベンチマークプログラム(qsort)の実行
以下のコマンドを実行してシミュレーションを開始する。
実行結果は"./rocket-chip/emulator/output/qsort.riscv.out"に出力される。
$ cd ./rocket-chip/emulator $ make output/qsort.riscv.out
実行結果(qsort.riscv.outの内容の一部)
using random seed 1533870499 This emulator compiled with JTAG Remote Bitbang client. To enable, use +jtag_rbb_enable=1. Listening on port 42749 C0: 0 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 1 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 2 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 3 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 4 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 5 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 6 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 7 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 8 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 9 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 10 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 11 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 12 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 13 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 14 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 15 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 16 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 17 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 18 [0] pc=[e63eddd5ff] W[r 0=0000000000000000][0] R[r31=0000000000000000] R[r11=7353b188f14663aa] inst=[30bfedf7] unknown C0: 19 [1] pc=[0000010040] W[r10=0000000000000000][1] R[r 0=0000000000000000] R[r20=363a1b805fa41767] inst=[f1402573] csrr a0, mhartid C0: 20 [1] pc=[0000010044] W[r11=0000000000010044][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00000597] auipc a1, 0x0 C0: 21 [1] pc=[0000010048] W[r11=0000000000010080][1] R[r11=0000000000010044] R[r28=363a1b805fa41767] inst=[03c58593] addi a1, a1, 60 C0: 22 [1] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=0000000000000000] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 23 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=6e8686cc25710913] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 24 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=6e8686cc25710913] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 25 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=6e8686cc25710913] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 26 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=6e8686cc25710913] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 27 [1] pc=[0000010050] W[r 0=0000000000010052][1] R[r31=6e8686cc25710913] R[r29=363a1b805fa41767] inst=[0000bff5] j pc - 4 C0: 28 [1] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=0000000000000000] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 29 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=6e8686cc25710913] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 30 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=0000000000000000] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 31 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=0000000000000000] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 32 [0] pc=[000001004c] W[r 0=ffffffcd61ab2aee][0] R[r 0=0000000000000000] R[r 5=363a1b805fa41767] inst=[10500073] wfi (args unknown) C0: 33 [1] pc=[0000010050] W[r 0=0000000000010052][1] R[r31=6e8686cc25710913] R[r29=363a1b805fa41767] inst=[0000bff5] j pc - 4 ...