微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > modelsim优化后仿真 和 不优化的仿真结果不一样?

modelsim优化后仿真 和 不优化的仿真结果不一样?

时间:10-02 整理:3721RD 点击:
小弟最近在忙实验室一个项目,RTL模型写完了,正在仿真验证,关于优化仿真和不优化仿真遇到一点问题:
先把modelsim官方教程中相关部分贴出来:
“三步流程仿真方法“ 中两种类型
(1)Performing a simulation for debug — preserve the highest level of visibility by
specifying the +acc argument to vopt. For example:
vlog -work <required_files>
vopt +acc top -o dbugver
vsim dbugver
(2)Performing a simulation for regression — reduce the amount of visibility because you
are not as concerned about debugging. For example:
vlog -work <required_files>
vopt top -o optver
vsim optver
我的testbench中输出结果部分代码如下:
//**************** write output ***************
always @(posedge da_clk) begin
if( !empty_3 )
$fwrite(fid_out,"%0d%0d\n",real_final_out,imag_final_out);
end
integer num;
always @(posedge wclk) begin
if(winc && !wfull_1 ) begin
$fwrite(fid_mapout,"%0d%0d\n",map_real,map_imag);
num=num+1;
end
else if(!frame)
num=0;
else
num=num;
end

现在出现的问题是:
大量case仿真时,为加快速度,使用(2)方法:fid_out文件中输出的数据全是0(数量正确,只是数据是0),fid_mapout文件输出正确
debug时,使用(1)方法:fid_out文件和fid_mapout文件输出都正确
先用(2)仿真,发现fid_out有问题,然后(1)debug仿真,又发现输出正确,当然波形也正确,这是怎么回事?跟哥玩捉迷藏?
我在想是不是两种仿真的结果一样,只不过输出部分代码在两种方法下有不同的行为?但是看看上面代码又找不到问题,为什么fid_mapout就不会有这个问题呢?
一开始觉得是不是第一个always块中少了else,补上一个elsebeginend 还是不行。
求大神指点!优化过程中到底发生了什么?

没人啊

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

网站地图

Top