ECE120
ECE120 (Introduction to Computing) is a 4-credit hour course that is specifically required for both electrical and computer engineers as part of the Electrical and Computer Engineering Core Curriculum. It is offered in the fall, spring, and summer semesters.
Content Covered
- Representation of information
- Boolean algebra
- Combinational network analysis and design
- Sequential network analysis and design
- Finite state machine and memory design
- Computer organization and machine-level programming
- Programming in C
The course starts by covering the many different representations of information in the form of bits in a computing system, then moves on to cover Boolean algebra as it relates to digital networks, combinational and sequential circuits, finite state machines and memories, and ends with a basic overview of computer organization and assembly programming principles using a basic educational ISA known as LC-3. Some C programming is also covered in the first few weeks through a series of small labs, but no prior programming experience is needed and mastery of C is not expected by the end of this course, as ECE220 (the next course in line after ECE120) starts from where this course leaves off and covers C in much more detail.
Prerequisites
There are no technical prerequisites to take ECE120 as it is an introductory course to computing fundamentals, and aims to provide an overview of all the content encapsulated by the field. Future classes will expand on this content by diving deeper into specific topics, such as low level programming (ECE220, ECE391), digital design (ECE385), and computer organization (ECE411).
When to Take it
ECE120 is generally taken by computer engineering students in their first semester of freshman year, and by electrical engineering students in their second semester of freshman year. It is recommended to take ECE120 as soon as possible, especially if the student is in or intending to transfer into computer engineering, in order to open up future coursework in the computer engineering curriculum, as every future course builds on at least one topic covered in the class.
NOTE: While electrical engineering students normally take ECE120 in the spring to make room early on for ECE110 and their other classes, it should be considered that ECE210 (the follow-up class for ECE110) has more prerequisites than ECE220. Thus, an electrical engineer may find it better to take ECE120 their first semester anyways, just so they can double up on ECE110 and ECE220 while they complete the prerequisites for ECE210. However, ECE210 is a fundamental EE course and should be taken as soon as possible, so plan accordingly. For a department-provided suggested schedule, refer to the EE Curriculum section.
Course Structure
The class starts from the very basics of computer engineering. The initial two to three weeks stress abstraction of the computer, bit arithmetic, Boolean logic, and base conversion. This then builds up to a week of an introduction to the C programming language. This week covers input/output, conditional statements, and loops. Afterward, the course material introduces combinational logic implementations, greater Boolean implementations, and Karnaugh maps. The following month is where the course contains its most important applicable content by going through utilizing combination and sequential logic for understanding the functionalities of these structures. Importance is placed on understanding the implementations of using such structures in memory constructs and designing finite state machines. The final quarter of the class teaches students LC-3: a simplified assembly language designed to introduce control path analysis and low-level coding. The LC-3 is explained completely by using the concepts that have led up to that point in the class.
The course has weekly homeworks that are graded based on correctness, although students have a chance to submit corrections to earn up to 50% of their lost credit. There are then corrections submitted for questions marked wrong by graders, which make up the remaining points for the homework category. The course also has weekly labs, which are generally asynchronous programming labs in C and later LC-3 assembly, however there are also 3 breadboarding labs where students will use digital TTL (transistor-transistor logic) chips to create digital circuits on a breadboard. Weekly discussion sections led by TAs are held every Thursday, in which students work together on a worksheet of problems to help better their understanding of topics covered that week in class. The course contains three midterm exams and one final exam. There are not very many practice exams offered, so it is recommended to keep up with the homework for each week in order to maintain a proper understanding of the covered concepts.
There is an additional "Honors Lab" students can take to gain James Scholar credit, newly officially listed this semester (Fall 2023) as ECE198HL. This course allows students to design and build any project they want (with TA approval). The department will fund any project in this section (within reason). James Scholars are highly encouraged to take this course to obtain honors credit, but even non-James Scholars may take it to gain more project-based experience early on in their academic careers.
Instructors
The instructors for this course vary based on availability and student demand for each semester. The current Course Director is Professor Bhowmik, who also teaches this course in the summer. This semester (Fall 2023), the instructor list includes Professors Bhowmik, Aggarwal, Bhat, and Zhang. Professors Levchenko, Brown, Kindratenko, Dong, and Lumetta have also taught this course in the past. The professors tend to have backgrounds all over the computing spectrum, as this is an introductory class and thus covers a broad array of topics.
Course Tips
Some of the topics covered in this course may be hard to grasp immediately, even after attending lectures and discussions, so it is highly recommended to start the homework early and attend TA and CA office hours with questions about the homeworks and any topics you may be confused on. The office hours right before the homework is due are often crowded - instead, attempt the homework early and go to the office hours right after homework is due.
Do not be afraid to ask questions in lecture and discussion! ECE120 covers a vast amount of topics to provide a broad overview of computing, so understanding the material will be helpful for every future computing-related ECE course in some way or another. Make it a goal to ask a question every lecture (this is easily doable if you pay attention, except maybe the first lecture).
Life After
After completing ECE120, ECE students are encouraged to take ECE220, the second core computer engineering course, as soon as possible. ECE220 builds onto concepts introduced at the tail end of ECE120, which in turn build on concepts covered throughout the rest of the course; therefore, having a strong understanding of ECE120 material is important prior to taking ECE220. In due time after taking the core ECE courses, ECE385 provides a continuation of logical design elements, as well as hardware and software implementations of applicable scenarios. ECE411 offers an even more in-depth continuation of the computer organization concepts covered in ECE120 and ECE385, and is generally taken by students in their senior year after completing the rest of the computer engineering core classes.
Infamous Topics
- IEEE-754 floating point representation: This topic is covered pretty early on in the course, generally within the first few weeks, and is the most commonly used representation for any sort of floating point (decimal) number in a computer. The hard part about this representation is converting between it and normal decimal numbers, as the steps involved can seem somewhat confusing to understand and follow.
- Sequential logic design: This is covered about halfway through the course, and alongside combinational design forms the backbone of every computing device imaginable. The idea of sequential design centers around feeding combinational gate outputs back into each other and observing changes over time with a varying clock. This can be a bit obtuse to understand, but is vital to know for designing finite state machines, memories, and eventually a full CPU, which the class builds up to in the coming weeks.
- Finite state machines: Covered soon after sequential logic design, finite state machines (FSMs) are the core of a computing device as they dictate what decision to make given a current state of operation and inputs. Finite state machine design is often difficult for students to understand and apply to given scenarios, made even harder if they don't properly understand sequential logic, which is what FSMs build upon. Couple this with some basic algorithmic analysis also being required to deconstruct a given problem and figure out an approach, and this is why, for good reason, many students consider finite state machines to be one of the hardest, if not the hardest part of the course.
- Serialization: Covered right in between the previously mentioned two topics is serialization, which is the idea of using one single bit wide computational unit to operate on a large bit string by storing the past results and outputting them out one at a time at a slight delay. Serialization goes hand in hand with FSMs, and both are sequential logic circuits at heart, so once again understanding sequential design becomes vital to designing properly functioning serialized circuits.
Resources
Apart from the class wiki page, the Introduction to Computing Systems: from Bits & Gates to C & Beyond (2nd edition) textbook written by Patt and Patel offers an expansive detail of the coursework and includes some homework problems that additionally improve understanding and preparation for testing. Course notes, prepared by Professor Lumetta, are available at the ECE Supply Center and online. How Computers Use Numbers is a great explainer on the basics of binary and floating point representations. Other available resources include office hours for material mastery and clarification, and an open lab that allows students to finish lab work.