求利用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位的主要内容,如果未能解决你的问题,请参考以下文章