0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

随机抽取SV数组中的一个元素方法实现

sanyue7758 来源:处芯积律 2024-03-21 10:11 次阅读

SV中没有提供专门从数组中抽取一个元素的方法。但可以通过下面的方法实现:

9dbfbcec-ddf8-11ee-a297-92fbcf53809c.png

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

9ddd627e-ddf8-11ee-a297-92fbcf53809c.png

小结:

对于定宽数组、队列、动态数组和关联数组可以使用$urandom_range($size(array)-1)

而对于队列和动态数组还可以使用$urandom_range(array.size()-1)

如果想从一个关联数组中随机选取一个元素,需要逐个访问它之前的元素,原因是没办法能够直接访问到第N个元素。上面的程序示范了如何从一个以整数值作为索引**的关联数组中随机选取一个元素。

注:如果数组是以字符串作为索引,只需要将idx的类型改为string即可。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20123
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595

原文标题:随机抽取SV数组中的一个元素

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [教程] Matlab矩阵、向量及数组元素的引用方法和讨论

    将它混淆,I*J*K叫做尺寸,而此时是三维数组,还有点Matlab没有数组,它将标量视为1*1的二维
    发表于 05-07 21:48

    删除或替换数组元素

    本帖最后由 samuergao 于 2014-11-21 14:01 编辑 曾经遇到想删除数组某个元素的问题,比如要删除或者替换一个数组中所有为10的
    发表于 07-01 16:24

    查询数组(数值型数组一个元素出现的次数

    数组练习,查询数组(数值型数组
    发表于 08-05 14:47

    数组相同元素的个数

    各位大神,请教个问题,两数组,每个数组约有6万元素
    发表于 04-07 17:27

    数组元素比较问题

    数组,我需要将数组的最小值找出来跟其他元素
    发表于 11-17 14:00

    数组元素如何转化为坐标值

    计算,这样就可以转化为1500×1500坐标,横纵坐标值可以用两数组表示,以方便后面计算时用“索引数组”分别把坐标提取出来。下面是我
    发表于 02-15 21:24

    LabVIEW如何实现数组元素赋值?

    比如,我想让有3648元素数组的前几位和后几位是同一个采集到的数:a[0]=a[1]=a
    发表于 04-07 23:34

    数组进行随机排序的算法分析

    时,可以忽略运行速度,但当数据量达到10万级时,运行次的时间大概需要2分钟。效率极低。方法二:在数组长度范围内生成
    发表于 05-24 15:48

    如何设计vi实现数组元素相乘?

    设计VI,输入数组,将相邻的元素相乘(从元素0和元素1开始的的
    发表于 05-30 21:35

    有什么高效率的方法数组抽取个位重新组成数组吗?

    个数组,长度为32,现在需要从数组的每个元素抽出各个位来组成
    发表于 09-02 04:13

    labview如何可以将1×1的数组(该数组元素值是随机变化的)转换为1×N的数组

    请教各位大师了,labview如何可以将1×1的数组(该数组元素值是随机变化的)转换为
    发表于 11-23 17:30

    找到二维数组中最大最小值,元素50的小程序

    实现从一4*4的二维整数数组元素随机数0-100组成)中找到最大值,最小值,并给出其索引。找到元素
    发表于 12-08 15:57

    matlab如何从个数组每隔几个数抽取生成新的数组

    matlab从个数组每隔几个数抽取生成新的数组
    发表于 08-12 01:49

    C语言数组元素的指针

    C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。 由于数组名代表的是数组
    的头像 发表于 03-10 14:45 582次阅读

    labview怎么查数组中相同元素的个数

    要查找LabVIEW中数组中相同元素的个数,可以使用以下步骤: 创建一个包含要查找的数值的数组。这可以通过手动输入数组元素或从文件/其他数据
    的头像 发表于 12-28 16:42 1024次阅读