UVM中DPI用法简介

为了方便与C、C++等语言的交互,uvm中引入了DPI接口,自定义的函数需要写函数主体,然后再inport后声明和使用,验证环境中便可以像调用system verilog中的函数一样使用这些函数。
而且,对于C语言中内置的函数,不需要写函数主体,直接声明使用.
1.自定义的函数主体;需要注意的是导入不同c函数需要加入对应的.h文件例如svdpi.h、string.h
   #include 
  void mul_test(
           svBitVecVal *out_data,
   const    svBitVecVal *in_data)
{
       *out_data = *in_data*2;
}
2.import声明
在import的时候需要函数的主体转化为system verilog可以识别的函数,如数据的类型:double ->real,svBitVecVal->bit;在转换的时候,要确保数据类型的一致性,否则,可能会导致函数结果与预期不一致;
  import "DPI-C" function void mul_test(
      output bit [7:0] out_data,
     input  bit [7:0] in_data
 );
   import "DPI-C" function real sin(input real in_data);

3.调用使用
initial begin
   tan_data = 0.5;
   o_tan_data = sin(tan_data);
  $display("tan_data is %0f,o_tan_data is%0f",tan_data,o_tan_data);
  in_data = $urandom_range(8'h5,8'hff);
  mul_test(out_data,in_data);
  $display("in_data is 0x%0h,out_data is 0x%0h",in_data,out_data);
4.执行效果
   tan_data is 0.500000,o_tan_data is 0.479426
   in_data is 0x49,out_data is 0x92
   5.C与system verilog数据类型的对应关系
   SystemVerilog                         C(输入)                         C(输出) 
 byte                                    char                            char*     
short int                             short int                        short int*              
  int                                      int                                int* 
longint                             long long int                    long int* 
 real                                  double                            double*
string                              const char*                       char**
string[N]                         const char**                     char**
  bit                            svBit/unsigned char       svBit*/unsigned char  
logic/reg                     svLogic/unsigned char   svLogic*/unsigned char*  
bit[N:0]                      const svBitVecVal*              svBitVecVal*   
reg[N:0]                      const svLogicVecVal*          svLogicVecVal*   
open array[]             const svOpenArrayHandle    svOpenArrayHandle
 chandle                              const void*                    void*

你可能感兴趣的:(UVM,DPI)