"Generic Programming Techniques for High-Performance PLD Computing Systems"John R. Humphrey

^{1}, Daniel K. Price^{2}, Michael R. Bodnar^{2}, Petersen F. Curt^{1}, and James P. Durbano^{1}

^{ 1}EM Photonics, Inc.

^{2}University of Delaware

AbstractAs PLD applications expand to include high speed computing, the number of data types required grows commensurately. Current applications of programmable devices require operations on various integer, fixed-point, and floating-point precisions, in both real and complex (

a+jb) formats. Moreover, simulating large high-precision systems costs a burdensome amount of time due to simulation of the logic of the design’s arithmetic units. In this paper, we present a method of programming in VHDL that addresses the issues that arise with the expanding number of data types and simulation times. To implement this method, we built an arithmetic infrastructure that models the concept of “generic programming.” Generic programming is found in high level software languages, such as C++, and allows the programmer to express ideas in a format independent of data types; common uses for this are data containers and searching/sorting algorithms. While VHDL does not explicitly support this sort of programming (it is contrary to device-level nature of the language), we implemented this idea through novel use of existing parameterization and subprogram features of the language.In this paper, we developed a suite of VHDL units that can perform operations on various data types: 32- and 64-bit floating-point values in both real and complex formats. The operations we developed included addition, subtraction, multiplication, accumulation, storage, and time-delay. Using the units we will present, we were able to express concepts, such as matrix-vector multiply, in a high-level HDL design without worrying about the underlying representation of the arithmetic units and their data type at the algorithmic level. Additionally, the arithmetic units can use VHDL’s built-in “real” type to simulate complex systems drastically faster, by changing a single constant at the top-level of the design. The synthesis and simulation overhead of this additional processing is negligible, making this system quite powerful for developers.