除法器
基于减法的除法器:对于16 bit的无符号被除数A以及8 bit的无符号除数B,A/B的商和余数的位宽不会超过16 bit。
- 运算流程
在A的高位补16-bit 0是为了存放余数,在B的低位补16-bit 0是因为商只有在A_tmp左移8 bit才有可能为1。
- verilog代码
module division(
input [15:0] A,
input [7:0] B,
output[15:0] result,
output[15:0] reminder
);
reg[31:0] A_tmp;
reg[31:0] B_tmp;
reg[15:0] res;
integer i;
always@(*)begin
A_tmp = {16'b0, A};
B_tmp = {B, 16'b0};
res = 16'b0;
for(i=0; i<16; i=i+1)begin
A_tmp = A_tmp << 1'b1;
res = res << 1'b1;
if(A_tmp<B_tmp)begin
A_tmp = A_tmp;
res[0] = 1'b0;
end
else begin
A_tmp = A_tmp - B_tmp;
res[0] = 1'b1;
end
end
end
assign reminder= A_tmp[31:16];
assign result = res;
endmodule
- 仿真结果