使用quartus ii 写DDS模块时需要生成0-0.5pi范围的正弦查找表,需要使用ROM核,初始化ROM需要使用.mif文件或hex文件。
生成MIF文件
mif文件的格式如下:
WIDTH=15;
DEPTH=2048;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENT BEGIN
0:0;
1:25;
2:50;
3:75;
4:101;
5:126;
6:151;
7:176;
8:201;
9:226;
…….
END
使用matlab可以生成这种文件,代码如下:
%生成0-pi/2 的正弦查找表,保存为mif格式
depth=2048; %深度
width=15; %位宽
fid1=fopen('sin_coe.mif','wt'); %wt(write tab)是写换行的意思
fprintf(fid1,'WIDTH=%d;\n',width);
fprintf(fid1,'DEPTH=%d;\n',depth);
fprintf(fid1,'ADDRESS_RADIX=DEC;\n'); %地址基值
fprintf(fid1,'DATA_RADIX=DEC;\n'); %数据基值
fprintf(fid1,'CONTENT BEGIN\n'); %开始数据区
for i=0:1:(depth-1) %在[0:depth-1]做depth次循环,每次加1
y2=round(sin(i/depth*pi/2)*(2^width-1));
%在[0:0.5*pi]中等间隔取depth个点,计算相应的正弦值 ,扩大浮点值并取整
fprintf(fid1,'%d:%d;\n',i,y2);
end
fprintf(fid1,'END'); %结束
fclose(fid1);
mif文件生成方法
这篇文章中提到:
注意: mif文件都是ASCⅡ码,负数应该是用补码处理,否则负数在mif文件中会变成0。
由于我生成的是0-0.5pi之间的正弦表,没有负数,所以没有遇到这个问题,以后可以研究一下。
生成HEX文件
只要将生成的mif文件在quartus ii中打开,然后另存为hex即可。