Menu Close

Quartus 下 mif文件的使用

在开发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开始,具体的地址、内容映射由BEGINEND;包括起来的部分。
    • 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位二进制格雷码。

 

Posted in FPGA, FPGA 教材教案, Quartus II, Verilog, Verilog, 开发工具, 教材与教案, 文章

发表回复

相关链接