結構時間が空いてしまった。sv2vによるSystemVerilogのデザインをVerilogに修正する作業の続き。Yosysのためにいくつかのデザインを修正している。
最初はfilelist
の中のファイルを1つ1つ変換して移行かと思ったが、パッケージの読み込みとかincludeの問題で結構エラーが多発してしまったので、結局は一気にまとめてfilelistを渡してしまった方が一発で変換できるという結論に至った。
コメントアウトしているが、最初に試したのは以下。大量のパッケージのinclude
が必要になり結果的に上手く変換できないケースが多発した。
# for svfile in `cat ../src/filelist.f` # do # echo ${svfile} # ../../sv2v/bin/sv2v ${svfile} \ # ../src/msrh_csr_def.svh \ # ../src/riscv_fpu_imfdc_pkg.sv \ # ../src/riscv64_pkg.sv \ # ../src/riscv_common_pkg.sv \ # ../src/msrh_standard_conf_pkg.sv \ # ../src/decoder_inst_cat.sv \ # ../src/decoder_reg.sv \ # ../src/decoder_alu_ctrl.sv \ # ../src/decoder_bru_ctrl.sv \ # ../src/decoder_csu_ctrl.sv \ # ../src/decoder_fpu_ctrl.sv \ # ../src/decoder_lsu_ctrl.sv \ # ../src/msrh_bru_pkg.sv \ # ../src/msrh_csu_pkg.sv \ # ../src/msrh_fpu_pkg.sv \ # ../src/msrh_lsu_pkg.sv \ # ../src/msrh_predict_pkg.sv \ # ../src/msrh_pkg.sv \ # ../src/msrh_lsu_pkg.sv > ${svfile/sv/v} # done
次に試したのは以下。ファイルリストごとファイルを全部引数に充てて変換する。
../../sv2v/bin/sv2v ../src/riscv_fpu_imfdc_pkg.sv \ ../src/riscv64_pkg.sv \ ../src/riscv_common_pkg.sv \ ../src/msrh_standard_conf_pkg.sv \ ../src/fpnew/src/fpnew_pkg.sv \ `cat ../src/filelist.f`> msrh_tile_wrapper.v
一応変換できた。が、怪しい記述が存在しているなあ...
assign o_selected = struct packed { logic is_valid; logic [bit_oh_or_00874_883D7.T_u_flush_sel_sv2v_pfunc_DA039 - 1:0] brtag; logic [bit_oh_or_00874_883D7.T_msrh_conf_pkg_RV_BRU_ENTRY_SIZE - 1:0] br_mask; logic [bit_oh_or_00874_883D7.T_msrh_conf_pkg_LSU_INST_NUM - 1:0] pipe_sel_idx_oh; struct packed { logic valid; logic [bit_oh_or_00874_883D7.T_riscv_pkg_VADDR_W - 1:0] pc_addr; logic [31:0] inst; logic [3:0] cat; logic is_rvc; logic [bit_oh_or_00874_883D7.T_u_flush_sel_sv2v_pfunc_DA039 - 1:0] brtag; logic [bit_oh_or_00874_883D7.T_msrh_conf_pkg_RV_BRU_ENTRY_SIZE - 1:0] br_mask; logic [bit_oh_or_00874_883D7.T_msrh_pkg_CMT_ID_W - 1:0] cmt_id; logic [bit_oh_or_00874_883D7.T_msrh_conf_pkg_DISP_SIZE - 1:0] grp_id; logic is_call; logic is_ret; logic [bit_oh_or_00874_883D7.T_u_flush_sel_sv2v_pfunc_94D84 - 1:0] ras_index; logic pred_taken; logic [1:0] bim_value; logic btb_valid; logic [bit_oh_or_00874_883D7.T_riscv_pkg_VADDR_W - 1:0] pred_target_vaddr; logic [(7 + bit_oh_or_00874_883D7.T_msrh_pkg_RNID_W) - 1:0] wr_reg; logic [2:0][(7 + bit_oh_or_00874_883D7.T_msrh_pkg_RNID_W) + (1 + 0):0] rd_regs; logic except_valid; logic [bit_oh_or_00874_883D7.T_u_flush_sel_sv2v_pfunc_860EC - 1:0] except_type; logic [bit_oh_or_00874_883D7.T_riscv_pkg_XLEN_W - 1:0] except_tval; logic fflags_update_valid; logic [4:0] fflags; } inst; logic [2:0] size; logic [bit_oh_or_00874_883D7.T_msrh_pkg_CMT_ID_W - 1:0] cmt_id; logic [bit_oh_or_00874_883D7.T_msrh_conf_pkg_DISP_SIZE - 1:0] grp_id; logic [3:0] state; logic is_get_data; logic [bit_oh_or_00874_883D7.T_riscv_pkg_VADDR_W - 1:0] vaddr; logic [bit_oh_or_00874_883D7.T_riscv_pkg_PADDR_W - 1:0] paddr; logic [bit_oh_or_00874_883D7.T_msrh_pkg_LRQ_ENTRY_SIZE - 1:0] lrq_haz_index_oh; logic except_valid; logic [bit_oh_or_00874_883D7.T_u_flush_sel_sv2v_pfunc_860EC - 1:0] except_type; }'(w_selected_array[WORDS - 1]);
これはEntryを選択するための論理だ。struct
を分解して接続してい直している。この部分がVerilatorでエラーとなってしまった。
-f sim_filelist.f %Error: ../src/../src/msrh_tile_wrapper.v:688:3: syntax error, unexpected "'", expecting "'{" 688 | }'(w_selected_array[WORDS - 1]); | ^ %Error: ../src/../src/msrh_tile_wrapper.v:879:3: syntax error, unexpected "'", expecting "'{" 879 | }'(w_selected_array[WORDS - 1]); | ^
うーん、完全サポートはちょっと難しいなあ。