SV中没有提供专门从数组中抽取一个元素的方法。但可以通过下面的方法实现:
module rand_select_array_element(); initial begin //declare int array[int]; int idx=1;// int rand_idx;//initial value is 0 int element;//initial value is 0 int count=0; repeat(10) begin $display("**** idx = %d ***", idx); array[idx] = idx; idx = idx << 1; end foreach(array[i]) $display("***array[%0d] = %0d",i, array[i]); //下面这一段有意思,好好品一品 element = $urandom_range(array.size()-1); $display("****element=%0d", element); foreach(array[i]) if(count++ == element) begin rand_idx = i; break; end $display("****%0d element array[%0d]=%0d", element, rand_idx, array[rand_idx]); end endmodule其中,代码:
foreach(array[i]) if(count++ == element) begin rand_idx = i; break; end相当于代码:
foreach(array[i])begin if(count == element) begin rand_idx = i; break; end count = count + 1; end
其中$urandom_range()函数有两个参数,一个是上限参数和一个可选的下限参数。
element=$urandom_range(3,10);//element值的范围是3~10 element = $urandom_range(10, 3); //element值的范围是3~10;上下限可倒置 element=$urandom_range(5);//element值的范围是0~5上述代码的仿真结果,如下图所示,element=4,相当于抽取数组array的第5个元素,即array[16]=16
小结:
对于定宽数组、队列、动态数组和关联数组可以使用$urandom_range($size(array)-1)
而对于队列和动态数组还可以使用$urandom_range(array.size()-1)
如果想从一个关联数组中随机选取一个元素,需要逐个访问它之前的元素,原因是没办法能够直接访问到第N个元素。上面的程序示范了如何从一个以整数值作为索引**的关联数组中随机选取一个元素。
注:如果数组是以字符串作为索引,只需要将idx的类型改为string即可。
审核编辑:黄飞
-
字符串
+关注
关注
1文章
590浏览量
22509 -
代码
+关注
关注
30文章
4906浏览量
71031 -
数组
+关注
关注
1文章
420浏览量
26740
原文标题:随机抽取SV数组中的一个元素
文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
[教程] Matlab中矩阵、向量及数组元素的引用方法和讨论
一维数组元素如何转化为坐标值
labview如何可以将一个1×1的数组(该数组内元素值是随机变化的)转换为一个1×N的数组
Labview一维数组相同元素去重及相同元素个数源代码免费下载

评论