Translating to a circuit
The simplest way to translate a Boolean function into a Boolean expression or a logic circuit is to use canonical normal form. Here’s some references about this process.
- Wikipedia article on canonical normal form
- University of Washington CSE 370 notes on canonical forms
- CSCI 255 spreadsheet for canonical forms
The Full Adder — Our example
As a truth table
| An | Bn | Cn | Cnp1 | Sn |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
With C bit-operators
int An, Bn, Cn, Cnp1, Sn ; int tSum = An + Bn + Cn ; Sn = tSum & 0x1 ; Cnp1 = (tSum & 0x2) >> 1 ;
As a Verilog program
This is what you do in CSCI 320.
module fulladder(
input An,
input Bn,
input Cn,
output Cnp1,
output Sn) ;
assign {Cnp1, Sn} = An + Bn + Cn ;
endmodule
Trying it out
Let’s do an example in class. We’ll translate the carry-out function into disjunctive canonocal normal form, often called sum of products form. Along the way we will introduce the AND, OR, NOT, NAND, and NOR logic gates.