FPGA开平方的实现

本文介绍了在FPGA中实现开平方的三种方法:JPL近似、IP模块的CORDIC算法以及牛顿迭代。通过归一化处理,数据范围被限制在-2到2之间。资源占用与精度分析显示,牛顿迭代资源最多,JPL次之,IPCORDIC最少;而精度上,JPL误差较大,牛顿迭代精度最高,IPCORDIC居中。JPL方法在速度上有优势,但误差控制不足。

3种方法:

1.JPL近似的实现方法

 
  
`timescale 1ns / 1ps
module    complex_abs#(parameter N=32)(
      clk,
      syn_rst,
      dataa,
      datab,
      ampout);
      
input    clk;
input    [N-1:0]    dataa;
input    [N-1:0]    datab;
input    syn_rst;
output    reg    [N-1:0]ampout;

reg [N-1:0]dataa_reg ;
reg [N-1:0]datab_reg ;
wire [N-2:0]dataa_abs ;
wire [N-2:0]datab_abs ;
reg [N-2:0]dataabs_max,dataabs_min ;
reg [N-1:0]absmin_3 ;

 always @(posedge clk)
   begin
       if(syn_rst == 1'b1)
           begin
               dataa_reg <= 'd0 ;
               datab_reg <= 'd0 ;
           end
       else
         begin
             dataa_reg <= dataa ;
               datab_reg <= datab ;
           end
   end
   
 assign dataa_abs = (dataa_reg[31] == 1'b1) ? (31'd0-dataa_reg[N-2:0]) : dataa_reg[N-2:0] ;
 assign datab_abs = (datab_reg[31] == 1'b1) ? (31'd0-datab_reg[N-2:0]) : datab_reg[N-2:0] ;  
 
 always @(posedge clk)
   begin
        if(dataa_abs > datab_abs)
             begin
                  dataabs_max <= dataa_abs ;
                  dataabs_min <= datab_abs ;
                  absmin_3 <= {
    
    1'b0,datab_abs}+{datab_abs,1'b0} ;        
             end
        else
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值