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文件,內容如下:
能成功導入,且數據一致,說明生成正確。