21. How can we use logical operations?#

22. Why do we need to think about bitwise operations?#

Understanding them is prereq to what we will see today and that will help you understand hardware overall.

You of course will not need every single thing we teach you in every single class.

  • Seeing topics once at least is the only way you can make an informed decision to study a topic deeper or not.

  • Seeing a topic in more detail than you will use all the time actually helps you build intuition, or deep understanding, of the topic overall, and help you remember what you need to remember

22.1. Bitwise operators review#

  • & : and

  • | : or

  • ^ : xor

  • ~ : not

  • : shift right

  • <<: shift left

Let’s review truth tables for and, or, and xor.

Table 22.1 AND#

a

b

output

0

0

0

0

1

0

1

0

0

1

1

1

Table 22.2 OR#

a

b

output

0

0

0

0

1

1

1

0

1

1

1

1

Table 22.3 XOR#

a

b

output

0

0

0

0

1

1

1

0

1

1

1

0

In order to implement more complex calculations, using gates, we can use these tables as building blocks compared to the required output.

There are more gate operations; you can see a simulation for 16 gates

22.2. Adding with gates#

Let’s review adding binary numbers.

remember, binary is a place-based system like the decimal placed based system you are likely familiar with

How do you add each of the following:

  • 2 + 3

  • 14 + 17

  • 65 +37

Since binary is place-based adding with binary follows the same basic algorithm

  • add the two bits

  • carry to the next place if >=2

\[ 101 + 100 = 1001 \]

We first add the ones place and get a 1, then the two’s place and get a zero then the 4’s place and get 0 with a carried one.

\[ 010 + 011 = 101 \]

In this case in the ones place we add 0 + 1 to get one, the two ones add to 0 with carry then 1 + 0 + 0 gives another 1.

let’s make a truth table for adding two bits.

Table 22.4 Add#

a

b

out 2’s

out 1’s

0

0

0

0

0

1

0

1

1

0

0

1

1

1

1

0

Now, what gate can we use to get the output 1’s place bit and what gate can we use to get the output 2’s place bit by comparing to the truth tables above.

It turns out the one’s place is an xor gate, and the two’s place is an and gate.

This makes up the half adder, try one out at this simulator.

So this lets us as two bits, but what about adding a number with more bits?

We can put multiple together, but there’s one more wrinkle: the carry.

That’s what makes a full adder different. It adds three single bits, or a carry and two bits and outputs the result as a sum bit and a carry bit.

Then we can link many of those together to get an 8 bit ripple adder.

Alternatively, we can “lookahead” with the carry bit, passing it forward multiple places all at once, as shown in this 4 bit carry lookahead adder.

22.3. Review today’s class#

  1. While we saw many types of gates today, but we actually could get all of the operations needed using only NAND gates. Work out how to use NAND gates to implement a half adder and describe it in nandhalf.md

check that what they describe does the same as an and and an xor, be sure they show how they match.

  1. In addertypes.md compare ripple adders and lookahead adders.

    1. Give a synopsis of each adder type
    1. Compare them in terms of time (assume that each gate requires one unite of time)
    1. Compare them in terms of space/cost by counting the total number of gates required.
    

22.4. Prepare for Next Class#

Important

This link is incorrect in the badge PR issue

  1. Read gates out of anything and watch the marble adder. Create gates.md and answer the questions below:

    1. What do all of the gates described have in common?
    1. How does the marble adder compare to the half adder and the full adder, which is it most like?
    
  2. Study the 8 bit ALU. Try it out and be prepared to answer questions about it in class. Some questions to guide your exploration: What can it do? Try to compare it to the adder that we have seen. What components does it have that we have not yet seen? How does it represent different operations?

  3. (optional, for 3 community badges) Add an additional workflow to your repo creates badge issues triggered by a workflow_dispatch and uses inputs of a date formatted like YYYY-MM-DD and boolean inputs for if review and/or practice should have issue created

22.5. More Practice#

  1. While we saw many types of gates today, but we actually could get all of the operations needed using only NAND gates. Work out how to use NAND gates to implement a half adder and describe it in nandhalf.md

check that what they describe does the same as an and and an xor, be sure they show how they match.

  1. In addertypes.md compare ripple adders and lookahead adders.

    1. Give a synopsis of each adder type
    1. Compare them in terms of time (assume that each gate requires one unite of time)
    1. Compare them in terms of space/cost by counting the total number of gates required.
    
  2. Compare the 2 bit multiplier to the full adder in multiplication.md. Use comparison with the full adder to explain how the 2bit multiplier works works, relative to the fact that multiplication can be thought of like repeated addition.

22.6. Experience Report Evidence#

Nothing separate

22.7. Questions After Today’s Class#

Post manually for a community badge.