Course Objectives

Computer Architecture refers to the organization of the hardware that executes computer programs. The processor is the most important and complex part of a computer system. As such, it is very important for software developers to understand what makes processors execute code correctly and with high performance.

This course examines the machine representation of data, low-level programming in C and assembly language, language translation, and the design and implementation of processors at the digital logic level.

Learning Outcomes

Upon completion of this course the students will have learned how to:

  1. Understand and manipulate the machine-level representation of numbers and data in C

  2. Design and implement a translator including interpretation and code generation

  3. Write assembly language programs for the ARM (specifically ARMv7) architecture

  4. Design and implement an assembler which translates human-readable assembly language into machine code

  5. Construct digital circuits to solve computational problems

  6. Design and implement a working computer processor using schematics in a simulator

  7. Understand the trade-offs involved in designing processors for high performance, such as cache memory

Course Materials

A Raspberry Pi. See shopping list and setup instructions

Raspberry Pi OS, including compilers, linkers, assemblers, editors, etc.

None are required but you may find these optional books to be useful

Digital Design and Computer Architecture: ARM Edition
Sarah L. Harris and David Money Harris

Computer Organization and Design: The Hardware/Software Interface: ARM Edition
David A. Patterson and John L. Hennessy

The C Programming Language, 2nd Edition
Brian W. Kernighan and Dennis M. Ritchie



  1. Class Participation: 10%

  2. Labs: 10%

  3. Project01 - Raspberry Pi Setup: 5%

  4. Project02 - NTLang: 10%

  5. Project03 - ARM Assembly Language: 10%

  6. Project04 - ARM Assembler: 15%

  7. Project05 - Intro to Digital Design: 5%

  8. Project06 - Processor Implementation and Simulation: 15%

  9. Final Exam: 20%


  1. Writing neat and clean code counts

  2. Turning in a clean repository counts

  3. Attendance is not taken directly, but participation in class, lab, Piazza, and office hours counts

  4. Projects will be graded for both correctness (using an automated tool) and comprehension (using 1:1 interactive grading meetings with the instructor or TA)

  5. Extensions are generally not given unless the circumstances are extreme. Please discuss any issues with the instructor in advance.

  6. If you aren't done with an assignment on time, please hand in what you have working on time for full credit. You may earn partial credit for late work up to one week after the due date.

Cheating and Plagiarism

  1. You must do your own work. You may get explanatory help from the instructor, TAs, friends, or Internet sites

  2. You must not turn in work that you did not write. Examples include code or schematics copied from Internet sites, friends, or students from previous semesters.

  3. If we find that you turned in code or schematics that you did not write, and thus do not understand, you will receive a zero on the assignment. If you do it again, you will receive an F in the class.

Other Policies

All of USF's policies apply in this course, including Student Disability Services, Student Code of Conduct, Counseling Services, and Mandatory Reporting for Title IX