Note: you may work in teams on this assignment (just be sure to indicate if you do so).
Also note: This is the updated version of Assignment
6, now due on Monday Sep-18. Note that the updates all occur at
the end of the original assignment.
| Date Assigned: | Thu Sep-14 |
| Date Updated: | Fri Sep-15 |
| Date Due: | Mon Sep-18 by start of class |
0. Read Brookshear Ch. 1.9 (Communication Errors)
1. Your task here is to create a circuit using Digital Works.You may turn in either a printout of your circuit or the dwm file with your circuit in it (as an attachment in email). To print the circuit, use the Digital Works command "Export to Clipboard" (under the "Edit" menu), then paste your circuit into your favorite editor (Microsoft Word, Netscape Composer, whatever). Do not print directly from Digital Works -- the circuit comes out too small to read clearly. Finally, you will be graded on the neatness of your circuits. Minimize line crossings (at least so it's not unreasonable), keep your wires horizontal or vertical (on rare occasions you may use diagonal lines, but only if they are not at all cluttered or confusing). That said, create the following circuits:
1a. 4-bit even parity tester. This circuit should take 4 bits of input and produce one bit of output. The output should be "1" if and only if the 4 input bits have even parity (that is, have an even number of 1's). Be sure to test your circuit to verify that it works properly. Hint: You very likely will want to use XOR gates in your solution.2. Do the following problems from Brookshear p. 73: #'s 28, 29, 31, 32, 33abc.1b. 8-bit ASCII upper case tester. This circuit should take 8 bits of input and produce one bit of output. The input should be thought of as an ASCII letter (in binary, of course). So, 0100 0001 as input is really 65 in decimal which is the ASCII code for upper-case A. The output bit should test for upper case letters. So in this case, the output should be 1. As another example, 0110 0011 as input is really 99 in decimal which is the ASCII code for lower-case c, so here the output should be 0. Note that it does not matter what this circuit outputs if the input is neither an upper-case nor a lower-case letter (for example, if the input is 0011 0000, that is decimal 48, which is the symbol 0 (zero), so your circuit may output either a 0 or 1 and still be correct). Arrange your inputs so they are left-to-right and read in the natural order (so, left-to-right, 65 reads as 0100 0001).
Hint: This is a straightforward problem, actually, requiring a very small circuit. To see how to do it, fill in the first few rows of the following table, then look for a pattern in comparing upper-case to lower-case values in the binary columns.
Upper-Case Decimal Binary Lower-case Decimal Binary
Letter ASCII ASCII Letter ASCII ASCII
A 65 0100 0001 a
B b
C c 99 0110 0011
... ...
3. Consider the binary numbers from Brookshear p. 27 problem 23 (do not do this problem, we are just using its data here). Ignore the last two rows (so we are only considering the first four rows). Give the checksum row for these four rows, using even parity for each bit column (just like we did in class).
4. Easier Extra Credit (Not Required): Construct some more complex circuits using Digital Works. Indicate what the circuits do (if you don't clearly and correctly state what the circuit does, then no credit). Credit will not be given for the circuits which ship with Digital Works, but you can get credit for modifying those circuits in interesting ways (though you should indicate which circuit you started with).
5. Harder Extra Credit (Not Required): Using Digitial Works, implement a 3-bit Divider. This circuit takes 6 bits of input, and produces 4 bits of output. The input should be arranged as two 3-bit numbers. The output should also be a 3-bit number plus a special division-by-zero bit. All input and output should be arranged left-to-right and read in the natural order. The goal here is to produce a circuit which implements integer division. Note that each input, being 3 digits, can be a number from 000 to 111, or in decimal, from 0 to 7. Also note that this is integer division without remainders, so 7/2 = 3 and 1/2 = 0. For division by zero, your 3-bit output is undefined (whatever you want is fine), but your division-by-zero output bit must be set (and, in all other cases, it must be cleared). Remember to keep it neat.
Material in Update Begins Here
First, a reminder regarding problem 1, which everyone still must do: you can do this with "cascading xor's", where you xor the first two inputs, then xor that with the next input, then xor that with the last input. This produces an odd parity test, however, so you must append a not gate to make it an even parity test. This is precisely what we reviewed in class today, and so should already be in your class notes.
6. Using Digital Works, write an 8-bit odd parity tester. So this circuit takes 8 bits of input and outputs 1 bit. If the input is 0001 0110, the output would be 1 because the input has 3 1's and so has odd parity. Hint: this is a minor variant of problem 1, the solution to which we reviewed carefully in class today.
7. Clocks.
7a. Like in the world we know, a clock in a digital circuit just ticks at regular intervals: tick, tick, tick, tick,... The way a digital clock ticks is by alternating between on and off, that is, between 0 and 1. So a digital clock alternates between 0,1,0,1,0,1... Your first task is to find the clock button in Digital Works -- it is the squiggly line just next to the interactive input button. Create a simple circuit where you just attach a clock directly to an output LED, then run the circuit and watch the output LED turn on and off repeatedly. Your circuit should look like the following:
8. Explain, very briefly but clearly, how the circuit you made for problem #6 might be used to create so-called "smart memory" which allows your computer to automatically tell you when a memory chip may have gone bad.7b. Create a circuit which is identical to your answer to Problem 6, except replace the first interactive input with a clock. Run the circuit and very briefly explain what happens and why.
9. About how many gates are needed to build 128 Megabytes of memory, as is common in many computers these days? Recall that a megabyte is not exactly 1 million bytes , but really 220 bytes, which is 1,048,576 bytes. Also, recall that a byte is 8 bits, and a flip-flop only stores a single bit. Finally, indicate which flip-flop design you are using (there are several) so it is clear how many gates are in each flip-flop.
10. 128 Megabytes costs around $150 these days. What is the cost per byte of memory? Per gate?
11. Have a fine weekend.
See Course Home Page.