微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > SystemVerilog随机化约束的问题

SystemVerilog随机化约束的问题

时间:10-02 整理:3721RD 点击:
class rand_addr;
rand bit [31:0] addr[4];
constraint c_addr {}
endclass

如上例子中要随机产生4个地址,
要求:
1> 4个地址不相等;
2> 4个地址的bit[31:10]要相等;
请教满足上面两个条件的约束应该怎么写?

{
(addr[0][31:10]== addr[1][31:10] )&&
(addr[1][31:10]== addr[2][31:10] ) &&
(addr[2][31:10]== addr[3][31:10] )&&
(addr[0][31:0]!== addr[1][31:0] )&&
(addr[0][31:0]!== addr[2][31:0] ) &&
(addr[0][31:0]!== addr[3][31:0] )&&
(addr[1][31:0]!== addr[2][31:0] )&&
(addr[1][31:0]!== addr[3][31:0] ) &&
(addr[2][31:0]!== addr[3][31:0] )
}应该可以吧

constraint c_addr {
foreach(addr[i])
foreach(addr[j])
if(i != j)
{
addr[i][31:10] == addr[j][31:10];
addr[i][9:0]!= addr[j][9:0];
}
}

upup!

牛人啊,顶一个

i don't know

upupup

foreach语句嵌套可能会出现问题,用for语句应该会安全很多。ps:初学者,见解如有错误轻拍~

constraint不支持for语句。

2#和3#都是正解!
2#的比较直观,不具有通用性,如果我的数组变大了或者干脆是个动态数组,2#的就不行了;
3#比较好;
systemverilog的constraint可以非常复杂,这些简单的约束很easy,书上说constraint的可以约束到求出8皇后问题,其实constraint有了对foreach和if else结构的支持,基本上99%的约束都可以满足!

膜拜3楼

为什么不建成两部分。分别生成?是不是效率会更高一点?

四个地址不相等不要在constraint里面约束,直接用randc命令, 每次random出来的值就都一样了;

dfsdfasdf

3楼正解。论坛里还是有葱的哈。

同意2楼,不过把addr[9:0]改成randc类型的就更简单了

我觉得3楼写的比较好

这个怎么写?能否写出来看一下?

我只想出来这种,randc bit [3:0] addr[4];
constraint c_addr {
foreach(addr)

foreach(addr[j])
if(i!=j)
addr[31:10] == addr[j][31:10];
}
如果按这种写法,和3楼的就查不多了。

这个方法好。


请教一个问题啊,在进行帧结构设计的时候,里面的随机变量如附件图中所示。现在想进行约束,
每发完一帧,就把 oh_mfas_r1 加一,当发完第255帧计数到255后,再把oh_mfas_r1置零,
重新再发帧数据逐渐加一运算。请问这个该怎么约束?谢谢了。

帧结构设计图

constraint c1_addr { addr[0][31:10] == addr[1][31:10];
addr[1][31:10] == addr[2][31:10];
addr[0][9:0] != addr[1][9:0]; ....6ge;}

好像不能对一个数据的某些bit 进行约束吧,你可以试试他们的说法

不一定要局限于约束,完全可以post_randomize来做

学习一下。

真是學習到了

enenen,不错!

为啥不能高位是一个数低位是四个数呢,问题就被分解了也不用那么麻烦。

醍醐灌顶啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top