Chapter 4. An Introduction to Impulse C
The programming examples presented in the remainder of this book are written using Impulse C, a function library and related compiler and debugging tools provided by Impulse Accelerated Technologies. These libraries and tools are compatible with standard ANSI C and with standard C development tools such as Microsoft Visual Studio and gcc.
Impulse C supports the development of highly parallel, mixed hardware/software algorithms and applications using the communicating process programming model described in the preceding chapter. The features of Impulse C for expressing parallelism at a system level are similar to features found in other C-based languages for hardware and mixed hardware/software design, including Celoxica's Handel-C and SystemC. This means that the concepts we will describe in this and subsequent chapters are applicable to different C-based FPGA design environments and are in fact useful even if you are developing FPGA applications using some other method of design.
In the preface to this book we stated that C language programming is not a replacement for proven methods of hardware design using hardware description languages. Impulse C can be used to describe a wide variety of functions that are appropriate for compiling to FPGA hardware, but it is not intended for describing low-level hardware structures. Nor is it intended for converting large, monolithic C applications, which typically consist of many C subroutines that are invoked via remote procedure calls.
The Impulse C tools include a software-to-hardware compiler that converts individual Impulse C processes to functionally equivalent hardware descriptions and that generates the necessary process-to-process interface logic. While this C-to-hardware compilation is an enormous time-saver, it is still up to you, as the application developer, to make use of the tools, the Impulse C libraries, and an appropriate multiprocess programming model to effectively develop applications appropriate for these new categories of programmable hardware platforms. In the examples and tutorials included in this and later chapters, we'll show you how.