使用matlab生成rom初始化文件.coe

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

1、了解.coe文件的格式

在ISE中,对rom进行初始化的文件是.coe文件。它的格式如下:
memory_initialization_radix=10; -->文件存储数据的进制,10即为10进制
memory_initialization_vector = -->数据向量
0,402,804,1206,1608,2009,2411,2811,3212, -->所存储的10进制数据,每个数据使用逗号隔开,最后分号结束

.coe文件的前两行的开头格式是固定的,不能改变的。

memory_initialization_radix=10;	//10表示<10进制>
memory_initialization_vector=
…
…

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

2、使用matlab生成.coe文件

2.1 以下程序用于为位宽为16bit,深度为1024的rom生成初始化文件

n  = 16;%量化位数
f  = 5e4; %信号频率Hz
fs = 25600000; %采样频率Hz
N  = 1024; %本次共采样点数
t  = (0:N-1)/fs; %采样时间s
x  = sin(2*pi*f*t); %信号采样值
y  = x*(2^(n-1)); %量化
y_z= round(y); %四舍五入取整
    
%生成y.coe文件
fid=fopen('E:\matlab-function\y.coe','w'); %创建y.coe文件
fprintf(fid,'%d,\n',y_z) %向y.coe中写入数据
fclose(fid); %关闭y.coe文件

2.2 编辑.coe文件(最好使用UltraEdit打开)

  • 在前两行添加
memory_initialization_radix=10;
memory_initialization_vector =
  • 将最后的逗号改为分号
  • 最后文件格式:
memory_initialization_radix= 10;
memory_initialization_vector=
 0,
402,
804,
1206,
1608,
...
...
-2009,
-1608,
-1206,
-804,
-402;

你可能感兴趣的:(matlab)