|
Editor's Note: There are a lot of folks who are interested in accelerating their algorithms/programs written in C or C++. Many of these guys and gals are aware that FPGA-based accelerators are available, but they don't know how you actually make these little rascals perform their magic.
In order to address this, earlier this year I contacted a number of the main players in this arena and asked each of them if they would be interested in penning an article that explained the process of:
- Writing a new application (or modifying a legacy application) in C or C++ in a form suitable for acceleration.
- Partitioning the application such that some portions will be compiled for use on the general-purpose processor and other portions will be implemented in the FPGA.
- Actually getting those portions of the application that are to be accelerated into the FPGA by one means or another).
- Interfacing the main application running on the general-purpose processor with those portions running on the FPGA.
- Analyzing/profiling (debugging?) the new version of the program, part of which is running on the FPGA.
Some of the companies I contacted declined because they were too busy (which is a good place for them to be), but three stepped up to the plate:
– Part 1: DRC Computer Corporation
– Part 2: SRC Computers
– Part 3: Impulse Accelerated Technologies
Now, these initial three offerings are joined by a follow-on article from nallatech.
Introduction
Steve Casselman of DRC, Dan Poznanovic of SRC, and David Pellerin and his colleagues at Impulse C have all provided excellent articles in this series. They describe well the issues facing anyone who wishes to develop an application using reconfigurable computers. The aim of this article is to build on what Steve, Dan and Impulse have already said. Firstly, details will be given of Nallatech's hardware and software products for reconfigurable computing. Secondly, some broader points about programming reconfigurable computers will be made, looking at the following topics:
- High-Level Languages for FPGAs
- How should I write or modify my software application for FPGA acceleration?
- How should I partition my application between microprocessors and FPGAs?
- What are the basic steps involved in implementing an algorithm using a C-to-FPGA language?
- What problems do new users of reconfigurable computers typically face?
Reconfigurable computing platforms
The approach to programming reconfigurable computers taken by Nallatech does not greatly differ from that taken by SRC. Readers should find it reassuring that – in general – the various reconfigurable computing vendors are in agreement about how to approach reconfigurable computing with FPGAs. There is agreement that FPGA computing requires high-level languages to speed development and ease transition to the technology. A standards body now exists, called OpenFPGA (www.OpenFPGA.org), where vendors are collaborating to establish standards. These standards aim to make life easier for users, helping the community of reconfigurable computing users to flourish.
Recognizing the importance of high-level abstraction from the complexities of FPGA design, Nallatech has developed its own high-level compiler to target FPGA computing platforms. DIME-C is a parallelizing C-to-FPGA compiler based on a subset of ANSI C. This allows DIME-C software code to be compiled in a software environment, and simplifies the porting of codes originating on microprocessors. Fig 1(a) below shows the DIME-C environment with some example code, while Fig 1(b) shows the visualization output that helps users find parallelism in their algorithms.

1(a). DIME-C environment with example code.
(Click this image to view a larger, more detailed version)

1(b). DIME-C visualization of parallelism and pipelining.
(Click this image to view a larger, more detailed version)
Nallatech has a wide range of FPGA hardware products. Nallatech's most established set of products is the DIME-II range. The DIME-II range has at its heart motherboards in a variety of form factors, including PCI, PCI-X, cPCI, VME and PCI-104. These motherboards typically have a high-density FPGA for user use, some memory, and between one and four module sites.
A DIME-II module might hold one or two high-density FPGAs, SRAM or DRAM memory banks, I/O such as ADCs and DACs, or any combination of these elements. Using these boards and modules, users can build themselves platforms that have the precise mix of FPGA processing, memory and I/O that their problem requires. Fig 2 shows a BenERA motherboard, in cPCI form factor with four module sites. Each site hosts a BenADC-3G, a module that couples a Xilinx Virtex-4 FPGA to a dual-channel analog-to-digital converter capable of 6 billion samples a second.

2. BenERA motherboard fully loaded with four BenADC-3G modules.
Nallatech has developed DIMEtalk, which is an application builder that allows users to unite their FPGA platform with their FPGA-implemented algorithmic units and their chosen microprocessor-based host. Fig 3 shows an example of DIMEtalk being used to integrate a DIME-C functional unit and to construct a custom hardware platform.

3. The DIMEtalk platform development environment.
(Click this image to view a larger, more detailed version)
The algorithmic units can be implemented in any of the high-level languages supported by Nallatech such as Impulse C, DIME-C, Mitrion-C and System Generator. Experienced users can also add in their own custom VHDL. Referring to David Pellerin's article on programming reconfigurable computers would give readers the best understanding of how Impulse C could be used with Nallatech's platforms.
Nallatech has products tailored specifically for HPC users. The first in this line of products is the H101 FPGA Accelerator. This PCI-X card hosts a Xilinx Virtex-4 LX160 FPGA and several banks of memory (a mix of SRAM and DRAM). Users will typically develop their algorithms using one of the supported high-level compilers: DIME-C, Impulse C, or Mitrion C. Users will then map this algorithm to the FPGA card and link it to the host computer using DIMEtalk.
Nallatech's latest HPC-oriented platform is the Intel FSB-FPGA module, a product that is a collaboration between Intel, Xilinx, and Nallatech as illustrated in Fig 4.

4. Intel FSB-FPGA Module.
|