My goal for this project was to build a better understanding of computer architecture, hardware design, and assembly level languages. Being a Junior in university studying computer engineering, I had recently completed courses on electronics, labs introducing me to assembly language, and hardware architecture. In receiving an introduction to these topics, I wanted to increase my understanding of the finer details in all three courses, and what better way to learn than working on a project?
My original intention was to fully assemble this 8-Bit computer using the lecture videos provided on Ben Eater’s youtube channel, which do a fantastic job of breaking down the design process into a solid mix of material I’ve covered and aspects I was yet to learn. Given I already had a basic understanding of combinatoric design and basic electronics logic, I wanted to challenge myself by trying to design and build parts of the computer after the design overviews, but without watching the building instructions. Throughout the project, my aim was to learn and improve my understanding more so than just build something new, so along each step of the project, I did a little reading from online articles and forums on the component architecture, and basic conventions used for each of them.
Step 1: Research Along the Way
This project really got me reading a lot more than I expected. One of my main approaches to each component was to read an overview from an online forum or article, watch the lectures from Eater's videos, and attempt to design my own part before building, testing, and most of the time needing to scrap it for a more guided approach from Eater's channel. An example of this was when I was building the ALU component of the PC. As I watched the design videos, I read articles on chip components that were of higher functionality and trigger inputs that would allow for switching instruction types and inverting inputs into 2’s complement internally. However, before buying these make-it-easier chips, I reviewed the design approach that Ben Eater talked about in his videos, with the blending of adders and XOR logic gates to increase functionality in the ALU module without needing higher cost chips. This made me appreciate the use of discrete logic and its applicability to computer design, and learn of different approaches to building components. By combining lower level chips on the breadboard, I also learned of some key architectural traits used inside the ALU, which increased my understanding on this execution component on the PC.
Another key component that I learned about was the use of transceivers, also known as buffers. Before getting deeper into the project, I thought that I would simply activate and deactivate different components using control signals, but quickly found throughout articles that buffers needed to be used in order to function this Von-Neuman style architecture properly. Because the computer uses a shared bus for data to travel between the different modules on the PC, synchronization of cycles was dictated by the clock. However, allowing store and loads to occur without interfering with the data available on the bus, I found that transceivers were vital to act as gates, requiring an enable signal to allow data to flow onto the bus at a timely manner. read ability was not as hard to understand, as the wires would always hold the values on the bus, but using the correct value meant enabling the registers to hold the new value.
One final takeaway from research throughout this project was understanding the specification differences between chips that were similar. Often times I found chips with the same ID values but different descriptor letters like LS and HC. What I came to learn was that it was not simply manufacturing labels, but also timing and power specifications about the chips. Thankfully since my computer used fairly low level, high tolerance components, I didn't need to worry about matching many specs, but on higher level design, I learned that things like clock speed and power draw are critical to the success or failure of electronic design
Step 2: Difficulties Encountered
Fairly quickly into the project I was able to design simple components like the timing clock for synchronizing processes, and basic memory architecture, but needing to order parts alongside a heavy course semester made it difficult to allocate outside time to the project, setting me back on schedule for completion. After my first big setback from needing to wait a week for parts to arrive, I ended up sidestepping further delays by ordering all the parts I thought I would need to complete this project, which turned out useful as I no longer faced delays until publishing this. After learning some basic approaches to debugging as well, I started to overlook some assembly which meant needing to go back and re-watch videos to catch my errors, which usually led to taking apart most of a board. This had no shortcut. I learned the value in checking your progress in building any electronic device. By debugging each board along the way, I was able to move on to combining them with more confidence, then debugging combined boards became much easier.
Step 3: Accomplishments and Reflection
All in all, I have currently completed the clock, opcode and program counter, ALU unit, rs rt and rd registers, and the RAM. Besides needing to complete the bus and peripherals in order to complete this project, I have learned a substantial amount about computer architecture, which I hope to carry on to my senior year electives, taking the computer architecture course.
M5 provided all the necessary tools for me to work on my project, and components were very well laid out along the parts walls, so I knew very early on the parts that needed ordering and what was dispensable. If another student was to take on this project, I would definitely note that this project takes a lot of time if you are trying to understand everything that's going on on the computer. IT IS NOT DIFFICULT, but it does require care if you want it to function successfully. I highly recommend going through the video playlist on Ben Eater's youtube channel to get a grasp of all the parts that you need to use so that you don't fall behind on time if you don't plan on designing your own approach. Since i purchased most of the parts I plan on taking this with me to complete on my own time, but it would be cool to hand this down to allow another student to complete it, which would mean light exposure to the design of the remaining parts, but a large focus on assembly language, which I luckily got to work on during other classes