FPGA-Based Hardware-Software Co-Development


register

Course Description

Engineering innovation and creativity has been and will always play pivotal role in the fast-pacing
high-tech economy. Among the engineering disciplines, hardware design and software design
are two of the most interrelated areas. Hardware engineers design new electronic circuits while
software engineers develop device drivers and computer user interfaces. However, hardware and software engineers often do not understand benefits and limitations of their counterparts. This often leads to poor collaboration which may result in project delay as well as failure to meet performance goals. It is thus highly beneficial for hardware design engineers to acquire crucial programming skills such as writing low-level driver for device interface and graphical Windows-based user interface.

After completing this practical workshop, you will have the necessary skills to:

• Design hardware using FPGA (Field Programmable Gate Array)
• Develop and test FPGA design using special technique called Hardware-in-the-Loop
• Quickly and easily develop Windows-based programs using C# programming language
• Add plug-in into C# program to perform advanced plotting functions
• Write Windows-based user interface program that performs low-level interface to your FPGA design through USB
• Develop your own custom device driver by writing .DLL (Dynamic Link Library)

Duration
2 days

Who Should Attend
Digital hardware designers who have basic FPGA design knowledge and want to a) learn about system-level FPGA design and testing techniques, b) learn more about Xilinx® design tools, and c) learn essential PC programming skills needed to complement and enhance their hardware design

Prerequisites
- Basic FPGA design knowledge,
- Basic programming skills, C or C++, will be useful but not compulsory
- Some basic knowledge of MATLAB will be useful but not compulsory

Course Outline

Day 1
• Introduction to FPGA and Xilinx® FPGA design tools
• Introduction to MATLAB® and Simulink®
• Xilinx System Generator® for FPGA design
• FPGA design using Hardware-in-the-Loop
• Quick introduction to C++ and C# programming
languages

Day 2
• Overview of Microsoft Visual C# Express 2008®
• Plotting functions in C# using Mitov Plotlab® plug-in
• How to access USB interface with C# program through .DLL calls
• Develop your own FPGA-based USB oscilloscope

Lab Descriptions

• Lab 1: Overview of Xilinx ISE® 10.1 FPGA design tools – a) HDL design flow, b) using testbench, c) timing constraints, d) using implementation options, and e) in-circuit debugging using ChipScope® Pro
• Lab 2: MATLAB Simulink - a) use Simulink tools to create a simple design, b) create a
subsystem and simulate using Simulink
• Lab 3: Xilinx System Generator - a) Xilinx System Generator approach to FPGA design, b) FPGA simulation using System Generator, c) generate Xilinx FPGA bitstream, d) Create a subsystem, and e) DSP functions using System Generator
• Lab 4: DSP Design Tool and Hardware-inthe- Loop – a) using FIR compiler to generate filter coefficients, b) using System Generator tools to generate filter coefficients, and c) testing the filter design using Hardware-in-the- Loop technique
• Lab 5: “Hello, World” in C# - use Microsoft C# 2008 Express to write a simple Windows program
• Lab 6: Stopwatch program - use timer as a tool for controlling the program flow in C#
• Lab 7: Mitov PlotLab Plug-in for C# - a) using Mitov PlotLab plug-in in C# to perform
plotting, and b) array in c#
• Lab 8: USB I/O Interface in C# - a) add DLL module into C# program, and how to call its library functions, b) calling FTDI DLL driver to open and close the USB device, and c)
perform simple reading and writing real world data (port) through USB
• Lab 9: Create your own USB Oscilloscope – a) develop custom DLL device driver, b) add oscilloscope FPGA design, and c) customize the whole program to complete USB
oscilloscope