原文来自FPGA除法——迭代除法
FPGA的除法运算有恢复余数法、不回复余数法(加减交替法)、Goldschmidt方法、泰勒级数展开等,今天来介绍一种较为简单的迭代除法,以及仿真验证。
基本的算法如下:
如图介绍了算法的基本流程,在实现的方面,需要注意以下几点:
1、首先需要先要进行归一化,在这里我们默认被除数是大于除数的,然后我们需要将除数归一化到小于等于除数但大于等于1/2的被除数。
2、以移位的次数作为结束的标志,这里我们一共移位6次。
具体实现的Verilog代码如下
// 迭代除法
// Author:Infinite
// Date:2020-4-2
// url:https://infinite-zh.com/2020/04/02/fpga%e9%99%a4%e6%b3%95-%e8%bf%ad%e4%bb%a3%e9%99%a4%e6%b3%95/
module Divide(
input clk,
input rst,
input [7:0] divisor,
input [7:0] dividend,
output [7:0] quotient,
output [3:0] shift
);
reg [3:0] count; //迭代计数器
reg [3:0] shiftcount;
reg [7:0] divisorReg;
reg [