📜  完全减法器(1)

📅  最后修改于: 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实现

完全减法器可以用 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 是一个半加器模块,可以在本模块中直接调用。完全减法器的输入为 AB,表示被减数和减数;Bout 为进位;输出为 S,表示差值,是一个 3 位二进制数。