使⽤SystemVerilog中的rand变量⽣成randc值。
我们必须声明⼀个队列,并对这个队列施加一个特定的约束。
然后,随机⽣成的值应使⽤post_randomize ⽅法中的push_back⽅法分配给队列。
这是⾯试官在面试验证⼯程师时经常问的问题。我们已经放了代码,以便您可以运⾏并很好地理解它。
//This code is helpful to generate randc value of variable using rand operator.
class packet;
rand bit[3:0]addr;
bit[3:0] my_que[$]; //defining the queue which can store the values of variable
constraint add_cons {
addr inside {0,1,2,3,4,5,6,7}; //value should be randomize inside 0 to 7
unique{addr,my_que}; //consider unique value
};
//pre_randomize method
function void pre_randomize();
if(my_que.size()==8) my_que={}; //assign the size
endfunction
//post_randomize method
function void post_randomize();
my_que.push_back(addr);
endfunction
endclass
module top;
initial begin
packet p;
p=new();
repeat(8) begin
p.randomize();
//randomization method to randomize variables
$display("value of addr=%0d", p.addr);
end
end
endmodule