电子说
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即可。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !