The DIY-CPU Project: Shift Register Experiments

Sipo-smallNow that I know how to read and write data to the memory chip the next step in my Do It Yourself CPU project was to extend the possibilities of my Raspi Input / Output Interface. The 8 input and 8 output ports are not sufficient for controlling and testing the different functionalities I want to build over time. Already, outputing 8 data bits and 8 address bits at the same time is not feasible that way.

To fix this shortcoming I've decided to use several 8 bit serial to parallel converter chips. By chaining four of those chips together I only need 1 Raspi output port to write data to 32 output ports sequentially and one port for clocking in one bit after the other. To be able to individually enable output to the data bus, the address bus and the control lines (e.g. memory output enable, memory write enable, etc) that are accessible this way I need three additional Raspi output ports. In other word I need 1+1+3 = 5 lines to control 32 output ports. Not too bad.

The picture on the left shows the circuit I have put together to test the shift register approach. The memory chip is at the top of the breadboard, followed by a NOT gate chip that I use to invert the output of the first three bits of the data bus as the input bits of the Raspi work with negative logic. Also, this setup separates the Raspi Inputs from the bus lines which I decided to do because I noticed that they lower the voltage on the lines which could become a problem later on when I connect registers and other things to the bus line which will further influence the overall behavior.

An additional NOT gate on the chip is used to invert the Enable signal to the second serial to parallel (SIPO) converter chip which allows me to control whether I want to output data from the Raspi to the data bus or not (i.e. the outputs of the SIPO is in tri-state mode). The two chips at the bottom are MOS 4094 8 bit tri-state shift registers. For the experimental setup I used the first SIPO to output data to the address bus and the second one to output data to the address bus.

Yes, the setup starts to look a bit complicated. Time, therefore, to put what I have so far on a real board and solder things together.