除法器的实现(恢复余数、不恢复余数、级数展开、Newton-Raphson)

本文详细介绍了基于FPGA的数字信号处理中几种除法器算法,包括恢复余数、不恢复余数和级数展开算法,并提供了Verilog代码实现。这些算法针对无符号数和有符号数进行了讨论,分析了各自的特点和适用场景,同时探讨了硬件实现的延迟和优化策略。

参考《基于FPGA的数字信号处理(第二版)》,对其中的除法器算法进行仿真。

1 基于恢复余数(Restoring)算法的除法器

Restoring 算法无法直接用于与有符号数,对于有符号数需要先转换为无符号数。然后根据除数与被除数的符号判断商与余数的符号。

1.1 原理

被除数(Dividend)5621 / 除数(Divisor)3 = 商(Quotient)1873 … 余数(Remainder)2

       1873
     _______
  3 |  5621
    /  3000
       ____
       2621
       2400  
       ____
        221
        210
        ___
         11
          9
          _
          2

r i = r i + 1 − q i ⋅ D ⋅ 1 0 i r_i = r_{i+1}-q_i·D·10^i ri=ri+1qiD10i

q i q_i qi通过部分余数的正负确定,如果余数为负表示 q i q_i qi较大,需要将其恢复到部分余数为正以获取正确的 q i q_i qi,这便是“恢复”的含义。

用恢复余数算法表示上式计算过程:

q i q_i qi 余数 是否恢复
q 3 = 1 q_3=1 q3=1 5621-3×10^3×1=2621
q 3 = 2 q_3=2 q3=2 5621-3×10^3×2=-379 q 3 q_3 q3恢复为1,余2621
q 2 = 1 q_2=1 q2=1 2621-3×10^2×1=2321
q 2 = 2 q_2=2 q2=2 2621-3×10^2×2=2021
…… ……
q 2 = 8 q_2=8 q2=8 2621-3×10^2×8=221
q 2 = 9 q_2=9 q2=9 2621-3×10^2×9=-79 q 2 q_2 q2恢复为8,余221
…… ……
q 1 = 7 q_1=7 q1=7 221-3×10^1×7=11
q 1 = 8 q_1=8 q1=8 221-3×10^1×8=-19 q 1 q_1 q1恢复为7,余11
…… ……
q 0 = 3 q_0=3 q0=3 11-3×10^0×3=2
q 0 = 4 q_0=4 q0=4 11-3×10^0×4=-1 q 0 q_0 q0恢复为3,余2

q 3 q 2 q 1 q 0 {q_3q_2q_1q_0} q3q2q1q0 = 1873,R=2。

以上是十进制算法,对于二进制:

r i = r i + 1 − q i ⋅ D ⋅ 2 i r_i = r_{i+1}-q_i·D·2^i ri=ri+1qiD2i

q i q_i qi只能取0或1,所以每位只需一次运算即可判断是否恢复。

此外还需确定各参数的字长:假定除数D为 nbit,商Q为 nbit,则

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChipWeaver

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值