SystemVerilog DPI Tutorial

Previous: Import functions | Next: Pure and context functions

Import declarations

Any imported C function must have a corresponding import declaration. In the previous example, for the imported function my_function(), an import declaration similar to what is shown below is required.

   import "DPI" function integer my_function();

Note the keywords import "DPI" which must preceed an import declaration. Also note that the return type (integer) of my_function() is also specified in the import declaration.

For a task, a similar import declaration will look like:

   import "DPI" task my_task();

An import declaration can occur anywhere where a SystemVerilog task or function definition is allowed.

Result of an imported function

DPI restricts the return type for an imported function to the following.

  • void, byte, shortint, int, logint, real, shortreal, chandle and string
  • packed bit arrays of upto 32 bits or equivalent.
  • scalara values of type bit and logic.

Since a task does not have a return value, a C function corresponding to an imported task must return a void type.

Arguments of an imported function

Similar to a native Verilog or SystemVerilog function, an imported function can take formal arguments. In the following example, we use standard C library function strlen() (as defined in string.h) as an imported function in SystemVerilog.

An important point to note in this example is the use of the identifier s in the formal argument. You will recall this is different from C where an argument type is sufficient for a prototype decalaration. The identifier name in a DPI import declaration can be arbitrary and does not need to match the actual C function argument.

   import "DPI" function integer strlen(string s);

Moreover, a formal argument to an imported function optionally can have one of the directional qualifires input, output or inout. To illustrate this with my_function2() that we have already seen:

   import "DPI" function integer my_function2(input logic [31:0] inlogic);

Few self-explanatory rules for formal arguments with with directional qualifiers:

  • An imported function can not change the value of an input argument.
  • Similarly, an imported function can not assume an initial value of an output argument without actually calculating it.

Previous: Import functions | Next: Pure and context functions


Verification Management
Join Verification Management Group

Book of the Month

From Our Press