Converted ALU from breadboard to PCB

Posted on Sun 29 December 2019 in MUPS16

The ALU PCB design is finished, finally. It's similar in design to the breadboard implementation, but with a few changes:

  • a full shifter in place of the fixed right-shift-by-one element on the breadboard
  • support for addc and subb instructions, in case I want to add them later
  • no dedicated zero output line. Instead, the PCB has an EQ mode that will set carry-out iff the two inputs are equal (credit to /u/marcelk72 for the idea for this one)

A lot of the board area is dedicated to passing signals from the register unit to the north of the board across to the control unit that will live to the west. I debated whether to hide this on a lower-layer board that sits underneath the ALU, but in the end I had enough space to route the signals, so I put them on the main board. It's also interesting to see the complexity on the surface, rather than hiding it.

This was my first four-layer board, and it was such a pleasure to route compared to the two-layer register PCB. Being able to use the front and back layers just for signals instead of having to worry about 5v and ground traces simplified things hugely. I was also a lot more disciplined about only routing horizontal signals on the front and vertical ones on the back (except round the edges, where it doesn't matter so much), which helped.

Concerns:

  • I noticed that two of the multi-unit AND and OR ICs in the less-than comparator have unused gates that I left floating, which I suspect will cause problems. Might be time for the first bodge wire.
  • I used a lot of the single-unit 74HCT1GXX logic gates, and I didn't use a decoupling capacitor for each one; instead, I sprinkled a few around near groups of the gates. At the speeds this is likely to run at I doubt it's a problem, but you never know.

While I was ordering a new board I also took the chance to add some connectors that will join the register and ALU boards with the swapped lines 14 and 15 on the data bus, to fix the mistake I made in the register unit.