I had mentioned on my previous blog that I would share my experiences with the first-year remote group project. Unlike previous first years who would have worked on building the ‘EEE Bug’, this year the nature of the group project was completely transformed and the cohort was given a choice between designing an analogue music synthesiser, designing a CPU with computational abilities and programming a circuit simulator package in C++. My two teammates and I (each of one of us in completely different time zones, with the maximum difference being 6 hours!) decided on the option of designing a general-purpose CPU on Quartus Prime, with the ability to execute a vast majority of computational algorithms. More specifically, it can generate Fibonacci Numbers using recursion, it can generate pseudo-random numbers using a ‘linear congruential generator‘ (I had no idea what this meant before the project!) and it can also traverse through a linked list.
The Easy Part
Luckily our group got along well as we have often worked together throughout the year. Through WhatsApp, Microsoft Teams, and remote collaboration on GitHub and Quartus, we were successfully able to address the aims and objectives of the project and complete the design that (hopefully) fulfills the requirements. The time frame provided to us was also ample to work at our own pace and not rush, and so despite the slack off and procrastination, the work was completed in time. Fortunately, all our internet connections too were mostly stable and there were no major disruptions to the online meetings as well as attending the lectures presented by our instructor and supervisor via Teams.
The ‘Not So Easy’ Part
It was only during the course of this project that I realised the value of the laboratory computers in the EEE department! Not only do they have all the required and updated software pre-installed but I’ve barely experienced long lags and unexpected closedown of the Quartus application in the laboratory ones as opposed to my personal device. In terms of the technical demands of the project, whilst it is very intellectually stimulating (typical Imperial style), arriving at the solution took multiple attempts and course corrections (sometimes re-designing and re-programming a complete hardware block, constant changes being made to the decoder and testing of each instruction as well as assembly program). However, this is considered normal as most of the engineers spend more time debugging and testing rather than actual designing!
Overall, in my personal opinion and experience, this project massively increased my knowledge and practical understanding of computer architecture and CPU design and it really pushed me out of my comfort zone both in terms of intellectual demand and workload. As with most Imperial modules and assignments, the process is initially a struggle and tedious but the outcome is definitely worthwhile and satisfying. I did not imagine I would be able to design a general-purpose computational CPU by the end of the first year, starting with no previous knowledge and experience when I joined in the Autumn term!