Computer Organization & Design

This was another very low level course, where we used Verilog to program FPGAs to do specific applications.

Most of our homework was built on top of each other. First, we built a single cycle processor, where one instruction was executed in a single clock cycle. Then, we progressed to build a pipeline processor, where two instructions were simultaneously executed in a single clock cycle. Lastly, we built a superscalar processor, where we had two in-order pipelines running in parallel.

All of these projects, looking back, were very challenging. However, they were rewarding and definitely helped me learn more about how an actual computer works. I am amazed that people are able to build even more complex processors for real-world assembly languages; these very basic level homeworks took forever, and debugging was quite a process. The problem solving I had to do to complete these homeworks was fun, though, even if it was difficult.

I am very glad to have taken this course, even though it was a rather challenging elective. I learned a lot from it, and I still think about the class content today whenever I turn on my computer. Now I know what multi-threading is, and how useful parallelism is!

The homework assignments I completed for class (done with a partner) can be found here.