modelsim仿真IP核产生的正弦波无法读取.mif,显示XXX等问题解决方案

利用Quartus中的IP核完成正弦波参考的生成,是通过查表完成的。

其中用到的sin.mif可以参考本站利用matlab产生正弦波信号.mif文件的教程。此处存在一个问题,有的教程分析modelsim仿真无法读取.mif文件,只能使用.hex文件,这一点与笔者遇到的情况并不相同(使用.mif文件也能完成正弦波的生成)。

简单的测试程序编写完成后,运行仿真出现了一系列警告(多次尝试解决的过程中),包括不限于:Could not open WLF file: vsim.wlf , # ERROR: cannot read ./simulation/modelsim/sin.hex(总之输出一直为XXXXX)。

使用SingalTap观察信号,发现输出是正常的(观测时钟是g_clk,只能看到比较缓慢的数据变化),正弦波的生成与输出是没有问题的。问题还是出在仿真身上。

在站内查找问题的解决方案,如http://t.csdn.cn/1ax0qhttp://t.csdn.cn/rrYZE ,http://t.csdn.cn/MVPGO 等文章都有相关说明,对于modelsim的仿真可能使用hex文件更为合适。但是笔者仍然没有出现想象的正弦波:

查询以后看到不少文章都在谈论初始化的问题,甚至有些使用.mif文件的仿真也是因为初始化失败导致输出不正常。笔者加入初始化(上图存在初始化步骤,不过笔者没get初始化是对ROM内容的初始化),仍然没有解决问题。还有说hex文件必须放在modelsim的文件夹下。在http://t.csdn.cn/VBhSF文章的指导下,切实解决了相对路径绝对路径导致的文件调用失败问题(可以直接使用.mif文件)。笔者无法显示正常正弦波的原因主要是程序进入always块的条件只有posedge clk,clk开始状态不定,没有完成查表的初始化(讲解初始化问题的文章可以参考http://t.csdn.cn/YstYm)。

always@(posedge g_clk or negedge rst_n)

//always@(posedge g_clk)

begin

if(!rst_n)

begin count<=8'b0;end

else if(count==8'd146)

begin count<=8'b0;end

else begin count<=count+1'b1;end

end

将源码改成always@(posedge g_clk or negedge rst_n)以后,正弦仿真顺利生成:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值