Skip to content

Commit ceb5544

Browse files
committed
Fix VCS incompatible type issue
1 parent 33917ee commit ceb5544

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

cv32e40p/env/corev-dv/cv32e40p_load_store_instr_lib.sv

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
class cv32e40p_multi_page_load_store_instr_stream extends riscv_multi_page_load_store_instr_stream;
2020
rand int has_taken_avail_comp_reg[];
2121
riscv_reg_t s0_a5_avail_regs[];
22+
riscv_reg_t s0_a5_avail_regs_q[$]; // a temp queue for using .find method
2223

2324
constraint with_compress_instructions_c {
2425
has_taken_avail_comp_reg.size() == rs1_reg.size();
@@ -42,14 +43,24 @@
4243
function void pre_randomize();
4344
super.pre_randomize();
4445
s0_a5_avail_regs = {S0, S1, A0, A1, A2, A3, A4, A5};
45-
s0_a5_avail_regs = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
46+
47+
s0_a5_avail_regs_q = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
48+
49+
// resize the dynamic array to the temp queue
50+
s0_a5_avail_regs = new[s0_a5_avail_regs_q.size()];
51+
52+
// copy content of temp queue to the dynamic array
53+
for (int i = 0; i < s0_a5_avail_regs_q.size(); i++) begin
54+
s0_a5_avail_regs[i] = s0_a5_avail_regs_q[i];
55+
end
4656
endfunction
4757
endclass
4858

4959

5060
class cv32e40p_mem_region_stress_test extends riscv_mem_region_stress_test;
5161
rand int has_taken_avail_comp_reg[];
5262
riscv_reg_t s0_a5_avail_regs[];
63+
riscv_reg_t s0_a5_avail_regs_q[$]; // a temp queue for using .find method
5364

5465
constraint with_compress_instructions_c {
5566
has_taken_avail_comp_reg.size() == rs1_reg.size();
@@ -74,6 +85,15 @@
7485
function void pre_randomize();
7586
super.pre_randomize();
7687
s0_a5_avail_regs = {S0, S1, A0, A1, A2, A3, A4, A5};
77-
s0_a5_avail_regs = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
88+
89+
s0_a5_avail_regs_q = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
90+
91+
// resize the dynamic array to the temp queue
92+
s0_a5_avail_regs = new[s0_a5_avail_regs_q.size()];
93+
94+
// copy content of temp queue to the dynamic array
95+
for (int i = 0; i < s0_a5_avail_regs_q.size(); i++) begin
96+
s0_a5_avail_regs[i] = s0_a5_avail_regs_q[i];
97+
end
7898
endfunction
7999
endclass

cv32e40p/env/corev-dv/cv32e40p_loop_instr.sv

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class cv32e40p_loop_instr extends riscv_loop_instr;
1919
rand int loop_cnt_has_taken_avail_comp_reg[];
2020
rand int loop_limit_has_taken_avail_comp_reg[];
2121
riscv_reg_t s0_a5_avail_regs[];
22+
riscv_reg_t s0_a5_avail_regs_q[$]; // a temp queue for using .find method
2223

2324
constraint with_compress_instructions_c {
2425
loop_cnt_has_taken_avail_comp_reg.size() == loop_cnt_reg.size();
@@ -50,7 +51,16 @@ class cv32e40p_loop_instr extends riscv_loop_instr;
5051
function void pre_randomize();
5152
super.pre_randomize();
5253
s0_a5_avail_regs = {S0, S1, A0, A1, A2, A3, A4, A5};
53-
s0_a5_avail_regs = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
54+
55+
s0_a5_avail_regs_q = s0_a5_avail_regs.find() with (!(item inside {cfg.reserved_regs, reserved_rd}));
56+
57+
// resize the dynamic array to the temp queue
58+
s0_a5_avail_regs = new[s0_a5_avail_regs_q.size()];
59+
60+
// copy content of temp queue to the dynamic array
61+
for (int i = 0; i < s0_a5_avail_regs_q.size(); i++) begin
62+
s0_a5_avail_regs[i] = s0_a5_avail_regs_q[i];
63+
end
5464
endfunction
5565

5666
endclass

0 commit comments

Comments
 (0)