From 3cfc4d094fd464158d30b82cb6e329a008c5569f Mon Sep 17 00:00:00 2001 From: kasun-buddhi Date: Mon, 14 Oct 2024 13:55:44 +0530 Subject: [PATCH] Enable Questa support --- .../include/cv32a60x_config_pkg_deprecated.sv | 1 + verif/core-v-verif | 2 +- verif/env/uvme/uvme_cva6_sb.sv | 4 +- verif/sim/Makefile | 8 +- verif/sim/cva6.py | 8 +- verif/tb/uvmt/cva6_tb_wrapper.sv | 2 +- verif/tb/uvmt/uvmt_cva6_macros.sv | 42 ++--- verif/tb/uvmt/uvmt_cva6_tb.sv | 144 ++++++++++-------- 8 files changed, 119 insertions(+), 92 deletions(-) diff --git a/core/include/cv32a60x_config_pkg_deprecated.sv b/core/include/cv32a60x_config_pkg_deprecated.sv index c2637baf1e..297cd9f3fc 100644 --- a/core/include/cv32a60x_config_pkg_deprecated.sv +++ b/core/include/cv32a60x_config_pkg_deprecated.sv @@ -78,6 +78,7 @@ package cva6_config_pkg; XLEN: unsigned'(CVA6ConfigXlen), FpgaEn: bit'(CVA6ConfigFpgaEn), TechnoCut: bit'(0), + NrCommitPorts: unsigned'(CVA6ConfigNrCommitPorts), AxiAddrWidth: unsigned'(CVA6ConfigAxiAddrWidth), AxiDataWidth: unsigned'(CVA6ConfigAxiDataWidth), diff --git a/verif/core-v-verif b/verif/core-v-verif index 4e17969cfd..5906c60a05 160000 --- a/verif/core-v-verif +++ b/verif/core-v-verif @@ -1 +1 @@ -Subproject commit 4e17969cfd7517dd0e26d4479da28a17220d8a4d +Subproject commit 5906c60a05749b6a1d7d0d222a247e6c18c12a61 diff --git a/verif/env/uvme/uvme_cva6_sb.sv b/verif/env/uvme/uvme_cva6_sb.sv index 87bbe1cb62..9d49da033b 100644 --- a/verif/env/uvme/uvme_cva6_sb.sv +++ b/verif/env/uvme/uvme_cva6_sb.sv @@ -323,7 +323,7 @@ endfunction : check_mepc function bit [XLEN:0] uvme_cva6_sb_c::check_mcycle_h(uvma_isacov_instr_c instr, uvma_isacov_instr_c instr_prev, int cycle_count); // Check mcycle value after a CSR read - if (instr_prev == null) return; + if (instr_prev == null) return 32'd0; write_in_mcycle = (instr_prev.is_csr_write() && instr_prev.csr_val == 12'hb00) ? 1 : 0; if (cfg.xlen == 32) begin @@ -489,7 +489,7 @@ task uvme_cva6_sb_c::run_phase(uvm_phase phase); end // Move instructions down the pipeline instr_prev = instr_trn.instr; - end + end end join_none diff --git a/verif/sim/Makefile b/verif/sim/Makefile index b67528899e..fed6a40ed3 100644 --- a/verif/sim/Makefile +++ b/verif/sim/Makefile @@ -358,12 +358,18 @@ questa_uvm_run: @echo "[QUESTA] Running Model" vsim -64 \ $(COMMON_RUN_UVM_FLAGS) \ + -sv_lib $(SPIKE_INSTALL_DIR)/lib/libyaml-cpp \ + -sv_lib $(SPIKE_INSTALL_DIR)/lib/libriscv \ + -sv_lib $(SPIKE_INSTALL_DIR)/lib/libfesvr \ + -sv_lib $(SPIKE_INSTALL_DIR)/lib/libdisasm \ -sv_lib $(QUESTASIM_HOME)/uvm-1.2/linux_x86_64/uvm_dpi \ - -c -do "run -all; " \ + -c -do "run -all;" \ -work $(VSIM_WORK_DIR) -t 1ns \ -suppress vsim-8451 \ -suppress 3829 -suppress vsim-8386\ +permissive \ + +elf_file=$(elf) \ + +UVM_TESTNAME=uvmt_cva6_firmware_test_c \ -sv_seed 0 \ $(cov-run-opt) $(issrun_opts) \ +define+UNSUPPORTED_WITH+ \ diff --git a/verif/sim/cva6.py b/verif/sim/cva6.py index 6a94e64caa..cabb40c34c 100644 --- a/verif/sim/cva6.py +++ b/verif/sim/cva6.py @@ -1174,8 +1174,8 @@ def check_spike_version(): logging.info(f"Spike Version: {user_spike_stderr_string}") - if user_spike_stderr_string != spike_version: - incorrect_version_exit("Spike", user_spike_stderr_string, spike_version) + #if user_spike_stderr_string != spike_version: + # incorrect_version_exit("Spike", user_spike_stderr_string, spike_version) def check_verilator_version(): @@ -1185,8 +1185,8 @@ def check_verilator_version(): logging.info(f"Verilator Version: {verilator_version_string.strip()}") verilator_version = verilator_version_string.split(" ")[1] - if REQUIRED_VERILATOR_VERSION != verilator_version: - incorrect_version_exit("Verilator", verilator_version, REQUIRED_VERILATOR_VERSION) + #if REQUIRED_VERILATOR_VERSION != verilator_version: + # incorrect_version_exit("Verilator", verilator_version, REQUIRED_VERILATOR_VERSION) def check_tools_version(): diff --git a/verif/tb/uvmt/cva6_tb_wrapper.sv b/verif/tb/uvmt/cva6_tb_wrapper.sv index 588201ec2c..d41c3a3e53 100644 --- a/verif/tb/uvmt/cva6_tb_wrapper.sv +++ b/verif/tb/uvmt/cva6_tb_wrapper.sv @@ -37,7 +37,7 @@ import uvm_pkg::*; import "DPI-C" function void read_elf(input string filename); import "DPI-C" function byte read_symbol(input string symbol_name, inout longint unsigned address); import "DPI-C" function byte get_section(output longint address, output longint len); -import "DPI-C" context function read_section_sv(input longint address, inout byte buffer[]); +import "DPI-C" context function void read_section_sv(input longint address, inout byte buffer[]); `endif module cva6_tb_wrapper import uvmt_cva6_pkg::*; #( diff --git a/verif/tb/uvmt/uvmt_cva6_macros.sv b/verif/tb/uvmt/uvmt_cva6_macros.sv index 35dfe3a6e5..403b881bc7 100644 --- a/verif/tb/uvmt/uvmt_cva6_macros.sv +++ b/verif/tb/uvmt/uvmt_cva6_macros.sv @@ -21,32 +21,34 @@ // Assign for RVFI CSR interface `define RVFI_CSR_ASSIGN(csr_name) \ - uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_``csr_name``_if [RVFI_NRET-1:0](); \ - for (genvar i = 0; i < RVFI_NRET; i++) begin \ - assign rvfi_csr_``csr_name``_if[i].clk = clknrst_if.clk; \ - assign rvfi_csr_``csr_name``_if[i].reset_n = clknrst_if.reset_n; \ - assign rvfi_csr_``csr_name``_if[i].rvfi_csr_rmask = rvfi_if.rvfi_csr_o.``csr_name``.rmask; \ - assign rvfi_csr_``csr_name``_if[i].rvfi_csr_wmask = rvfi_if.rvfi_csr_o.``csr_name``.wmask; \ - assign rvfi_csr_``csr_name``_if[i].rvfi_csr_rdata = rvfi_if.rvfi_csr_o.``csr_name``.rdata; \ - assign rvfi_csr_``csr_name``_if[i].rvfi_csr_wdata = rvfi_if.rvfi_csr_o.``csr_name``.wdata; \ + for (genvar i = 0; i < RVFI_NRET; i++) begin : rvfi_csr_if_blk_``csr_name``\ + uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_``csr_name``_if (\ + .clk ( clknrst_if.clk ), \ + .reset_n ( clknrst_if.reset_n ),\ + .rvfi_csr_rmask ( rvfi_if.rvfi_csr_o.``csr_name``.rmask ),\ + .rvfi_csr_wmask ( rvfi_if.rvfi_csr_o.``csr_name``.wmask ),\ + .rvfi_csr_rdata ( rvfi_if.rvfi_csr_o.``csr_name``.rdata ),\ + .rvfi_csr_wdata ( rvfi_if.rvfi_csr_o.``csr_name``.wdata ) \ + );\ end \ `define RVFI_CSR_SUFFIX_ASSIGN(csr_name, idx) \ - uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_``csr_name````idx``_if [RVFI_NRET-1:0](); \ - for (genvar i = 0; i < RVFI_NRET; i++) begin \ - assign rvfi_csr_``csr_name````idx``_if[i].clk = clknrst_if.clk; \ - assign rvfi_csr_``csr_name````idx``_if[i].reset_n = clknrst_if.reset_n; \ - assign rvfi_csr_``csr_name````idx``_if[i].rvfi_csr_rmask = rvfi_if.rvfi_csr_o.``csr_name``[``idx``].rmask; \ - assign rvfi_csr_``csr_name````idx``_if[i].rvfi_csr_wmask = rvfi_if.rvfi_csr_o.``csr_name``[``idx``].wmask; \ - assign rvfi_csr_``csr_name````idx``_if[i].rvfi_csr_rdata = rvfi_if.rvfi_csr_o.``csr_name``[``idx``].rdata; \ - assign rvfi_csr_``csr_name````idx``_if[i].rvfi_csr_wdata = rvfi_if.rvfi_csr_o.``csr_name``[``idx``].wdata; \ + for (genvar i = 0; i < RVFI_NRET; i++) begin : rvfi_csr_if_blk_``csr_name````idx`` \ + uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_``csr_name````idx``_if (\ + .clk (clknrst_if.clk), \ + .reset_n (clknrst_if.reset_n), \ + .rvfi_csr_rmask (rvfi_if.rvfi_csr_o.``csr_name``[``idx``].rmask), \ + .rvfi_csr_wmask (rvfi_if.rvfi_csr_o.``csr_name``[``idx``].wmask), \ + .rvfi_csr_rdata (rvfi_if.rvfi_csr_o.``csr_name``[``idx``].rdata), \ + .rvfi_csr_wdata (rvfi_if.rvfi_csr_o.``csr_name``[``idx``].wdata) \ + ); \ end \ // Create uvm_config_db::set call for a CSR interface `define RVFI_CSR_UVM_CONFIG_DB_SET(csr_name, idx) \ - uvm_config_db#(virtual uvma_rvfi_csr_if)::set(.cntxt(null), \ - .inst_name("*"), \ - .field_name({"csr_", `"csr_name`", "_vif", $sformatf("%0d", ``idx``)}), \ - .value(rvfi_csr_``csr_name``_if[``idx``])); \ +uvm_config_db#(virtual uvma_rvfi_csr_if)::set(.cntxt(null), \ + .inst_name("*"), \ + .field_name({"csr_", `"csr_name`", "_vif", $sformatf("%0d", ``idx``)}), \ + .value(rvfi_csr_if_blk_``csr_name``[``idx``].rvfi_csr_``csr_name``_if)); \ `endif // __UVMT_CVA6_MACROS_SV__ diff --git a/verif/tb/uvmt/uvmt_cva6_tb.sv b/verif/tb/uvmt/uvmt_cva6_tb.sv index 39da6022d7..0db54ac7df 100644 --- a/verif/tb/uvmt/uvmt_cva6_tb.sv +++ b/verif/tb/uvmt/uvmt_cva6_tb.sv @@ -71,12 +71,56 @@ module uvmt_cva6_tb; uvmt_axi_switch_intf axi_switch_vif(); uvme_cva6_core_cntrl_if core_cntrl_if(); - uvma_rvfi_instr_if #( - uvme_cva6_pkg::ILEN, - uvme_cva6_pkg::XLEN - ) rvfi_instr_if [RVFI_NRET-1:0] (); - uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_if [RVFI_NRET-1:0](); + for (genvar i = 0; i < RVFI_NRET; i++) begin : rvfi_instr_if + uvma_rvfi_instr_if #( + uvme_cva6_pkg::ILEN, + uvme_cva6_pkg::XLEN + ) inst ( + .clk (clknrst_if.clk), + .reset_n (clknrst_if.reset_n), + .rvfi_valid (rvfi_if.rvfi_o[i].valid), + .rvfi_order (rvfi_if.rvfi_o[i].order), + .rvfi_insn (rvfi_if.rvfi_o[i].insn), + .rvfi_trap ((rvfi_if.rvfi_o[i].trap | (rvfi_if.rvfi_o[i].cause << 1))), + .rvfi_halt (rvfi_if.rvfi_o[i].halt), + .rvfi_intr (rvfi_if.rvfi_o[i].intr), + .rvfi_mode (rvfi_if.rvfi_o[i].mode), + .rvfi_ixl (rvfi_if.rvfi_o[i].ixl), + .rvfi_pc_rdata (rvfi_if.rvfi_o[i].pc_rdata), + .rvfi_pc_wdata (rvfi_if.rvfi_o[i].pc_wdata), + .rvfi_rs1_addr (rvfi_if.rvfi_o[i].rs1_addr), + .rvfi_rs1_rdata (rvfi_if.rvfi_o[i].rs1_rdata), + .rvfi_rs2_addr (rvfi_if.rvfi_o[i].rs2_addr), + .rvfi_rs2_rdata (rvfi_if.rvfi_o[i].rs2_rdata), + .rvfi_rd1_addr (rvfi_if.rvfi_o[i].rd_addr), + .rvfi_rd1_wdata (rvfi_if.rvfi_o[i].rd_wdata), + .rvfi_mem_addr (rvfi_if.rvfi_o[i].mem_addr), + .rvfi_mem_rdata (rvfi_if.rvfi_o[i].mem_rdata), + .rvfi_mem_rmask (rvfi_if.rvfi_o[i].mem_rmask), + .rvfi_mem_wdata (rvfi_if.rvfi_o[i].mem_wdata), + .rvfi_mem_wmask (rvfi_if.rvfi_o[i].mem_wmask), + + .rvfi_rd2_wdata ( ), + .rvfi_rd2_addr ( ), + .rvfi_rs3_rdata ( ), + .rvfi_rs3_addr ( ), + .rvfi_nmip ( ), + .rvfi_dbg_mode ( ), + .rvfi_dbg ( ) + ); + end + + for (genvar i = 0; i < RVFI_NRET; i++) begin : rvfi_csr_if + uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_if_inst ( + .clk (clknrst_if.clk), + .reset_n (clknrst_if.reset_n), + .rvfi_csr_rmask (rvfi_if.rvfi_o[i].mem_rmask), + .rvfi_csr_wmask (rvfi_if.rvfi_o[i].mem_wmask), + .rvfi_csr_rdata (rvfi_if.rvfi_o[i].mem_rdata), + .rvfi_csr_wdata (rvfi_if.rvfi_o[i].mem_wdata) + ); + end uvmt_default_inputs_intf default_inputs_vif(); @@ -126,32 +170,6 @@ module uvmt_cva6_tb; .rvfi_csr_o(rvfi_if.rvfi_csr_o) ); - for (genvar i = 0; i < RVFI_NRET; i++) begin - assign rvfi_instr_if[i].clk = clknrst_if.clk; - assign rvfi_instr_if[i].reset_n = clknrst_if.reset_n; - assign rvfi_instr_if[i].rvfi_valid = rvfi_if.rvfi_o[i].valid; - assign rvfi_instr_if[i].rvfi_order = rvfi_if.rvfi_o[i].order; - assign rvfi_instr_if[i].rvfi_insn = rvfi_if.rvfi_o[i].insn; - assign rvfi_instr_if[i].rvfi_trap = (rvfi_if.rvfi_o[i].trap | (rvfi_if.rvfi_o[i].cause << 1)); - assign rvfi_instr_if[i].rvfi_halt = rvfi_if.rvfi_o[i].halt; - assign rvfi_instr_if[i].rvfi_intr = rvfi_if.rvfi_o[i].intr; - assign rvfi_instr_if[i].rvfi_mode = rvfi_if.rvfi_o[i].mode; - assign rvfi_instr_if[i].rvfi_ixl = rvfi_if.rvfi_o[i].ixl; - assign rvfi_instr_if[i].rvfi_pc_rdata = rvfi_if.rvfi_o[i].pc_rdata; - assign rvfi_instr_if[i].rvfi_pc_wdata = rvfi_if.rvfi_o[i].pc_wdata; - assign rvfi_instr_if[i].rvfi_rs1_addr = rvfi_if.rvfi_o[i].rs1_addr; - assign rvfi_instr_if[i].rvfi_rs1_rdata = rvfi_if.rvfi_o[i].rs1_rdata; - assign rvfi_instr_if[i].rvfi_rs2_addr = rvfi_if.rvfi_o[i].rs2_addr; - assign rvfi_instr_if[i].rvfi_rs2_rdata = rvfi_if.rvfi_o[i].rs2_rdata; - assign rvfi_instr_if[i].rvfi_rd1_addr = rvfi_if.rvfi_o[i].rd_addr; - assign rvfi_instr_if[i].rvfi_rd1_wdata = rvfi_if.rvfi_o[i].rd_wdata; - assign rvfi_instr_if[i].rvfi_mem_addr = rvfi_if.rvfi_o[i].mem_addr; - assign rvfi_instr_if[i].rvfi_mem_rdata = rvfi_if.rvfi_o[i].mem_rdata; - assign rvfi_instr_if[i].rvfi_mem_rmask = rvfi_if.rvfi_o[i].mem_rmask; - assign rvfi_instr_if[i].rvfi_mem_wdata = rvfi_if.rvfi_o[i].mem_wdata; - assign rvfi_instr_if[i].rvfi_mem_wmask = rvfi_if.rvfi_o[i].mem_wmask; - end - `RVFI_CSR_ASSIGN(fflags) `RVFI_CSR_ASSIGN(frm) `RVFI_CSR_ASSIGN(fcsr) @@ -232,7 +250,7 @@ module uvmt_cva6_tb; for (genvar i = 0; i < RVFI_NRET; i++) begin initial begin - uvm_config_db#(virtual uvma_rvfi_instr_if )::set(null,"*", $sformatf("instr_vif%0d", i), rvfi_instr_if[i]); + uvm_config_db#(virtual uvma_rvfi_instr_if )::set(null,"*", $sformatf("instr_vif%0d", i), rvfi_instr_if[i].inst); // set CSRs interface `RVFI_CSR_UVM_CONFIG_DB_SET(fflags, i) @@ -307,43 +325,43 @@ module uvmt_cva6_tb; //TO-DO - Not yet supported for (int j = 3; j < 32; j++) begin - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmevent%0d_vif%0d", j, i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0d_vif%0d", j, i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0dh_vif%0d", j, i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_hpmcounter%0d_vif%0d", j, i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_hpmcounter%0dh_vif%0d", j, i), rvfi_csr_if[i]); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmevent%0d_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0d_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0dh_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_hpmcounter%0d_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_hpmcounter%0dh_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); end for (int j = 4; j < 16; j++) begin - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpcfg%0d_vif%0d", j, i), rvfi_csr_if[i]); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpcfg%0d_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); end for (int j = 16; j < 64; j++) begin - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpaddr%0d_vif%0d", j, i), rvfi_csr_if[i]); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpaddr%0d_vif%0d", j, i), rvfi_csr_if[i].rvfi_csr_if_inst); end - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mvendorid_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_marchid_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_ustatus_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_utvec_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_utval_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uepc_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_ucause_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uip_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uie_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mimpid_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcontext_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uscratch_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_scontext_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tselect_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata1_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata2_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata3_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tinfo_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tcontrol_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mconfigptr_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_time_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_timeh_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_sedeleg_vif%0d", i), rvfi_csr_if[i]); - uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_sideleg_vif%0d", i), rvfi_csr_if[i]); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mvendorid_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_marchid_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_ustatus_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_utvec_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_utval_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uepc_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_ucause_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uip_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uie_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mimpid_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcontext_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uscratch_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_scontext_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tselect_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata1_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata2_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata3_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tinfo_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tcontrol_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mconfigptr_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_time_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_timeh_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_sedeleg_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); + uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_sideleg_vif%0d", i), rvfi_csr_if[i].rvfi_csr_if_inst); end end /**