FPGA開発日記

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

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (7. 最新版でのテストベンチ試行)

github.com

msyksphinz.hatenablog.com

久しぶりにTenstorrentのOcelotの最新版を試行してみることにした。 OcelotはBOOMをベースとした、RISC-V Vectorの実装で、Tenstorrentがオープンソースとして公開している。

+SIM_CXXFLAGS += -DVL_DEBUG
3 0x00000000800018cc vfmacc.vv v24, v8, v16
-V{t1,1}- Verilated::debug is on. Message prefix indicates {<thread>,<sequence_number>}.
-V{t1,2}+    VTestHarness___024root___change_request
-V{t1,3}+    VTestHarness___024root___change_request_1
-V{t1,4}        CHANGE: /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/tt_mem.sv:170: TestHarness.chiptop.system.tile_prci_domain.tile_reset_domain.boom_tile.core.vec_exe_unit.iresp_fu_units_0.sv_pipeline.vfp_pipeline.mem.wb_full
%Error: /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/chipyard.TestHarness.MediumBoomVecConfig.harness.v:28715: Verilated model didn't converge
- See https://verilator.org/warn/DIDNOTCONVERGE
Aborting...

うーむ、VLE命令は動作していそうだが、VFMACCで失敗した。Verilator向けに改造した部分が良くなかったかな。

とりあえず以下の部分はループが発生している。

diff --git a/src/main/resources/vsrc/rvv/tt_mem.sv b/src/main/resources/vsrc/rvv/tt_mem.sv
index 99ab7b57..59bace80 100644
--- a/src/main/resources/vsrc/rvv/tt_mem.sv
+++ b/src/main/resources/vsrc/rvv/tt_mem.sv
@@ -320,7 +320,8 @@ assign wb_byten       = mem_byten;
 assign wb_ordered     = mem_ordered;
 assign wb_ldst_sz     = mem_ldst_sz;
 assign wb_hit         = 1'b0;
-assign wb_empty       = !wb_store_valid;
+// assign wb_empty       = !wb_store_valid;
+assign wb_empty       = 1'b0;
 assign wb_full_raw    = !i_data_req_rtr;

 assign wb_full = wb_full_raw | ((~wb_empty));

これを修正すると今度は以下のエラーが発生した。これはROBの中だ。修正するのはちょっとしんどそうだなあ..

3 0x0000000080001b74 jalr    ra, ra, -704 x 1 0x0000000080001b78
3 0x00000000800018b0 vsetvli a5, a2, e64, m8, ta, mu x15 0x0000000000000020
3 0x00000000800018b4 vfmv.v.f v16, fa0
3 0x00000000800018b8 bge     zero, a2, pc + 80
3 0x00000000800018bc vle64.v v8, (a0)
3 0x00000000800018c0 vle64.v v24, (a1)
3 0x00000000800018c4 sext.w  a4, a5 x14 0x0000000000000020
[47000] %Error: chipyard.TestHarness.MediumBoomVecConfig.top.v:340340: Assertion failed in TOP.TestHarness.chiptop.system.tile_prci_domain.tile_reset_domain.boom_tile.core.rob
%Error: /home/kimura/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/chipyard.TestHarness.MediumBoomVecConfig.top.v:340340: Verilog $stop
Aborting...