|
19 | 19 | class cv32e40p_multi_page_load_store_instr_stream extends riscv_multi_page_load_store_instr_stream; |
20 | 20 | rand int has_taken_avail_comp_reg[]; |
21 | 21 | riscv_reg_t s0_a5_avail_regs[]; |
| 22 | + riscv_reg_t s0_a5_avail_regs_q[$]; // a temp queue for using .find method |
22 | 23 |
|
23 | 24 | constraint with_compress_instructions_c { |
24 | 25 | has_taken_avail_comp_reg.size() == rs1_reg.size(); |
|
42 | 43 | function void pre_randomize(); |
43 | 44 | super.pre_randomize(); |
44 | 45 | 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 |
46 | 56 | endfunction |
47 | 57 | endclass |
48 | 58 |
|
49 | 59 |
|
50 | 60 | class cv32e40p_mem_region_stress_test extends riscv_mem_region_stress_test; |
51 | 61 | rand int has_taken_avail_comp_reg[]; |
52 | 62 | riscv_reg_t s0_a5_avail_regs[]; |
| 63 | + riscv_reg_t s0_a5_avail_regs_q[$]; // a temp queue for using .find method |
53 | 64 |
|
54 | 65 | constraint with_compress_instructions_c { |
55 | 66 | has_taken_avail_comp_reg.size() == rs1_reg.size(); |
|
74 | 85 | function void pre_randomize(); |
75 | 86 | super.pre_randomize(); |
76 | 87 | 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 |
78 | 98 | endfunction |
79 | 99 | endclass |
0 commit comments