Instructor: 
Yale Patt 
Web: http://www.ece.utexas.edu/~patt Office: 5.802 Engineering Education and Research Center (EERC) Phone: 5124714085 Email: patt@ece.utexas.edu Office hours: MW, 5:00pm to 6:30pm, at the front of the classroom or in my office (EER 5.802), and by appointment 

Teaching Assistants: 
Stephen Pruett, Siavash Zangeneh, Aniket Deshmukh, Zachary Susskind, Meiling Tang, Jiahan Liu 
Important information about EE 306 is also contained in a handout titled: Introduction to EE 306. Please be sure to read it. It expands on a number of items in this Course Descriptor. Also, make sure you read the handout titled: Course Outline (aka, Syllabus). It contains a lecture by lecture schedule of topics for the entire semester, the major emphasis of each discussion session, the due dates of problem sets and programming assignments, and the dates of all examinations. 

Course Overview: 
This is the first course in computing for students of computer engineering and electrical engineering. The objective is to provide a strong foundation that a serious student can build on in later courses across the spectrum of computer science and engineering. The idea is that a more complete understanding of the fundamentals early in your education will help you acquire a deeper understanding of more advanced topics later, whether that topic is in computer architecture, operating systems, data base, networks, algorithm design, software engineering, or whatever. I call the approach "motivated" bottomup. That is, after providing some overview of why a new concept is important, we attempt to tie that new concept to what you already understand. Starting with the transistor as a switch, we build logic gates, then more complex logic structures, then gated latches, culminating in an implementation of memory and a finite state machine. From there, we study the computer's instruction cycle, and then a particular computer, the LC3 (for Little Computer 3). Why "3"? ...because we got it wrong the first couple of times! The LC3 captures the important structures of a modern computer, while keeping it simple enough to allow complete understanding. The first programming assignment is in the machine language of the LC3. From there, we move up to Assembly Language, and learn how an assembler works. The remaining programming assignments are in LC3 Assembly Language. We cover good programming style and practice, and teach debugging from the gitgo. An LC3 Simulator allows the student to debug his/her own programs. Input (via the keyboard) and output (via the monitor) both use physical device registers. System service routines, written in
LC3 Assembly Language are used to perform I/O functions. They are invoked by user programs by the TRAP instruction and corresponding trap vector early in the semester, but by the end of the semester, the student is able to write the trap routines himself/herself. We also study interrupt driven I/O, and the student writes an interrupt service routine as the final programming assignment in the course. We also show how elementary data structures, abstract data types if you will, are actually stored in memory and manipulated by user programs, which usually involves subroutine calls and returns.

Course Description: 
The course will cover the material of Chapters 1 through
10 of the textbook. A detailed outline of the contents is contained in
the textbook's
Table of
Contents.
See also the handout, Course Outline (aka Syllabus), available in hard copy
and on the class web site.

Meeting Info: 
The course consists of three hours of lecture + a one hour discussion
section each week. Lectures will be in WCH 1.120, MW 3:30p  5:00p.
Discussion sections are scheduled at various times of the day on Thursdays and Fridays.
The
Course Schedule lists the meeting times and room numbers for each of
the 8 discussion sections. Note that each discussion section has its own
unique id. Students are free to attend the discussion section of their
choice, although I would like you to attend your assigned discussion
section during the first week of the course.

Course Home Page: 
http://www.ece.utexas.edu/~patt/17f.306 
Textbook: 
Introduction to Computing Systems: from bits and gates to C and beyond;
Yale N. Patt and Sanjay J. Patel; McGraw Hill, 2004, 2nd edition.
You will need the 2nd edition. There have been many substantial changes
since the first edition. The ISBN for the 2nd edition is: 0072467509 
Course Resources: 
Class handouts will be supplied when
necessary to supplement the concepts discussed in lecture.
Other information will be downloadable from the course homepage. 
Prerequisites: 
There are no computer prerequisites. No programming experience is assumed. On the other hand, we do assume that the student is able and highly motivated to learn and has the energy and intelligence to support that motivation. We also assume that your mathematics background is at least at the level where you are enrolled in a strong calculus sequence. EE 306 is intended for freshmen, but is open to all students who want a serious introduction to computing in general and computer engineering in particular.
If you are one of those with no experience using computers, please do not be intimidated by those in the classroom with years of computer experience. It has been the case many times that students with no computer experience earn A in the course, and students with lots of experience earn C or lower. 
Homework Policy: 
Problem sets will be assigned periodically. Usually, students will have between one and two weeks to complete them. Students are encouraged to form study groups to work homework problems. Only one copy of a problem set per group need be turned in. There will be five programming assignments, one in machine language, four in assembly language. Dates and times when problem sets and programming assignments are due are contained on the Course Outline. Students are encouraged to discuss the structure of the program with other members of their group. However, the detailed algorithm and actual coding must be done by the student working alone. Collaboration on the algorithm and/or giving or accepting actual code for a program constitutes cheating, and will be dealt with harshly. Please see the handout: Additional introductory comments about EE 306 for more information on what constitutes cheating. 
Quiz and Exam Policy: 
There will be two exams in class, one on October 18, the other on November 15. There will be a final exam during the normal final exam period. 
Final Exam: 
See above. 
Grading Mechanics: 
Course Grade: Problem sets (2% each, times 5 assignments = 10%) Programming Assignments (5% each, times 5 assignments = 25%) Two inclass exams (17% each = 34%) Final exam (25%) Other (6%) Policy: Problem sets and programming assignments are due on the date and at the time specified. Makeup exams will not be given, except under very rare circumstances. Excused absence from an inclass exam must be obtained in advance, except in very rare circumstances. 