文章目录
参考《基于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+1−qi⋅D⋅10i
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+1−qi⋅D⋅2i
q i q_i qi只能取0或1,所以每位只需一次运算即可判断是否恢复。
此外还需确定各参数的字长:假定除数D为 nbit,商Q为 nbit,则

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

被折叠的 条评论
为什么被折叠?



