For both your own understanding and our grading, it is easier to follow your logic if you specify what the subcircuits are and what they're used for.
As in the case with V in the ALU, there is no need for a 16 bit mux in ALU32. The cases in which V appears was few and the majority of the time it should be 0 instead. Instead of selecting V on the ALU opcode, think of other simpler options.
Bit extender is neater and easier to understand.
Bad idea: Using a splitter and constant to perform extension. | |
wrong |
right |
It is better design to use as few constants as possible. |
This can easily be replaced with an XOR gate.
Bad idea: Use a multiplexor with inverses as inputs. | |
wrong |
right |
The circuits on the left and right are equivalent. |
The only exceptions are for (a) providing inputs to a sub-circuit that has more inputs than you need, or (b) making your circuit look slightly simpler in certain cases. Any time you feel like putting down a constant, just ask "can I just optimize this away by using a different gate?"
Bad idea: Use a multiplexor with constants as inputs. | |
wrong |
right |
These almost always reduce to just an AND gate, without the constant. Or in the worst case, a no-op. |
This case is very similar to the case above. It can easily be replaced with logic gates.
Bad idea: Use a multiplexor with same signal as input and control. | |
wrong |
right |
These circuits are equivalent. The control is just a case of OR. |
Like the case above, it can easily be replaced with a mulit-bit logic gate with a sign-extended control bit.
Bad(ish) idea: Use a multiplexor with same signal as multi-bit input and control. | |
wrong |
right |
These circuits are equivalent. The control bit is extended into a string of all 0s or all 1s. |
Instead, just use the component itself. An exception to this rule is the "bit reverser" circuit that many of you built (with no components, just splitters and wires), since it takes up so much screen space.
Annoyance: unnecessary and distracting sub-circuits | |
wrong |
also wrong |
These sub-circuits are just re-packaging and re-naming already existing Logisim primitives. Just use the primitive instead. |
At minimum, do positive+positive, positive+negative, negative+negative, and negative+positive. And try a couple of each combination, too.
Bad idea: Crossing the | |
wrong |
right |
The right circuit looks much cleaner and more readable. |
This is a minor point. But you have probably noticed that logisim likes data to flow left-to-right on the screen. For example, the default orientation of primitives are all left-to-right, and multiplexors can't be rotated at all. Many of you displayed an amazing stubbornness by having your circuits go in other directions.
wrong |
right |
Don't fight it. |