Design Guidelines for Logisim: Bad Practices to Avoid

CS3410 Spring 2013

Bad design #1: Unlabeled circuit diagrams

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.

Bad design #2: Too many muxes

As in the case with V in lab1, 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 ALU opcode, think of other simpler options.

Bad design #3: Multibit constant

Bit extender is neater and easier to understand.

Bad idea: Using a splitter and constant to perform extension.


It is better design to use as few constants as possible.

Bad design #4: Muxing a signal and its inverse

This can easily be replaced with an XOR gate.

Bad idea: Use a multiplexor with inverses as inputs.


These almost always reduce to just an AND gate, without the constant. Or in the worst case, a no-op. The circuits on the left and right are equivalent.

Bad design #5: Improper use of constants

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.


These almost always reduce to just an AND gate, without the constant. Or in the worst case, a no-op.

Bad design #6: Repetitive use of input to both data and control

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.


These circuits are equivalent. The control is just a case of OR.

Bad design #7: Useless sub-circuits

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


also wrong
These sub-circuits are just re-packaging and re-naming already existing Logisim primitives. Just use the primitive instead.

Bad design #8: Not testing completely

At minimum, do positive+positive, positive+negative, negative+negative, and negative+positive. And try a couple of each combination, too.

Logisim quirk: data flow

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.


Don't fight it.