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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1203|回复: 2

[求助] 约束出现无法解释的BUG???

[复制链接]
发表于 2024-9-5 17:30:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Wade_ 于 2024-9-5 17:34 编辑

最近在做一个项目,对数据包有如下的约束:(为了数据安全,对变量名做了替换处理)



      1 class my_trans;
      2     rand bit pkt_ctrl_1;
      3     rand bit [7:0] pkt_1;
      4
      5     rand bit mode;
      6     rand bit [7:0] func;
      7
      8     constraint func_cons{
      9         if(mode == 0) {
     10             func[7:0] < 100 ;
     11         } else {
     12             func[7:4] inside {[0:9]};
     13             func[3:0] inside {[0:9]};
     14         }
     15
     16         solve mode before func;
     17     };
     18
     19
     20     constraint pkt_1_cons{
     21         if(pkt_ctrl_1 == 0) {
     22             pkt_1[7:0] < 100 ;
     23         } else {
     24             pkt_1[7:4] inside {[0:9]};
     25             pkt_1[3:0] inside {[0:9]};
     26         }
     27
     28         solve pkt_ctrl_1 before pkt_1;
     29     };
     30
     31     constraint pkt_ctrl_1_cons{
     32         pkt_ctrl_1 inside {[0:1]};
     33     };
     34
     35    ...........
     36
     37 endclass


pkt_ctrl_1 和 pkt_1 是我要的数据包,mode 和 func是我添加的冗余数据包,没有任何作用。
我做了如下的尝试:
1、注释掉 mode 和 func 所有相关的约束和定义,在随机化时会报错,一次报错信息如下所示:


Solver failed when solving following set of constraints

bit[7:0] pkt_1 = 8'hd8;
rand bit[0:0] pkt_ctrl_1; // rand_mode = ON

constraint pkt_1_cons    // (from this) (constraint_mode = ON) (../tc/calendar_time/time_cons.sv:34)
{
   (pkt_ctrl_1 == 1'h0) -> (pkt_1 < 8'h64);
   (!(pkt_ctrl_1 == 1'h0)) -> ((pkt_1[7:4]) inside {[0:9]});
}


这种报错是偶发的,我换了随机种子之后就不再出现了。

2、 我以为是我这个约束方式有问题,随即在原有代码的基础上加上了一模一样的约束:mode 和 func,相同的约束种子下,问题就消失了。(也可能没有消失,只是因为加了别的约束,导致尽管是相同种子,随机出来的值也不一样了。)
3、代码 35省略部分,是将pkt_1作为条件之一,对其他pkt进行约束,我觉得可能有影响,随即删除。还是同样的种子,问题也没有复现,猜测可能和2一样,随机值不一样了。

我的问题是,对pkt_1和pkt_ctrl_1的约束有问题吗? 有没有其他思路和解决方案?

发表于 2024-9-9 15:28:07 | 显示全部楼层
先说现在问题有没有稳定复现(跑几次必然有一次也行)。不能复现的问题没法分析。
 楼主| 发表于 2024-9-10 16:29:36 | 显示全部楼层


zhangdeshuai 发表于 2024-9-9 15:28
先说现在问题有没有稳定复现(跑几次必然有一次也行)。不能复现的问题没法分析。 ...


已经解决啦。 我的数据约束有两部分, 第一部分是约束数据的有效范围,第二部分是根据控制位(控制位也是随机的)将有效值转换成指定格式。 我第一次约束时,将这两部分混合在随机约束中了,导致错误是偶发的,报错信息也不够,没法定位。 后来我就只约束了有效范围,第二部分的格式转换放到了post_randomize【单独再做一个function也行】函数中,就能正常产生我要的数据了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-18 18:19 , Processed in 0.021822 second(s), 6 queries , Gzip On, Redis On.

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