zoukankan      html  css  js  c++  java
  • 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨

    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,'	%s
     	%s
    ', 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,'	%d%c
    ',y(k),',');
    
    end
    
    fclose(fid);

    matlab代码:求cos

    fid = fopen('cos.txt','a' );
    
    str1 = 'MEMORY_INITIALIZATION_RADIX=10;';
    
    str2 = 'MEMORY_INITIALIZATION_VECTOR=';
    
    fprintf(fid,'	%s
     	%s
    ', str1,str2);
    
    for k=1:256;
    
         y(k) =cos(2*pi*k/256);
    
         y(k) = int16(y(k)*2^15);
    
       fprintf(fid,'	%d%c
    ',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(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

  • 相关阅读:
    MySQL server version for the right syntax to use near ‘USING BTREE
    随笔
    [python]自问自答:python -m参数?
    [linux]查看linux下端口占用
    [linux]scp指令
    [编程题目]泥塑课
    How can I learn to program?
    [python]在场景中理解装饰器
    [前端]分享一个Bootstrap可视化布局的网站
    [python]python元类
  • 原文地址:https://www.cnblogs.com/xd-elegant/p/4528445.html
Copyright © 2011-2022 走看看