波形を取得するためには、ビルド時にtrace=1を指定する必要がある。
cd hardware make verilate trace=1
シミュレーションの実行方法は以下。
app=rv64uv-ara-vle8 make simv trace=1
以下のファイルが生成される。
trace_hart_00.dasm sim.fst
spike-dasm < trace_hart_00.dasm | less
1844 0x8000012a U (0x0000e426) c.sdsp s1, 8(sp)
1844 0x8000012c U (0x0000453d) c.li a0, 15
1853 0x8000012e U (0x0c0572d7) vsetvli t0, a0, e8, m1, ta, ma
1854 0x80000132 U (0x00002517) auipc a0, 0x2
1856 0x80000136 U (0x6cf50513) addi a0, a0, 1743
1857 0x8000013a U (0x00003597) auipc a1, 0x3
1868 0x8000013e U (0x04658493) addi s1, a1, 70
1875 0x80000142 U (0x02050007) vle8.v v0, (a0)
1875 0x80000146 U (0x00008526) c.mv a0, s1
1881 0x80000148 U (0x02050027) vse8.v v0, (a0)
1881 0x8000014c U (0x00003517) auipc a0, 0x3
1883 0x80000150 U (0xb3450513) addi a0, a0, -1228
1884 0x80000154 U (0x00004585) c.li a1, 1
1885 0x80000156 U (0x00004405) c.li s0, 1
1886 0x80000158 U (0x00001097) auipc ra, 0x1
1888 0x8000015c U (0x7a8080e7) jalr ra, ra, 1960
sim.fstを確認した。Coreの横に、Araのベクトルユニットが配置されているようだ。

Verilatorのオプションが足りずに、SystemVerilogのstructが潰されてしまっている。これはデバッグが難しいのでオプションを変更する。

diff --git a/hardware/Makefile b/hardware/Makefile index d85fd63..ba17103 100644 --- a/hardware/Makefile +++ b/hardware/Makefile @@ -198,7 +198,7 @@ $(veril_library)/V$(veril_top): $(config_file) Makefile ../Bender.yml $(shell fi $(ROOT_DIR)/tb/verilator/lowrisc_dv_verilator_simutil_verilator/cpp/*.cc \ $(ROOT_DIR)/tb/verilator/ara_tb.cpp \ --cc \ - $(if $(trace),--trace-fst -Wno-INSECURE,) \ + $(if $(trace),--trace-fst --trace-params --trace-structs --trace-underscore -Wno-INSECURE,) \ --top-module $(veril_top) && \ cd $(veril_library) && OBJCACHE='' make -j4 -f V$(veril_top).mk
これでビルドするとすごく時間がかかるようになった。足掛け3時間くらいはビルドしていた気がする。
さっそく実行してトレースファイルを取得しよう。
app=rv64uv-ara-vle8 make simv trace=1

SystemVerilogのstructフィールドが分解して表示できるようになった。どうやらスカラ側からは以下の情報がベクトル側に転送されるようだ。