Board vendors usually deliver the board with VHDL structures already in place within the FPGA to implement a basic set of operations for control, status, data formatting, triggering, gating and channel selection. Customers who try to insert their own algorithm in the midst of this VHDL code run a very high risk of "breaking" the standard functions and interfaces.
A far better solution is to use an FPGA design kit. Here, the board vendor constructs the VHDL modules for the standard factory functions as discrete building blocks, each with well-defined signal-naming conventions, fully commented code and straightforward interconnections.
Even more significant is a special VHDL module called the user block. The user block is located directly in the data path to the main system interface, usually a bus or data port. In the standard factory configuration, the user block has its input and output pins tied together with a "straight wire," so it is basically a transparent data pipe.
The customer gets a safe, flexible work space situated strategically in the center of a powerful hardware environment. If customers design their own algorithm within the definition of the user block, they can recompile the FPGA project with all of the other VHDL modules intact.
Board support packages
Virtually all open-architecture board-level products strive to support a wide range of applications. As a result, they are made to be as flexible as possible through programmable configurations.
In the early days, vendors presented customers with memory maps for such resources as registers for control and status or the address range for memory resources. As devices on boards became increasingly complex, a few insightful board vendors developed successful strategies to handle the problem.
The solution is to abstract low-level bits and control words for the hardware devices using a consistent naming strategy for all of those programmable variables. The variables are then arranged in logical groups and defined within C-language data structures that can be easily manipulated.
High-level, C-callable library functions referencing those variables and data structures handle the most common operations. The functions are organized in several hierarchical layers, with the upper-level functions calling lower-level functions. At the bottom layers, assembly code may sometimes be necessary.
Full source code should be included for all functions at every level. If the high-level functions fall short of a particular mode of operation or if the function is too slow, the system engineer can drill to the level needed to resolve the problem.
Rodger Hosking (email@example.com), co-founder and vice president of Pentek Inc. (Saddle River, N.J.).