FPGA|CPLD|ASICwilliam hill官网
直播中

梅雪松

12年用户 1236经验值
擅长:可编程逻辑 嵌入式技术 EDA/IC设计 控制/MCU
私信 关注
[资料]

小梅哥和你一起深入学习FPGA之mif文件的制作

本文档主要讲解实现一个1024点的16位正弦波数据的生成,并将该数据制作成quartus II使用的mif文件,使用此文件,我们便可以使用FPGA,基于直接数字合成(DDS)原理生成标准的正弦波,即实现信号发生器的功能。小梅哥的DDS实验已经做完,目前还没有进行文档的编写。朋友今天邀请我为他制作一个1024点的16位的正弦波mif文件,实现之后,发现过程中涉及到matlab软件、Excel软件、Quartus II软件的使用,每个过程简单,但是步骤较多,因此在这里以文档的方式记录下来,分享给需要的朋友。
首先,打开MATLAB软件,小梅哥这里使用的版本为MATLAB 2012b。新建一个Script文件,操作为File —>New—>Script。在该文件中输入以下内容:
F1=1; %信号的频率
Fs=1024;%采样频率
P1=0;%信号初始相位
N=1023;%采样点数为N+1
t=[0:1/Fs:N/Fs];%采样时刻
ADC=32767;%直流分量
A=32767;%信号幅度
s=A*sin(2*pi*F1*t + pi*P1/180) + ADC;%生成信号
plot(s);%绘制图形
即可生成我们所需要的数据,其中最后一行为绘制图形,是为了验证我们所生成的数据是否满足要求,不是一定需要。输入完成以后,点击“save and run”按钮,如下图所示。

将文件保存在你自己的路径下面,命一个有意义的名字,这里我暂时保存在桌面,命名为sin16_1024。保存后会弹出如下所示的对话框,选择Add to Path即可。

随后,会弹出如下所示的界面,该界面便是以我们生产的数据为值,t为时间轴绘制出来的波形,从波形可知为标准的正弦波,你也可以通过放大缩小来具体查看几个顶点的值,以确定数据是否在自己预期的范围内。这里,我们直接关掉该界面即可。

这个时候,我们在MATLAB主界面中,右侧的workspace栏中,选中name为s的一项,双击,便可打开该数组的值,如下所示:

将该表格中的所有数据选中(可选中第一个数据,然后将进度条拉到最后一个数据的位置,按下键盘上的shift键,鼠标点击最后一个数据,便可全选了),单击右键,复制即可。然后打开execl软件,选中A1单元格,ctrl+V(粘贴),即可。
在表格中,我们会发现,这些数据是带有2位小数位的,如下图所示:

而我们的mif文件不支持小数,因此需要将这些数据进行四舍五入。四舍五入的方法非常简单我们只需要选中行1(在数字1处点击鼠标左键即可选中),单击鼠标右键,选择设置单元格格式,如下图所示:

在弹出的界面中选中“数字”选项卡,选择“数值”,在“小数位数”处输入0,点击确定,即可。具体如下图所示:

设置完成之后我们再看,发现表格中的数据已经全部被四舍五入了,此时的数据,就是我们可以使用的数据了。如下所示:

此时,我们已经完成了mif文件所需数据的生成工作,我们可以将这个表格文件保存,也可以直接开着,不用关闭就行,因为这个文件只是一个中转。下一步,就是将这些数据生成我们所需要用到的mif文件了。
打开quartus II软件,选择file—>New,在打开的选项卡中,选择Memory Initialization File,点击OK。在弹出的mif文件大小设置选项卡中,设置Number of Words为1024,Word Size为16,点击OK即可,详细如下所示:

此时,就会建立好一个空白的mif文件,其中所有内容均为0,如下图所示:

我们将excel表格中的数据选中(可选中第一个数据,然后将进度条拉到最后一个数据的位置,按下键盘上的shift键,鼠标点击最后一个数据,便可全选了),单击右键,复制即可。然后回到quartus II的mif编辑界面,在mif文件的任意一个数据位置点击鼠标左键,然后按下键盘上的组合键ctrl + A(也就是全选),然后单击鼠标右键,选择paste即可。如下图

