随机数和赋值位宽转换

平时在产生随机数时,大家可能会用到$random(), $urandom()和$urandom_range()函数,但要注意的是,这几个函数返回的是32-bit随机数。

  • $random: 当被调用时,返回1个有符号的随机数,可以选择性地使用seed去决定随机数序列的产生。函数定义为:$random [ ( seed ) ]。
  • $urandom: 当被调用时,返回1个32-bit无符号伪随机数,可以选择性地使用seed去决定随机数序列的产生。函数定义为:function int unsigned $urandom [ (int seed ) ] ;
  • $urandom_range(): 当被调用时,返回指定范围(minval~maxval)内的1个32-bit无符号伪随机数。函数定义为:function int unsigned $urandom_range( int unsigned maxval, int unsigned minval = 0 ); 如果User在使用时,maxval小于minval,这些参数在sv内会自动反转,使得第一个参数肯定不小于第二个参数。

当然还有$dist_uniform, $dist_normal, $dist_exponential, $dist_poisson, $dist_chi_square, $dist_t, $dist_erlang等其它随机函数。

假如我们需要给1个64-bit变量(var_64b)产生随机数时,要注意不能只是简单的使用var_64b=$random(),这样会导致高32-bit其实并没有被随机化,有时候还挺难发现的。

当赋值时,等号两边位宽不一致时,原则如下:

  • 如果右边的宽度大于左边的宽度,那么右边的MSBs会被丢弃掉,EDA tools可以决定是否报warming或error。
  • 如果右边的宽度小于左边的宽度,那么右边将会扩展。如果右边是无符号数,高位将补0。如果右边是有符号数,高位将根据符号位扩展。如果是正数,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值