最近在做的项目要用到FPGA实现正弦余弦函数,当然了,想到的最快最好的方法就是查表法了(在NIOSII里用C语言实现正余弦函数比较简单,但比较慢,好像是MS级别的)。
要查表当然要做表了。看看了书,一般做法是制作LPM_ROM宏模块,在里面加载一张mif或hex的正余弦函数表。实验了一些方法,其中用matlab做的比较成功,如下:
index = linspace(0,2*pi,2^8);
cos_value = cos(index);
cos_value = cos_value * (2^7 -1 );
cos_value = fix(cos_value);
for i="1:256"
cos_value(i)=cos_value(i)+128;
end
%///////////////////////////////////////上边的用来生成数据,下边的用于控制格式输出(对大家有用的)
number=[0:255];
for i="1:256"
comer(i)=':';
end
for i="1:256"
semi(i)=';';
end
data=[number; comer; cos_value; semi];
fid=fopen('d:\cos_data.txt','w');
fprintf(fid, '%x%c%x%c\n', data);
fclose(fid);
plot(index,cos_value);
以上程序实现余弦函数,将输入的2π分成512个点,输出为0-255.将上述程序粘到matlab的命令行中运行就会在D盘下生成cos_data.txt文档。然后按照ALTRA公司的要求,在前面添加WIDTH=8;
DEPTH=256;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENT BEGIN
在后面添加END; 之后保存把后缀直接改成.mif就可以了。
还有由于本人不太会matlab,上面程序是参考CSDN上一份文档做了一些修改,源文件可能是要生成一个M文件,所以最后把参考文档附上。至于正弦函数大家应该都明白了。
我一开始是想用VC编写C语言程序生成mif文件的,但是生成EXE文件后不会改成mif文件了,所以就作罢了。如果有人这样做成功了,麻烦请指点一下。
14:03:29 UTC+0800 Mon Nov 9 2009
文章评论(0条评论)
登录后参与讨论