| |
原文网址http://www.cnblogs.com/BitArt/archive/2012/12/11/2813503.html
mif文件就是存储器初始化文件,即memory
initialization file,用来配置RAM或ROM中的数据。生成QuartusII11.0可用的mif文件,有如下几种方式:
方法1:利用Quartus自带的mif编辑器
优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;
缺点:一旦数据量过大,一个一个的输入会使人崩溃;
使用方法:在quartus中,【file】/【new】,选择Memory
Initialization file,弹出如下窗口:
Number of words:可寻址的存储单元数,对于8bit地址线,此处选择256;
words
size:存储单元宽度,8bit;
然后点击“OK”.
·
在表格中输入初始化数据;
·
右键单击左侧地址值,可以修改地址和数据的显示格式;
·
表中任一数据的地址=列值+行值,如图中蓝色单元的地址=24+4=28;
对每个单元填写初始值之后,将文件保存即可。
方法2:利用mif软件来生成
无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;
DEPTH
= 256;
WIDTH
= 8;
ADDRESS_RADIX
= HEX;
DATA_RADIX
= HEX;
CONTENT
BEGIN
0000 :
0000;
0001 :
0000;
0002 :
0000;
……(此处省略一千字*.*)
00FA :
00FF;
00FB :
00FF;
00FC :
00FF;
00FD :
00FF;
00FE :
00FF;
00FF :
00FF;
END;
这里推荐一款mif生成器:Mif_Maker2010.exe,可以百度下载;软件使用方法见《Mif Maker2010的使用方法》。
方法3:使用高级语言
用C语言或者matlab语言等来生成,C语言生成代码如下:本代码生成一个正弦波的数据波形,保存在TestMif.mif中。
#include <stdio.h>
#include <math.h>
#define PI 3.141592
#define DEPTH 128 /*数据深度,即存储单元的个数*/
#define WIDTH 8 /*存储单元的宽度*/
int main(void)
{
int i,temp;
float s;
FILE *fp;
fp =
fopen("TestMif.mif","w");
/*文件名随意,但扩展名必须为.mif*/
if(NULL==fp)
printf("Can not creat file!\r\n");
else
{
printf("File
created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf(fp,"DEPTH = %d;\n",DEPTH);
fprintf(fp,"WIDTH = %d;\n",WIDTH);
fprintf(fp,"ADDRESS_RADIX = HEX;\n");
fprintf(fp,"DATA_RADIX = HEX;\n");
fprintf(fp,"CONTENT\n");
fprintf(fp,"BEGIN\n");
/*
* 以十六进制输出地址和数据
*/
for(i=0;i<DEPTH;i++)
{
/*周期为128个点的正弦波*/
s =
sin(PI*i/64);
/*将-1~1之间的正弦波的值扩展到0-255之间*/
temp = (int)((s+1)*255/2);
/*以十六进制输出地址和数据*/
fprintf(fp,"%x\t:\t%x;\n",i,temp);
}//end for
fprintf(fp,"END;\n");
fclose(fp);
}
}
验证生成的数据是否正确:用记事本打开生成的mif文件,同时用Quartus打开mif文件,内容如下:
能成功导入,且数据一致,说明生成正确。(转,完成)