FPGA設計中ROM的應用時比較常見的,在調用ROM時經常要加載mif文件,對於初學者,無論mif還是hex都是很令人疑惑的東西,這里就對mif文件的格式及其創建做一點簡單的說明。
mif在fpga設計中試memory initialization file 的縮寫,中文意思就是存儲器初始化文件。直接說就是給rom賦值的文件。先看一個簡單的mif文件的內容(可以用記事本將mif文件打開,看到里面的代碼):
DEPTH=256; %存儲器的縱向容量,就是存多少個數據,本例中是256個
WIDTH=8 ; %存儲器的橫向寬度,就是每個數據多少位,8位寬
ADDRESS_RADIX=DEC ; %設置地址基值(實際就是地址用什么進制的數表示) 可以設為BIN(二進制),OCT(八進制),DEC(十進制),HEX(十六進制)
DATA_RADIX=DEC ; %設置數據基值 同上
%數據區里的地址和數據值要和這里設置的值一致,即這里如果設置了
%DEC那么,數據區的地址和數據都要用十進制來表示。
CONTENT %開始數據區
BEGIN
0:0; %前面是地址,后面是數據,都是用十進制表示(上面的DEC)
1:1;
……%如果表示成這樣 [0..255]:10; 意思就是從0到255都是數據10.
255:255;
END; %結束
至於mif文件的創建,最簡單的方法就是用記事本了。也可以在Quartus II 里新建,然后保存。
mif文件的使用,在bdf模塊調用中找出lpm_ROM 在有一項設置中要添加文件那里加入就可以用了。
----------------------------
以下這些據說是Altera的官方說明;
Memory Initialization File (.mif) Definition
An ASCII text file (with the extension .mif) that specifies the initial content of a memory block (CAM, RAM, or ROM), that is, the initial values for each address. This file is used during project compilation and/or simulation. You can create a Memory Initialization File in the Memory Editor, the In-System Memory Content Editor, or the Quartus II Text Editor.
A Memory Initialization File serves as an input file for memory initialization in the Compiler and Simulator. You can also use a Hexadecimal (Intel-Format) File (.hex) to provide memory initialization data.
A Memory Initialization File contains the initial values for each address in the memory. A separate file is required for each memory block. In a Memory Initialization File, you must specify the memory depth and width values. In addition, you can specify data radixes as binary (BIN), hexadecimal (HEX), octal (OCT), signed decimal (DEC), or unsigned decimal (UNS) to display and interpret addresses and data values. Data values must match the specified data radix.
When creating a Memory Initialization File in the Quartus II Text Editor, you must start with the DEPTH, WIDTH, ADDRESS_RADIX and DATA_RADIX keywords. You can use Tab "\t" and Space " " characters as separators, and insert multiple lines of comments with the percent "%" character, or a single comment with double dash "--" characters. Address : data pairs represent data contained inside certain memory addresses and you must place them between the CONTENT BEGIN and END keywords, as shown in the following examples.
% multiple-line comment
multiple-line comment %
-- single-line comment
DEPTH = 32; -- The size of data in bits
WIDTH = 8; -- The size of memory in words
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 : 00000010;
03 : 00000011;
04 : 00000100;
05 : 00000101;
06 : 00000110;
07 : 00000111;
08 : 00001000;
09 : 00001001;
0A : 00001010;
0B : 00001011;
0C : 00001100;
END;
% multiple-line comment
multiple-line comment %
-- single-line comment
DEPTH = 32; -- The size of data in bits
WIDTH = 8; -- The size of memory in words
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 : 00000010;
03 : 00000011;
04 : 00000100;
05 : 00000101;
06 : 00000110;
07 : 00000111;
08 : 00001000;
09 : 00001001;
0A : 00001010;
0B : 00001011;
0C : 00001100;
END;
Address : Data Pairs Syntax Rules
Definition
Example
A : D
Addr[A] = D
2 : 4
Address: 01234567
Data: 00400000
[A0..A1] : D
Addr[A0] to [A1] contain data D
[0..7] : 6
Address: 01234567
Data: 66666666
[A0..A1] : D0 D1
Addr[A0] = D0,
Addr[A0+1] = D1,
Add [A0+2] = D0,
Addr[A0+3] = D1,
until A0+n = A1
[0..7] : 5 6
Address: 01234567
Data: 56565656
A : D0 D1 D2
Addr[A] = D0,
Addr[A+1] = D1,
Addr[A+2] = D2
2 : 4 5 6
Address: 01234567
Data: 00456000
轉自:http://hi.baidu.com/chentao841117/item/3b924522a2ef21130975084b