在sequence中对变量随机


前言

很多时候,我们在写sequence激励的时候,有一些变量需要做一些简单的随机,但是又不希望引入其他的类,这个时候我们可以利用std::randomize()来处理。


一、std::randomize()处理随机变量

如下代码所示,利用std::randomize()对变量进行随机约束,assert用于断言随机是否成功。
对于size变量来说,希望size是集合式带权重分配,其中0到3的权重分别是10,4到7的权重分别是5,8到10的权重分别是1。
对于a和b变量来说,可以约束其范围,以及他们之间的相互关系。
val变量中4个bit为1,其余为0。

class smoke_vseq extends base_vseq;
    rand bit[3:0] size;
    rand int a, b;
    rand bit[100:0] val;
    task body()
        assert(std::randomize(size) with {
            size dist {[0:3] :=10, [4:7] := 5, [8:10] := 1};
        });
            
        assert(std::randomize(a, b) with {
            a>=0; a<1024;
            b>=0; b<1024;
            a != b;
        });

        void'(std::randomize(val) with { $countones(val) inside {4};});

        //十个数相加和为50,每个数都小于7
        bit [5:0] d1[10];
        void'(std::randomize(d1) with {d1.sum() with ((item<7) ? item : 0)  == 50;});
 
        //随机出任意5个小于10的数
        bit [5:0] d1[10];
        void'(std::randomize(d1) with {d1.sum() with (int'(item<10 ))  == 5;}); //需要加上int

    endtask : body

endclass : smoke_vseq

总结

总的来说,利用std::randomize()函数可以很方便的在sequence内部对变量进行随机,而不用额外引入类。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值