利用Xilinx中的ROM構造查找表來計算sin和cos的方法探討

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

相關文章
相關標籤/搜索