在开发ROM,RAM等存储器类的FPGA应用时,会经常使用存储器的初始化文件,比如在一个嵌入式CPU的开发中,经常会碰到程序代码,数据代码等这些内容往往希望在FPGA上电的时候随着FPGA的配置一起成为ROM,RAM的初始值。在Quartus和Vivado系统中都支持一种扩展名为.mif的文件可以很好的支持上述功能。当然还有其它的格式文件也可以使用,如16进制文件(Intel-Format).hex,Vivado下的文件.coe等
1. mif文件的构成
Quartus 下mif文件是一种具有一定格式的ASCII码的文本文件,文件的扩展名为.mif。主要用来指定CAM,RAM或ROM存储器内的初始内容。该文件在编译时会一起打包到对应的可下载文件中如Quartus 中的.sof文件,在FPGA上电配置时一起作为ROM,RAM等存储器的初始化文件。mif文件也可以作为仿真文件的一部分在仿真过程中使用。
2. mif文件编辑
由于mif文件是ASCII码文本文件,因此只要能编辑ASCII码文件的编辑器都可以使用,如notepad, notepad++, 也可以在Quartus 下使用the Memory Editor, the In-System Memory Content Editor, 或 the Quartus Text Editor进行创建或编辑。
3. Quartus 下的mif文件格式
mif文件是存储器的初始化内容文件,其内容和地址一一对应。每个ROM,RAM都需要一个独立的mif文件。文件的格式如下:
-
- 指定存储器的深度,也就是对应多少存储单元。
- 如:DEPTH = 32; 表示有32个存储单元
- 存储单元的数据宽度,这个宽度要与ROM,RAM生成时指定的宽度一致。
- 如:WIDTH = 8; 表示存储单元的数据宽度为8位。
- 地址的表示方法,可以是2进制(BIN),16进制(HEX), 8进制(OCT),有符号的10进制(DEC),无符号的十进制(UNS)表示。地址的数值应与对应的进制一致。
- 如: ADDRESS_RADIX = BIN;
- 存储器内容的表示方法,可以是2进制(BIN),16进制(HEX), 8进制(OCT),有符号的10进制(DEC),无符号的十进制(UNS)表示。存储器内容的数值应与对应的进制一致。
- 如:DATA_RADIX = HEX;
- 地址数据由 CONTENT开始,具体的地址、内容映射由BEGIN …END;包括起来的部分。
- mif文件内由空格或TAB制表符分隔。
- mif文件内的注释语句可以由%…%括起来的部分,可以写在一行也可以写在多行。如:
- 指定存储器的深度,也就是对应多少存储单元。
% multiple-line comment
multiple-line comment %
也可以用 — 注释单行,如:— single-line comment。
-
- 地址和数据之间用冒号 : 分隔 。
例1:4位2进制到4格雷码的转换
% multiple-line comment multiple-line comment % —- single-line comment DEPTH = 32; -- The size of memory in words WIDTH = 8; -- The size of data in bits ADDRESS_RADIX = HEX; -- The radix for address values DATA_RADIX = BIN; -- The radix for data values CONTENT -- start of (address : data pairs) BEGIN 00 : 00000000; -- memory address : data 01 : 00000001; 02 : 00000011; 03 : 00000010; 04 : 00000110; 05 : 00000111; 06 : 00000101; 07 : 00000100; 08 : 00001100; 09 : 00001101; 0A : 00001111; 0B : 00001110; 0C : 00001010; 0D : 00001011; 0E : 00001001; 0F : 00001000; END;
例1中,只要将16进制数作为ROM地址,在ROM的输出端的低4位就是4位2进制格雷码。
例2: 8bit , 256深度, hex 格式 ,ROM带有填充的初始化
WIDTH=8; DEPTH=256; ADDRESS_RADIX=UNS; DATA_RADIX=HEX; CONTENT BEGIN 0 : 00; 1 : 01; 2 : 02; 3 : 03; 4 : 04; 5 : 05; 6 : 06; 7 : 07; 8 : 08; 9 : 09; 10 : 0a; 11 : 0b; 12 : 0c; 13 : 0d; 14 : 0e; 15 : 0f; 16 : 10; 17 : 11; 18 : 12; 19 : 13; 20 : 14; 21 : 15; 22 : 16; 23 : 17; 24 : 18; 25 : 19; 26 : 1a; 27 : 1b; 28 : 1c; 29 : 1d; 30 : 1e; 31 : 1f; 32 : 20; 33 : 21; 34 : 22; 35 : 23; 36 : 24; 37 : 25; 38 : 26; 39 : 27; 40 : 28; 41 : 29; 42 : 2a; 43 : 2b; 44 : 2c; 45 : 2d; 46 : 2e; 47 : 2f; [48..255] : 0; END;
4. mif的扩展应用
利用mif文件与ROM ,RAM 配合,可以生成各种编码,如 :减法器,格雷码,8b/10b转换,三角函数表等,在数据编码,科学计算,DSP等领域获得广泛应用。
练习题:利用mif文件生成8位二进制格雷码。