Xilinx的ROM的IP核产生的.coe文件的格式如下:
MEMORY_INITIALIZATION_RADIX = RADIX ;
MEMORY_INITIALIZATION_VECTOR =VECTOR ;
RADIX为数据进制类型,包括十进制、二进制、十六进制。
VECTOR为数据,数据以","为间隔进行分开,最后以"; "结尾。
下面用matlab产生IP核需要的.coe文件:
以采样率为20MHz,频率为625KHz的正弦波形为例,产生一个周期的波形文件,
波形如下所示:
然后产生.coe文件,
matlab代码如下:
fs = 20e6; %采样率
fc=0.625e6;
t_n=0:1/fs:1/fc-1/fs;
st=sin(2*pi*fc*t_n);
n=length(st);
N_ADC=14; %AD的数据宽度;
M_ADC=n; %rom的数据深度
%% 产生coe文件
fid = fopen('sin_rom_.coe','w');
fprintf(fid,'MEMORY_INITIALIZATION_RADIX = 10;\n');
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR =\n');
y=zeros(1,M_ADC);
for i=1:1:M_ADC
y(i)=round((2^(N_ADC-1)-1)*st(i));
if i == M_ADC
fprintf(fid,'%d;',y(i));
else
fprintf(fid,'%d,',y(i));
end
if mod(i,8)==0 && i ~= 0
fprintf(fid,'\n');
end
end
fclose(fid);
因为最后存入ROM的是二进制文件,所以首先将数据从浮点数转换成定点数,N_ADC为数据的位数,M_ADC为数据的个数,为了使数据更加直观,coe文件中一行有8个数据。
这里数据位数为14位,数据用10进制来表示。
产生的数据内容如下:
接下来就可以将.coe文件存到ROM中。