At Coastal Carolina, we have deeply integrated Field-Programmable Gate Array (FPGA) systems into several different courses throughout our curriculum. We feel that using these devices is beneficial both in terms of leveraging prior student experience with them, as well as providing a flexible, yet straightforward hardware platform. We are currently in the process of investigating and integrating how to better use FPGA devices in an undergraduate computer science program.

SIGCSE 2012 Workshop #10: 29-FEB-2012, 7:00 PM - 10:00 PM, Raleigh, NC
Introduction to Using FPGAs in the Computer Science Curriculum

One of the challenges in modern curriculum design is balancing between breadth and depth of topics while simultaneously reinforcing the interconnections among topics in the field. To address these challenges, faculty are often forced to approximate real-world systems, sometimes at the expense of any hands-on experience. We have integrated field-programming gate array (FPGA) systems first used in our hardware-based courses into several higher-level systems and applications courses. This allows us to leverage student familiarity with a hands-on, flexible hardware platform and also strengthen the relationships between different subfields within computer science. In this workshop, we present participants with guided hands-on activities for making use of FPGAs in common computer science courses such as digital logic design, computer organization and assembly programming, and compiler construction. Laptop required to run software and demos; however, if the participant wishes to work with a partner or simply observe, the laptop is not necessary.

The workshop proposal containing a tentative adgenda can be found here. For more information about our experiences incorporating FPGAs in the classroom, please feel free to read more about this below. Looking forward to seeing you in Raleigh!

Currently, we have a number of Altera DE2 FPGA Development kits which students use in several different classes:

Computer Organization: CSCI 210

CSCI 210 is a sophomore-level course that primarily deals with addressing three broad ly defined focus areas. Initially, we introduce both combinational and sequential logic design techniques that are central in understanding the basic structures of a CPU. Next, we discuss the fundamental building blocks of a computer system and how they interact in order to successfully execute a program. Finally, we provide an advanced introduction to assembly programming. Throughout this course, we make use of the Altera DE2 FPGA Development kits as the primary vehicle for illustrating these three focus areas. Concepts covered in lecture are reinforced through extensive hand-on experiential learning activities in the laboratory environment.

An article that documents the initial integration of FPGAs can be found here.

Computer Architecture: CSCI 310

CSCI 310 is a junior-level course that acts as a continuation of CSCI 210 by providing substantial depth to those concepts previously covered. Additionally, in this course we cover advanced concepts associated with CPU implementation and memory subsystems by focusing on the impact that design choices have on the overall performance of the computing platform. As with CSCI 210, many concepts discussed in lecture are reinforced through projects carried out on the Altera DE2 FPGA platforms.

An article that documents the initial integration of FPGAs can be found here.

Compiler Design and Implementation: CSCI 450

CSCI 450 is a senior-level course in which students implement a complete compiler for an ML-derivative language. The target for the compiler project is the NIOS II soft-processor CPU which is instantiated on the Altera DE2 FPGA system. Students are required to implement the major phases of a compiler: lexical analysis (scanning), syntactic analysis (parsing), semantic analysis, parse-tree to IR translation, and instruction selection.

The students must accomodate the FPGA architecture when in two parts. First, when calculating activation records and implementing the NIOS calling conventions during the translation from a syntax tree to an intermediate representation tree. Second, students must also identify and emit the appropriate assembly statements during instruction selection.

An article that documents the initial integration of FPGAs into CSCI 450 can be found here.

Image Processing: CSCI 445
We are currently supporting the use of FPGA systems which have been outfitted with camera and LCD displays for use in our new image processing course. An FPGA system can be used as a stripped-down computing device useful for exploring the efficient implementation of image processing algorithms. Additionally, MATLAB and Simulink permit the compilation of complex image processing algorithms directly to the FPGA hardware.