波形を取得するためには、ビルド時に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フィールドが分解して表示できるようになった。どうやらスカラ側からは以下の情報がベクトル側に転送されるようだ。