k0b0's record.

Computer Engineering, Arts and Books

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

...