1.使用matlab製做.coe文件工具
查找表的構造spa
構造256點的正餘弦表.net
exp(-j*2*pi*(0:255)/256),分別獲得 cos和sin的查找表code
matlab代碼: 求sinblog
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=1:256; y(k) =sin(2*pi*k/256); y(k) = int16(y(k)*2^15); // 這一步主要是考慮是表中數據的格式Q(s,16,15),完成浮點數到定點數之間的轉換. fprintf(fid,'\t%d%c\n',y(k),','); end fclose(fid);
matlab代碼:求cosip
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=1:256; y(k) =cos(2*pi*k/256); y(k) = int16(y(k)*2^15); fprintf(fid,'\t%d%c\n',y(k),','); end fclose(fid);
運行這兩個matlab程序能夠獲得cos.txt, sin.txt文件,裏面存放了適合放在ROM中的數據格式。rem
注意點:get
(1). COE文件格式it
在txt文件開頭:io
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(7 downto 0); --Q(16,13) sin_out:out std_logic_vector(15 downto 0)--Q(16,15) ); end look_up_sin; architecture Behavioral of look_up_sin is COMPONENT sin_rom PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(7 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); 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