【FPGA数学运算】- 除法运算的多种实现方式

本文转载自:FPGA入门到精通微信公众号

在FPGA数学运算中,除法运算因其特殊性,成为FPGA设计的重点和难点。

本文将详细介绍FPGA中除法运算的多种实现方法。

一、除数是常数

除法运算中当除数是常数时,可以将除数求倒数并左移Nbit(即乘以2的N次方),转换为整数,再乘以被除数,最后将计算结果右移Nbit,其中N越大,计算结果的误差越小。

这个方法也就是除法转换乘法,优点是省资源,1~2个周期可计算完成.

举例:计算X/122

选择左移12bit,即 2^12/122 = 34 。
则X/122 ≈ (X*34)>>12

Verilog代码示例:

reg [15:0] X;
reg [9:0] Y;

//34 = 32 + 2
always@(posedge clk) begin
Y <= ({X,5'b0} + {X, 1'b0}) >> 12;
end

二、流水线实现除法器

数字电路中运行的都是二进制数据只有0和1,那么计算除法,不应该从十进制数据角度来看,转换成二进制数据角度就好理解了,也就是二进制除法运算,如下图所示:

分析除法的运算过程如下:

(1) 取被除数的高N位数据,这个N和除数位宽一样。

(2) 比较被除数高N位数据与除数,如果前者大于或等于后者,则将商的对应位为 1,将两者求差得到余数;否则将到商对应位为 0,将前者直接作为余数。

(3) 将上一步的余数与被除数剩余最高位 1bit 数据拼接成新的数据,重复进行第二步,直到被除数最低位数据也参与计算。

从以上的除法过程中可以看到:除法运算实质上就是循环计算求余数和商的过程。

有了上面的计算过程分析,除法器实现起来还是不难的,大家可以自己试着写一下。

FPGA实现代码:暂不公开,需要的可以加入我的知识星球,正在FPGA数学运算专栏,详细文章、设计逻辑、完整工程代码都有。

最新文章

最新文章