FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages/

RISC-VツールセットをインストールしたDockerコンテナ作成(3. 自作RISC-Vエミュレータのリグレッション)

f:id:msyksphinz:20180418005224p:plain
f:id:msyksphinz:20180424020355p:plain

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。

前回RISC-Vのツールセットが入ったDockerコンテナを用意したので、RISC-Vのテストパタンセットを動作させてみる。

以下のようなDockerを起動するためのスクリプトを用意した。riscv_issは自作RISC-Vエミュレータの場所だ。

  • run_docker_test.sh
#!/bin/sh

sudo docker run -v ${PWD}/riscv_iss:/root/riscv_iss\
         -v ${PWD}/scripts:/root/scripts \
         -it msyksphinz/riscv-docker \
         /root/scripts/test_run.sh

ここで読んでいる test_run.sh は以下のような構成にしている。

  • test_run.sh
#!/bin/sh

export RISCV=/opt/riscv/

cd /root/riscv_iss/build_riscv_iss/isa_test/
make ISA_DIR=/riscv/riscv64-unknown-elf/share/riscv-tests/isa/

このようにしてRISC-V自作エミュレータディレクトリを外部ボリュームとしてDockerに接続し、リグレッションを実行した。

リグレッション結果は riscv_iss/build_riscv_iss/isa_test/result.txt に保存されている。無事にリグレッション成功だ!400本あるテストパタンのうち、Failしたのは以下の十数本だけだった。

  • riscv_iss/build_riscv_iss/isa_test/result.txt.txt
sc_forest_iss                  Fail
rv32mi-p-ma_fetch              Fail
rv64uc-v-rvc                   Fail
rv32si-p-sbreak                Fail
rv64uc-p-rvc                   Fail
rv32ua-v-lrsc                  Fail
rv32si-p-ma_fetch              Fail
rv32uc-p-rvc                   Fail
rv64ua-p-lrsc                  Fail
rv32mi-p-breakpoint            Fail
rv32uc-v-rvc                   Fail
rv64si-p-wfi                   Fail
rv64mi-p-access                Fail
rv32ua-p-lrsc                  Fail
rv64mi-p-ma_addr               Fail
rv32si-p-wfi                   Fail
rv32si-p-dirty                 Fail
rv64si-p-dirty                 Fail
rv64ua-v-lrsc                  Fail
rv32mi-p-mcsr                  Fail
rv64si-p-ma_fetch              Fail
rv32mi-p-shamt                 Fail
rv32mi-p-sbreak                Fail
rv32mi-p-ma_addr               Fail
rv64mi-p-illegal               Fail
rv64mi-p-ma_fetch              Fail
rv64mi-p-breakpoint            Fail
rv32mi-p-illegal               Fail
rv64ud-p-move                  Fail