Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
db9d6f6
dsim_compile_opts -> dsim_opts
akashlevy Jun 18, 2025
cf39992
sim_relocs for dsim
akashlevy Jun 18, 2025
8181838
Use ZERO instead of '0 and 0 in ibex_directed_instr_lib
akashlevy Jun 18, 2025
8a099cf
Use ibex_mem_intf_pkg::DATA_WIDTH and ADDR_WIDTH directly instead of …
akashlevy Jun 18, 2025
55418a7
Bad trailing quote in rtl_simulation.yaml for dsim
akashlevy Jun 18, 2025
2ec72dc
Remove ibex-specific CSRs from implemented_csr[]
akashlevy Jun 19, 2025
8a3da12
Mistake: ibex_mem_intf_pkg:ADDR_WIDTH -> ibex_mem_intf_pkg::ADDR_WIDTH
akashlevy Jun 19, 2025
89a51ed
Mistake: instead of commenting out ibex-specific CSRs in implemented_…
akashlevy Jun 19, 2025
6844cf4
Add dsim options for cosim
akashlevy Jun 19, 2025
a8babf7
DSim proper linking
akashlevy Jun 26, 2025
2f3ba0d
Unroll array assignment in loop for DSim
akashlevy Jun 27, 2025
ded7c8c
Print the compile_tb command
akashlevy Jun 27, 2025
36d73ff
Add UVM_REGEX_NO_DPI define and fix timescale
akashlevy Jun 27, 2025
d8de16c
Fix dsim timescale
akashlevy Jun 28, 2025
39fe71f
Add a zero delay for dsim
akashlevy Jun 28, 2025
36c28fb
Merge remote-tracking branch 'origin/master' into dsim_fixes
akashlevy Jun 28, 2025
38835a1
Add ibex CSRs to enum instead of disabling for dsim
akashlevy Jun 28, 2025
4df62f3
PC mismatch should show ISS PC without sign extension
akashlevy Jun 28, 2025
9a7aa94
Remove the compile_tb print statement now that it's working
akashlevy Jun 29, 2025
f5e3f3a
Add uvm_macros.svh/dv_macros.svh includes where necessary
akashlevy Jul 1, 2025
09340d5
Fix dsim compile options
akashlevy Jul 7, 2025
25da41b
Fix dsim compile options (part 2)
akashlevy Jul 7, 2025
29ff2f1
Revert "Add uvm_macros.svh/dv_macros.svh includes where necessary"
akashlevy Jul 7, 2025
22b4b6b
Merge branch 'master' into dsim_fixes
akashlevy Jul 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dv/cosim/spike_cosim.cc
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ bool SpikeCosim::check_retired_instr(uint32_t write_reg,
std::stringstream err_str;
err_str << "PC mismatch, DUT retired : " << std::hex << dut_pc
<< " , but the ISS retired: " << std::hex
<< processor->get_state()->last_inst_pc;
<< (processor->get_state()->last_inst_pc & 0xffffffff);
errors.emplace_back(err_str.str());
return false;
}
Expand Down
12 changes: 6 additions & 6 deletions dv/uvm/core_ibex/riscv_dv_extension/ibex_directed_instr_lib.sv
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class ibex_rand_mseccfg_stream extends riscv_directed_instr_stream;
csrrw_instr = riscv_instr::get_instr(CSRRWI);
csrrw_instr.atomic = 1'b0;
csrrw_instr.csr = MSECCFG;
csrrw_instr.rd = '0;
csrrw_instr.rd = ZERO;
// Randomize between 3'b000 and 3'b111 to hit every combination of RLB/MMWP/MML bits.
csrrw_instr.imm_str = $sformatf("0x%0x", $urandom_range(7,0));
instr_list = {csrrw_instr};
Expand Down Expand Up @@ -159,7 +159,7 @@ class ibex_rand_cpuctrlsts_stream extends riscv_directed_instr_stream;
instrs[3] = riscv_instr::get_instr(CSRRW);
instrs[3].atomic = 1'b0;
instrs[3].csr = 12'h7c0;
instrs[3].rd = '0;
instrs[3].rd = ZERO;
instrs[3].rs1 = cfg.gpr[0];

