在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2967|回复: 9

[讨论] 讨论一个动态数组随机问题

[复制链接]
发表于 2018-3-30 08:45:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 飞扬紫百合 于 2018-4-2 08:56 编辑

最近遇到一个动态数组随机的问题。

想制定一个函数来随机产生需要的一位宽的动态数组。

要求随机产生一个 bit array[]动态数组,size和所有元素中为1的个数在使用的时候再随机产生。

尝试找一个简便的方式来完成,谁有高见,请指点一点吧


这个是理论上最简便的方法。
function void gen_array( int a_size, int sum, ref bit d_array[]);
      std::randomize(d_array) with {d_array.size==a_size; d_array.sum==a_sum;};
endfunction

但是,目前在vcs上和irun都可以编译,run的时候约束失败。


谢谢了!
发表于 2018-3-30 10:22:56 | 显示全部楼层
两个array,arrayA 放你要随机的内容,假设arrayB放对应arrayA 中item为1 的index,arrayA和arrayB 都可以随机,然后就把size 约束一下。用的时候根据arrayB,把arrayA中相应index的内容 one line constrain 一下就可。连for loop都不需要。
 楼主| 发表于 2018-3-30 11:37:31 | 显示全部楼层
回复 2# luyuan_0922


    我就等到一个function里面
类似这样
function void gen_1bit_array(int size, int hot_num, ref bit d_array[]);
目前利用你说的类似方式早已经实现了。

就是想简单直接一点
发表于 2018-3-30 11:41:33 | 显示全部楼层
一定要封装成函数么?可以直接定义一个类,里面放个动态数组,通过约束它的size和sum来实现
发表于 2018-4-1 12:51:04 | 显示全部楼层
回复 4# idealm


    你的答案是正解,我支持;
 楼主| 发表于 2018-4-2 08:55:36 | 显示全部楼层
回复 4# idealm

这种方法不是没想到,只是这个随机产生数组的功能只有在特定的几个时间才会请用,并且size和sum每次要求也不一样。

class的做法和下面做法一样,目前跑仿真的时候约束失败。
这个是理论上最简便的方法。
function void gen_array( int a_size, int sum, ref bit d_array[]);
      std::randomize(d_array) with {d_array.size==a_size; d_array.sum==a_sum;};
endfunction

但是,目前在vcs上和irun都可以编译,run的时候约束失败。

求教了!
发表于 2018-4-2 09:17:53 | 显示全部楼层
回复 6# 飞扬紫百合


   是约束失败么?那应该是sum函数的问题,我记得它返回值的位宽是你数组定义的位宽,所以这里就是bit类型,你如果约束成大于1的值就求解不出来。好像有方法把处理,但是我记不清了
发表于 2018-4-2 09:29:16 | 显示全部楼层
帮你翻了一下标准,下面这样写应该就可以了,你试试吧
function void gen_array( int a_size, int sum, ref bit d_array[]);
      std::randomize(d_array) with {d_array.size==a_size; d_array.sum with (int'(item)) ==a_sum;};
endfunction
 楼主| 发表于 2018-4-2 10:52:14 | 显示全部楼层
回复 8# idealm


Nice!

我忽略了sum的返回值了
发表于 2018-4-3 16:37:19 | 显示全部楼层
Good.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-6 13:53 , Processed in 0.030102 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表