systemverilog约束----randc/rand

systemverilog约束----randc/rand

1 rand and randc

1.1 rand

rand:rand修饰的变量,每次随机时都会在取值范围内随取一个值,每次随机的概率都是一样的;
rand bit[7:0] a_rand;
a_rand的取值范围是0-255,并且每次randomize时,每个被取到的值得概率都是1/256。就像每次掷骰子一样,每次的概率都是1/6;

#1.2 randc

randc:修饰变量时,变量周期性随机,所有可能的值都取过后才会取重复的值,依次类推;
randc bit[7:0] b_rand;
b_rand 的取值范围是0-255;调用random()后,前256次randomize取到的值会覆盖0-255;然后第257次才会重新重复,同样的257-512次randomize得到的值依然会覆盖0-255所有的值;

注:

randc的随机序列在constrain约束发生变化,或者序列中剩下的值不能满足当前的约束要求时,变量的随机序列会被重新计算;
randomize()计算随机变量时,randc修饰的变量会被首先计算,在包含rand和randc的变量的约束计算中,可能会导致错误,需要注意。

2 使用randc的约束类

如果有下例:

class CONT;
  randc bit[7:0] c_randc;
endclass

如果在另一个类或者module里使用此类产生不重复的数据,应该注意,new()函数不应出现在repeat或者for循环里,否则将不会实现上诉目标,而是每次都会充c_rand范围内取任何一个数据;

class test_sequence extends base_sequence;
  ...
  task body();
    CONT c_const;
    c_const = new();
    repeat(10) begin
       if(c_const.randomize()) beign
         $display("randomize success");
       end
       else beign
         $display("randomize fail");
       end
    end
  endtask
  ...
endclass
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值