Problem Statement:
You need to come up with the system verilog class < sequence item > which can generate or divide a large size of data N into smaller pieces of equal size, these small sized chunks have to be multiple of 4 - M. Maximum size is 64 and minimum is 4.
The left over data if it does not sum up to N, can be added last which need not match M.
Solution:
class chunks;
int unsigned c[$];
parameter SIZE = 200;
rand bit [6:0] s;
constraint c_size {
s%4 == 0;
}
function void post_randomize();
int tmp;
tmp = SIZE - (SIZE/s * s); // If chunks doesnot add up to SIZE, collect the difference
for(int i=0; i < (SIZE/s);i++) c.push_back(s);
if(tmp !=0) c.push_back(tmp); // If non zero tmp is observed, simply add to the queue.
endfunction
function void display();
$display("Size selected:%0d",s);
$display("Queue value:%p",c);
endfunction: display
endclass
module top;
chunks cs;
initial begin
cs = new;
void'(cs.randomize());
cs.display();
end
endmodule
No comments:
Post a Comment