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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] 随机一个数组,只要有两个0出现,在第三个0出现前必须有个1

[复制链接]
发表于 前天 17:35 | 显示全部楼层 |阅读模式

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

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

x
如何写约束实现如下,随机一个数组,数组的值的范围是[0:5],只要有两个0出现,在第三个0出现前必须有个1,谢谢!

目前只能写出 foreach(array[i]) {if(i > 2) (array[i] | array[i-1] | array[i-2]) != 0;}   但是数组中运行的值不仅仅有0和1,还有其他值,所以这条约束就不大适用了。
发表于 前天 17:46 | 显示全部楼层
这种东西,AI不是更擅长么:class my_array;   rand bit [2:0] arr[];   int length;    function new(int len);     length = len;     arr = new[length];   endfunction    constraint value_range {     foreach(arr[i]) arr[i] inside {[0:5]};   }    // 不加复杂约束,后处理   function bit check_constraint();     int zero_idx[$];     foreach(arr[i]) if (arr[i] == 0) zero_idx.push_back(i);     for (int k = 2; k < zero_idx.size(); k++) begin       bit found = 0;       for (int j = zero_idx[k-1]+1; j < zero_idx[k]; j++)         if (arr[j] == 1) found = 1;       if (!found) return 0;     end     return 1;   endfunction    function void post_randomize();     while (!check_constraint()) void'(randomize());   endfunction endclass
发表于 前天 18:30 | 显示全部楼层
deepseek 问出你的问题吧
 楼主| 发表于 前天 19:37 | 显示全部楼层


Xunuoo 发表于 2025-7-16 17:46
这种东西,AI不是更擅长么:class my_array;   rand bit [2:0] arr[];   int length;    function new(int  ...


谢谢。问了AI了,也是这个结果,但是不大符合需求
发表于 昨天 08:58 | 显示全部楼层
我建议通过多次随机,然后挑选符合要求的数据出来。也就是ai给的方式。这种实现比较简单
发表于 昨天 15:10 | 显示全部楼层
再一条约束把值圈死,应该就可以 foreach(xxx[i]) {xxx[i] inside {[0:1]};
发表于 昨天 20:05 | 显示全部楼层
我提供个思路:你先正常随机,然后遍历这个array,找到第三个0,然后把这个0 replace成1 。然后counter置0 ,循环这个操作,直到array的尾巴
发表于 4 小时前 | 显示全部楼层
先随机出来,在根据规则进行后处理是一个好的思路
 楼主| 发表于 3 小时前 | 显示全部楼层


daviehj 发表于 2025-7-17 15:10
再一条约束把值圈死,应该就可以 foreach(xxx) {xxx inside {[0:1]};


这个应该可以,我试一下,谢谢
 楼主| 发表于 3 小时前 | 显示全部楼层


akqkq 发表于 2025-7-17 20:05
我提供个思路:你先正常随机,然后遍历这个array,找到第三个0,然后把这个0 replace成1 。然后counter置0  ...


谢谢,有这样考虑过。但是transaction中其实还有其他变量数组,当array中的值为0或者1,或者2时,同时约束其他值的随机,好像不能单独的修改这个值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-7-18 20:53 , Processed in 0.023717 second(s), 7 queries , Gzip On, MemCached On.

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