移位相减除法器
基本算法
与使用移位相加实现加法一样,移位减法可以实现除法,基本算法如下描述
- 将除数向左移位直到比被除数大
- 使用移位后的除数与被除数比较,若除数大,则商向左移位1位后末尾补0;若除数小,则被除数累减除数,商向左移位1位后末尾补1
- 除数向右移位1位,重复2,知道除数小于原除数
RTL代码
移位相减算法比较简单,一个Verilog模块即可描述
module shiftsub_divider #(
parameter WIDTH = 4
)(
input clk, // Clock
input rst_n, // Asynchronous reset active low
input [2 * WIDTH - 1:0]dividend,
input [WIDTH - 1:0]divisor,
input din_valid,
output reg [2 * WIDTH - 1:0]dout,
output reg [2 * WIDTH - 1:0]remainder
);
定义端口,其中remainder
前WIDTH
位均为0,可以不连接
reg [3 * WIDTH - 1:0]divisor_lock;
reg [WIDTH - 1:0]divisor_ref;
always @ (posedge clk or negedge rst_n) begin
if(~rst_n) begin
{divisor_lock,divisor_