Connect CSRs info from RVFI_CSR in the testbench & update simulation target (#1879)

This commit is contained in:
Jalali 2024-02-28 15:20:24 +00:00 committed by GitHub
parent 5dceb0d57a
commit ce0ab81630
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 215 additions and 58 deletions

View file

@ -167,7 +167,7 @@ class uvme_cva6_cfg_c extends uvma_core_cntrl_cfg_c;
clknrst_cfg.enabled == 1;
isacov_cfg.enabled == 1;
rvfi_cfg.enabled == 1;
rvfi_cfg.csr_enabled == 0;
rvfi_cfg.csr_enabled == 1;
}
isacov_cfg.seq_instr_group_x2_enabled == 1;

View file

@ -23,7 +23,7 @@ source ./verif/sim/setup-env.sh
export cov=1 #enable the Code Coverage
if ! [ -n "$DV_TARGET" ]; then
DV_TARGET=cv32a6_embedded
DV_TARGET=cv32a65x
fi
if ! [ -n "$DV_SIMULATORS" ]; then

View file

@ -24,7 +24,7 @@ source ./verif/regress/install-spike.sh
source ./verif/sim/setup-env.sh
if ! [ -n "$DV_TARGET" ]; then
DV_TARGET=cv32a6_embedded
DV_TARGET=cv32a65x
fi
if ! [ -n "$DV_SIMULATORS" ]; then

View file

@ -24,7 +24,7 @@ source ./verif/regress/install-spike.sh
source ./verif/sim/setup-env.sh
if ! [ -n "$DV_TARGET" ]; then
DV_TARGET=cv32a6_embedded
DV_TARGET=cv32a65x
fi
if ! [ -n "$DV_SIMULATORS" ]; then

View file

@ -11,3 +11,4 @@
-tree uvmt_cva6_tb.cva6_dut_wrap.cva6_tb_wrapper_i.i_cva6.instr_tracer_i
-tree uvmt_cva6_tb.cva6_dut_wrap.cva6_tb_wrapper_i.i_cva6.tracer_if
-tree uvmt_cva6_tb.cva6_dut_wrap.cva6_tb_wrapper_i.i_cva6.genblk6.i_cva6_rvfi_combi
-tree uvmt_cva6_tb.cva6_dut_wrap.cva6_tb_wrapper_i.i_cva6.i_cva6_rvfi_probes

View file

