ISE自带仿真Isim与第三方仿真软件modelsim6.6的仿真结果不一致,求解
同样一个仿真程序,以下是仿真程序的有关片段:
reg [31:0]image[127:0];
reg [31:0]a;
initial
begin
$readmemh ("data.txt",image);
for(i=0;i<=61343;i=i+1)
begin
#10;
a=image[i];
end
end
data.txt文件里十六进制数据已有且格式正确无误。在modelsim6.6里仿真寄存器a和image都有数据,且正确。但在ISE自带仿真软件Isim里仿真的话寄存器a和image都无数据,显示XXXXXXXXXXXXXXX,为什么会出现这种不一致啊?
另外用modelsim仿真的时候修改了源程序之后再在modelsim里编译好,而仿真结果依然不会更新,显示的还是修改前的结果。ISE自带的Isim也存在这个问题,不过再重新建个工程重新仿真就好了,这是什么原因呢?
你这个写法是错的,不同软件对错误的解释不一样,应该改成
reg [31:0]image;
reg [31:0]a;
initial
begin
$readmemh ("data.txt",image);
for(i=0;i<=61343;i=i+1)
begin
#10;
a=image;
end
end
问题也有可能出在这里,你声明的image只有128组,但是for循环却打印到61343个,应该是只有前面的128个有值,之后就XXXXX了。你仔细看看波形图,是不是前128个有而你没看清。
他那样写没有错吧?他定义了128深度的数组,可能是FOR循环写的不对,应该前128个有数据。
二楼的朋友,我的想法和四楼那位朋友一样,我是申请的128位深度的存储器,况且我个人认为按照你的写法寄存器a是不会变的,for循环也就无意义了。我在modelsim上仿真的是前128位有数据,后面为XXXXXXXXXXXXXXX,这是正确的,问题是用Isim就全是XXXXXXXXX,不过你说的不同的仿真器对程序的处理不同还是很有道理的
三楼的朋友,我很确定modelsim仿真前128位有数据,后面位XXXXXXXX,而用ISE自带的Isim仿真结果全部是XXXXXXXXX。
而且我把存储器image的深度改为61344,并且data.txt文件数据做了相应补充之后,modelsim仿真完全正确,但Isim仿真的依然全部是XXXXXXXXX。
路径。
既然modelsim能仿真,说明路径也没有问题,应该不会出现同样的路径modelsim能识别而Isim识别不了的问题吧
建议使用绝对路径试试看,应该就OK啦
