一,内容介绍
除法器是数字电路中的基础电路之一,也是CPU计算单元的核心功能之一。下面我们用verilog实现三种常用的除法器。
Verilog实现恢复余数(restoring)除法器
Verilog实现不恢复余数(non-restoring)除法器
目前:Verilog实现牛顿迭代法除法器
verilog实现判断有限除法器之单时钟周期改进版
二,牛顿-拉夫逊(Newton-Raphson)除法器实现
module NR_DIV
#(parameter WIDTH = 32,
parameter IT = 10 //calculate interation times
)
(
input clk_i,
input rst_i,
input data_valid_i,
input [WIDTH-1:0] dividend_i,
input [WIDTH-1:0] divisor_i,
output reg qr_valid_o,
output reg [WIDTH-1:0] quotient_o,
output reg [WIDTH-1:0] remainder_o
);
reg [WIDTH-1:0] dividend [IT-1:0];
reg [WIDTH-1:0] divisor [IT-1:0];
reg dat_valid [IT-1:0];
genvar i;
always @ (posedge clk_i or posedge rst_i) begin
if (rst_i) begin
dividend [0] <= {
WIDTH{
1'b0}};
divisor [0] <= {
WIDTH{
1'b0}};
dat_valid[0] <= 1'b0 ;
end else begin
dat_valid[0] <= data_valid_i && |divisor_i;
if (data_valid_i && |divisor_i) begin
dividend [0] <= dividend_i;
divisor [0] <= divisor_i;
end else begin
dividend [0] <= {
WIDTH{
1'b0}};
divisor [0] <= {
WIDTH{
1'b0}};
end
end
end
generate
for (i=