当前位置:   article > 正文

Systemverilog 第十课 随机化_verilog产生随机数互不相同

verilog产生随机数互不相同

第十课 Randomization

Randomization
  • 关键词:rand
rand[7:0] y;
  • 1

y会在0~255之间随机生成。

  • 关键词:randc
randc[1:0] y;
  • 1

y会在0~3之间随机生成,并且必定以四个为循环生成互不相同的数字,只能对bit 或enum类型使用这个关键词。

  • 关键字:constraint
    在这里插入图片描述
    对于声明过rand/randc的变量可以使用constraint限定
  • randomize()函数
    在这里插入图片描述
    randomize属于内嵌的系统函数 ,函数会给所有object里的随机变量赋予新值。
    randomize函数本身在成功时返回1,失败时返回0。
  • constraint solver
    输入同样的seed可以得到同样的随机结果,用于复现
Constraint 约束

随机变量的约束都包含在constraint函数模块当中:
在这里插入图片描述
如上图所示,constraint为关键字,range1是约束集的名字,大括号内是约束模块。
每一句约束只能含有一个操作符,多个约束必须要写多句程序。
在这里插入图片描述

  • 关键词:inside
    可以设置区间约束,用 ! 取补集
    在这里插入图片描述
    练习:
    在这里插入图片描述
    从例题中可以看出inside可以当做小于等于号
  • dist操作符
    可以给随机变量赋权重,使用:=或者:/符号,:=表示赋的就是当前权值,:/表示平分权值。
    在这里插入图片描述
    在这里插入图片描述
    ***约束都是并行的,同时判定。
  • 条件约束->
    在约束模块中用->代替if/else语句:
mode == small -> len<10;
mode == large -> len>100;
  • 1
  • 2

但是判定的瞬间是同时进行的,不会受语句先后的影响。

  • solve…before
    会先约束solve和before之间的变量,并且会对随机结果产生不同的影响。
    例子:
    在这里插入图片描述
    在这里插入图片描述
    注意两种情况的概率差别

  • Iterative constraint迭代约束
    给数组添加约束时,可以用foreach语句迭代约束

  • function constraint函数约束
    用函数关系表示约束

class B;
rand int x,y;
constraint C{x<=F(y);}
constraint D{y inside {2,4,8};}
  • 1
  • 2
  • 3
  • 4

此时y会被强制在x之前判定。

  • 变量保护
    在这里插入图片描述
Disabling Random Variables
  • rand_mode()
    属于不能改写的内嵌系统方法,能用来打开和关闭随机变量
    在这里插入图片描述
  • constraint_mode()
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/107073
推荐阅读
相关标签
  

闽ICP备14008679号