Course Overview

Home Page: Link


Office Hours Queue

Check the announcements page frequently to find updates on the office hours.

Course Overview

This course is intended to give you a basic understanding of how computers execute programs. Understanding computers means understanding the hardware/software process of how you and the computer work together to have the computer carry out a task.

In your introductory programming courses (e.g. EECS 280), you learned how to express a task in terms of a high-level programming language such as C. In EECS 370, you will see how a low-level language is executed by the hardware, and you will see how to put together basic hardware building blocks to form the functional units of a computer.

To achieve these goals, you will design and "build" simple computers at various levels of detail. In this course, building will not mean connecting chips and gates. Rather, you will describe the hardware in diagrams, finite-state machines, and hardware simulators (written in C). To further your understanding of other topics, we will provide practice questions that will be discussed in the discussion sections.


Students must have taken EECS 280. From that course they should have learned and be comfortable with programming C++ on Unix. A brief overview of C vs. C++ will occur during the first discussion section of the semester. Also you can go to GSI office hours for additional help.

In addition, students should have taken either EECS 203 or EECS 270

Class Projects

Four projects will be assigned during the term, each of which will require a substantial time commitment on your part. The first project will be divided in two parts, each with a separate deadline. Many students find the work load in this course to be heavy.

The most common reason for not doing well on the projects is not starting them early enough. You will be given plenty of time to complete each project. However, if you wait until the last minute to start, you may not be able to finish. Plan to do some work on a project every day. Also plan to have it finished about 2 days ahead of the due date - many unexpected problems arise during programming, especially in the debugging phase. The computing sites can become quite crowded as deadlines approach, making it difficult to get a computer. Plan for these things to happen. Your lack of starting early is not an excuse for turning in your project late, even if some unfortunate situations arise such as having your computer crash.

There are many sources of help on which you can draw. Many questions can be submitted to the course staff and your fellow classmates via the class forum. The policies for using the class forum are posted on the web and are contained in the first post in the forum. These will typically be answered within the day, often more quickly during working hours. However, some types of questions cannot be answered without seeing your project. If you have detailed questions on your program, speak to a GSI or professor in person during office hours.

Students are also encouraged to help one another on the course concepts (but not the implementation of the projects). One of the best ways for you to make sure that you understand a concept is to explain it to someone else. Keep in mind, however, that you should not expect anyone else to do any part of your project for you. The project that you turn in must be completely your own.

Many computing sites have consultants who are available to help you at the site. They are fine sources of help with questions regarding the computers and installed software (such as Unix and the C compiler). However, they are not likely to be able to help you with questions about computer programming, the C language, or specific errors in your program.

Turning in Projects

Projects are due at 11:59 pm exactly on the due date. pm.

You will be submitting your projects electronically by running a program called submit370. Your projects will be graded automatically using an autograder program. You are allowed to submit your programs as frequently as you wish. However, to deter you from using the autograder as a debugger, you will receive autograder feedback only THREE TIMES a day. That is, only the first 3 submissions will be graded and returned to you with your score on any given day. Additional submissions beyond the initial 3 will be graded and recorded, but you will not receive any email feedback about them. For each project, your final score will be derived from your best submission to the autograder.


Sometimes unexpected problems make it difficult to get a project in on time. For this reason, each person will have a total of 3 free late days to be used for projects throughout the semester. These late days should only be used to deal with unexpected problems such as illness. They should not be used simply to start later on a project or because you are having difficulty completing the project. Thus, please plan your work accordingly so that you won't need to use any of the late days unless there is a personal emergency. If you are having trouble understanding the material or designing a program, please come to office hours for help right away.

Project Grading

The projects will be graded primarily for correctness (doing all the required tasks, simulating at the correct hardware level, and giving correct results). All grading questions should first be discussed with your GSI. If you cannot resolve a problem with the GSI, bring the project to the instructor.

Doing Your Own Project

All projects and exams in this course are to be done on your own. Any suspected violation will result in the initiation of formal procedures with the LS&A or Engineering Honor Council. Violators will receive a 0 in the project, in addition to additional grade repercussions, as recommended by the appropriate Honor Council.

We will be using a sophisticated automated program to correlate projects, including those submitted in previous semesters.

We do encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on any of the concepts covered in lecture or discussion and on the specifics of C syntax. You are allowed to consult with other students in the current class to help you understand the project specification (i.e. the problem definition). However, you may not collaborate in any way when constructing your solution - the solution to the project must be generated by your work alone and the work of other students must not have contributed to your solution. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from the existence of project specifications or solutions prepared in prior years (e.g. programs written by former students, solutions provided by instructors, project handouts).

If you have any questions as to what constitutes unacceptable collaboration, please talk to the instructor right away. You are expected to exercise reasonable precautions in protecting your own work. Do not leave your program in a publicly accessible directory, and take care when discarding printouts.


There will be two exams this semester. You are expected to take the exams at the scheduled times. If you do not take an exam without verifying a documented medical or personal emergency causing you to miss an exam, you will receive a zero for that exam. If you anticipate conflicts with the exam time, talk to the instructor at least 1 month before the exam date. The exam dates are given near the beginning of the semester so you can avoid scheduling job interviews or other commitments on exam days. Outside commitments are not considered a valid reason for missing an exam. If you need to request any special accommodation during any exam, please bring the necessary paperwork from the SSD office by the end of the first month of classes.


There will be six homework assignments during the semester. Your homework assignments will be posted on this website and will have a deadline set at 11:55pm for the day the homework is due. Students can re-submit as much as they would like until the deadline. Only the last submission will be graded. Please have your homework files named in the following format 'uniqname_HW#.pdf'. The files can be typed up or written and then scanned.

You may not post homework answers on piazza or place them in any other public forum (a webpage for example) or share them with others. Note that homeworks constitute a very small factor in your final grade, their main purpose is to help you in getting trained for the type of questions that you will find in the course exams. Additionally, your lowest homework score will be dropped at the end of the semster.

Grading Policy

Final grades will be based on the total points earned on homeworks, projects and exams. Factors such as class participation may be used to adjust your final grade, especially if it falls on a borderline. The grade distribution is as follows:

  • Projects (4 assignments, 10% each) = 40%
  • Homeworks (6 assignments, lowest dropped) = 10%
  • Midterm = 25%
  • Final exam = 25%

Incompletes will generally not be given. According to university policy, doing poorly in a course is not a valid reason for an incomplete. If you are having problems in the course, your best bet is to come talk to the instructor as soon as you are aware of them.


You may use any Linux workstation that runs gcc. However, we will only support problems which occur on a CAEN machine.If you are not an engineering student (or declared CS-major), we recommend you to get a CAEN account. The autograder should work for submissions from ITCS Linux workstations, but we cannot guarantee this.

Finally, you are responsible for reading your e-mail class announcements and other student communications may be sent there.