Homework 3 — Digital Logic I

Assigned Thursday, May 4th
Due in class, Tuesday, May 9st (circuit due by 11:59pm)
Updates:
  • None yet.
Paper submissions are due in class. Logisim circuits can be submitted online up to 11:59pm of the due date using the submit command on GL. Make a copy of your paper submission, if you need it to construct your Logisim circuit.

Problem #1 (30 points)

Using the Basic Identities of Boolean Algebra (covered in lecture and the textbook), simplify the following formulas. Show all of your work and justify each step.

  1. bc + (a b')'(a'b')'

  2. (c'a')' ((a + b) + c)


Problem #2 (30 points)

For the CMOS circuit shown below,

  1. (10 points) Provide a truth table for the circuit's function. You may use the Logisim circuit, hw3-2.circ, to determine the truth table. (You must download the circuit on your machine and run Logisim. There is a link under the "Resources" tab for getting a copy of Logisim.) After loading the circuit into Logisim, select the "Hand" tool, then click on the inputs to toggle them on and off.

  2. (5 points) Write down the Sum-of-Products (SOP) Boolean formula for the truth table.

  3. (5 points) Write down the Product-of-Sums (POS) Boolean formula for the truth table.

  4. (10 points) Draw the logic diagram of the POS formula using AND, OR and NOT gates (do not simplify).


Problem #3 (40 points)

For this problem, you will build a 4-bit Arithmetic Logic Unit (ALU) that adds, subtracts, decrements and increments in Logisim. The design is based on the Combined Adder/Subtractor shown in class:

We can think of this circuit as having 1 control line that determines whether the circuit adds or subtracts. Our 4-bit ALU will have two control lines (d1 d0) that determines whether the ALU will add, subtract, decrement or increment:

This functionality can be built using just the 4-bit ripple-carry adder. Your problem is to figure out how to connect x3 x2 x1 x0 to d1 d0 and b3 b2 b1 b0. Follow these steps:

First, we write down what we want to accomplish:

From the description above, we can produce a truth table for the values of x_i and c_in, given the inputs d1, d0 and b_i:

InputsOutputs
d1d0bixic_in
0 0 0 0 0
0 0 1 1 0
0 1 0 0 1
0 1 1 0 1
1 0 0 1 1
1 0 1 0 1
1 1 0 1 0
1 1 1 1 0

What to do:

Implementation notes: