This class examines the underlying architectures, resources, tools, and design flow steps for CPLD and FPGA programmable devices. An example design is used to teach the design methods for capturing, implementing, simulating, and debugging. A summarized list of best practice design techniques for CPLD and FPGA devices is provided.