4.2. The Impulse C Programming Model
Impulse C extends standard ANSI C using C-compatible predefined library functions in support of a communicating process parallel programming model. This programming model is conceptually similar to a dataflow or communicating sequential process programming model in that it simplifies the expression of highly parallel algorithms through the use of well-defined data communication, message passing, and synchronization mechanisms. The programming model supports a wide range of applications and parallel process topologies.
In Impulse C, the programming model emphasizes the use of buffered data streams as the primary method of communication between independently synchronized processes, which are implemented as persistent (rather than being repetitively called) C subroutines. This buffering of data, which is implementing using FIFOs that are specified and configured by the application programmer, makes it possible to write parallel applications at a higher level of abstraction, without the clock cycle-by-cycle synchronization that would otherwise be required.
Impulse C is designed for streams-oriented applications, but it is also flexible enough to support alternate programming models, including the use of signals and shared memory as a method of communication between parallel, independently synchronized processes (see Figure 4-1). The programming model you select depends on the requirements of your application, but also on the architectural constraints of the selected programmable platform target.
Figure 4-1. Processes form the core of Impulse C applications.
The Impulse C library consists of minimal extensions to the C language (in the form of new datatypes and predefined function calls) that allow multiple, parallel program segments to be described, interconnected, and synchronized. An Impulse C application can be compiled by standard C development tools (such as Visual Studio or gcc) for desktop simulation or can be compiled for an FPGA target using the Impulse C compiler. The Impulse C compiler translates and optimizes Impulse C programs into appropriate lower-level representations, including VHDL hardware descriptions that can be synthesized to FPGAs, and standard C (with associated library calls) that can be compiled onto supported microprocessors through the use of widely available C cross-compilers.
The complete Impulse C environment consists of a set of libraries allowing Impulse C applications to be compiled and executed in a standard desktop compiler (for simulation and debugging purposes) as well as cross-compiler and translation tools allowing Impulse C applications to be implemented on selected programmable hardware platforms. Additional tools for application profiling and co-simulation with other environments (including links to EDA tools for hardware simulation) are provided.