在进行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;