Adder–subtractor

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In digital circuits, an adder–subtractor is a circuit that is capable of adding or subtracting numbers (in particular, binary). Below is a circuit that does adding or subtracting depending on a control signal. It is also possible to construct a circuit that performs both addition and subtraction at the same time.

Role in the arithmetic logic unit[edit]

Main article: Arithmetic logic unit

Adders are a part of the core of an arithmetic logic unit (ALU). The control unit decides which operations an ALU should perform (based on the op code being executed) and sets the ALU operation. The D input to the adder–subtractor above would be one such control line from the control unit.

The adder–subtractor above could easily be extended to include more functions. For example, a 2-to-1 multiplexer could be introduced on each B_i that would switch between zero and B_i; this could be used (in conjunction with D=1) to yield the two's complement of A since -A = \overline{A} + 1.

A further step would be to change the 2-to-1 mux on A to a 4-to-1 with the third input being zero, then replicating this on B_i thus yielding the following output functions:

  • 0 (with the both A_i and B_i input set to zero and D=0)
  • 1 (with the both A_i and B_i input set to zero and D=1)
  • A (with the B_i input set to zero)
  • B (with the A_i input set to zero)
  • A+1 (with the B_i input set to zero and D=1)
  • B+1 (with the A_i input set to zero and D=1)
  • A+B
  • A-B
  • B-A
  • \overline{A} (with A_i set to invert; B_i set to zero; and D=0)
  • -A (with A_i set to invert; B_i set to zero; and D=1)
  • \overline{B} (with B_i set to invert; A_i set to zero; and D=0)
  • -B (with B_i set to invert; A_i set to zero; and D=1)

By adding more logic in front of the adder, a single adder can be converted into much more than just an adder—an ALU.

See also[edit]