使用Xilinx Arctan-ip core 总结

首先要深刻理解 输入值的取值范围(-1,1)

图片: Xin,Yin的第一位表示符号位,第二位表示整数位,其余表示小数位。Pout的第一位表示符号位,第二三位表示整数位,其余表示小数位,任何位宽下都遵循这个设定。

将arctan 输出值转化到角度 即 (0,1.57)>>(0,90度)注意位宽的计算

wire [12:0] x=r_x_j+g_x_j+b_x_j;
wire [10:0] Gx=(x>>1)-(x>>2)+(x>>3)-(x>>4)+(x>>5);//divied by 3
wire [12:0] y=r_y_j+g_y_j+b_y_j;
wire [10:0] Gy=(y>>1)-(y>>2)+(y>>3)-(y>>4)+(y>>5);//divied by 3//高8位是整数位,低8位表示小数位。

wire [10:0]  arctan;

 arctan u_arctan
 (
.clk(CLK), 
 .x_in(Gx), 
 .y_in(Gy),
.phase_out(arctan)
 );

wire [16:0] angle_theta=(arctan<<6)-((arctan<<4)+(arctan<<2)+(arctan<<1));/ Π与角度之间的转换关系,这里做了近似处理(乘以57),至于为什么是57?(180/3.14)

wire  [16:0] theta= angle_theta>>8;

wire [6:0] theta_out =theta[6:0];
always@(posedge CLK)
begin
if (theta_out>90)
 THETA<=0;
 else
 THETA<=theta_out;
 end

你可能感兴趣的:(FPGA,图像处理,Verilog,Arctan-ip,core,Xilinx,core)