FPGA開発日記

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

RISC-V Vector 1.0 をサポートするオープンソースCPU Araを試す (2. 波形の取得方法)

github.com

波形を取得するためには、ビルド時に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のベクトルユニットが配置されているようだ。

i_system内のi_arianeがスカラパイプライン部、i_araがベクトル部

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

acc_req_iは本来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
structのフィールドが分解して表示できるようになった。

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