System Verilog中rand和randc

1、rand与randc

a、rand

rand修饰符:rand修饰的变量,每次随机时,都在取值范围内随机取一个值,每个值被随机到的概率是一样的,就想掷骰子一样。

rand bit[7:0] y

y的取值范围为0~255,每次随机时,都在此范围取值,每个值被取到的概率为1/256

b、randc

randc修饰符:randc表示周期性随机,即所有可能的值都取到过后,才会重复取值。

randc bit[1:0] y

y的取值范围是0~3,调用randomize()后,会返回一个y取值范围的随机序列,当这个序列的每个值都被y取到后,会在重新生成随机序列,开始下一个周期的随机取值,如下图所示。
在这里插入图片描述

c、randc注意

1、randc的随机序列在constrain约束发生变化,或者序列中剩下的值不能满足当前的约束要求时,变量的随机序列会被重新计算;

2、randomize()计算随机变量时,randc修饰的变量会被首先计算,在包含rand和randc的变量的约束计算中,可能会导致错误,需要注意。

2、randc应用:产生具有唯一元素的数组

a、rand产生具有唯一元素的数组,使用foreach

如下代码所示,使用foreach产生具有唯一元素的数组,此方法会产生4000多个独立约束,从而降低仿真速度。

class UniqueArray;
	rand bit[7:0] ua[64];
	constraint c {
		foreach(ua[i])
			foreach(ua[j])
				ua[i] != ua[j]
	}
endclass

b、使用randc产生唯一元素数组

class UniqueArray;
	bit[7:0] ua[64];
	randc bit[7:0] val;
	foreach(ua[i]) begin
		randomize();
		ua[i] = val;
		$display("ua[%d] = %h",i,ua[i]);
	end
endclass

仿真结果如下,val的随机序列的范围为0-255,所以取64个值不会重复。
在这里插入图片描述
在这里插入图片描述

  • 19
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值