此时,我们发现,所有数据便依次存入了相应的地址中,如下图所示:

我们点击quartus II软件界面上的file—>save,选择你需要存储的路径,这里小梅哥暂时存储在桌面上,将文件名命名为sin16_1024,即完成了我们所有的工作。因为小梅哥这里没有创建工程,所以保存完成后quartus II软件会弹出以下界面,问你是否需新建工程,这里小梅哥只是做演示用,不需要新建工程,因此这里选择NO。

最后,附上朋友采用该mif文件生成的正弦波的仿真波形图:

利用此文件,就可以开始你的DDS设计啦。

回帖(22)

Elecfans管家

2014-11-10 11:34:53
版主威武!支持一下!
举报

梅雪松

2014-11-18 10:17:29
各位,由于小梅哥最近工作了,公司安排给了很多任务,可能更新的计划暂时要搁浅一到两个月。当然大家也不要觉得可惜,因为当小梅哥阶段性工作完成后,工作中的成果都会发布到博客里面来,那时候,相信进过了公司资深工程师的严格检验,小梅哥写的东西一定能够比现在成熟和优秀
举报

h1654155212.4311

2014-11-25 18:24:44
为何我的modulesim在仿真的时候老是发出警告,不能打开mif文件,小梅哥求解
1 举报
  • h1654155202.0218: 这个工程不是用 modelsim 直接对 mif 文件进行仿真啊。。

程浩天

2014-12-4 10:18:27
牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,牛逼,
举报

h1654155202.0218

2014-12-8 10:05:57
楼主,我提个意见哈。你用 Excel 只是为了对数据进行四舍五入,实际这个操作 MATLAB 本身就能完成啊,这条命令 Y = round(s);   就OK了。

当然,还是要感谢楼主对整体流程的介绍。(对了,我往 Quartus ii 的那个表里粘贴数据的时候,好像 ctrl+V 不行,鼠标右键再点 paste可以。我用的是11.0)
举报

梅雪松

2014-12-8 12:54:59
引用: catcherofmq 发表于 2014-12-8 10:05
楼主,我提个意见哈。你用 Excel 只是为了对数据进行四舍五入,实际这个操作 MATLAB 本身就能完成啊,这条 ...

是的,这个问题已经有筒子和我说过了,目前也已经做好了,目前可以直接用matlab生成mif文件了,只是最近比较忙,暂时没有发出来。
举报

pgfzhy

2014-12-26 19:52:29
学无止境,治学严谨,学以致用
举报

xiaoyaozhizhi

2015-1-3 10:42:00
用matlab写入文件保存一下就ok了
举报

龙飞

2015-1-4 21:21:45
顶一下!!!!学习学习!!
举报

heishe1989

2015-1-5 15:05:04
谢谢楼主分享,方法很重要,步骤可以慢慢摸索
举报

韩凯

2015-1-6 11:04:21
记得还有一个 mif表  好像是分配内存的
举报

dd

2015-1-28 16:41:42
不错不错,学习了
举报

风魔小象

2015-1-29 11:09:08
{:13:}
举报

马逸群

2015-4-8 10:50:26
niuniuniu                                 
举报

64xiaodian

2015-8-7 14:05:50
小数据直接还可以用excle粘进去的
举报

格古落

2016-1-19 16:45:41
小梅哥的资料是杠杠的,在下又学习到新东西了~
举报

邹德锁

2016-3-9 15:27:08
加油,小美哥,不错
举报

YUNWUGAOSULU

2016-3-10 08:57:44
不错,写的很详细。辛苦了,小梅哥
举报

秦工

2016-3-10 17:27:06
为什么图片一直转圈圈?看来是我的网速不好,先收藏回家再看吧
举报

更多回帖

发帖
×
20
完善资料,
赚取积分