久しぶりにTenstorrentのOcelotの最新版を試行してみることにした。 OcelotはBOOMをベースとした、RISC-V Vectorの実装で、Tenstorrentがオープンソースとして公開している。
前回数か月前に試したときは、ビルドはうまくできたもののテストが上手く通らずにそこであきらめたのだった。
過去のOcelotを試した記事:
今回改めてOcelotを試してみる。
- 使用したバージョン:https://github.com/tenstorrent/riscv-ocelot/commit/b252ac4f5bd3ab50e69860e5529a1af5fdfd0edc
- 使用したChipyardのバージョン:https://github.com/tenstorrent/chipyard/commit/8b80ff9ef0ee76938f224ea5f7fc7bc3e110fd6f
単純にビルドすると、以下のようなエラーが出て落ちてしまった。
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
+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) #----------------------------------------------------------------------------------------
- 次に出てきたのは、本当に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]}; | ^~~~~~~~
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