|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
小弟最近在忙实验室一个项目,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,补上一个else begin end 还是不行。
求大神指点!!!优化过程中到底发生了什么? |
|