Spring 2019

I will be teaching the following two classes at Tufts in Spring 2019. If you’re a student considering these classes, feel free to contact me with any questions or concerns you have.

ES 4 — Introduction to digital logic circuits

Today you can find a microprocessor in almost anything electronic, and yet even those of us who can program them often have very little understanding of their inner workings. In ES 4, we will study microprocessors  —  and digital electronics more generally  —  from the ground up. From your past courses, you know how computers work at the physical level (voltages and currents) and at the application level (C and other languages); the objective of this course is to connect the dots between the two.

To do this, we begin with the basics of manipulating zeros and ones with circuitry, and start building combinational circuits, which produce outputs based on some mathematical combination of their inputs. Then we make a major turn and explore sequential circuits, which can store information or step through a sequence of states. With these building blocks in hand, we will take a brief look at the ARM instruction set (which powers your cell phone and a few billion other devices), and learn how to build circuits which can actually interpret and execute software instructions.

EE 201 — Fundamentals of computer systems and engineering

This course provides a fast-paced introduction to digital systems and computer architecture for graduate students whose undergraduate background did not include this material. We start with the basics of ones and zeros, then move quickly to more complex digital systems and ultimately implement a fully-functional microprocessor using VHDL on an FPGA. Along the way, we explore instruction set architectures and assembly programming, memory and caches, operating systems, and various techniques for interfacing computers to sensors, other computers, and the “real world”.

Fall 2018

EE 193 — Imaging systems: From photons to bits and back

Cameras and displays may seem straightforward, but it takes an amazing amount of engineering to go from light striking a camera lens to an image on a screen. We begin this journey by studying the fascinating abilities (and surprising inabilities) of the human visual system and the fundamentals of light and color. Then we enter the lens of a camera and travel down the image processing pipeline, discussing how pixels are created, processed, and compressed. Finally, we discuss systems for transmitting and displaying images on screens of all kinds. Based on this foundation, we conclude with a survey of cutting edge topics in imaging, including computational cameras, image forensics, and virtual reality.

EE 200 — A Machine-Centric Approach to Programming, Data Structures and Algorithms

Programming in C and C++ with coverage of data structures (linked lists, binary trees, hash tables, graphs), abstract data types (stacks, queues, maps, sets) and algorithms (sorting, graph search, minimal spanning tree). Efficiency of these structures and algorithms is compared via Big-O analysis. Brief coverage of concurrent (multi-threaded) programming. Object-oriented design: inheritance, templates and virtual methods. Embedded, high-performance and close-to-hardware applications. Defensive coding and use of standard UNIX development tools.

At Stanford

I helped to create and teach ENGR 40M, Stanford’s new introductory electrical engineering class primarily for non-majors. We broke from the traditional linear circuits pedagogy and arranged the course around a set of four lab projects where students get to build something fun and (maybe) useful: a solar-powered cell phone charger, an electromechanical “useless box”, an LED cube, and an electrocardiograph.