除法器
`timescale 1ns/1nsmodule divider
(
input clk,
input rst,
input dividend,
input divisor,
input load,
outputreg ratio,
outputreg remainder,
outputreg finish
);
reg cnt;
reg dividend_widen;
reg ratio_shift;
wire sub;
wire dividend_shift;
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
cnt <= 4'd15;
else if (load == 1'b1)
cnt <= 4'd0;
else
cnt <= cnt + {3'd0,~(&cnt)};
end
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
dividend_widen <= 17'd0;
else if (load == 1'b1)
dividend_widen <= {9'd0,dividend};
else
dividend_widen <= dividend_shift;
end
assign sub = dividend_widen - divisor;
assign dividend_shift = (sub == 1'b0)? {sub,dividend_widen,1'b0}: {dividend_widen,1'b0};
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
ratio_shift <= 8'd0;
else
ratio_shift <= {ratio_shift,~sub};
end
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
ratio <= 8'd0;
else if (cnt == 4'd9)
ratio <= ratio_shift;
else ;
end
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
remainder <= 8'd0;
else if (cnt == 4'd9)
remainder <= dividend_widen;
else ;
end
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
finish <= 1'b0;
else if (cnt == 4'd9)
finish <= 1'b1;
else
finish <= 1'b0;
end
endmodule 好贴,顶一个!~ 的确是好帖,顶一个!!!! 写的些什么呀 代码真难看 除数为0 都没写一个error报错 直接用移位相减不是更简单 这有超前借位提速吗
如果换成64位/32位 这个算法比移位相减速度快吗
页:
[1]