Microprocessors and microcomputers are central components in an ever-increasing number of consumer, industrial, and scientific products. This course extends the experimental design methodology developed in ENGS 50 to state-of-the-art System-on-Chip (SoC) architectures and explores the principles behind advanced embedded systems. SoC devices are highly-integrated components that combine high-performance multi-core processors, with Field Programmable Gate Array (FPGA), and a broad selection of industry standard peripheral interfaces -- all within a single chip. Students are introduced to concepts of event-driven finites state machines, peripheral interfacing via the processor and the FPGA fabric, and advanced hardware-software co-design tools that speed the design process. The course is based on a sequence of laboratory projects that incorporate SoC programming practices and debugging strategies, interrupt handling, FPGA and bus interfaces, and attached peripheral devices.