This is the landing page for the “courseware” section of the site.

I’ve had the pleasure of teaching several undergraduate and graduate courses. This part of the site contains the raw material for a few of those courses. Students and instructors are invited to dive in, browse and borrow.

The first set of material is from my undergraduate data structures course, which I taught at Tufts University. It covers many of the traditional ACM CS2 topics while providing a basic grounding in software engineering and algorithms/complexity.

The second course is about computer design. I taught this course for several years at Case Western Reserve University to junior-level computer engineering and science students. Although a few of the examples and figures could use an update, the basic principles and approach are still technically sound. The course emphasizes design in the large and the importance of testing.

The VLSI systems course is an introduction to the design and implementation of digital systems in full custom CMOS technology. I taught this course at Case Western Reserve University and Princeton. Like the computer design course, students learn to describe and test a digital system through successive refinement. They start with a behavioral model and then map it to a register transfer level design (datapath plus controller). The register transfer level system is mapped to a logic-level, switching transistor design and so forth. Ultimately, students produce a layout. Student designs were bundled and fabricated through the MOSIS fabrication service.

Here are some special topics in computer architecture: RISC vs. CISC, micropipelines, non-von Neumann architecture and languages, data-driven dataflow architecture, functional programming, etc. This material could be used as part of an undergraduate or graduate seminar.