电子说
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条评论
快来发表一下你的评论吧 !