Vivado Cordic IP核计算arctan

Vivado Cordic IP核计算arctan

参考资料

IP核配置

Functional Selection:Arctan
input wire [31 : 0] s_axis_cartesian_tdata→设置width为16
round mode:Nearest Even

参数配置(具体参照手册例子)

要设定好输入数据的整数和小数

CORDIC的输入数据范围应限制在-11(否则会出错),输出数据范围为(-pipi,选中Coarse Rotation)。且数据格式为带符号小数,输入数据整数位有2bit;输出数据整数位有3bit。

v

`timescale 1ns / 1ps
module arctan(
input aclk,
input [15:0] data_x,data_y,
output [15:0] data_out
);
wire s_axis_cartesian_tvalid;
wire m_axis_dout_tvalid;
wire [15:0] s_axis_cartesian_tdata;
assign s_axis_cartesian_tvalid = 1’b1;
assign m_axis_dout_tvalid = 1’b1;

cordic_0 arctan (
.aclk(aclk), // input wire aclk
.s_axis_cartesian_tvalid(s_axis_cartesian_tvalid), // input wire s_axis_cartesian_tvalid
.s_axis_cartesian_tdata({data_x[15],data_x[15:1],data_y[15],data_y[15:1]}), // input wire [31 : 0] s_axis_cartesian_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(data_out) // output wire [7 : 0] m_axis_dout_tdata
);
endmodule

PS

  • 配置Cordic输入端口的时候需要注意一共是输入32位
  • 这个输入可以再深入研究

tb

`timescale 1ns / 1ps

module tb_arctan;
reg aclk;
reg [15:0] data_x;
reg [15:0] data_y;
wire [15:0] data_out;
arctan uut(
.aclk(aclk),
.data_x(data_x),
.data_y(data_y),
.data_out(data_out)
);

initial begin
    aclk = 0;
    data_x= 15'd0;
    data_y= 15'd0;
end

always@(posedge aclk)
    begin
         data_x= 15'd20282;
         data_y= 15'd25717;
    end
always #5 aclk = ~aclk;

endmodule

PS

  • 这里只是给了几个固定值,实际测试还是给波形比较合理

Scope

由于此处tb文件只给了固定值没有给入波形,所以运算得到的数据也是直线,图就不贴了,xmind转markdown弄不了图,不搞图啦,好麻烦的说

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值