instr_list = instrs;
Expand Down Expand Up @@ -191,7 +191,7 @@ class ibex_valid_na4_stream extends riscv_directed_instr_stream;
cfg_csrrw_instr.atomic = 1'b1;
cfg_csrrw_instr.has_label = 1'b0;
cfg_csrrw_instr.csr = PMPCFG0;
cfg_csrrw_instr.rd = '0;
cfg_csrrw_instr.rd = ZERO;
cfg_csrrw_instr.imm_str = $sformatf("%0d", $urandom_range(16,23));

// Use a label to use it for setting pmpaddr CSR.
Expand Down Expand Up @@ -222,7 +222,7 @@ class ibex_valid_na4_stream extends riscv_directed_instr_stream;
addr_csrrw_instr.atomic = 1'b1;
addr_csrrw_instr.csr = PMPADDR0;
addr_csrrw_instr.rs1 = cfg.gpr[1];
addr_csrrw_instr.rd = '0;
addr_csrrw_instr.rd = ZERO;
instr_list = {cfg_csrrw_instr, nop_instr, la_instr, srli_instr, addr_csrrw_instr};
endfunction

Expand Down Expand Up @@ -395,7 +395,7 @@ class ibex_make_pmp_region_exec_stream extends riscv_directed_instr_stream;
instrs[5] = riscv_instr::get_instr(CSRRW);
instrs[5].atomic = 1'b0;
instrs[5].csr = PMPCFG0 + pmpcfg_num;
instrs[5].rd = '0;
instrs[5].rd = ZERO;
instrs[5].rs1 = cfg.gpr[2];

// Immediately read back what we wrote, to check it has been dealt with correctly (i.e. write
Expand All @@ -404,7 +404,7 @@ class ibex_make_pmp_region_exec_stream extends riscv_directed_instr_stream;
instrs[6].atomic = 1'b0;
instrs[6].csr = PMPCFG0 + pmpcfg_num;
instrs[6].rd = cfg.gpr[0];
instrs[6].rs1 = 0;
instrs[6].rs1 = ZERO;

instr_list = instrs;

Expand Down
4 changes: 2 additions & 2 deletions dv/uvm/core_ibex/riscv_dv_extension/riscv_core_setting.tpl.sv
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ const privileged_reg_t implemented_csr[] = {
MTVAL, // Machine bad address or instruction
MIE, // Machine interrupt enable
MIP, // Machine interrupt pending
12'h7c0, // CPU Control and Status (Ibex Specific)
12'h7c1, // Secure Seed (Ibex Specific)
CPUCTRLSTS, // CPU Control and Status (Ibex Specific)
SECURESEED, // Secure Seed (Ibex Specific)
MCYCLE, // Machine cycle counter (lower 32 bits)
MCYCLEH, // Machine cycle counter (upper 32 bits)
//MINSTRET, // Machine instructions retired counter (lower 32 bits)
Expand Down
5 changes: 5 additions & 0 deletions dv/uvm/core_ibex/scripts/run_instr_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ def reloc_word(simulator: str,
# For Xcelium, the build directory gets passed as the
# "-xmlibdirpath" argument.
(placeholder_dir, build_dir)
],
'dsim': [
# DSim build path
(os.path.join(placeholder_dir, 'dsim'),
os.path.join(build_dir, 'dsim'))
]
}
always_relocs = [
Expand Down
1 change: 1 addition & 0 deletions dv/uvm/core_ibex/tb/core_ibex_tb_top.sv
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ module core_ibex_tb_top;
initial begin
// Drive the clock and reset lines. Reset everything and start the clock at the beginning of
// time
#0; // needed for dsim
ibex_clk_if.set_active();
fork
ibex_clk_if.apply_reset(.reset_width_clks (100));
Expand Down
6 changes: 3 additions & 3 deletions dv/uvm/core_ibex/tests/core_ibex_base_test.sv
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ class core_ibex_base_test extends uvm_test;
// code, the test will wait for the specified number of cycles before starting stimulus
// sequences (irq and debug)
int unsigned stimulus_delay = 800;
bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] signature_data_q[$];
bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] signature_data;
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] signature_data_q[$];
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] signature_data;
uvm_tlm_analysis_fifo #(ibex_mem_intf_seq_item) item_collected_port;
uvm_tlm_analysis_fifo #(ibex_mem_intf_seq_item) test_done_port;
uvm_tlm_analysis_fifo #(irq_seq_item) irq_collected_port;
Expand Down Expand Up @@ -402,7 +402,7 @@ class core_ibex_base_test extends uvm_test;


