求各个大神们指导:关于SV约束failed的问题
时间:10-02
整理:3721RD
点击:
定义了如下一个简单求和运算的transaction,循环若干次assert(tr.randomize())会出现部分failed现象,在c_len_value约束块里面加上len[31:16]<=16'hffff,结果就成功了百思不得其解~
classtr ;rand bit[31:0]sum ;
rand bit[31:0]len[] ;
rand bit[5:0]num ;
constraint c_len{
len.sum == sum ;
len.size== num ;
num inside {[2:10]};
}
costraint c_len_value{
foreach(len){
len[31:16] == 0 ;
}
}
constraint c_sum{
sum<32'hffff ;
}
endclass :tr
classtr ;rand bit[31:0]sum ;
rand bit[31:0]len[] ;
rand bit[5:0]num ;
constraint c_len{
len.sum == sum ;
len.size== num ;
num inside {[2:10]};
}
costraint c_len_value{
foreach(len){
len[31:16] == 0 ;
}
}
constraint c_sum{
sum<32'hffff ;
}
endclass :tr
有冲突,自然fail
上面那段代码冲突没能看出来,求指导~
fail的原因很多,肯定受到了冲突,软件也可问题。
solve sum before len
solve num before len
加这两个约束试试看出错的那个行不
没有定义unsigned,所以会出现负数,于是就冲突了
bit本来就是无符号的
建议看下LRM 有种写法比这个简洁有效,另外每次fail都会报出Error,直接看下就应该明白原因了
试了好像是存在小编说的问题~不过不知道怎么解释
”c_len_value约束块里面加上len[31:16]<=16'hffff,结果就成功了“
我随机没有问题呀,随了100次,另外,小编的语法不对,ies编译不过
foreach(len[i]){
len[i][31:16] == 0;
}