@ -464,7 +464,7 @@ def run_assembly(asm_test, iss_yaml, isa, target, mabi, gcc_opts, iss_opts, outp
base_cmd = parse_iss_yaml(iss, iss_yaml, isa, target, setting_dir, debug_cmd, priv)
cmd = get_iss_cmd(base_cmd, elf, target, log)
logging.info("[%0s] Running ISS simulation: %s" % (iss, cmd))
run_cmd(cmd, 300, debug_cmd = debug_cmd)
run_cmd(cmd, 500, debug_cmd = debug_cmd)
logging.info("[%0s] Running ISS simulation: %s ...done" % (iss, elf))
if len(iss_list) == 2:
compare_iss_log(iss_list, log_list, report)

View file

@ -19,5 +19,34 @@
`ifndef __UVMT_CVA6_MACROS_SV__
`define __UVMT_CVA6_MACROS_SV__
// 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; \
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; \
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``])); \
`endif // __UVMT_CVA6_MACROS_SV__

View file

@ -88,7 +88,7 @@ module uvmt_cva6_tb;
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]();
uvma_rvfi_csr_if#(uvme_cva6_pkg::XLEN) rvfi_csr_if [RVFI_NRET-1:0]();
uvmt_default_inputs_intf default_inputs_vif();
@ -109,6 +109,7 @@ module uvmt_cva6_tb;
.CVA6Cfg ( CVA6Cfg )
) rvfi_if(
.rvfi_o(),
.rvfi_csr_o(),
.tb_exit_o()
); // Status information generated by the Virtual Peripherals in the DUT WRAPPER memory.
@ -132,7 +133,7 @@ module uvmt_cva6_tb;
.core_cntrl_if(core_cntrl_if),
.tb_exit_o(rvfi_if.tb_exit_o),
.rvfi_o(rvfi_if.rvfi_o),
.rvfi_csr_o()
.rvfi_csr_o(rvfi_if.rvfi_csr_o)
);
for (genvar i = 0; i < RVFI_NRET; i++) begin
@ -162,6 +163,77 @@ module uvmt_cva6_tb;
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)
`RVFI_CSR_ASSIGN(ftran)
`RVFI_CSR_ASSIGN(dcsr)
`RVFI_CSR_ASSIGN(dpc)
`RVFI_CSR_ASSIGN(dscratch0)
`RVFI_CSR_ASSIGN(dscratch1)
`RVFI_CSR_ASSIGN(sstatus)
`RVFI_CSR_ASSIGN(sie)
`RVFI_CSR_ASSIGN(sip)
`RVFI_CSR_ASSIGN(stvec)
`RVFI_CSR_ASSIGN(scounteren)
`RVFI_CSR_ASSIGN(sscratch)
`RVFI_CSR_ASSIGN(sepc)
`RVFI_CSR_ASSIGN(scause)
`RVFI_CSR_ASSIGN(stval)
`RVFI_CSR_ASSIGN(satp)
`RVFI_CSR_ASSIGN(mstatus)
`RVFI_CSR_ASSIGN(mstatush)
`RVFI_CSR_ASSIGN(misa)
`RVFI_CSR_ASSIGN(medeleg)
`RVFI_CSR_ASSIGN(mideleg)
`RVFI_CSR_ASSIGN(mie)
`RVFI_CSR_ASSIGN(mtvec)
`RVFI_CSR_ASSIGN(mcounteren)
`RVFI_CSR_ASSIGN(mscratch)
`RVFI_CSR_ASSIGN(mepc)
`RVFI_CSR_ASSIGN(mcause)
`RVFI_CSR_ASSIGN(mtval)
`RVFI_CSR_ASSIGN(mip)
`RVFI_CSR_ASSIGN(menvcfg)
`RVFI_CSR_ASSIGN(menvcfgh)
`RVFI_CSR_ASSIGN(mvendorid)
`RVFI_CSR_ASSIGN(marchid)
`RVFI_CSR_ASSIGN(mhartid)
`RVFI_CSR_ASSIGN(mcountinhibit)
`RVFI_CSR_ASSIGN(mcycle)
`RVFI_CSR_ASSIGN(mcycleh)
`RVFI_CSR_ASSIGN(minstret)
`RVFI_CSR_ASSIGN(minstreth)
`RVFI_CSR_ASSIGN(cycle)
`RVFI_CSR_ASSIGN(cycleh)
`RVFI_CSR_ASSIGN(instret)
`RVFI_CSR_ASSIGN(instreth)
`RVFI_CSR_ASSIGN(dcache)
`RVFI_CSR_ASSIGN(icache)
`RVFI_CSR_ASSIGN(acc_cons)
`RVFI_CSR_ASSIGN(pmpcfg0)
`RVFI_CSR_ASSIGN(pmpcfg1)
`RVFI_CSR_ASSIGN(pmpcfg2)
`RVFI_CSR_ASSIGN(pmpcfg3)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 0)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 1)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 2)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 3)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 4)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 5)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 6)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 7)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 8)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 9)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 10)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 11)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 12)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 13)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 14)
`RVFI_CSR_SUFFIX_ASSIGN(pmpaddr, 15)
assign default_inputs_vif.hart_id = 64'h0000_0000_0000_0000;
assign default_inputs_vif.irq = 2'b00;
assign default_inputs_vif.ipi = 1'b0;
@ -173,62 +245,116 @@ module uvmt_cva6_tb;
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_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_mcountinhibit_vif%0d", i), rvfi_csr_if[i]);
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mstatus_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_mstatush_vif%0d", i), rvfi_csr_if[i]);
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_misa_vif%0d", i), rvfi_csr_if[i]);
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mtvec_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_mtval_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_mvendorid_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mscratch_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mepc_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uepc_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcause_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_ucause_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mip_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uip_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mie_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uie_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhartid_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mimpid_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_minstret_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_minstreth_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcontext_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcycle_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mcycleh_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_dcsr_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_dpc_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_dscratch0_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_dscratch1_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_uscratch_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_scontext_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tselect_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata1_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata2_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tdata3_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tinfo_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_tcontrol_vif%0d", i), .value(rvfi_csr_if[i]));
// set CSRs interface
`RVFI_CSR_UVM_CONFIG_DB_SET(fflags, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(frm, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(fcsr, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(ftran, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(dcsr, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(dpc, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(dscratch0, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(dscratch1, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(sstatus, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(sie, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(sip, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(stvec, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(scounteren, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(sscratch, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(sepc, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(scause, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(stval, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(satp, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mstatus, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mstatush, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(marchid, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(misa, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(medeleg, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mideleg, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mie, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mtvec, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mcounteren, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mscratch, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mepc, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mcause, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mtval, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mip, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(menvcfg, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(menvcfgh, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(marchid, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mhartid, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mcountinhibit, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mcycle, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(mcycleh, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(minstret, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(minstreth, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(cycle, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(cycleh, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(instret, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(instreth, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(dcache, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(icache, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpcfg0, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpcfg1, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpcfg2, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpcfg3, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr0, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr1, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr2, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr3, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr4, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr5, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr6, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr7, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr8, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr9, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr10, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr11, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr12, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr13, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr14, i)
`RVFI_CSR_UVM_CONFIG_DB_SET(pmpaddr15, i)
//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), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0d_vif%0d", j, i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mhpmcounter%0dh_vif%0d", j, i), .value(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]);
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]);
end
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_mconfigptr_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_cycle_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_cycleh_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_instret_vif%0d", i), .value(rvfi_csr_if[i]));
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_instreth_vif%0d", i), .value(rvfi_csr_if[i]));
for (int j = 0; j < 16; j++) begin
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpcfg%0d_vif%0d", j, i), .value(rvfi_csr_if[i]));
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]);
end
for (int j = 0; j < 64; j++) begin
uvm_config_db#(virtual uvma_rvfi_csr_if )::set(null,"*", $sformatf("csr_pmpaddr%0d_vif%0d", j, i), .value(rvfi_csr_if[i]));
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]);
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]);
end
end
/**

View file

@ -26,6 +26,7 @@ interface uvmt_rvfi_if #(
parameter type rvfi_instr_t = logic
) (
output rvfi_instr_t [CVA6Cfg.NrCommitPorts-1:0] rvfi_o,
output ariane_pkg::rvfi_csr_t rvfi_csr_o,
output logic[31:0] tb_exit_o
);