virtual task wait_for_mem_txn(
input bit [ibex_mem_intf_agent_pkg::ADDR_WIDTH-1:0] ref_addr,
input bit [ibex_mem_intf_pkg::ADDR_WIDTH-1:0] ref_addr,
input signature_type_t ref_type,
input uvm_tlm_analysis_fifo #(ibex_mem_intf_seq_item) txn_port = item_collected_port
);
Expand Down
28 changes: 14 additions & 14 deletions dv/uvm/core_ibex/tests/core_ibex_test_lib.sv
Original file line number Diff line number Diff line change
Expand Up @@ -755,17 +755,17 @@ class core_ibex_debug_intr_basic_test extends core_ibex_base_test;
`uvm_component_utils(core_ibex_debug_intr_basic_test)
`uvm_component_new

bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] core_init_mstatus;
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] core_init_mie;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] core_init_mstatus;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] core_init_mie;
priv_lvl_e init_operating_mode;
priv_lvl_e operating_mode;
bit [$clog2(irq_agent_pkg::DATA_WIDTH)-1:0] irq_id;
irq_seq_item irq_txn;
bit [irq_agent_pkg::DATA_WIDTH-1:0] irq;
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mstatus;
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mcause;
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mip;
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mie;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] mstatus;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] mcause;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] mip;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] mie;
bit in_nested_trap;

virtual task send_stimulus();
Expand Down Expand Up @@ -966,14 +966,14 @@ class core_ibex_debug_intr_basic_test extends core_ibex_base_test;
return have_irq;
endfunction

virtual task check_mcause(bit irq_or_exc, bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-2:0] cause);
bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mcause;
virtual task check_mcause(bit irq_or_exc, bit[ibex_mem_intf_pkg::DATA_WIDTH-2:0] cause);
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] mcause;
wait_for_csr_write(CSR_MCAUSE, 10000);
mcause = signature_data;
`uvm_info(`gfn, $sformatf("mcause: 0x%0x", mcause), UVM_LOW)
`DV_CHECK_EQ_FATAL(mcause[ibex_mem_intf_agent_pkg::DATA_WIDTH-1], irq_or_exc,
`DV_CHECK_EQ_FATAL(mcause[ibex_mem_intf_pkg::DATA_WIDTH-1], irq_or_exc,
$sformatf("mcause.interrupt is not set to 0x%0x", irq_or_exc))
`DV_CHECK_EQ_FATAL(mcause[ibex_mem_intf_agent_pkg::DATA_WIDTH-2:0], cause,
`DV_CHECK_EQ_FATAL(mcause[ibex_mem_intf_pkg::DATA_WIDTH-2:0], cause,
"mcause.exception_code is encoding the wrong exception type")
endtask

