Description of Course Goals and CurriculumDigital logic is the focus of this course. Starting with the transistor, this course teaches how logic gates and memory elements are constructed and how they are connected to form digital circuits. The material starts with memoryless combinational logic and then introduces the more complex sequential logic circuits that include memory. These digital circuits form the basis of many real-life electronic devices. The course culminates with an introduction to computer architecture. Students are taught the basics of designing a programmable processor that can execute a computer program. Course material is taught in lecture and reinforced in problem sets and lab assignments.
Learning From Classroom InstructionInstruction consists of lecture and optional precept. Lectures are taught using PowerPoint slides, and the professor makes these lectures interactive by asking the students lots of questions. The precepts are to reinforce lecture material and go through example problems to help with problem sets. All lectures are recorded, but attendance is highly encouraged because of the interactivity that the professor tries to foster. The lecture material connects very nicely to the textbook, although the textbook covers topics in more depth. Many students complain about the pace of lecture, saying that it is too slow for the first few weeks and too fast towards the end of the semester. Both these problems make it harder to maintain focus. It is most important to focus on the fundamentals and the big pictures, such as why something is relevant, how it works under the hood, and why it makes sense. You can always replay the lecture videos (and speed them up) if you need a recap. Ask questions in class if something does not make sense. The details can also be cleared up in precept, on Piazza, or in the textbook.
Learning For and From Assignments
ELE 206 gives a lot of assignments. After each lecture, a “Key Ideas” assignment is given, in which students write a 50-word response to a fundamental question about the lecture material. These assignments may be tiresome, but they help solidify the knowledge learned in lecture and capture the main concepts. You can skip a few of them and still receive full credit. Reviewing the Key Ideas is also a great way to refresh your knowledge before the exams. There are weekly problems sets which can be completed in groups of 2. As mentioned earlier, lectures should tell you almost everything you need to know for the problem sets. Any missing knowledge can be filled in via precept, lab hours, the textbook, or Piazza.
There are also lab assignments. These are programming assignments in Verilog, which is a hardware description language. You can complete the lab assignments on your own computer, so there is no need to work in the lab. You also do not need to work during your lab section time. You just need to visit the lab upon completion to demonstrate your assignment to one of the TAs. In lab assignments, students implement some of the concepts they learn in lecture. The first lab assignment is a simple introduction to logic gates and programming in Verilog, and the last assignment is a 3-week project for implementing a programmable processor. Lecture and precept provide no guidance in learning Verilog or completing the lab assignments. Instead, students learn from a Verilog tutorial document. Lab assignments consist of programming assignments along with conceptual questions. Piazza and lab hours are always available if you need help debugging or understanding the assignments.
One common criticism of this course is that the first few problem sets and lab assignments are very easy, but then there is a sudden jump in difficulty after the first 4 weeks or so. To stay on top of everything, make sure you have a solid conceptual understanding, start labs on time, and don’t be afraid to ask for help. Lab assignments build off the knowledge from previous assignments, so each assignment is an opportunity to learn something that will come up again in future weeks. Instructors know that the last few labs are a real challenge, so students can work in pairs on these.
Lab hours are immensely useful for help with labs and problem sets. The course hires about 10 undergraduate TAs who have taken the class before. They staff about 14 hours of lab time every week. These hours get very busy as deadlines approach, so it pays off to find help early. Unfortunately, with so many undergraduate TAs, you might get different answers and opinions depending on whom you ask. Additionally, Piazza is always available, and the answers posted on Piazza will be more consistent. Assignment problems and lab specifications can be confusing and vague at times, so making use of these resources is highly encouraged.
The textbook for this class is excellent. It almost feels like the textbook was designed specifically for this course, in the same way that the COS 126 and COS 226 textbooks are so seamlessly connected to those classes. Since the textbook material is so similar to lecture material, many students may be tempted to skip the readings. However, those who skip the readings will miss out on details and examples that are critical to succeeding on the exams and on the more challenging lab assignments. If you do not have time to keep up with readings during the semester, at least skim the material before exams and take a closer look at any unfamiliar material.
Externally, there is an optional Verilog textbook, but the document provided in the course should be sufficient for this class. Since the course provides plenty of resources, I would not recommend seeking out external resources. They may bring more confusion than help.
What Students Should Know About This Course For Purposes Of Course Selection
A basic understanding of programming in any language will be helpful. Programming in a hardware description language like Verilog is very different, but there is no need to learn Verilog before taking this class. When planning out your semester, keep in mind that this course can take up lots of time, especially in the last half. Everyone is granted 5 late days for the semester. Still, you may ask for extensions if there is some circumstance that affects a number of students.
The most interesting thing about this course is that you will walk away with a solid understanding of how computers work, from the transistor level up to assembly language. This class pairs nicely with COS 217. In 217, you start with high-level programming and work your way down to assembly language and machine code. In ELE 206, the curriculum starts at the transistor level and works up to assembly. This combination will give students a full appreciation of how to write code and what it truly means for a computer to execute a program. To learn more about how a processor works, you can go on to take COS 375 in the spring.