class pattern;
rand bit [7:0] a[];
rand bit [7:0] a1[], a2[];
// An element cannot be repeated more than twice in array
constraint C1{
a.size() == 10;
foreach(a[i]) a[i] inside {[1:9]};
foreach(a[i]) {
a.sum() with (int'(item == a[i])) inside {[1:2]};
}
}
// split an array equally and uniquely.
constraint C2{
a1.size() == a.size()/2;
a2.size() == a.size()/2;
unique{a1};
unique{a2};
foreach(a1[i]) {
(a1[i] == a[i*2]) && (a2[i] == a[i*2+1]);
}
}
endclass
module top();
pattern p = new();
initial begin
repeat(10) begin
assert(p.randomize);
//p.a.sort(); p.a1.sort(); p.a2.sort();
$display("%p => %p, %p",p.a,p.a1,p.a2);
end
end
endmodule
Output:
'{'h4, 'h6, 'h3, 'h2, 'h1, 'h8, 'h9, 'h9, 'h2, 'h4} => '{'h4, 'h3, 'h1, 'h9, 'h2} , '{'h6, 'h2, 'h8, 'h9, 'h4}
'{'h8, 'h2, 'h9, 'h4, 'h7, 'h6, 'h6, 'h3, 'h2, 'h1} => '{'h8, 'h9, 'h7, 'h6, 'h2} , '{'h2, 'h4, 'h6, 'h3, 'h1}
'{'h7, 'h7, 'h5, 'h1, 'h9, 'h6, 'h4, 'h8, 'h6, 'h9} => '{'h7, 'h5, 'h9, 'h4, 'h6} , '{'h7, 'h1, 'h6, 'h8, 'h9}
'{'h6, 'h2, 'h2, 'h3, 'h3, 'h5, 'h7, 'h9, 'h8, 'h6} => '{'h6, 'h2, 'h3, 'h7, 'h8} , '{'h2, 'h3, 'h5, 'h9, 'h6}
'{'h5, 'h4, 'h1, 'h7, 'h2, 'h8, 'h9, 'h9, 'h3, 'h5} => '{'h5, 'h1, 'h2, 'h9, 'h3} , '{'h4, 'h7, 'h8, 'h9, 'h5}
'{'h3, 'h1, 'h8, 'h7, 'h2, 'h5, 'h9, 'h8, 'h5, 'h2} => '{'h3, 'h8, 'h2, 'h9, 'h5} , '{'h1, 'h7, 'h5, 'h8, 'h2}
'{'h8, 'h6, 'h6, 'h2, 'h1, 'h3, 'h4, 'h8, 'h9, 'h7} => '{'h8, 'h6, 'h1, 'h4, 'h9} , '{'h6, 'h2, 'h3, 'h8, 'h7}
'{'h9, 'h4, 'h4, 'h5, 'h8, 'h7, 'h6, 'h6, 'h7, 'h2} => '{'h9, 'h4, 'h8, 'h6, 'h7} , '{'h4, 'h5, 'h7, 'h6, 'h2}
'{'h8, 'h4, 'h5, 'h7, 'h3, 'h5, 'h7, 'h9, 'h2, 'h3} => '{'h8, 'h5, 'h3, 'h7, 'h2} , '{'h4, 'h7, 'h5, 'h9, 'h3}
'{'h7, 'h3, 'h2, 'h5, 'h1, 'h6, 'h9, 'h2, 'h3, 'h9} => '{'h7, 'h2, 'h1, 'h9, 'h3} , '{'h3, 'h5, 'h6, 'h2, 'h9}
Run on EdaPlayground