Computer Engineering is the discipline at the intersection of hardware and software that designs and engineers computer systems from digital circuits, through compilers and runtime systems, to networking and world-wide distributed systems. As an engineering discipline, the computer engineer must appreciate the physical aspects of computations (energy, delay, area, reliability, costs) and be able to expertly navigate the multidimensional tradeoff space associated with implementing computations. Computer Engineering is a natural path for students interested in embedded and real-time systems, consumer electronics, or computer system design.
I came into college knowing that I wanted to study both the hardware and software sides of engineering. When I found out that Penn offered a Computer Engineering major, I knew it was perfect for me and it was something I wanted to pursue.
Being in the program made me realize how well this major combines EE and CS courses and allows for someone to become well-learned in both fields. People come up to me all the time and ask me why I decided to pick such a hard field to major in; I tell them it’s hard but also really rewarding at the same time, and that makes all the blood, sweat, and tears worth it.
I looked long and hard at both electrical engineering and computer science trying to fit myself into one of the two bins—was I a computer scientist or an electrical engineer? What did I want to learn?
To me, computer science and electrical engineering are each a single side of a two-sided coin. There’s a yin-yang, ebb-and-flow quality to the two fields that I believe is best combined in computer engineering. I satiate my desire for circuit theory, digital design, and true hardware knowledge without distancing myself from the expansive, powerfully creative, theoretical and practical benefits of software. I was looking for a program that completely encompassed the computer, and I found it at Penn in the CMPE program.
I have always been fascinated by engineering, but it was the concept of wearable devices that drew me to CMPE. I want to understand how software and hardware interact – how the code controls the device, how different sensors and pieces of hardware can be used to collect data, how the hardware limits what the software can accomplish, and plenty more.
For me, CMPE is a way to understand these interactions and get a comprehensive idea of technology. Furthermore, my technology fascinations are all in the context of an entrepreneurial passion, and the ability to study Economics/Entrepreneurship at Wharton in parallel with CMPE makes Penn unmatched.
By the Numbers
Our faculty members are dedicated to building up the next generation of engineers. In addition to being incredible mentors, they’re leading experts and researchers in their fields.
You know how to program, but do you know how computers really work? How do millions of transistors come together to form a complete computing system? This bottom-up course begins with transistors and simple computer hardware structures, continues with low-level programming using primitive machine instructions, and finishes with an introduction to the C programming language. This course is a broad introduction to all aspects of computer systems architecture.
An embedded system is the product of a marriage between hardware and software. Embedded systems have become ubiquitous in the modern world – from simple temperature-controlled kettles to intricate smartwatches with many functions squeezed into a tiny package to complex rovers for space exploration. This course introduces the theory and practice of developing embedded systems by exploring modern microcontroller architectures. It culminates in a final project where students have the opportunity to synthesize and apply their knowledge in a project of their design.
In this course, we plan to further develop the model of a computer to a model that includes handling multiple programs (and multiple operating systems) running at the same time. A big component of this is seeing how shared resources are allocated and protected across programs. More directly speaking, we plan to go over the following topics: System Calls, Process Management, Virtual Memory Management, Threads, Scheduling, File Systems, Device Drivers, Synchronization, Deadlocks, and Virtualization.
Motivation, design, programming, optimization, and use of modern System-on-a-Chip (SoC) architectures. Hands-on coverage of the breadth of computer engineering within the context of SoC platforms from gates to application software, including on-chip memories and communication networks, I/O interfacing, RTL design of accelerators, processors, concurrency, firmware and OS/infrastructure software. Formulating parallel decompositions, hardware and software solutions, hardware/software trade offs, and hardware/software codesign.