1.使用matlab制作.coe文件
查找表的构造
构造256点的正余弦表
exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表
matlab代码: 求sin
fid = fopen('sin.txt','a' ); str1 = 'MEMORY_INITIALIZATION_RADIX=10;'; str2 = 'MEMORY_INITIALIZATION_VECTOR='; fprintf(fid,'\t%s\n \t%s\n', str1,str2); for k=:; y(k) =sin(*pi*k/); y(k) = int16(y(k)*^); // 这一步主要是考虑是表中数据的格式Q(s,,),完成浮点数到定点数之间的转换. fprintf(fid,'\t%d%c\n',y(k),','); end fclose(fid);
matlab代码:求cos
fid = fopen('cos.txt','a' ); str1 = 'MEMORY_INITIALIZATION_RADIX=10;'; str2 = 'MEMORY_INITIALIZATION_VECTOR='; fprintf(fid,'\t%s\n \t%s\n', str1,str2); for k=:; y(k) =cos(*pi*k/); y(k) = int16(y(k)*^); fprintf(fid,'\t%d%c\n',y(k),','); end fclose(fid);
运行这两个matlab程序可以得到cos.txt, sin.txt文件,里面存放了适合放在ROM中的数据格式。
注意点:
(1). COE文件格式
在txt文件开头:
MEMORY_INITIALIZATION_RADIX=10; //表示ROM内容的数据格式是10进制
MEMORY_INITIALIZATION_VECTOR=
在txt文件的最后一个数字后加入分号“;”。这里需要修改cos.txt,sin.txt,将最后的,改为;
(2)将cos.txt, sin.txt文件后缀直接改为coe文件类型。
-->如何修改txt 文件类型?
默认情况下,Windows的文件后辍名是隐藏的,因此,为了更改文件的后辍名,首先必须让文件名的后辍显示出来。
方法如下:在文件窗口下选择工具>文件夹选项>查看>高级设置中不勾选隐藏已知文件类型的扩展名,即可显示文件后缀名,然后直接更改为.coe后缀即可!
2. 定制rom
注意点:
(1)memory type :single port ROM
(2)memory size :
width 为数据的宽度
Depth 为数据的个数,它决定了输入的addr的位数。比如,depth = 256, addr则为8位。
(3)选择初始化文件。cos.coe, sin.coe ,选择旁边的show 可以查看添加是否正确。
这一步会生成对应的.mig、.vhd 文件。
3. 仿真验证ROM是否正常工作
(1)新建top文件
entity look_up_sin is port(
clk: in std_logic; rst: in std_logic; addr:in std_logic_vector( downto ); --Q(,) sin_out:out std_logic_vector( downto )--Q(,)
); end look_up_sin; architecture Behavioral of look_up_sin is COMPONENT sin_rom PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR( DOWNTO ); douta : OUT STD_LOGIC_VECTOR( DOWNTO ) ); END COMPONENT; begin Inst_sin_rom : sin_rom PORT MAP ( clka => clk, addra => addr, douta => sin_out ); end Behavioral;
(2)remove sin_rom.XCO ip核文件,添加sin_rom.vhd文件。当文件sin.coe放在ipcore_dir目录下面时,不需要这一步。应直接用sin_rom.xco,不然仿真会提醒
sin.mif文件找不到!!
(3)新建testbench文件。
仿真结果如下:
对比sin_txt文件
文章转载自: http://blog.csdn.net/shanekong/article/details/44731951