Systemverilog(绿皮书)第六章——随机化(五)随机控制

本文深入解析了SV(SystemVerilog)中的randsequence和randcase结构,介绍了如何利用它们生成随机事务序列和建立随机决策树,同时探讨了这些结构在激励组件和测试用例协调中的应用。
摘要由CSDN通过智能技术生成

随机序列

(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条件约束组合。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值