FPGA開発日記

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

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

github.com

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

前回数か月前に試したときは、ビルドはうまくできたもののテストが上手く通らずにそこであきらめたのだった。


過去のOcelotを試した記事:

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com


今回改めてOcelotを試してみる。

単純にビルドすると、以下のようなエラーが出て落ちてしまった。

make CONFIG=MediumBoomVecConfig debug
%Error: /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/HardFloat_rawFN.v:37:10: Cannot find include file: HardFloat_consts.vi
   37 | `include "HardFloat_consts.vi"
      |          ^~~~~~~~~~~~~~~~~~~~~
%Error: /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/HardFloat_rawFN.v:37:10: This may be because there's no search path specified with -I<dir>.
   37 | `include "HardFloat_consts.vi"
      |          ^~~~~~~~~~~~~~~~~~~~~
        ... Looked in:
             HardFloat_consts.vi
             HardFloat_consts.vi.v
             HardFloat_consts.vi.sv
             /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/chipyard.TestHarness.MediumBoomVecConfig.debug/HardFloat_consts.vi
             /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/chipyard.TestHarness.MediumBoomVecConfig.debug/HardFloat_consts.vi.v
             /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/chipyard.TestHarness.MediumBoomVecConfig.debug/HardFloat_consts.vi.sv
  1. +incdir+を入れて、ヘッダファイルを読める場所を増やす。
diff --git a/sims/verilator/Makefile b/sims/verilator/Makefile
index a1186acc..010534e0 100644
--- a/sims/verilator/Makefile
+++ b/sims/verilator/Makefile
@@ -169,6 +169,7 @@ VERILATOR_NONCC_OPTS = \
        --top-module $(VLOG_MODEL) \
        --vpi \
        -f $(sim_common_files) \
+       +incdir+$(build_dir) \
        $(sim_vsrcs)

 #----------------------------------------------------------------------------------------
  1. 次に出てきたのは、本当にSyntaxエラーだ。 よく見たら過去の自分の記事で参照していた。
%Error-BLKANDNBLK: /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/tt_vec_mul_dp.sv:13:41: Unsupported: Blocked and non-blocking assignments to same variable: 'TestHarness.chiptop.system.tile_prci_dom
ain.tile_reset_domain.boom_tile.core.vec_exe_unit.iresp_fu_units_0.sv_pipeline.vfp_pipeline.vecu.__Vcellout__mul_dp__o_sum_1a'
   13 |        output logic [VLEN/8-1:0][128:0] o_sum_1a                                                                                                                                                                                                                             |                                         ^~~~~~~~
                   /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/tt_vec_mul_dp.sv:26:40: ... Location of blocking assignment                                                                             26 |       for(int i=VLEN/16;i<VLEN/8; i++) o_sum_1a[i][128:17] = '0;
      |                                        ^~~~~~~~
                   /home/msyksphinz/work/riscv/chipyard/chipyard-ocelot/sims/verilator/generated-src/chipyard.TestHarness.MediumBoomVecConfig/tt_vec_mul_dp.sv:18:43: ... Location of nonblocking assignment
   18 |          for(int i=VLEN/16;i<VLEN/8; i++) o_sum_1a[i][ 16:0] <= {{ 9{i_issgn_0a && i_sized_src1_0a[i][ 7]}}, i_sized_src1_0a[i][ 7:0]} * {{ 9{i_issgnsrc2_0a && i_sized_src2_0a[i][ 7]}}, i_sized_src2_0a[i][ 7:0]};                                                         |                                           ^~~~~~~~

msyksphinz.hatenablog.com

diff --git a/src/main/resources/vsrc/rvv/tt_vec_mul_dp.sv b/src/main/resources/vsrc/rvv/tt_vec_mul_dp.sv
index f27e835d..140b77b9 100644
--- a/src/main/resources/vsrc/rvv/tt_vec_mul_dp.sv
+++ b/src/main/resources/vsrc/rvv/tt_vec_mul_dp.sv
@@ -22,10 +22,10 @@ module tt_vec_mul_dp #(parameter
       end
    end

-   always_comb begin
-      for(int i=VLEN/16;i<VLEN/8; i++) o_sum_1a[i][128:17] = '0;
-      for(int i=VLEN/32;i<VLEN/16;i++) o_sum_1a[i][128:33] = '0;
-      for(int i=VLEN/64;i<VLEN/32;i++) o_sum_1a[i][128:65] = '0;
-   end
+   // always_comb begin
+   //    for(int i=VLEN/16;i<VLEN/8; i++) o_sum_1a[i][128:17] = '0;
+   //    for(int i=VLEN/32;i<VLEN/16;i++) o_sum_1a[i][128:33] = '0;
+   //    for(int i=VLEN/64;i<VLEN/32;i++) o_sum_1a[i][128:65] = '0;
+   // end

 endmodule