From long time , Users have needes a simple way of communication to foreign languages from verilog. VPI and PLI are not easy interfaces to Use . Users need detailed knowledge of PLI and VPI even for a simple program. Most of the time, users do not need the sophisticated capabilities of VPI and PLI. DPI also permits C/C++ code to wait for Verilog events and C/C++ tasks and functions can be disabledfrom SystemVerilog.
SystemVerilog introduces a new foreign language interface called the Direct Programming Interface (DPI). The DPI provides a very simple, straightforward, and efficient way to connect SystemVerilog and foreign language code unlike PLI or VPI.
DPI developed based on the donations from Synopsys "DirectC interface".
DPI consists of two separate layers: the SystemVerilog layer and a foreign language layer. Both sides of DPI-C are fully isolated. Which programming language is actually used as the foreign language is transparent and irrelevant for the System-Verilog side of this interface. Neither the SystemVerilog compiler nor the foreign language compiler is required to analyze the source code in the others language. Different programming languages can be used and supported with the same intact SystemVerilog layer.
DPI-C follows the principle of a black box: the specification and the implementation of a component are clearly separated, and the actual implementation is transparent to the rest of the system. Therefore, the actual programming language of the implementation is also transparent, although this standard defines only C linkage semantics. The separation between SystemVerilog code and the foreign language is based on using functions as the natural encapsulation unit in SystemVerilog.