Computer organization and architecture cover the inner workings of your computer, from electrical circuits to larger structures like caches and storage devices. During this course, we will work our way from the bottom-up: starting with transistors and circuits, we will construct simple processor that closely resembles processors in use today. Understanding how your computer works will help you write better programs; many of the techniques we use to write fast and reliable software depend on an understanding of how that software will be executed. Abstraction, indirection, caching, concurrency, and other key concepts in computer science are just as important in hardware as they are in software. As computing hardware grows more complex and diverse, understanding the differences between your CPU and your GPU—and when each is best-suited to a problem—will become more and more important.

Our main objectives for this course include:

  • Learning how electricity can be used to perform computational tasks
  • Learning to identify and explain the major components of a modern processor
  • Understanding why these components exist and how they interact with software
  • Learning to read and write programs in machine language

Why take this course?
Whether your goal is to pursue advanced computer science study, work on new processor technology, develop the next major operating system or programming language, or apply high-performance computing to any other field, this course will help! Understanding computer architecture and machine language will help you be a better programmer, and prepare you to deal with the inevitable bugs and perforamance pitfalls that are virtually guaranteed in computing.

What do I need to know?
I assume you have taken and passed CSC 161. That means you should be comfortable programming in C and dealing with pointers.


Our primary textbook is David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, 4th edition, Elsevier, 2008. ISBN 978-0123744937. I will supplement our primary textbook with eReserves and handouts from other textbooks, videos, and the occasional lecture.

This textbook is fondly known as “Patterson & Hennessy” (not to be confused with “Hennessy and Patterson”, which is a more advanced textbook). Either the latest printing (with a dull green cover) or the original printing (with a blue cover) covers the required material. The latest printing has fewer errata, but either version will work. Both are available used for less than $5 on as of August 20th, 2015. Do not buy other editions as they are quite different, including the newer 5th edition. I do not recommend the Kindle edition as it has received rather poor reviews. Some supplemental materials are included with the book on a CD. We will be reading from these materials early in the course. If the version of the book you have purchased does not include the CD, you can download all supplemental materials from the publisher. Finally, watch out for international editions that use ARM rather than MIPS as the primary example architecture.

Class Attendance

Class meetings will involve a mix of discussions, collaborative activities, labs, and the occasional lecture. You are expected to attend and actively participate in class. I expect to make class worth attending.

I will deduct 1.5% from your final grade for each unexcused absence from class. I understand that sometimes “things happen.” Therefore, you will be granted one unexcused absence from class without penalty. However, this rebate is cancelled upon a second absence.

If you are absent, please send me a written explanation (email is acceptable). If you know in advance that you will be absent from class for any reason, please notify me in writing at least 7 days before your absence.

If your are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counciling Services (SHACS) offers health and mental health services to students, and can provide you with a note excusing your absence from class. If you do not share this note with me, your absence will be considered unexecused. You are not required to share any private medical information to be excused from class.


My goal is to help you learn as much as possible in this course; please let me know what I can do meet your learning needs. If you have a disability that requires accommodations, please contact Disability Resources. Disability Resources will work with you to determine your needs, and will provide you with paperwork outlining the accommodations you require. Please give me this paperwork at least a week before the course activity for which you need accommodations. If timeline is not feasible for any reason, please contact me as soon as possible and we will find a solution.

Assignments & Activities

Under a normal 16 credit load, I expect that you will spend at least 40 hours per week on your studies (class time, homework, and studying). You should spend a minimum of 10 hours per week on this course, although more time may be required to earn an A or B in the course.


Our class meetings will consist largely of discussion and group activities. This format will require significant preparation on your part. Most of this preparation will consist of careful reading and reflection on this material through the use of a reading journal.


You should check the class schedule for updates and read any material that has been assigned before coming to class. Reading the textbook and supplemental readings entails the following:


You should quickly skim the reading once to get a sense of the material that is being covered, paying careful attention to subject headings and topic introductions. The first "reading" pass should be __very__ quick.


Next, read the material closely. Try to understand what individual steps of algorithms or mathematical proofs are accomplishing. Not everything will make sense at this point, but hopefully many things will.

Final Notes

After carefully reading the material, mentally review and try making a few notes to yourself about what you think are the most important concepts being covered, as well as any questions you have. These notes and questions will help you with your reading journal.

Many of the readings are fairly short, but can contain code or figures that require a significant amount of study. While I realize that not all concepts are best learned by reading, please make your best effort and come to class with questions. Then, we can proceed with discussion, examples, and exercises to improve your understanding in class.


To help focus your efforts and give us a basis for discussion, you will be provided short a list of questions to answer for each day’s reading. Reflecting upon your responses to the questions will help to give you a deeper understanding of the most important concepts surrounding each topic.

To allow sufficient time for sleep before our 8am class, your responses are due at 10:30pm the night before class. No late responses will be accepted. Keep in mind, one reading journal constitutes a tiny fraction of your total grade; I would prefer you get a good night of sleep.

You will submit your responses to me via email. While these low-stakes writing assignments are technically informal, they must reflect a high level of engagement with the course material.

Reading journals will be graded on the following scale:

Plus (A+)
Exhibits exceptional clarity, insight and/or creativity
Check (A-)
Exhibits evidence of processing and studying concepts
Minus (C+)
Superficial response or insufficient evidence of engagement

Because I expect most entries will receive a check, I will comment on your journal to report a plus or minus. You should expect to discuss the issues raised in your reading journal entries during class.

