Skip to content

Commit c145ac3

Browse files
committed
[dv] Add a matching NA4 in pmp_full_random_test
Signed-off-by: Canberk Topal <ctopal@lowrisc.org>
1 parent 614f716 commit c145ac3

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

dv/uvm/core_ibex/riscv_dv_extension/ibex_directed_instr_lib.sv

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,64 @@ class ibex_rand_mseccfg_stream extends riscv_directed_instr_stream;
8686
endfunction
8787

8888
endclass
89+
90+
// Define a short riscv-dv directed instruction stream to set a valid NA4 address/config
91+
class ibex_valid_na4_stream extends riscv_directed_instr_stream;
92+
93+
`uvm_object_utils(ibex_valid_na4_stream)
94+
95+
function new(string name = "");
96+
super.new(name);
97+
endfunction
98+
99+
function void post_randomize();
100+
string instr_label, gn;
101+
riscv_pseudo_instr la_instr;
102+
riscv_instr addr_csrrw_instr;
103+
riscv_instr srli_instr;
104+
riscv_instr nop_instr;
105+
riscv_instr cfg_csrrw_instr;
106+
107+
// Inserted stream will consist of five instructions
108+
initialize_instr_list(5);
109+
110+
cfg_csrrw_instr = riscv_instr::get_instr(CSRRSI);
111+
cfg_csrrw_instr.atomic = 1'b1;
112+
cfg_csrrw_instr.has_label = 1'b0;
113+
cfg_csrrw_instr.csr = PMPCFG0;
114+
cfg_csrrw_instr.rd = '0;
115+
cfg_csrrw_instr.imm_str = $sformatf("%0d", $urandom_range(16,23));
116+
117+
// Use a label to use it for setting pmpaddr CSR.
118+
instr_label = $sformatf("na4_addr_stream_%0x", $urandom());
119+
120+
nop_instr = riscv_instr::get_instr(NOP);
121+
nop_instr.label = instr_label;
122+
nop_instr.has_label = 1'b1;
123+
nop_instr.atomic = 1'b1;
124+
125+
// Load the address of the instruction after this whole stream
126+
la_instr = riscv_pseudo_instr::type_id::create("la_instr");
127+
la_instr.pseudo_instr_name = LA;
128+
la_instr.has_label = 1'b0;
129+
la_instr.atomic = 1'b1;
130+
la_instr.imm_str = $sformatf("%0s+16", instr_label);
131+
la_instr.rd = cfg.gpr[1];
132+
133+
srli_instr = riscv_instr::get_instr(SRLI);
134+
srli_instr.has_label = 1'b0;
135+
srli_instr.atomic = 1'b1;
136+
srli_instr.rs1 = cfg.gpr[1];
137+
srli_instr.rd = cfg.gpr[1];
138+
srli_instr.imm_str = $sformatf("2");
139+
140+
addr_csrrw_instr = riscv_instr::get_instr(CSRRW);
141+
addr_csrrw_instr.has_label = 1'b0;
142+
addr_csrrw_instr.atomic = 1'b1;
143+
addr_csrrw_instr.csr = PMPADDR0;
144+
addr_csrrw_instr.rs1 = cfg.gpr[1];
145+
addr_csrrw_instr.rd = '0;
146+
instr_list = {cfg_csrrw_instr, nop_instr, la_instr, srli_instr, addr_csrrw_instr};
147+
endfunction
148+
149+
endclass

dv/uvm/core_ibex/riscv_dv_extension/testlist.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,8 @@
795795
+directed_instr_1=riscv_load_store_hazard_instr_stream,40
796796
+directed_instr_2=riscv_multi_page_load_store_instr_stream,40
797797
+directed_instr_3=riscv_load_store_rand_addr_instr_stream,40
798-
+directed_instr_4=ibex_rand_mseccfg_stream,10
798+
+directed_instr_4=ibex_rand_mseccfg_stream,1
799+
+directed_instr_6=ibex_valid_na4_stream,20
799800
sim_opts: >
800801
+is_double_fault_detected_fatal=0
801802
+enable_bad_intg_on_uninit_access=0

0 commit comments

Comments
 (0)