FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Gem5のチュートリアル "Learning Gem5"をやってみる(6. RISC-V向けのコンフィグレーションスクリプトの変更)

www.gem5.org

x86向けに作成した簡単なコンフィグレーションスクリプトを、RISC-V向けに拡張する。

ドキュメントではARM向けになっているが、RISC-Vでやってみることにする。

RISC-Vバイナリのダウンロード

mkdir -p cpu_tests/benchmarks/bin/riscv
cd cpu_tests/benchmarks/bin/riscv
wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/riscv/Bubblesort
wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/riscv/FloatMM

RISC-V向けにビルドがされていることを想定。

simple.pyをRISC-V向けに変更する

PIOと割り込みポートについて、x86では接続する必要があったが、x86以外のISAではこの必要はない。以下の3行は消してよい。

system.cpu.createInterruptController()
#system.cpu.interrupts[0].pio = system.membus.mem_side_ports
#system.cpu.interrupts[0].int_requestor = system.membus.cpu_side_ports
#system.cpu.interrupts[0].int_responder = system.membus.mem_side_ports

system.system_port = system.membus.cpu_side_ports

バイナリの位置を変更する。

thispath = os.path.dirname(os.path.realpath(__file__))
binary = os.path.join(
    thispath,
    "../../../",
    "tests/gem5/cpu_tests/benchmarks/bin/riscv/Bubblesort",
)

gem5の実行

以下のコマンドでgem5を実行する。

./build/RISCV/gem5.opt configs/learning_gem5/part1/simple-riscv.py

無事にBubblesortが実行できることが確認できた。

gem5 Simulator System.  https://www.gem5.org
gem5 is copyrighted software; use the --copyright option for details.

gem5 version 22.1.0.0
gem5 compiled Jun 13 2023 10:10:10
gem5 started Jun 27 2023 23:59:18
gem5 executing on kimura-tower, pid 3153013
command line: ./build/RISCV/gem5.opt configs/learning_gem5/part1/simple-riscv.py

Openinig /home/kimura/work/gem5/gem5/configs/learning_gem5/part1/../../../tests/gem5/cpu_tests/benchmarks/bin/riscv/Bubblesort ...
Global frequency set at 1000000000000 ticks per second
warn: No dot file generated. Please install pydot to generate the dot file and pdf.
build/RISCV/mem/dram_interface.cc:690: warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (512 Mbytes)
build/RISCV/arch/riscv/linux/se_workload.cc:60: warn: Unknown operating system; assuming Linux.
0: system.remote_gdb: listening for remote gdb on port 7000
Beginning simulation!
build/RISCV/sim/simulate.cc:192: info: Entering event queue @ 0.  Starting simulation...
-50000
Exiting @ tick 375612263000 because exiting with last active thread context

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com