Because I am new to this course and to Grinnell College, I will occasionally ask for your feedback as part of your reading journal. You are not required to write anything for this section, and any comments you share will not impact your grade. If you would prefer to share feedback anonymously, you can meet with any of the other faculty in the department or with the academic support assistants in the science division office.


Because much of our work involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:

  • being present in class (physically and mentally),
  • coming to class on time,
  • coming to class prepared,
  • asking questions,
  • making contributions to class discussion by volunteering and when called upon,
  • staying on task during collaborative exercies, and
  • working effectively with your group.

Students who consistently meet these criteria can expect to earn 90% (an A-) for their class participation grade. I will reward students who regularly provide significant insights or guide discussion in a productive manner. Students who fail to participate, or participate in counterproductive ways—by dominating the discussion or making inappropriate comments—will earn a lower score.

Significant Bits

From time to time, one member of the class will present a five minute overview, preview, insight, or review of a significant development in computer architecture or a relevant area. Our objective is to establish a practice of following technological developments in the popular and technical press as well as in research publication venues. In doing this, you will inform your classmates—at a high level—about something that relates to the course. Your presentation should include what the development is, why it is important, a tiny bit about how it is done, and perhaps something about who did it. You will be asked to present just once during the semester, so find something interesting and share it with us!

Suggested sources for material to present include:

Academic Publications

Trade Journals

Popular Press

You will need to sign up for your presentation date as part of homework 0, due on the first Monday of class. Please share your proposed topic with me (in person or by email) at least two class periods before your scheduled presentation date.

Lab Work

In lab, we will work with electronic components, with software, and with combinations of the two. You will build digital circuits (real and virtual), and you will write assembly programs for PIC32 microcontrollers that do fun tasks such as flashing lights and sounding buzzers.

Lab partners will be randomly assigned for each new lab. Most lab work will not be graded on content (only participation) but several labs will serve as the basis for your graded homework assignments. To earn full credit for lab participation, you must:

  • complete all assigned pre-lab readings,
  • review the lab assignment before lab begins,
  • complete any pre-lab work before lab begins,
  • arrive on time,
  • begin work promptly and stay on task,
  • work collaboratively with your lab partner, and
  • be considerate of others, particularly by putting materials away when you are done with them.

Students who consistently meet these criteria can expect to earn 100% (an A+) for their lab participation grade.

We will be working with some relatively expensive equipment in this course. The equipment must stay in Noyce 3818, and the door should remain locked outside of lab times. You will be given the door combination, but you must not share this combination with any other students.


There will be four in-class midterms and a final exam for this course. The final exam will be cumulative, but will emphasize material not covered by the midterm exams.

You are expected to be present for exams on the following dates:

Exam 1
Friday, September 25th
Exam 2
Monday, October 12th
Exam 3
Wednesday, November 4th
Exam 4
Wednesday, November 25th
Final Exam
Friday, December 18th, 9:00am–noon

Do not make travel plans that will conflict with the exam schedule. If you are unable to be present for a required examination due to unforseen circumstances, you will need to contact me to schedule an oral make-up exam.


There will be no curves or competitive grading in this course. Every student has an opportunity to earn an A. Your final grade will be determined with the following weighting:

Class participation
Lab participation
Reading journal
Midterm exams
Final exam

Note that half your grade is based on outcomes (final and midterm exams) and the other half is based on process (participation, preparation, and out-of-class work).

Academic Honesty

I encourage collaboration when it promotes learning. However, it is important for you to understand the course materials and demonstrate your own learning on exams. As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing, after which there is no recourse with me.

Students are free to discuss readings, lab assignments, and homework assignments, but copying is not acceptable. The work you turn in must be your own. You must not share code, homework responses, or other submitted work with any other students. You must acknowledge the contributions of others, whether they come from other students in the class, or from print and online resources. In short, while you are encouraged to collaborate with others, you are expected to be able to construct and explain each solution on your own.

Exams are intended to assess your individual understanding of the course material. Therefore, collaboration on exams is not permitted. If you have questions on an exam, please bring them directly to me. Of course you are encouraged to collaborate when preparing for exams.

You will not be permitted to use study guides, textbooks, phones, laptops, or any other reference during exams. I do not expect you to memorize every detail covered in class, but rather to understand key concepts and demonstrate an ability to apply them in an exam setting. Therefore, I will provide you with some reference materials where necessary on exams. For example, an exam question on MIPS assembly will likely include a short list of MIPS assembly instructions for you to use when constructing your solution.


Reading journal entries are due at 10:30pm the night before class. Late journal entries will not be accepted.

Homework assignments are due at 10:30pm the day they are listed on the course schedule. Assignments submitted after the due date will receive a reduction of 10% (one full letter grade) for each day they are late.

If classroom facilities or MathLAN are unexpectedly unavailable for three or more hours before a deadline that requires the use of these facilities, I will extend the deadline. Please contact me as soon as possible if this situation arises.

Getting Help

Office Hours

Please come by during my office hours to discuss course content, get extra assistance, or just talk about how the course is going. If you cannot make it to regular office hours, email me to schedule an appointment. Please provide at least three possible meeting times so I can pick one that works for me.

I enjoy getting to know students, but I prefer to reserve office hours for academic matters. If you would like to have a more informal conversation, I would be delighted to accept an invitation to have lunch with you at the Marketplace.


I am happy to answer questions by email, but please allow 24 hours for a response (except on weekends, when I may not answer email at all). You may also call my office phone number (x3127) for more urgent matters.