Arithmetic logic unit


- Arithmetic logic unit
- In Logic World, an arithmetic logic unit (ALU) is a component of a central processor that performs basic arithmetic and logic operations.
- By combining multiple operations, it is possible to perform any computation.
- It may be called the "brains" of the central processor.
An ALU also has "flags" to keep track of different situations during computation. Operations that an ALU can perform include arithmetic operations such as addition and subtraction, as well as bitwise operations like XOR, NOR, AND, and OR.
The status flags it keeps track of are, for example:
- A = B
- A > B
- A < B
- Carry
- Others
ALUs can have very different designs with varying specifications, such as bit size, possible operations, and speed. In principle, you don't need to implement every possible operation - a few operations are sufficient to make the system Turing complete - although additional operations make it more convenient and often faster.
Example
Below is an example of possible operations in an ALU:
Name | Opcode | Description |
---|---|---|
Add | 000 | Adds A and B |
Sub | 001 | Subtracts B from A |
AND | 010 | Outputs true if both A and B are true, otherwise false |
NAND | 011 | Inverse of AND. If A and B are true, output is false |
OR | 100 | Outputs true if either A or B is true |
NOR | 101 | Inverse of OR. If either A or B is true, output is false |
XOR | 110 | Outputs true if exactly one of A or B is true |
ALU Designs
Their are two main alu Designs:
- Mux Based ALU's
- Control Line Based ALU's
Mux Based ALU's

Mux based ALU's uses a Multiplexer to select outputs from gates or oprations Pros:
- They are simple to make
- They are easy to understand
Cons:
- They take up alot of space
- They are limited in oprations
Control Line Based ALU's
Unlike Mux Based ALU's, Control Line Based ALU's dont have a mux instead they have inputs like:
- Carry
- !A
- !B
- OR
- XOR
- AND
- NOR
They can do lots of oprations. they dont have a sub mod input insread to subtract number you can turn on invert B (!B) and carry.
Note they dont have opcode input like mux based alus so you have to make a ROM that turns on specific pins like:
Name | Opcode | Pins | Description |
---|---|---|---|
Add | 0000 | None | Adds A and B |
Sub | 0001 | Carry, !B | Subtracts B from A |
AND | 0010 | AND | Outputs true if both A and B are true, otherwise false |
NAND | 0011 | !A, !B, AND | Inverse of AND. If A and B are true, output is false |
OR | 0100 | OR | Outputs true if either A or B is true |
NOR | 0101 | !A, !B, OR | Inverse of OR. If either A or B is true, output is false |
XOR | 0110 | XOR | Outputs true if exactly one of A or B is true |
XNOR | 0111 | !A, !B, XOR | Inverse of XOR Outputs true if exactly one of A or B is false |
INC | 1000 | B = 1 | Increments A by 1 |
DEC | 1001 | Carry, !B, B = 1 | Decrements A by 1 |