Memory Initialization File (.mif) Definition

An ASCII text file (with the extension .mif) that specifies the initial values for each address in a memory block (RAM or ROM). The Intel® Quartus® Prime reads this file 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 Intel® Quartus® Prime Text Editor.

A Memory Initialization File serves as an input file for memory initialization in the Compiler and Simulator. Additionally, you can provide memory initialization data with Hexadecimal (Intel-Format) File (.hex).

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 Intel® Quartus® Prime 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 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 : 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