Expand Down Expand Up @@ -1161,7 +1161,7 @@ class core_ibex_directed_test extends core_ibex_debug_intr_basic_test;
// currently in the ID stage against the global seen_instr[$] queue.
// If we've seen the same type of instruction before, return 0, otherwise add it to the
// seen_instr[$] queue and return 1.
virtual function bit decode_instr(bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] instr);
virtual function bit decode_instr(bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] instr);
ibex_pkg::opcode_e opcode;
bit [2:0] funct3;
bit [6:0] funct7;
Expand Down Expand Up @@ -1670,8 +1670,8 @@ class core_ibex_debug_ebreak_test extends core_ibex_directed_test;
`uvm_component_utils(core_ibex_debug_ebreak_test)
`uvm_component_new

bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] dpc;
bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] dcsr;
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] dpc;
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] dcsr;

virtual task check_stimulus();
forever begin
Expand Down Expand Up @@ -1885,7 +1885,7 @@ class core_ibex_umode_tw_test extends core_ibex_directed_test;
`uvm_component_new

virtual task check_stimulus();
bit [ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] mcause;
bit [ibex_mem_intf_pkg::DATA_WIDTH-1:0] mcause;
forever begin
wait (dut_vif.dut_cb.wfi === 1'b1);
check_illegal_insn("Core did not treat U-mode WFI as illegal");
Expand Down
2 changes: 1 addition & 1 deletion dv/uvm/core_ibex/tests/core_ibex_vseq.sv
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class core_ibex_vseq extends uvm_sequence;
debug_seq debug_seq_single_h;
fetch_enable_seq fetch_enable_seq_h;
core_ibex_env_cfg cfg;
bit[ibex_mem_intf_agent_pkg::DATA_WIDTH-1:0] data;
bit[ibex_mem_intf_pkg::DATA_WIDTH-1:0] data;

`uvm_object_utils(core_ibex_vseq)
`uvm_declare_p_sequencer(core_ibex_vseqr)
Expand Down
14 changes: 12 additions & 2 deletions dv/uvm/core_ibex/yaml/rtl_simulation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@

############################################################
- tool: dsim
env_var: DSIM,DSIM_LIB_PATH
env_var: DSIM,DSIM_LIB_PATH,IBEX_ROOT
compile:
cmd:
- >-
Expand All @@ -142,11 +142,21 @@
$UVM_HOME/src/uvm_pkg.sv
+define+UVM
+define+DSIM
+define+UVM_REGEX_NO_DPI
+acc+rwb
-f <core_ibex>/ibex_dv_defines.f
-f <core_ibex>/ibex_dv.f
-l <tb_build_log>
-suppress EnumMustBePositive"
-suppress EnumMustBePositive
<cmp_opts>
<cosim_opts>
# dsim does not link image.so with ISS_LDFLAGS and ISS_LIBS, so symbols are missing
# so we need to re-link image.so with the linker flags and libraries
- gcc -shared -Bsymbolic -o <tb_dir>/image.so @<tb_dir>/obj/objfiles <ISS_LDFLAGS> <ISS_LIBS> -lstdc++
Comment on lines +153 to +155
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah that's unfortunate it needs to be done as a seperate step. But this seems pretty clean. Thanks

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes definitely unfortunate. I tried everything to get dsim to link it, but it doesn't seem possible

cosim_opts: >-
-f <core_ibex>/ibex_dv_cosim_dpi.f
-ld-opts '<ISS_LDFLAGS> <ISS_LIBS> -lstdc++'
-c-opts '<ISS_CFLAGS> <ISS_LIBS> -lstdc++ -I<IBEX_ROOT>/dv/cosim'
sim:
cmd:
- >-
Expand Down
50 changes: 42 additions & 8 deletions rtl/ibex_core.sv
Original file line number Diff line number Diff line change
Expand Up @@ -1591,9 +1591,28 @@ module ibex_core import ibex_pkg::*; #(
rvfi_ext_stage_debug_req[i+1] <= '0;
rvfi_ext_stage_debug_mode[i] <= '0;
rvfi_ext_stage_mcycle[i] <= '0;
rvfi_ext_stage_mhpmcounters[i] <= '{10{'0}};
rvfi_ext_stage_mhpmcountersh[i] <= '{10{'0}};
rvfi_ext_stage_ic_scr_key_valid[i] <= '0;
// DSim does not properly support array assignment in for loop, so unroll
rvfi_ext_stage_mhpmcounters[i][0] <= '0;
rvfi_ext_stage_mhpmcountersh[i][0] <= '0;
rvfi_ext_stage_mhpmcounters[i][1] <= '0;
rvfi_ext_stage_mhpmcountersh[i][1] <= '0;
rvfi_ext_stage_mhpmcounters[i][2] <= '0;
rvfi_ext_stage_mhpmcountersh[i][2] <= '0;
rvfi_ext_stage_mhpmcounters[i][3] <= '0;
rvfi_ext_stage_mhpmcountersh[i][3] <= '0;
rvfi_ext_stage_mhpmcounters[i][4] <= '0;
rvfi_ext_stage_mhpmcountersh[i][4] <= '0;
rvfi_ext_stage_mhpmcounters[i][5] <= '0;
rvfi_ext_stage_mhpmcountersh[i][5] <= '0;
rvfi_ext_stage_mhpmcounters[i][6] <= '0;
rvfi_ext_stage_mhpmcountersh[i][6] <= '0;
rvfi_ext_stage_mhpmcounters[i][7] <= '0;
rvfi_ext_stage_mhpmcountersh[i][7] <= '0;
rvfi_ext_stage_mhpmcounters[i][8] <= '0;
rvfi_ext_stage_mhpmcountersh[i][8] <= '0;
rvfi_ext_stage_mhpmcounters[i][9] <= '0;
rvfi_ext_stage_mhpmcountersh[i][9] <= '0;
end else begin
rvfi_stage_valid[i] <= rvfi_stage_valid_d[i];

Expand Down Expand Up @@ -1624,12 +1643,27 @@ module ibex_core import ibex_pkg::*; #(
rvfi_ext_stage_debug_mode[i] <= debug_mode;
rvfi_ext_stage_mcycle[i] <= cs_registers_i.mcycle_counter_i.counter_val_o;
rvfi_ext_stage_ic_scr_key_valid[i] <= cs_registers_i.cpuctrlsts_ic_scr_key_valid_q;
// This is done this way because SystemVerilog does not support looping through
// gen_cntrs[k] within a for loop.
for (int k=0; k < 10; k++) begin
rvfi_ext_stage_mhpmcounters[i][k] <= cs_registers_i.mhpmcounter[k+3][31:0];
rvfi_ext_stage_mhpmcountersh[i][k] <= cs_registers_i.mhpmcounter[k+3][63:32];
end
// DSim does not properly support array assignment in for loop, so unroll
rvfi_ext_stage_mhpmcounters[i][0] <= cs_registers_i.mhpmcounter[3][31:0];
rvfi_ext_stage_mhpmcountersh[i][0] <= cs_registers_i.mhpmcounter[3][63:32];
rvfi_ext_stage_mhpmcounters[i][1] <= cs_registers_i.mhpmcounter[4][31:0];
rvfi_ext_stage_mhpmcountersh[i][1] <= cs_registers_i.mhpmcounter[4][63:32];
rvfi_ext_stage_mhpmcounters[i][2] <= cs_registers_i.mhpmcounter[5][31:0];
rvfi_ext_stage_mhpmcountersh[i][2] <= cs_registers_i.mhpmcounter[5][63:32];
rvfi_ext_stage_mhpmcounters[i][3] <= cs_registers_i.mhpmcounter[6][31:0];
rvfi_ext_stage_mhpmcountersh[i][3] <= cs_registers_i.mhpmcounter[6][63:32];
rvfi_ext_stage_mhpmcounters[i][4] <= cs_registers_i.mhpmcounter[7][31:0];
rvfi_ext_stage_mhpmcountersh[i][4] <= cs_registers_i.mhpmcounter[7][63:32];
rvfi_ext_stage_mhpmcounters[i][5] <= cs_registers_i.mhpmcounter[8][31:0];
rvfi_ext_stage_mhpmcountersh[i][5] <= cs_registers_i.mhpmcounter[8][63:32];
rvfi_ext_stage_mhpmcounters[i][6] <= cs_registers_i.mhpmcounter[9][31:0];
rvfi_ext_stage_mhpmcountersh[i][6] <= cs_registers_i.mhpmcounter[9][63:32];
rvfi_ext_stage_mhpmcounters[i][7] <= cs_registers_i.mhpmcounter[10][31:0];
rvfi_ext_stage_mhpmcountersh[i][7] <= cs_registers_i.mhpmcounter[10][63:32];
rvfi_ext_stage_mhpmcounters[i][8] <= cs_registers_i.mhpmcounter[11][31:0];
rvfi_ext_stage_mhpmcountersh[i][8] <= cs_registers_i.mhpmcounter[11][63:32];
rvfi_ext_stage_mhpmcounters[i][9] <= cs_registers_i.mhpmcounter[12][31:0];
rvfi_ext_stage_mhpmcountersh[i][9] <= cs_registers_i.mhpmcounter[12][63:32];
end

// Some of the rvfi_ext_* signals are used to provide an interrupt notification (signalled
Expand Down
8 changes: 4 additions & 4 deletions util/ibex_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,11 @@ def main():
lambda p, v: [],
lambda d, v: ['+define+' + d + '=' + v], '/'),
SimOpts('xlm_opts', 'Xcelium compile',
lambda p, v: ['-defparam', p + '=' + v],
lambda p, v: ['-defparam', p + '=' + v],
lambda d, v: ['-define', d + '=' + v], '.'),
SimOpts('dsim_compile_opts', 'DSim compile',
lambda p, v: ['+define+' + p + '=' + v],
lambda d, v: [], '/'),
SimOpts('dsim_opts', 'DSim compile',
lambda p, v: ['-defparam', p + '=' + v],
lambda d, v: ['+define+' + d + '=' + v], '.'),
]

argparser = argparse.ArgumentParser(description=(
Expand Down
5 changes: 4 additions & 1 deletion vendor/google_riscv-dv/euvm/riscv/gen/riscv_instr_pkg.d
Original file line number Diff line number Diff line change
Expand Up @@ -1102,7 +1102,10 @@ enum privileged_reg_t: ushort { // 12'b
VXRM = 0x00A, // Fixed point rounding mode
VL = 0xC20, // Vector length
VTYPE = 0xC21, // Vector data type register
VLENB = 0xC22 // VLEN/8 (vector register length in bytes)
VLENB = 0xC22, // VLEN/8 (vector register length in bytes)
// Ibex Registers
CPUCTRLSTS = 0x7C0, // CPU Control and Status (Ibex Specific)
SECURESEED = 0x7C1 // Secure Seed (Ibex Specific)
}

enum privileged_reg_fld_t: ubyte {
Expand Down
5 changes: 4 additions & 1 deletion vendor/google_riscv-dv/src/riscv_instr_pkg.sv
Original file line number Diff line number Diff line change
Expand Up @@ -1097,7 +1097,10 @@ package riscv_instr_pkg;
VXRM = 'h00A, // Fixed point rounding mode
VL = 'hC20, // Vector length
VTYPE = 'hC21, // Vector data type register
VLENB = 'hC22 // VLEN/8 (vector register length in bytes)
VLENB = 'hC22, // VLEN/8 (vector register length in bytes)
// Ibex Registers
CPUCTRLSTS = 'h7C0, // CPU Control and Status (Ibex Specific)
SECURESEED = 'h7C1 // Secure Seed (Ibex Specific)
} privileged_reg_t;

typedef enum bit [5:0] {
Expand Down
Loading