- 1.1 A Quick Introduction to FPGAs
- 1.2 FPGA-Based Programmable Hardware Platforms
- 1.3 Increasing Performance While Lowering Costs
- 1.4 The Role of Tools
- 1.5 The FPGA as an Embedded Software Platform
- 1.6 The Importance of a Programming Abstraction
- 1.7 When Is C Language Appropriate for FPGA Design?
- 1.8 How to Use This Book
1.4 The Role of Tools
Software development tools, whether intended for deeply embedded systems or for enterprise applications, add value and improve the results of the application development process in two fundamental ways. First, a good set of tools provides an appropriate and easily understood abstraction of a target platform (whether an embedded processor, a desktop PC, or a supercomputer). A good abstraction of the platform allows software developers to create, test, and debug relatively portable applications while encouraging them to use programming methods that will result in the highest practical performance in the resulting end product.
The second fundamental value that tools provide is in the mechanical process of converting an application from its original high-level description (whether written in C or Java, as a dataflow diagram or in some other representation) into an optimized low-level equivalent that can be implemented—loaded and executed—on the target platform.
In an ideal tool flow, the specific steps of this process would be of no concern to the programmer; the application would simply operate at its highest possible efficiency through the magic of automated tools. In practice this is rarely the case: any programmer seeking high performance must have at least a rudimentary understanding of how the optimization, code generation, and mapping process works, and must exert some level of control over the process either by adjusting the flow (specifying compiler options, for example) or by revisiting the original application and optimizing at the algorithm level, or both.
An Emphasis on Software-Based Methods
To fulfill the dual role of tools just described, emerging tools for automated hardware generation are focusing both on the automatic compilation/optimization problem and on delivering programming abstractions, or programming models, that make sense for the emerging classes of FPGA-based programmable platforms. All of these emerging tools focus on creating asoftware-oriented design experience. Software-oriented design tools are appropriate because
Software provides a higher level of abstraction than traditional RTL design, thus helping to manage the growing complexity of platform-based systems.
Algorithms are often specified, tested, and verified as software, so asoftware-oriented design environment requires fewer manual (and error-prone) translations.
Microprocessors that inherently run software have become part of virtually every modern system. With emerging technologies enabling the ability to directly compile software into hardware implementations, software is becoming the lingua franca of system design.
Software-oriented programming, simulation, and debugging tools that provide appropriate abstractions of FPGA-based programmable platforms allow software and system designers to begin application development, experiment with alternative algorithms, and make critical design decisions without the need for specific hardware knowledge. This is of particular importance during design prototyping. As illustrated in Figures 1-2 and 1-3, the traditional hardware and software design process can be improved by introducingsoftware-to-hardware design methods and tools. It is important to realize, however, that doing so will almost certainly not eliminate the need for hardware engineering skills. In fact, it is highly unlikely that a complete and well-optimized hardware/software application can be created using only software knowledge. On the plus side, it is certainly true that working prototypes can be more quickly generated using hardware and software design skills in combination with newly emerging tools for software-to-hardware compilation.
Figure 1-2. In a traditional hardware/software development process, hardware design may represent a significant bottleneck.