Instructor: Prof. Ryan Kastner
Time: Tuesday & Thursday, 11-12:20pm
In-person Location: Center 217A
Office Hours: After class or by appointment
Class Description: This class focuses on creating embedded system prototypes using a programmable system-on-chip (SoC). The class is graded primarily based on the performance in projects that are spread across the class. The projects require the student to implement a hardware-accelerated core and integrate it into a prototype SoC. Students understand parallel programming concepts, learn how to use modern high-level synthesis tools, and develop hardware-accelerated compute systems.
- Book: Parallel Programming for FPGAs
- Projects and Labs
- Board: Pynq Z2
- Xilinx Software Installation
- Projects: 60%
- Final Project: 40%
Required Knowledge: This class is part of the 237 “Embedded Systems” series. This class stands on its own and does not require knowledge from any of the previous 237 classes. Having some understanding of basic digital signal processing (sampling, filtering, transforms) is useful but not required. Equally helpful is having taken classes in computer architecture (and in particular understanding pipelining, memory hierarchy, and digital design). Again, it will be useful but not required as the class is taught in a way that is self-contained. Do note that most students have a good background in at least one of these areas (DSP or computer architecture); if you do not know either, then you will have to work harder.
Recommended Preparation for Those Without Required Knowledge: You can start by reading the book! The class is built around this book (and vice-versa) and the projects are related to the chapters in that book. For those who do not know DSP, there are countless resources for this. You can learn the basics of finite impulse response (FIR) filters, discrete Fourier transform, and fast Fourier transforms. These form some of the core computations for the projects. Each of these topics will be described in class, but you would be wise to have at least a decent understanding of how these work. The same is true for computer architecture; there are countless resources for this. You generally want to understand the components of a data path (control flow, data flow) and the tradeoffs in memory design (number of ports, throughput, hierarchy, etc.). We will primarily be using the Xilinx HLS design tool. There are a number of tutorials on this tool at the Xilinx website. If you want to start using the tool early, contact the instructor.