随机化系统函数和随机化方法

您所在的位置:网站首页 random生成随机数c 随机化系统函数和随机化方法

随机化系统函数和随机化方法

2024-07-16 11:22| 来源: 网络整理| 查看: 265

文章目录 一、$random——系统方法,返回32bit的有符号伪随机数二、$urandom——系统方法,返回32bit的无符号伪随机数三、$urandom_range()——系统方法,返回指定范围内的无符号随机整数四、srandom()——对象和进程随机化方法,在类方法内/外为随机数据发生器(RNG)添加随机种子五、randomize() —— 对象随机化方法,为对象中的随机化变量随机赋值六、std::randomize() —— 范围随机函数,为当前范围内的变量随机赋值

$random —— 系统随机化调用函数,返回32bit有符号数;$urandom() —— 系统随机化调用函数,返回32bit无符号数;$urandom_range()—— 系统随机化调用函数,返回指定范围内的无符号随机整数;srandom() —— 对象和进程的随机化播种方法,需手动添加种子seed;randomize() —— 对象随机化方法,可对类成员变量执行专有的随机化操作;std::randomize() —— 范围随机函数,能够随机化当前范围内的数据; 一、$random——系统方法,返回32bit的有符号伪随机数

语法如下:

$random(seed) //种子变量seed是可选的。

  $random产生一个32bit的有符号随机数,可以是正数、也可以是负数。其种子变量(必须是reg类型、整型或时间型变量)。

用法如下:   $random%b;   b为一个大于0的整数,表达式给出了一个范围在[-b+1 : b-1]之间的随机数; int randval; randval = $random % 60; //随机产生一个-59~59之间的有符号数 用法如下:{ }化为无符号数   {$random%b};   拼接操作符{ }将$random返回的有符号数转换成了无符号数。 int randval; randval = {$random % 60}; //随机产生一个0~59之间的无符号数 二、$urandom——系统方法,返回32bit的无符号伪随机数

语法如下:

function int unsigned $urandom(int seed); //种子seed是可选参数,决定了生成的随机数值。相同的种子生成的随机数值也相同

示例:

bit[64:1] addr; bit [3:0] number; addr[32:1] = $urandom(254) ; //初始化随机数发生器(RNG),获得一个32bit的随机数 addr = {$urandom, $urandom}; //产生一个64bit的随机数 number = $urandom & 15; //产生一个4bit的随机数 三、$urandom_range()——系统方法,返回指定范围内的无符号随机整数

语法如下:

function int unsigned $urandom_range(int unsigned maxval, int unsigned minval = 0); //参数最小值min是可以省略的 , 且最大值与最小值的位置是可以互换的。

下述三个随机值都在0~7的范围内,示例:

val1 = $urandom_range(7,0) ; val2 = $urandom_range(7) ; val3 = $urandom_range(0, 7) ; 四、srandom()——对象和进程随机化方法,在类方法内/外为随机数据发生器(RNG)添加随机种子

语法如下:

function void srandom(int seed); //种子seed需要手动添加,来初始化随机数据发生器(RNG)

示例1:类内添加seed

class Packet; rand bit[15:0] header; function new(int seed) ; this.srandom(seed) ; ... endfunction endclass

示例2:类外添加seed

Packet p=new(200) ; //通过种子200,创建对象p p.srandom(300) ; //通过种子300,重新创建p 五、randomize() —— 对象随机化方法,为对象中的随机化变量随机赋值

语法如下:

virtual function int randomize(); //该方法是一个虚方法,会为对象中的所有随机变量产生随机值。如果randomize()成功的为对象中的所有随机变量赋随机值,则返回1,否则返回0.

示例1:成功赋值返回值为1

class SimpleSum; rand bit[7:0] x, y, z; constraint c{ z== x+y}; endclass SimpleSum p=new() ; int success=p.randomize() ; //随机化成功,则返回1,即success为1 if(success==1) ...

示例2:内嵌约束randomize() with{ }

class SimpleSum; rand bit[7:0] x, y, z; constraint c{ z== x+y}; endclass task InlineConstraintDemo(SimpleSum p) ; int success; success = p.randomize() with {x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3