This application note describes the basics of utilizing SystemVerilog DPI-C to interface with the C language in Riviera-PRO.
SystemVerilog’s DPI-C allows interfacing with the C programming language. This interfacing capability allows the use of C language functions, including those in existing C libraries, to be used in SystemVerilog testbenches.
To use a C function in a SystemVerilog file, it needs to be imported:
import “DPI-C” function <function_type> function_name(arguments);
Once imported, a call to this function has the same syntax and usage as a call to a SystemVerilog function.
To use a SystemVerilog function/task in your C code, it needs to be exported:
export “DPI-C” function function_name; //function declaration function void function_name(arguments); //function body endtask
The "svdpi.h" file (provided with each Riviera-PRO installation: <installation_path>/interfaces/include/svdpi.h) contains constant definitions, structure definitions, and routine declarations used by the SystemVerilog DPI and must be included in the C files.
Once all desired C or SystemVerilog functions have been appropriately imported or exported, the files needs to be compiled. Riviera-PRO requires explicit switches to be added to the compilation commands for both types of files as shown in Figure 1.
When compiling SystemVerilog files, the -dpilib switch needs to be introduced to the alog command.
When compiling C files, the -dpi switch needs to be included.
If using the Windows operating system, -sv_link <library_name> must also be included.
Finally, the asim command requires -sv_lib <DPI library> to be utilized in order for any imported C functions to be found by the simulator engine.
Figure 1: The strict DPI flow for Riviera-PRO
Note: If using the GUI, these switches can be set in the design options windows.
Figure 2: Opening the design options/properties
Figure 3: Enabling DPI strict mode
Figure 4: Setting the -dpi switch for ccomp
Figure 5: Linking the simulation library when using a Windows operating system
Figure 6: Setting the -sv_lib switch and pointing to the DPI library for the asim command
Riviera-PRO contains a basic DPI example design for reference in its installation directory (<installation_path>/examples/interfaces/dpi). For more details regarding the use of SystemVerilog DPI-C with Riviera-PRO, more information can be found in the Riviera-PRO user guide (Help -> Product Help -> Riviera-PRO Interfaces -> SystemVerilog DPI).