Provides a foundation in programming using an object-oriented programming language. Topics include: classes and objects, inheritance, exception handling, basic data structures (lists, tree, etc.), big-O complexity analysis, and testing and debugging. The laboratory assignments emphasize the use of object-oriented programming constructs in the design and implementation of reasonably large programs.
Field Programmable Gate Arrays are computer chips whose function and wiring can be re-programmed to suit different purposes. FPGAs enable .reconfigurable computing. wherein one can create a custom computing engine with higher efficiency than a conventional software-programmed device, without the expense and difficulty of manufacturing a custom chip. As the development costs of custom (ASIC) computer chips have exploded and the capabilities of FPGAs have increased, FPGAs have become an ever more popular choice to implement complex systems. This course will explore both the use of FPGAs and the design of the FPGA architecture itself.
Through hands-on work students will compare the efficiency and programming effort of FPGA-based signal processing with a DSP processor implementation. We will analyze how well various classes of applications will map to FPGAs vs. alternative highly parallel solutions such as DSP processors and GPUs.
We will also study the architecture of FPGAs: what are the building blocks of FPGAs, how are they interconnected, and what makes a good vs. a bad architecture? Students will learn how to model the area and delay of key circuitry such as RAM blocks and programmable routing, how the ability of Computer-Aided Design (CAD) tools to target different structures affects FPGA architecture, and how to experimentally evaluate new FPGAs. Finally, we will discuss emerging architectures and possible future directions for FPGA evolution.
Fundamentals of computer systems, including the structure of computers, assembly language proramming, I/O, DMA, and interrupts.