Matlab生成Xilinx Rom IP CORE的初始化内容coe文件

在进行FPGA设计时,经常要对rom模块进行初始化。ISE或Quartus II软件本身具备的初始化功能对于较小的rom是行之有效的,但面对大容量的rom时就显得捉襟见肘了。而matlab作为一神器,在这时就有了用武之地。使用它生成.coe或.mif文件,可以起到事半功倍的效果。

生成.coe文件
一、了解.coe文件的格式
在ISE中,对rom进行初始化的文件是.coe文件。它的格式如下:
  memory_initialization_radix=10; -->文件存储数据的进制,10即为10进制
  memory_initialization_vector = -->数据向量
  65534,65533,……,65532,65528; -->所存储的10进制数据,每个数据使用逗号隔开,最后分号结束

**.coe文件的前两行的开头格式是固定的,不能改变的。
**--|第一行:memory_initialization_radix=<进制>;
**--|第二回:memory_initialization_vector=   

**所存储的数据数量与大小,是与设计rom的位宽和深度相对应的。

二、使用matlab生成.coe文件

2.1 以下程序用于为位宽为16bit,深度为1024的rom生成初始化文件
  width=16;   %rom的位宽
  depth=1024; %rom的深度
  x=linspace(0,2*pi,depth);  %在一个周期内产生1024个采样点
  y_cos=cos(x);   %生成余弦数据
  y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;  %将余弦数据全部转换为整数

  fid=fopen('C:\Users\Administrator\Desktop\cos_coe.coe','w');  %创建.coe文件
  fprintf(fid,'%d,\n',y_cos);  %向.coe文件中写入数据
  fclose(fid);  %关闭.coe文件

2.2 编辑.coe文件(最好使用UltraEdit打开)
--在前两行添加
  memory_initialization_radix=10;
  memory_initialization_vector =
--将最后的逗号改为分号
--最后文件格式:
  memory_initialization_radix=10;
  memory_initialization_vector =
  65534,
  65533,
  .....
  65334,
  65287;

生成.mif文件
一、了解.mif文件的格式
%.mif文件的结构
%--WIDTH=16;    -->位宽
%--DEPTH=1024;  -->深度

%--ADDRESS_RADIX=UNS;   -->地址的进制,此处为无符号类型
%--DATA_RADIX=UNS;      -->数据的进制,此处为无符号类型

%--CONTENT BEGIN        -->存储内容的开头
%--0:0;
%--……;
%--1023:43;
%--END;                 -->存储内容的结束

二、使用matlab生成.mif文件
width=16;   %rom的位宽
depth=1024; %rom的深度
x=linspace(0,2*pi,depth);  %在一个周期内产生1024个采样点
y_cos=cos(x);   %生成余弦数据
y_cos=y_cos+1;  %将生成的数据全部转换为整数
y_cos=round(y_cos*(2^(width-1)-1));    %将幅值放大,并转换为整数
y_sin=sin(x);   %生成正弦数据
y_sin=y_sin+1;
y_sin=round(y_sin*(2^(width-1)-1));    %将幅值放大,并转换为整数
fid=fopen('C:\Users\Administrator\Desktop\cos_mif.mif','w');
for num=0:depth-1;
    fprintf(fid,'%d:%d;\n',num,y_cos(num+1));
end
fclose(fid);

fid=fopen('C:\Users\Administrator\Desktop\sin_mif.mif','w');
for num=0:depth-1;
   fprintf(fid,'%d:%d;\n',num,y_sin(num+1)); 
end
fclose(fid);
%用于测试生成的数据
%plot(x,y_cos)
%plot(x,y_sin)

你可能感兴趣的:(FPGA开发)