Crucial Topics in Computer Architecture Education and a Survey of Textbooks and Papers Abdullah Yildiz, Sezer G¨ oren, H. Fatih Ugurdag, Barıs ¸ Aktemur, and Taylan Akdogan Abstract—We have been teaching undergraduate computer architecture since 2012 in an unconventional way. Most under- graduate computer architecture courses are based on micro- processors, and they quickly move into advanced topics such as instruction pipelining, forwarding, branch prediction, cache, and even memory management unit. We instead spend only the last one-third of our course on these topics. The first two thirds of the course is devoted to microcontrollers, i.e., simple-minded processors with no memory hierarchy, no branch prediction, sometimes even no pipelining. Our claim is that it is very hard to truly grasp the advanced topics without full grasp of the basics. Equipped with the above approach, this article comes up with an all-inclusive list of crucial topics for computer architecture education, and it surveys 25 computer architecture textbooks as well as 38 computer architecture education papers to see how much they cover these topics. In addition to that, the article contains a concise description of the perspective of our course. One of the pillars of our course is a working CPU on FPGA. We have so far had around 600 students design their own unique CPUs using Verilog given a complete instruction set, close to 70% of them with complete success. Index Terms—computer architecture education; computer organization education; FPGA; microcontroller versus micro- processor; assembly language; instruction set completeness; one-instruction CPU; instruction set design; memory-mapped I/O; self-modifying code; memory banks; memory hierarchy; instruction pipelining; CPU customization I. I NTRODUCTION S INCE 2012, we have been teaching undergraduate com- puter architecture with a grounds-up approach at Ozye- gin University. We have also been using part of the material in advanced digital design and microprocessors courses at Yeditepe University as well as Ozyegin University. The computer architecture education material in question has been developed at both of these universities. Some of the development work has been carried out through a PhD thesis at Yeditepe University and a funded research project run at Yeditepe University and Ozyegin University. There have also been some altruistic contributions from several graduate students at both universities. Undergraduate students have also contributed through course and senior projects. Usually, even undergraduate computer architecture/organi- zation courses rapidly move into advanced-level architectural techniques such as pipelining, forwarding, branch predic- tion, cache policies, virtual memory. They spend the whole semester on these advanced topics without ensuring that Manuscript received February 21, 2020 and revised June 3, 2020. This work was supported by T ¨ UB ˙ ITAK under grant no. 117E090. A. Yildiz is with the Dept. of Computer Engineering, Yeditepe University, Istanbul, 34755, Turkey e-mail: ayildiz@cse.yeditepe.edu.tr. S. G¨ oren is with the Dept. of Computer Engineering, Yeditepe University, Istanbul, 34755, Turkey. H. F. Ugurdag and T. Akdogan are with School of Engineering, Ozyegin University, Istanbul, 34794, Turkey. Barıs ¸ Aktemur is currently a senior software engineer at Intel, Germany; his contributions to this work were carried out while he was a faculty member at Ozyegin University. the students have the necessary underlying low-level digital design background to appreciate the respective trade-offs. Advanced-level architectural techniques aim to improve Instructions Per Cycle (IPC) while assuming Instructions Per Second (IPS or MIPS for Million IPS) will also improve. IPS equals IPC times the clock frequency. For IPS to improve when IPC improves, the clock frequency should not go down or should go down less than the IPC goes up. However, advanced-level architectural techniques that boost IPC usually make the hardware more complex, thus lowers the clock frequency (i.e., making the critical path of the logic circuit longer). What is worse is that it is not easy to see the extent of reduction in clock frequency from the architectural/algorithmic trade-off being made, even when a person is experienced in digital design. Given the above perspective, we have a different view of what is crucial in an undergraduate computer architecture course. This article contributes a crucial topic list to the literature for computer architecture education. We also sur- veyed 25 computer architecture textbooks plus 38 computer architecture education papers to see how much they cover these topics. The article also contains a description of our course. We claim it is crucial that students are able to design a working (though simple) CPU on FPGA at the end of the semester. So far, around 600 of our students had to design a CPU. 70% of them successfully tested it in simulation and on FPGA. This article is organized as follows. In the next section, we outline our computer architecture course and teaching philosophy as well as the CPU it is based on. The following section lists and defines the computer architecture topics we or other instructors deem critical, some of which are basic and some of which are advanced topics. The same section does an analysis of each topic in terms of how much it is covered in the related textbooks and articles we found. We then draw some conclusions in the final section. II. OUR COMPUTER ARCHITECTURE COURSE AND VSCPU The first time we taught our undergraduate (sophomore level) computer architecture course (in 2012), it was a small class (16 students). As a consequence, we were able to have more interaction and unrehearsed discussions. In one of those discussions, we really tried to define what a “computer” is. It is basically a calculator, as the name has the verb “compute”, which is not too different from “calculate”. However, the calculation commands of a computer come from a memory in an automated fashion as opposed to them being entered manually by a human. There, we made a further observation that we should call it a computer only if the available calculation commands allowed us to implement an arbitrary algorithm. IAENG International Journal of Computer Science, 47:3, IJCS_47_3_08 Volume 47, Issue 3: September 2020 ______________________________________________________________________________________