随机序列
(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条件约束组合。
本文深入解析了SV(SystemVerilog)中的randsequence和randcase结构,介绍了如何利用它们生成随机事务序列和建立随机决策树,同时探讨了这些结构在激励组件和测试用例协调中的应用。
第六章——随机化(五)随机控制&spm=1001.2101.3001.5002&articleId=105649620&d=1&t=3&u=d8e314ab31974540a3007ba5f17e3871)
1929

被折叠的 条评论
为什么被折叠?



