FPGA设计中几种初始化文件的格式比较
一、Altera ROM 初始化文件——mif 文件格式
以下文字引自 Altera 公司的资料。
Memory Initialization File (.mif) Definition
An ASCII text file (with the extension  .mif) that specifies the initial conte
nt of a memory block (CAM, RAM, or ROM), that is, the initial values for ea
ch 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 initializati
on in the Compiler and Simulator. You can also use a Hexadecimal (Intel-For
mat) File (.hex) to provide memory initialization data.
A Memory Initialization File contains the initial values for each address i
n the memory. A separate file is required for each memory block. In a Mem
ory Initialization File, you must specify the memory depth and width values. I
n addition, you can specify data radixes as binary (BIN), hexadecimal (HEX), o
ctal (OCT), signed decimal (DEC), or unsigned decimal (UNS) to display and in
terpret 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 ke
ywords. You can use Tab "\t" and Space " " characters as separators, and in
sert multiple lines of comments with the percent "%" character, or a single c
omment with double dash "--" characters. Address : data pairs represent data
contained inside certain memory addresses and you must place them betwe
en the CONTENT BEGIN and END keywords, as shown in the following examp
les.
%  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;
可以通过 c 语言很简单地得到 mif 文件,下面是求 sina()的 256点用于 DDS
#include 
#include 
#include 
#define Pi 3.1416
#define DEPTH 256
#define LENTH DEPTH/2
fprintf格式void main()
{
FILE *fp;
int j;
unsigned char i="0";
unsigned  char x="0";
if((fp=fopen("d:\\sin.mif","w"))==NULL)
{
printf("can't open this file..\n");
exit(0);
}
fprintf(fp,"width=8;\n");
fprintf(fp,"depth=%d;\n",DEPT
H);
fprintf(fp,"address_radix=hex;\n");
fprintf(fp,"data_radix=hex;\n");
fprintf(fp,"content begin\n");
for(j=0;j<DEPTH;J++)
{ x=(int)(LENTH+LENTH*sin(2*Pi*i/DEPTH));
fprintf(fp,"  %x:  %x;\n",i,x);
i++;
}
fprintf(fp,"\n");
fprintf(fp,"end;\n");
printf("success");
getch();
}
二、Xilinx ROM 初始化文件——coe 文件格式
在ISE初始化ROM的时候要用到一个扩展名为.coe的文件, 一个标准的coe文件的格式如下:
MEMORY_INITIALIZATION_RADIX=2;  //数据格式,此为 2 进制,还可以为 8,10,16 进制
MEMORY_INITIALIZATION_VECTOR=
01110100,
00100000,
11110101,
10000000,
01111000,
00100010,
00000001,
00010100,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000, 00000000,
00000000,
01110100,
00000101,
11110101,
10000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000;
三、Xilinx FIR 滤波器系数文件格式
radix = 10;  //系数的进制,此为 10 进制,也可以为 2,  10,16 进制
coefdata = 
coef1,
coef2,
coef3,
coefN;
文件扩展名为.coe。FIR 的 datasheet里没有写进制位 8 的情况。