📅  最后修改于: 2023-12-03 15:25:08.595000             🧑  作者: Mango
完全减法器是一种数电电路,可以将两个二进制数做减法运算,并输出运算结果和借位。它由两个半加器和一个反相器组成,可以用于实现多位二进制数的减法运算。
当进行减法运算时,把被减数加上减数的补码,补码的求法为将减数的二进制表示中所有 '0' 和 '1' 互换,再加 '1'。用半加器可以实现两个二进制数的无进位加法,将两个半加器串联起来可以实现完全减法器的功能。
输入值:$A, B$,其中 $A$ 是被减数,$B$ 是减数。
输出值:$S_2, S_1, S_0, B_{out}$,其中 $S_2, S_1, S_0$ 是差值的二进制表示,$B_{out}$ 表示是否有借位。
| $A$ | $B$ | $B_{in}$ | $S_2$ | $S_1$ | $S_0$ | $B_{out}$ | |:---:|:---:|:--------:|:-----:|:-----:|:-----:|:---------:| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 1 | 1 | 1 | 1 | 1 | | 0 | 1 | 0 | 1 | 1 | 0 | 1 | | 0 | 1 | 1 | 0 | 0 | 1 | 1 | | 1 | 0 | 0 | 1 | 0 | 1 | 0 | | 1 | 0 | 1 | 0 | 1 | 0 | 1 | | 1 | 1 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
完全减法器可以用 Verilog 语言实现,代码如下:
module full_subtractor(A, B, Bout, S);
input A, B, Bout;
output [2:0] S;
wire X1, X2, X3, X4;
// 两个半加器
half_subtractor H1(.A(A), .B(B), .Cin(Bout), .D(X1), .Bout(X2));
half_subtractor H2(.A(X1), .B(~B), .Cin(X2), .D(X3), .Bout(X4));
// 反相器
assign S = {~X4, ~X3, ~X2};
endmodule
其中,half_subtractor
是一个半加器模块,可以在本模块中直接调用。完全减法器的输入为 A
和 B
,表示被减数和减数;Bout
为进位;输出为 S
,表示差值,是一个 3 位二进制数。