mif文件就是存儲器初始化文件,即memory initialization file,用來配置RAM或ROM中的數據。生成QuartusII11.0可用的mif文件,有以下幾種方式:html
方法1:利用Quartus自帶的mif編輯器編輯器
優勢:對於小容量RAM能夠快速方便的完成mif文件的編輯工做,不須要第三方軟件的編輯;spa
缺點:一旦數據量過大,一個一個的輸入會令人崩潰;code
使用方法:在quartus中,【file】/【new】,選擇Memory Initialization file,彈出以下窗口:htm
Number of words:可尋址的存儲單元數,對於8bit地址線,此處選擇256;blog
words size:存儲單元寬度,8bit;get
而後點擊「OK」.it
對每一個單元填寫初始值以後,將文件保存便可。io
方法2:利用mif軟件來生成class
不管使用什麼編輯器,必須保證mif文件的格式以下:冒號左邊是地址,右邊是數據;分號結尾;
如下爲必要信息:
DEPTH = 256; //數據深度
WIDTH = 8; //數據寬度
ADDRESS_RADIX = HEX; //地址類型:HEX-16進制,UNS-無符號整型,DEC-一種數據類型
DATA_RADIX = HEX; //數據類型:HEX-16進制,UNS-無符號整型,DEC-一種數據類型
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); } }
方法4,使用MATLAB生成mif文件!!
如下是mif文件的必要部分!
WIDTH=8; //數據位寬爲8位
DEPTH=256; //存儲深度爲256
ADDRESS_RADIX=UNS; //地址類型爲無符號整型
DATA_RADIX=UNS; //數據類型爲無符號整型
CONTENT BEGIN
0:1; //地址0的存儲器內容爲1
1:3; //地址爲1的存儲器內容的3
[2:255]:0;//地址爲2~255的存儲器內容爲0
END;
這樣,便可利用matlab構造相似的文件存儲方式。利用matlab將上述的圖像數據轉換成.mif。代碼以下所示:
1 clear; 2 clc; 3 close all; 4 fid=fopen('data_8bits.txt');%打開待轉換數據的.txt文件 5 temp=fscanf(fid,'%x');%掃描文件 6 n=1024; 7 fid=fopen('convert_data.mif','w');%打開待寫入的.mif文件 8 fprintf(fid,'WIDTH=8;\n');%寫入存儲位寬8位 9 fprintf(fid,'DEPTH=1024;\n');%寫入存儲深度1024 10 fprintf(fid,'ADDRESS_RADIX=UNS;\n');%寫入地址類型爲無符號整型 11 fprintf(fid,'DATA_RADIX=HEX;');%寫入數據類型爲16進制 12 fprintf(fid,'CONTENT BEGIN\n');%起始內容 13 for i=0:n-1 14 fprintf(fid,'\t%d:%x;\n',i,temp(i+1)); 15 16 end 17 fprintf(fid,'END;\n'); 18 fclose(fid);%關閉文件