Hello !
- Wanted to generate some random array patterns to be fed into my DUT.
- But based on the size of the dynamic array, some elements of the array are pre-defined.
- For eg, if size is 1 → value is 1, if size is 3 → value is {9,7,7}, and size is 7 the value never should be starting with 0 or 9 and if the size is eleven the value should always start with 1.
- Tried the below piece of code, but wondering if can it be done using any array reduction operator in a efficient manner ?
Sample Code:
module dynno;
class dynno;
rand int number[];
constraint number_c {
number.size inside {1,3,7,11};
foreach(number[i]) number[i] inside {[0:9]};
}
constraint number_val_c {
if (number.size == 1) {
number[0] == 1;
}
else if (number.size == 3) {
number[0] == 9;
number[1] == 7;
number[2] == 7;
}
else if (number.size == 7) {
!(number[0] inside {0,9});
}
else if (number.size == 11) {
(number[0] == 1);
}
}
function new();
assert(this.randomize);
$display("size: %0d, number: %p\n", number.size, number);
endfunction: new
endclass: dynno
initial begin
dynno tn = new();
end
endmodule: dynno