FPGA開発日記

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

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

github.com

msyksphinz.hatenablog.com

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

一応テストケースはPASSできるみたいだ。動作確認をした。

  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-simple.out         Completed after 4151 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-add.out    Completed after 10722 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-addi.out   Completed after 7731 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-and.out    Completed after 11224 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-andi.out   Completed after 6732 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-auipc.out          Completed after 4432 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-beq.out    Completed after 7957 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-bge.out    Completed after 8552 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-bgeu.out   Completed after 9484 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-p-blt.out    Completed after 7957 cycles
...
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-slliw.out          Completed after 145612 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-sllw.out   Completed after 156988 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-sltiu.out          Completed after 128002 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-sltu.out   Completed after 156222 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-sraiw.out          Completed after 145646 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-sraw.out   Completed after 157138 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-srliw.out          Completed after 145778 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-srlw.out   Completed after 157118 cycles
  [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/output/chipyard.TestHarness.MediumBoomVecConfig/rv64ui-v-subw.out   Completed after 146388 cycles

しかし、肝心のベクトルのテストケースがPASSしない。デバッグモードにして命令をトレースして実行してみた。

diff --git a/src/main/scala/common/config-mixins.scala b/src/main/scala/common/config-mixins.scala
index f4639bc5..08075db6 100644
--- a/src/main/scala/common/config-mixins.scala
+++ b/src/main/scala/common/config-mixins.scala
@@ -92,6 +92,7 @@ class WithRationalBoomTiles extends Config((site, here, up) => {
 class WithVector(coreWidth: Int = 1) extends Config((site, here, up) => {
   case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem), site) map {
     case tp: BoomTileAttachParams => tp.copy(tileParams = tp.tileParams.copy(core = tp.tileParams.core.copy(
+      enableCommitLogPrintf = true,
       enableVector = true,
       enableFastLoadUse = false, // Vector Unit doesn't support replay
       setvLen = 256,
./simulator-chipyard-MediumBoomVecConfig +verbose +permissive +dramsim +dramsim_ini_dir=/home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/generators/testchipip/src/main/resources/dramsim2_ini +max-cycles=10000000 +verbose +permissive-off /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/tests/rvv/kernels/axpy/axpy-vector.elf 2>&1 | sed 's/(0x/DASM(0x/g' | ${HOME}/riscv64/bin/spike-dasm
3 0x0000000080001b5c fsd     fa5, 0(a5)
3 0x0000000080001b60 addi    a5, a5, 8 x15 0x0000000080b1dfc0
3 0x0000000080001b64 bne     a5, a7, pc - 8
3 0x0000000080001b68 auipc   a5, 0x0 x15 0x0000000080001b68
3 0x0000000080001b6c fld     fa0, 232(a5) f10 0x3ff0000000000000
3 0x0000000080001b70 auipc   ra, 0x0 x 1 0x0000000080001b70
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
3 0x00000000800018c8 vsetvli zero, zero, e64, m8, tu, mu
3 0x00000000800018cc vfmacc.vv v24, v8, v16
- Verilated::debug attempted, but compiled without VL_DEBUG, so messages suppressed.
- Suggest remake using 'make ... CPPFLAGS=-DVL_DEBUG'
%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向けに改造した部分が良くなかったかな。引き続き調査する。