微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 急求大神来解答vcs的随机化问题,谢谢了

急求大神来解答vcs的随机化问题,谢谢了

时间:10-02 整理:3721RD 点击:
class dmx512_trans;
typedef enum {normal_full,normal_one,error_case1,error_case2} kind;
rand bit[10:0] strobe[];
rand bit[7:0] data;
rand kind transaction;
const bit start=1'b0;
const bit [1:0] stop=2'b11;
constraint c {
if(transaction==normal_full)
{
foreach (strobe[i])
strobe[i]=={start,data,stop};
strobe.size()==512;
}

else if (transaction==normal_one)
{
foreach (strobe[i])
strobe[i]=={start,data,stop};
strobe.size()==1;
}

else if (transaction==error_case1)
{
foreach (strobe[i])
strobe[i]=={start,data,stop};
strobe.size()==2;
}
else
{
foreach (strobe[i])
strobe[i]=={start,data,stop};
strobe.size()==2;
}
}
endclass
我想把每次得到的strobe数组里面的数值不一样,但是我用DVE仿真,得到的是每一种case里面的strobe数组数值是一样的,我特别希望每一组数组里面的中间8位data不一样,程序应该怎么改啊,谢谢了,各位大神!

自顶一下,希望好心人帮帮忙啊

求朋友给个意见呢,谢谢

按照你的写法,dmx512_trans 在randomize后只能产生确定的唯一一组data、start和stop,所以每种case里的strobe数组数值都相同。应该定义data[],然后将strobe[i]约束等于{start,data[i],stop},或者在post_randomize里赋值。

谢谢楼上的答复! 我现在在class里定义了一个tmp_data的变量,然后在约束里,使data==tmp_data+1;然后在post_randomize()函数里使tmp_data=tmp_data+1,这样定义的话,每一个case的strobe里数组的值,data还是一样的,只是这次这个case的data=0,下一次随机出来的这个case里的data值就是1,还有就是小编前面一种方法,申明data[],还是有点不懂,能具体说明一下吗?谢谢

定义数组strobe的size一样的动态数组data[],只要data随机产生,那么约束strobe\[i\] == {start,data\[i\],stop}后,strobe\[i\]就随机化了。
至于怎么让每个data值不一样,就需要你自己先想办法呢

恩,谢谢啊,我昨天试了下这么写,OK了,

实际上,我觉得可以在 postrandom 之后来实现。需要产生8路不同数据的,这个需要在 postrandom 之后发挥想象力

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

网站地图

Top