求利用cordic算法来得到自然对数in(t)的verilog代码,数据输入是16位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求利用cordic算法来得到自然对数in(t)的verilog代码,数据输入是16位相关的知识,希望对你有一定的参考价值。

求cordic求自然对数的verilog代码,数据输入是16位

参考技术A 这个在ise中有对应的IP核,看与cordic IP核相关的文档即可。 参考技术B

其实我也想知道。。。最近一直被这个问题困惑。cordicIP 对输入数据有要求。

   http://wenku.baidu.com/link?url=x7Pk9YV1ezlvOveSNcUSh9HZDhzCG3mrWQBBao73vGETrrHZqmw5f642uDLh_2VS74GCJtuloBlDiHlS5nGrtqXRS4lXzXG53KL9JyCIIqu

详情参考以上链接

wire a,b;
    reg   c,d;
    wire[15:0]n;
    reg [15:0]m;
    reg [31:0]data;
    reg [47:0]datab;
    wire [23:0]odata;
    
        cordic_1 arctanh (
          .aclk(clk),                                        // input wire aclk
          .s_axis_cartesian_tvalid(c),  // input wire s_axis_cartesian_tvalid
          .s_axis_cartesian_tuser(m),    // input wire [15 : 0] s_axis_cartesian_tuser
          .s_axis_cartesian_tlast(d),    // input wire s_axis_cartesian_tlast
          .s_axis_cartesian_tdata(datab),    // input wire [31 : 0] s_axis_cartesian_tdata
          .m_axis_dout_tvalid(a),            // output wire m_axis_dout_tvalid
          .m_axis_dout_tuser(n),              // output wire [15 : 0] m_axis_dout_tuser
          .m_axis_dout_tlast(b),              // output wire m_axis_dout_tlast
          .m_axis_dout_tdata(odata)              // output wire [15 : 0] m_axis_dout_tdata
        );
    
    initial begin
    #200 c=1;
    d=0;
    m=0;
    datab=48'h0a00004a0000;
    #20 datab=48'h000000580000;
    end

cordic算法

1:cordic算法的基本公式

2:角度θ的部分取值(左)以及使用matalb得到的二进制值(右)

3:使用圆坐标系的伪旋转,可计算sin,cos,tan-1,
   令x0=1/k=0.6073,y0=0,可以得到sin与cos值;
   令x0=1,z0=0,可以得到tan-1;
   令x0=1,z0=0,由循环迭代得到的x值可以计算出
4:代码设计
   可通过vivado里的rom查找表得出θ值,再编写cordic算法模块,通过查找表IP可简化设计;以tan-1为例,顶层设计电路图如下

 

以上是关于求利用cordic算法来得到自然对数in(t)的verilog代码,数据输入是16位的主要内容,如果未能解决你的问题,请参考以下文章

两种计算自然对数的算法比較

如何用CORDIC的FPGA算法计算平方和开根号

Cordic基于FPGA的Cordic算法实现

Cordic,NCO基于Cordic算法的NCO的FPGA设计实现

三角函数计算,Cordic 算法入门

cordic算法原理及verilog实现