diff options
author | umarcor <unai.martinezcorral@ehu.eus> | 2021-01-17 18:16:12 +0100 |
---|---|---|
committer | tgingold <tgingold@users.noreply.github.com> | 2021-01-17 20:23:13 +0100 |
commit | 22765c93ff3dd872d0e4d8cb1c750ccaaeefb900 (patch) | |
tree | bfc16f33ae2d446bdd788d4fc765f9fcaaa6762c /src | |
parent | 5cf09791f2c14210226c0d3435e859107c1592f2 (diff) | |
download | ghdl-22765c93ff3dd872d0e4d8cb1c750ccaaeefb900.tar.gz ghdl-22765c93ff3dd872d0e4d8cb1c750ccaaeefb900.tar.bz2 ghdl-22765c93ff3dd872d0e4d8cb1c750ccaaeefb900.zip |
update 'vpi_user.h' to IEEE Std 1800-2017
Co-Authored-By: Kamyar Mohajerani <kammoh@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/grt/vpi_user.h | 461 |
1 files changed, 272 insertions, 189 deletions
diff --git a/src/grt/vpi_user.h b/src/grt/vpi_user.h index f5f169521..bc830c014 100644 --- a/src/grt/vpi_user.h +++ b/src/grt/vpi_user.h @@ -1,11 +1,11 @@ /******************************************************************************* * vpi_user.h * - * IEEE 1364-2005 Verilog HDL Programming Language Interface (PLI) + * IEEE Std 1800-2017 Programming Language Interface (PLI) * * This file contains the constant definitions, structure definitions, and - * routine declarations used by the Verilog PLI procedural interface VPI - * access routines. + * routine declarations used by the SystemVerilog Verification Procedural + * Interface (VPI) access routines. * ******************************************************************************/ @@ -19,7 +19,7 @@ #include <stdarg.h> -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -27,21 +27,43 @@ extern "C" { /*----------------------------- Portability Help -----------------------------*/ /*----------------------------------------------------------------------------*/ +/* Define size-critical types on all OS platforms. */ +#if defined (_MSC_VER) +typedef unsigned __int64 uint64_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int8 uint8_t; +typedef signed __int64 int64_t; +typedef signed __int32 int32_t; +typedef signed __int8 int8_t; +#elif defined(__MINGW32__) +#include <stdint.h> +#elif defined(__linux) || (defined(__APPLE__) && defined(__MACH__)) +#include <inttypes.h> +#else +#include <sys/types.h> +#endif + /* Sized variables */ +#ifndef SVPI_TYPES +#define SVPI_TYPES +typedef int64_t PLI_INT64; +typedef uint64_t PLI_UINT64; +#endif + #ifndef PLI_TYPES #define PLI_TYPES -typedef int PLI_INT32; -typedef unsigned int PLI_UINT32; -typedef short PLI_INT16; -typedef unsigned short PLI_UINT16; -typedef char PLI_BYTE8; -typedef unsigned char PLI_UBYTE8; +typedef int PLI_INT32; +typedef unsigned int PLI_UINT32; +typedef short PLI_INT16; +typedef unsigned short PLI_UINT16; +typedef char PLI_BYTE8; +typedef unsigned char PLI_UBYTE8; #endif -/* Use to export a symbol */ +/* Use to import a symbol */ -#if defined (_MSC_VER) +#if (defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)) #ifndef PLI_DLLISPEC #define PLI_DLLISPEC __declspec(dllimport) #define VPI_USER_DEFINED_DLLISPEC 1 @@ -52,9 +74,9 @@ typedef unsigned char PLI_UBYTE8; #endif #endif -/* Use to import a symbol */ +/* Use to export a symbol */ -#if defined (_MSC_VER) +#if (defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)) #ifndef PLI_DLLESPEC #define PLI_DLLESPEC __declspec(dllexport) #define VPI_USER_DEFINED_DLLESPEC 1 @@ -83,44 +105,45 @@ typedef unsigned char PLI_UBYTE8; /* object is defined imported by the application */ +#undef XXTERN #define XXTERN PLI_EXTERN PLI_DLLISPEC /* object is exported by the application */ +#undef EETERN #define EETERN PLI_EXTERN PLI_DLLESPEC #endif /********************************** TYPEDEFS **********************************/ -/*typedef PLI_UINT32 *vpiHandle; */ -typedef void *vpiHandle; +typedef PLI_UINT32 *vpiHandle; /******************************** OBJECT TYPES ********************************/ -#define vpiAlways 1 /* always construct */ +#define vpiAlways 1 /* always procedure */ #define vpiAssignStmt 2 /* quasi-continuous assignment */ #define vpiAssignment 3 /* procedural assignment */ #define vpiBegin 4 /* block statement */ #define vpiCase 5 /* case statement */ #define vpiCaseItem 6 /* case statement item */ -#define vpiConstant 7 /* numerical constant or literal string */ +#define vpiConstant 7 /* numerical constant or string literal */ #define vpiContAssign 8 /* continuous assignment */ #define vpiDeassign 9 /* deassignment statement */ #define vpiDefParam 10 /* defparam */ -#define vpiDelayControl 11 /* delay statement (e.g. #10) */ +#define vpiDelayControl 11 /* delay statement (e.g., #10) */ #define vpiDisable 12 /* named block disable statement */ -#define vpiEventControl 13 /* wait on event, e.g. @e */ -#define vpiEventStmt 14 /* event trigger, e.g. ->e */ +#define vpiEventControl 13 /* wait on event, e.g., @e */ +#define vpiEventStmt 14 /* event trigger, e.g., ->e */ #define vpiFor 15 /* for statement */ #define vpiForce 16 /* force statement */ #define vpiForever 17 /* forever statement */ #define vpiFork 18 /* fork-join block */ -#define vpiFuncCall 19 /* HDL function call */ -#define vpiFunction 20 /* HDL function */ +#define vpiFuncCall 19 /* function call */ +#define vpiFunction 20 /* function */ #define vpiGate 21 /* primitive gate */ #define vpiIf 22 /* if statement */ #define vpiIfElse 23 /* if-else statement */ -#define vpiInitial 24 /* initial construct */ +#define vpiInitial 24 /* initial procedure */ #define vpiIntegerVar 25 /* integer variable */ #define vpiInterModPath 26 /* intermodule wire delay */ #define vpiIterator 27 /* iterator */ @@ -155,15 +178,15 @@ typedef void *vpiHandle; #define vpiSysFuncCall 56 /* system function call */ #define vpiSysTaskCall 57 /* system task call */ #define vpiTableEntry 58 /* UDP state table entry */ -#define vpiTask 59 /* HDL task */ -#define vpiTaskCall 60 /* HDL task call */ +#define vpiTask 59 /* task */ +#define vpiTaskCall 60 /* task call */ #define vpiTchk 61 /* timing check */ #define vpiTchkTerm 62 /* terminal of timing check */ #define vpiTimeVar 63 /* time variable */ #define vpiTimeQueue 64 /* simulation event queue */ #define vpiUdp 65 /* user-defined primitive */ #define vpiUdpDefn 66 /* UDP definition */ -#define vpiUserSystf 67 /* user defined system task or function */ +#define vpiUserSystf 67 /* user-defined system task/function */ #define vpiVarSelect 68 /* variable array selection */ #define vpiWait 69 /* wait statement */ #define vpiWhile 70 /* while statement */ @@ -228,7 +251,7 @@ typedef void *vpiHandle; #define vpiModPathOut 96 /* output terminal of a module path */ #define vpiOperand 97 /* operand of expression */ #define vpiPortInst 98 /* connected port instance */ -#define vpiProcess 99 /* process in module */ +#define vpiProcess 99 /* process in module, program or interface */ #define vpiVariables 100 /* variables in module */ #define vpiUse 101 /* usage */ @@ -248,13 +271,17 @@ typedef void *vpiHandle; #define vpiOutTerm 124 /* To get to a delay device's loads. */ #define vpiPorts 125 /* Module port */ #define vpiSimNet 126 /* simulated net after collapsing */ -#define vpiTaskFunc 127 /* HDL task or function */ +#define vpiTaskFunc 127 /* task/function */ /************************ methods added with 1364-2005 ************************/ -#define vpiBaseExpr 131 /* Indexed part-select's base expression */ +#define vpiBaseExpr 131 /* Indexed part-select's base expression */ #define vpiWidthExpr 132 /* Indexed part-select's width expression */ +/************************ methods added with 1800-2009 ************************/ + +#define vpiAutomatics 136 /* Automatic variables of a frame */ + /********************************* PROPERTIES *********************************/ /************************** generic object properties *************************/ @@ -268,10 +295,10 @@ typedef void *vpiHandle; /***************************** module properties ******************************/ -#define vpiTopModule 7 /* top-level module (boolean) */ -#define vpiCellInstance 8 /* cell (boolean) */ +#define vpiTopModule 7 /* top-level module (Boolean) */ +#define vpiCellInstance 8 /* cell (Boolean) */ #define vpiDefName 9 /* module definition name */ -#define vpiProtected 10 /* source protected module (boolean) */ +#define vpiProtected 10 /* source protected module (Boolean) */ #define vpiTimeUnit 11 /* module time unit */ #define vpiTimePrecision 12 /* module time precision */ #define vpiDefNetType 13 /* default net type */ @@ -292,8 +319,8 @@ typedef void *vpiHandle; /*************************** port and net properties **************************/ -#define vpiScalar 17 /* scalar (boolean) */ -#define vpiVector 18 /* vector (boolean) */ +#define vpiScalar 17 /* scalar (Boolean) */ +#define vpiVector 18 /* vector (Boolean) */ #define vpiExplicitName 19 /* port is explicitly named */ #define vpiDirection 20 /* direction of port: */ #define vpiInput 1 /* input */ @@ -301,36 +328,36 @@ typedef void *vpiHandle; #define vpiInout 3 /* inout */ #define vpiMixedIO 4 /* mixed input-output */ #define vpiNoDirection 5 /* no direction */ -#define vpiConnByName 21 /* connected by name (boolean) */ +#define vpiConnByName 21 /* connected by name (Boolean) */ #define vpiNetType 22 /* net subtypes: */ #define vpiWire 1 /* wire net */ #define vpiWand 2 /* wire-and net */ #define vpiWor 3 /* wire-or net */ -#define vpiTri 4 /* three-state net */ +#define vpiTri 4 /* tri net */ #define vpiTri0 5 /* pull-down net */ #define vpiTri1 6 /* pull-up net */ -#define vpiTriReg 7 /* tri state reg net */ +#define vpiTriReg 7 /* three-state reg net */ #define vpiTriAnd 8 /* three-state wire-and net */ #define vpiTriOr 9 /* three-state wire-or net */ -#define vpiSupply1 10 /* supply 1 net */ -#define vpiSupply0 11 /* supply zero net */ +#define vpiSupply1 10 /* supply-1 net */ +#define vpiSupply0 11 /* supply-0 net */ #define vpiNone 12 /* no default net type (1364-2001) */ #define vpiUwire 13 /* unresolved wire net (1364-2005) */ -#define vpiExplicitScalared 23 /* explicitly scalared (boolean) */ -#define vpiExplicitVectored 24 /* explicitly vectored (boolean) */ -#define vpiExpanded 25 /* expanded vector net (boolean) */ -#define vpiImplicitDecl 26 /* implicitly declared net (boolean) */ +#define vpiExplicitScalared 23 /* explicitly scalared (Boolean) */ +#define vpiExplicitVectored 24 /* explicitly vectored (Boolean) */ +#define vpiExpanded 25 /* expanded vector net (Boolean) */ +#define vpiImplicitDecl 26 /* implicitly declared net (Boolean) */ #define vpiChargeStrength 27 /* charge decay strength of net */ -/* Defined as part of strengths section. -#define vpiLargeCharge 0x10 -#define vpiMediumCharge 0x04 -#define vpiSmallCharge 0x02 +/* Defined as part of strengths section. +#define vpiLargeCharge 0x10 +#define vpiMediumCharge 0x04 +#define vpiSmallCharge 0x02 */ -#define vpiArray 28 /* variable array (boolean) */ +#define vpiArray 28 /* variable array (Boolean) */ #define vpiPortIndex 29 /* Port index */ /************************ gate and terminal properties ************************/ @@ -338,7 +365,7 @@ typedef void *vpiHandle; #define vpiTermIndex 30 /* Index of a primitive terminal */ #define vpiStrength0 31 /* 0-strength of net or gate */ #define vpiStrength1 32 /* 1-strength of net or gate */ -#define vpiPrimType 33 /* prmitive subtypes: */ +#define vpiPrimType 33 /* primitive subtypes: */ #define vpiAndPrim 1 /* and gate */ #define vpiNandPrim 2 /* nand gate */ #define vpiNorPrim 3 /* nor gate */ @@ -413,12 +440,12 @@ typedef void *vpiHandle; #define vpiPlusOp 2 /* unary plus */ #define vpiNotOp 3 /* unary not */ #define vpiBitNegOp 4 /* bitwise negation */ -#define vpiUnaryAndOp 5 /* bitwise reduction and */ -#define vpiUnaryNandOp 6 /* bitwise reduction nand */ -#define vpiUnaryOrOp 7 /* bitwise reduction or */ -#define vpiUnaryNorOp 8 /* bitwise reduction nor */ -#define vpiUnaryXorOp 9 /* bitwise reduction xor */ -#define vpiUnaryXNorOp 10 /* bitwise reduction xnor */ +#define vpiUnaryAndOp 5 /* bitwise reduction AND */ +#define vpiUnaryNandOp 6 /* bitwise reduction NAND */ +#define vpiUnaryOrOp 7 /* bitwise reduction OR */ +#define vpiUnaryNorOp 8 /* bitwise reduction NOR */ +#define vpiUnaryXorOp 9 /* bitwise reduction XOR */ +#define vpiUnaryXNorOp 10 /* bitwise reduction XNOR */ #define vpiSubOp 11 /* binary subtraction */ #define vpiDivOp 12 /* binary division */ #define vpiModOp 13 /* binary modulus */ @@ -434,17 +461,17 @@ typedef void *vpiHandle; #define vpiRShiftOp 23 /* binary right shift */ #define vpiAddOp 24 /* binary addition */ #define vpiMultOp 25 /* binary multiplication */ -#define vpiLogAndOp 26 /* binary logical and */ -#define vpiLogOrOp 27 /* binary logical or */ -#define vpiBitAndOp 28 /* binary bitwise and */ -#define vpiBitOrOp 29 /* binary bitwise or */ -#define vpiBitXorOp 30 /* binary bitwise xor */ -#define vpiBitXNorOp 31 /* binary bitwise xnor */ +#define vpiLogAndOp 26 /* binary logical AND */ +#define vpiLogOrOp 27 /* binary logical OR */ +#define vpiBitAndOp 28 /* binary bitwise AND */ +#define vpiBitOrOp 29 /* binary bitwise OR */ +#define vpiBitXorOp 30 /* binary bitwise XOR */ +#define vpiBitXNorOp 31 /* binary bitwise XNOR */ #define vpiBitXnorOp vpiBitXNorOp /* added with 1364-2001 */ #define vpiConditionOp 32 /* ternary conditional */ #define vpiConcatOp 33 /* n-ary concatenation */ #define vpiMultiConcatOp 34 /* repeated concatenation */ -#define vpiEventOrOp 35 /* event or */ +#define vpiEventOrOp 35 /* event OR */ #define vpiNullOp 36 /* null operation */ #define vpiListOp 37 /* list of expressions */ #define vpiMinTypMaxOp 38 /* min:typ:max: delay expression */ @@ -461,18 +488,18 @@ typedef void *vpiHandle; #define vpiOctConst 4 /* octal integer */ #define vpiHexConst 5 /* hexadecimal integer */ #define vpiStringConst 6 /* string literal */ -#define vpiIntConst 7 /* HDL integer constant (1364-2001) */ - -#define vpiBlocking 41 /* blocking assignment (boolean) */ +#define vpiIntConst 7 /* integer constant (1364-2001) */ +#define vpiTimeConst 8 /* time constant */ +#define vpiBlocking 41 /* blocking assignment (Boolean) */ #define vpiCaseType 42 /* case statement subtypes: */ #define vpiCaseExact 1 /* exact match */ #define vpiCaseX 2 /* ignore X's */ #define vpiCaseZ 3 /* ignore Z's */ -#define vpiNetDeclAssign 43 /* assign part of decl (boolean) */ +#define vpiNetDeclAssign 43 /* assign part of decl (Boolean) */ /************************** task/function properties **************************/ -#define vpiFuncType 44 /* HDL function & system function type */ +#define vpiFuncType 44 /* function & system function type */ #define vpiIntFunc 1 /* returns integer */ #define vpiRealFunc 2 /* returns real */ #define vpiTimeFunc 3 /* returns time */ @@ -487,52 +514,56 @@ typedef void *vpiHandle; #define vpiSysFuncTime vpiTimeFunc #define vpiSysFuncSized vpiSizedFunc -#define vpiUserDefn 45 /*user defined system task/func(boolean)*/ -#define vpiScheduled 46 /* object still scheduled (boolean) */ +#define vpiUserDefn 45 /*user-defined system task/func(Boolean)*/ +#define vpiScheduled 46 /* object still scheduled (Boolean) */ /*********************** properties added with 1364-2001 **********************/ -#define vpiActive 49 /* reentrant task/func frame is active */ -#define vpiAutomatic 50 /* task/func obj is automatic */ -#define vpiCell 51 /* configuration cell */ -#define vpiConfig 52 /* configuration config file */ -#define vpiConstantSelect 53 /* (boolean) bit-select or part-select - indices are constant expressions */ -#define vpiDecompile 54 /* decompile the object */ -#define vpiDefAttribute 55 /* Attribute defined for the obj */ -#define vpiDelayType 56 /* delay subtype */ -#define vpiModPathDelay 1 /* module path delay */ -#define vpiInterModPathDelay 2 /* intermodule path delay */ -#define vpiMIPDelay 3 /* module input port delay */ -#define vpiIteratorType 57 /* object type of an iterator */ -#define vpiLibrary 58 /* configuration library */ -#define vpiMultiArray 59 /* Object is a multidimensional array */ -#define vpiOffset 60 /* offset from LSB */ -#define vpiResolvedNetType 61 /* net subtype after resolution, returns - same subtypes as vpiNetType */ -#define vpiSaveRestartID 62 /* unique ID for save/restart data */ -#define vpiSaveRestartLocation 63 /* name of save/restart data file */ -#define vpiValid 64 /* reentrant task/func frame is valid */ -#define vpiSigned 65 /* TRUE for vpiIODecl and any object in - the expression class if the object - has the signed attribute */ -#define vpiLocalParam 70 /* TRUE when a param is declared as a - localparam */ -#define vpiModPathHasIfNone 71 /* Mod path has an ifnone statement */ +#define vpiActive 49 /* reentrant task/func frame is active */ +#define vpiAutomatic 50 /* task/func obj is automatic */ +#define vpiCell 51 /* configuration cell */ +#define vpiConfig 52 /* configuration config file */ +#define vpiConstantSelect 53 /* (Boolean) bit-select or part-select + indices are constant expressions */ +#define vpiDecompile 54 /* decompile the object */ +#define vpiDefAttribute 55 /* Attribute defined for the obj */ +#define vpiDelayType 56 /* delay subtype */ +#define vpiModPathDelay 1 /* module path delay */ +#define vpiInterModPathDelay 2 /* intermodule path delay */ +#define vpiMIPDelay 3 /* module input port delay */ +#define vpiIteratorType 57 /* object type of an iterator */ +#define vpiLibrary 58 /* configuration library */ +#define vpiOffset 60 /* offset from LSB */ +#define vpiResolvedNetType 61 /* net subtype after resolution, returns + same subtypes as vpiNetType */ +#define vpiSaveRestartID 62 /* unique ID for save/restart data */ +#define vpiSaveRestartLocation 63 /* name of save/restart data file */ +/* vpiValid,vpiValidTrue,vpiValidFalse were deprecated in 1800-2009 */ +#define vpiValid 64 /* reentrant task/func frame or automatic + variable is valid */ +#define vpiValidFalse 0 +#define vpiValidTrue 1 +#define vpiSigned 65 /* TRUE for vpiIODecl and any object in + the expression class if the object + has the signed attribute */ +#define vpiLocalParam 70 /* TRUE when a param is declared as a + localparam */ +#define vpiModPathHasIfNone 71 /* Mod path has an ifnone statement */ /*********************** properties added with 1364-2005 **********************/ -#define vpiIndexedPartSelectType 72 /* Indexed part-select type */ -#define vpiPosIndexed 1 /* +: */ -#define vpiNegIndexed 2 /* -: */ -#define vpiIsMemory 73 /* TRUE for a one-dimensional reg array */ +#define vpiIndexedPartSelectType 72 /* Indexed part-select type */ +#define vpiPosIndexed 1 /* +: */ +#define vpiNegIndexed 2 /* -: */ +#define vpiIsMemory 73 /* TRUE for a one-dimensional reg array */ +#define vpiIsProtected 74 /* TRUE for protected design information */ /*************** vpi_control() constants (added with 1364-2001) ***************/ -#define vpiStop 66 /* execute simulator's $stop */ -#define vpiFinish 67 /* execute simulator's $finish */ -#define vpiReset 68 /* execute simulator's $reset */ -#define vpiSetInteractiveScope 69 /* set simulator's interactive scope */ +#define vpiStop 66 /* execute simulator's $stop */ +#define vpiFinish 67 /* execute simulator's $finish */ +#define vpiReset 68 /* execute simulator's $reset */ +#define vpiSetInteractiveScope 69 /* set simulator's interactive scope */ /**************************** I/O related defines *****************************/ @@ -560,8 +591,8 @@ typedef struct t_vpi_time typedef struct t_vpi_delay { - struct t_vpi_time *da; /* pointer to user allocated array of - delay values */ + struct t_vpi_time *da; /* pointer to application-allocated + array of delay values */ PLI_INT32 no_of_delays; /* number of delays */ PLI_INT32 time_type; /* [vpiScaledRealTime, vpiSimTime, vpiSuppressTime] */ @@ -580,7 +611,7 @@ typedef struct t_vpi_delay typedef struct t_vpi_vecval { /* following fields are repeated enough times to contain vector */ - PLI_INT32 aval, bval; /* bit encoding: ab: 00=0, 10=1, 11=X, 01=Z */ + PLI_UINT32 aval, bval; /* bit encoding: ab: 00=0, 10=1, 11=X, 01=Z */ } s_vpi_vecval, *p_vpi_vecval; #endif @@ -623,6 +654,24 @@ typedef struct t_vpi_value } value; } s_vpi_value, *p_vpi_value; +typedef struct t_vpi_arrayvalue +{ + PLI_UINT32 format; /* vpi[Int,Real,Time,ShortInt,LongInt,ShortReal, + RawTwoState,RawFourState]Val */ + PLI_UINT32 flags; /* array bit flags- vpiUserAllocFlag */ + union + { + PLI_INT32 *integers; /* integer values */ + PLI_INT16 *shortints; /* short integer values */ + PLI_INT64 *longints; /* long integer values */ + PLI_BYTE8 *rawvals; /* 2/4-state vector elements */ + struct t_vpi_vecval *vectors; /* 4-state vector elements */ + struct t_vpi_time *times; /* time values */ + double *reals; /* real values */ + float *shortreals; /* short real values */ + } value; +} s_vpi_arrayvalue, *p_vpi_arrayvalue; + /* value formats */ #define vpiBinStrVal 1 @@ -638,6 +687,11 @@ typedef struct t_vpi_value #define vpiTimeVal 11 #define vpiObjTypeVal 12 #define vpiSuppressVal 13 +#define vpiShortIntVal 14 +#define vpiLongIntVal 15 +#define vpiShortRealVal 16 +#define vpiRawTwoStateVal 17 +#define vpiRawFourStateVal 18 /* delay modes */ @@ -659,6 +713,15 @@ typedef struct t_vpi_value #define vpiReturnEvent 0x1000 +/* bit flags for vpi_get_value_array flags field */ + +#define vpiUserAllocFlag 0x2000 + +/* bit flags for vpi_put_value_array flags field */ + +#define vpiOneValue 0x4000 +#define vpiPropagateOff 0x8000 + /* scalar values */ #define vpi0 0 @@ -692,7 +755,7 @@ typedef struct t_vpi_systf_data /* the subtypes are defined under the vpiFuncType property */ -/****************** Verilog execution information structure *******************/ +/**************** SystemVerilog execution information structure ***************/ typedef struct t_vpi_vlog_info { @@ -746,6 +809,7 @@ typedef struct t_cb_data } s_cb_data, *p_cb_data; /****************************** CALLBACK REASONS ******************************/ + /***************************** Simulation related *****************************/ #define cbValueChange 1 @@ -787,115 +851,134 @@ typedef struct t_cb_data #define cbPLIError 28 #define cbSignal 29 +/**************************** Added with 1364-2005 ****************************/ +#define cbNBASynch 30 +#define cbAtEndOfSimTime 31 + /**************************** FUNCTION DECLARATIONS ***************************/ +/* Include compatibility mode macro definitions. */ +//#include "vpi_compatibility.h" + /* callback related */ -XXTERN vpiHandle vpi_register_cb PROTO_PARAMS((p_cb_data cb_data_p)); -XXTERN PLI_INT32 vpi_remove_cb PROTO_PARAMS((vpiHandle cb_obj)); -XXTERN void vpi_get_cb_info PROTO_PARAMS((vpiHandle object, - p_cb_data cb_data_p)); -XXTERN vpiHandle vpi_register_systf PROTO_PARAMS((p_vpi_systf_data +XXTERN vpiHandle vpi_register_cb PROTO_PARAMS((p_cb_data cb_data_p)); +XXTERN PLI_INT32 vpi_remove_cb PROTO_PARAMS((vpiHandle cb_obj)); +XXTERN void vpi_get_cb_info PROTO_PARAMS((vpiHandle object, + p_cb_data cb_data_p)); +XXTERN vpiHandle vpi_register_systf PROTO_PARAMS((p_vpi_systf_data systf_data_p)); -XXTERN void vpi_get_systf_info PROTO_PARAMS((vpiHandle object, - p_vpi_systf_data +XXTERN void vpi_get_systf_info PROTO_PARAMS((vpiHandle object, + p_vpi_systf_data systf_data_p)); /* for obtaining handles */ -XXTERN vpiHandle vpi_handle_by_name PROTO_PARAMS((PLI_BYTE8 *name, - vpiHandle scope)); -XXTERN vpiHandle vpi_handle_by_index PROTO_PARAMS((vpiHandle object, - PLI_INT32 indx)); +XXTERN vpiHandle vpi_handle_by_name PROTO_PARAMS((PLI_BYTE8 *name, + vpiHandle scope)); +XXTERN vpiHandle vpi_handle_by_index PROTO_PARAMS((vpiHandle object, + PLI_INT32 indx)); /* for traversing relationships */ -XXTERN vpiHandle vpi_handle PROTO_PARAMS((PLI_INT32 type, - vpiHandle refHandle)); -XXTERN vpiHandle vpi_handle_multi PROTO_PARAMS((PLI_INT32 type, - vpiHandle refHandle1, - vpiHandle refHandle2, - ... )); -XXTERN vpiHandle vpi_iterate PROTO_PARAMS((PLI_INT32 type, - vpiHandle refHandle)); -XXTERN vpiHandle vpi_scan PROTO_PARAMS((vpiHandle iterator)); +XXTERN vpiHandle vpi_handle PROTO_PARAMS((PLI_INT32 type, + vpiHandle refHandle)); +XXTERN vpiHandle vpi_handle_multi PROTO_PARAMS((PLI_INT32 type, + vpiHandle refHandle1, + vpiHandle refHandle2, + ... )); +XXTERN vpiHandle vpi_iterate PROTO_PARAMS((PLI_INT32 type, + vpiHandle refHandle)); +XXTERN vpiHandle vpi_scan PROTO_PARAMS((vpiHandle iterator)); /* for processing properties */ -XXTERN PLI_INT32 vpi_get PROTO_PARAMS((PLI_INT32 property, - vpiHandle object)); -XXTERN PLI_BYTE8 *vpi_get_str PROTO_PARAMS((PLI_INT32 property, - vpiHandle object)); +XXTERN PLI_INT32 vpi_get PROTO_PARAMS((PLI_INT32 property, + vpiHandle object)); +XXTERN PLI_INT64 vpi_get64 PROTO_PARAMS((PLI_INT32 property, + vpiHandle object)); +XXTERN PLI_BYTE8 *vpi_get_str PROTO_PARAMS((PLI_INT32 property, + vpiHandle object)); /* delay processing */ -XXTERN void vpi_get_delays PROTO_PARAMS((vpiHandle object, - p_vpi_delay delay_p)); -XXTERN void vpi_put_delays PROTO_PARAMS((vpiHandle object, - p_vpi_delay delay_p)); +XXTERN void vpi_get_delays PROTO_PARAMS((vpiHandle object, + p_vpi_delay delay_p)); +XXTERN void vpi_put_delays PROTO_PARAMS((vpiHandle object, + p_vpi_delay delay_p)); /* value processing */ -XXTERN void vpi_get_value PROTO_PARAMS((vpiHandle expr, - p_vpi_value value_p)); -XXTERN vpiHandle vpi_put_value PROTO_PARAMS((vpiHandle object, - p_vpi_value value_p, - p_vpi_time time_p, - PLI_INT32 flags)); +XXTERN void vpi_get_value PROTO_PARAMS((vpiHandle expr, + p_vpi_value value_p)); +XXTERN vpiHandle vpi_put_value PROTO_PARAMS((vpiHandle object, + p_vpi_value value_p, + p_vpi_time time_p, + PLI_INT32 flags)); +XXTERN void vpi_get_value_array PROTO_PARAMS((vpiHandle object, + p_vpi_arrayvalue arrayvalue_p, + PLI_INT32 *index_p, + PLI_UINT32 num)); +XXTERN void vpi_put_value_array PROTO_PARAMS((vpiHandle object, + p_vpi_arrayvalue arrayvalue_p, + PLI_INT32 *index_p, + PLI_UINT32 num)); /* time processing */ -XXTERN void vpi_get_time PROTO_PARAMS((vpiHandle object, - p_vpi_time time_p)); +XXTERN void vpi_get_time PROTO_PARAMS((vpiHandle object, + p_vpi_time time_p)); /* I/O routines */ -XXTERN PLI_UINT32 vpi_mcd_open PROTO_PARAMS((PLI_BYTE8 *fileName)); -XXTERN PLI_UINT32 vpi_mcd_close PROTO_PARAMS((PLI_UINT32 mcd)); -XXTERN PLI_BYTE8 *vpi_mcd_name PROTO_PARAMS((PLI_UINT32 cd)); -XXTERN PLI_INT32 vpi_mcd_printf PROTO_PARAMS((PLI_UINT32 mcd, - PLI_BYTE8 *format, - ...)); -XXTERN PLI_INT32 vpi_printf PROTO_PARAMS((PLI_BYTE8 *format, - ...)); +XXTERN PLI_UINT32 vpi_mcd_open PROTO_PARAMS((PLI_BYTE8 *fileName)); +XXTERN PLI_UINT32 vpi_mcd_close PROTO_PARAMS((PLI_UINT32 mcd)); +XXTERN PLI_BYTE8 *vpi_mcd_name PROTO_PARAMS((PLI_UINT32 cd)); +XXTERN PLI_INT32 vpi_mcd_printf PROTO_PARAMS((PLI_UINT32 mcd, + PLI_BYTE8 *format, + ...)); +XXTERN PLI_INT32 vpi_printf PROTO_PARAMS((PLI_BYTE8 *format, + ...)); /* utility routines */ -XXTERN PLI_INT32 vpi_compare_objects PROTO_PARAMS((vpiHandle object1, - vpiHandle object2)); -XXTERN PLI_INT32 vpi_chk_error PROTO_PARAMS((p_vpi_error_info +XXTERN PLI_INT32 vpi_compare_objects PROTO_PARAMS((vpiHandle object1, + vpiHandle object2)); +XXTERN PLI_INT32 vpi_chk_error PROTO_PARAMS((p_vpi_error_info error_info_p)); -XXTERN PLI_INT32 vpi_free_object PROTO_PARAMS((vpiHandle object)); -XXTERN PLI_INT32 vpi_get_vlog_info PROTO_PARAMS((p_vpi_vlog_info +/* vpi_free_object() was deprecated in 1800-2009 */ +XXTERN PLI_INT32 vpi_free_object PROTO_PARAMS((vpiHandle object)); +XXTERN PLI_INT32 vpi_release_handle PROTO_PARAMS((vpiHandle object)); +XXTERN PLI_INT32 vpi_get_vlog_info PROTO_PARAMS((p_vpi_vlog_info vlog_info_p)); /* routines added with 1364-2001 */ -XXTERN PLI_INT32 vpi_get_data PROTO_PARAMS((PLI_INT32 id, - PLI_BYTE8 *dataLoc, - PLI_INT32 numOfBytes)); -XXTERN PLI_INT32 vpi_put_data PROTO_PARAMS((PLI_INT32 id, - PLI_BYTE8 *dataLoc, - PLI_INT32 numOfBytes)); -XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj)); -XXTERN PLI_INT32 vpi_put_userdata PROTO_PARAMS((vpiHandle obj, - void *userdata)); -XXTERN PLI_INT32 vpi_vprintf PROTO_PARAMS((PLI_BYTE8 *format, - va_list ap)); -XXTERN PLI_INT32 vpi_mcd_vprintf PROTO_PARAMS((PLI_UINT32 mcd, - PLI_BYTE8 *format, - va_list ap)); -XXTERN PLI_INT32 vpi_flush PROTO_PARAMS((void)); -XXTERN PLI_INT32 vpi_mcd_flush PROTO_PARAMS((PLI_UINT32 mcd)); -XXTERN PLI_INT32 vpi_control PROTO_PARAMS((PLI_INT32 operation, - ...)); -XXTERN vpiHandle vpi_handle_by_multi_index PROTO_PARAMS((vpiHandle obj, - PLI_INT32 num_index, - PLI_INT32 *index_array)); +XXTERN PLI_INT32 vpi_get_data PROTO_PARAMS((PLI_INT32 id, + PLI_BYTE8 *dataLoc, + PLI_INT32 numOfBytes)); +XXTERN PLI_INT32 vpi_put_data PROTO_PARAMS((PLI_INT32 id, + PLI_BYTE8 *dataLoc, + PLI_INT32 numOfBytes)); +XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj)); +XXTERN PLI_INT32 vpi_put_userdata PROTO_PARAMS((vpiHandle obj, + void *userdata)); +XXTERN PLI_INT32 vpi_vprintf PROTO_PARAMS((PLI_BYTE8 *format, + va_list ap)); +XXTERN PLI_INT32 vpi_mcd_vprintf PROTO_PARAMS((PLI_UINT32 mcd, + PLI_BYTE8 *format, + va_list ap)); +XXTERN PLI_INT32 vpi_flush PROTO_PARAMS((void)); +XXTERN PLI_INT32 vpi_mcd_flush PROTO_PARAMS((PLI_UINT32 mcd)); +XXTERN PLI_INT32 vpi_control PROTO_PARAMS((PLI_INT32 operation, + ...)); +XXTERN vpiHandle vpi_handle_by_multi_index PROTO_PARAMS((vpiHandle obj, + PLI_INT32 num_index, + PLI_INT32 *index_array)); /****************************** GLOBAL VARIABLES ******************************/ -PLI_VEXTERN PLI_DLLESPEC void (*vlog_startup_routines[])(); +PLI_VEXTERN PLI_DLLESPEC void (*vlog_startup_routines[])( void ); /* array of function pointers, last pointer should be null */ @@ -903,22 +986,22 @@ PLI_VEXTERN PLI_DLLESPEC void (*vlog_startup_routines[])(); #undef PLI_VEXTERN #ifdef VPI_USER_DEFINED_DLLISPEC -#undef VPI_USER_DEFINED_DLLISPEC -#undef PLI_DLLISPEC +# undef VPI_USER_DEFINED_DLLISPEC +# undef PLI_DLLISPEC #endif #ifdef VPI_USER_DEFINED_DLLESPEC -#undef VPI_USER_DEFINED_DLLESPEC -#undef PLI_DLLESPEC +# undef VPI_USER_DEFINED_DLLESPEC +# undef PLI_DLLESPEC #endif #ifdef PLI_PROTOTYPES -#undef PLI_PROTOTYPES -#undef PROTO_PARAMS -#undef XXTERN -#undef EETERN +# undef PLI_PROTOTYPES +# undef PROTO_PARAMS +# undef XXTERN +# undef EETERN #endif -#ifdef __cplusplus +#ifdef __cplusplus } #endif |