随机序列
(1)产生随机事务序列的另一种方法就是使用SV的 randsequence结构。这对于随机安排组织原子(atomic)测试序列很有帮助。
initial begin
for (int i=0; i<15; i++) begin
//按照要求发送激励
randsequence (stream)
stream : cfg_read := 1 | io_read :=2 | mem_read :=5;
//cfg_read和io_read以及mem_read的可能性1:2:5
cfg_reead : {cfg_read_task;} | {cfg_read_task;} cfg_read;
mem_reead : {mem_read_task;} | {mem_read_task;} mem_read;
io_reead : {io_read_task;} | {io_read_task;} io_read;
endsequence
end
end
(2)randcase来建立随机决策树,但是它带来的 问题就是没有变量 可以提供追踪 调试。
initial begin
int len;
randcase
1:len = $urandom_range(0,2); //10%:0,1,or2
8:len = $urandom_range(3,5); //80%:3,4,or5
1:len = $urandom_range(6,7); //10%:6or7
endcase
$dsiplay("len = %0d", len);
end
总结:
(1)randsequence和randcase都是针对轻量级的随机控制 应用。而我们可以 通过定义随机类 取代上述随机控制并且由于类的继承 性使得在后期维护代码的时候更加方便。
(2)randsequence的相关功能我们在协调激励组件和测试用例的时候可能会用到。
(3)randcase对应着随机约束中dist权重约束if-else条件约束组合。