/* -------------------------------------------------------------------- /* /* Copyright 2019 IEEE P1076 WG Authors /* /* See the LICENSE file distributed with this work for copyright and /* licensing information and the AUTHORS file. /* /* This file to you under the Apache License, Version 2.0 (the "License"). /* You may obtain a copy of the License at /* /* http://www.apache.org/licenses/LICENSE-2.0 /* /* Unless required by applicable law or agreed to in writing, software /* distributed under the License is distributed on an "AS IS" BASIS, /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or /* implied. See the License for the specific language governing /* permissions and limitations under the License. /* /* /* Title : vhpi_user.h /* : /* Developers: IEEE P1076 Working Group, VHPI Task Force /* : /* Purpose : This header file describes the procedural interface /* : to access VHDL compiled, instantiated and run-time /* : data.It is derived from the UML model. For conformance /* : with the VHPI standard, a VHPI application or program /* : shall reference this header file. /* : /* Note : The contents of this file may be modified in an /* : implementation to provide implementation-defined /* : functionality, as described in B.3. /* : /* -------------------------------------------------------------------- /* modification history : /* -------------------------------------------------------------------- /* $Revision: 1315 $ /* $Date: 2008-07-13 10:11:53 +0930 (Sun, 13 Jul 2008) $ /* -------------------------------------------------------------------- */ #ifndef VHPI_USER_H #define VHPI_USER_H #include #include /* Ensure that size-critical types are defined 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 #elif defined(__linux) || (defined(__APPLE__) && defined(__MACH__)) #include #else #include #endif #ifdef __cplusplus extern "C" { #endif /*--------------------------------------------------------------------*/ /*--------------------------- Portability Help -----------------------*/ /*--------------------------------------------------------------------*/ /* Use to export a symbol */ #if defined (_MSC_VER) #ifndef PLI_DLLISPEC #define PLI_DLLISPEC __declspec(dllimport) #define VHPI_USER_DEFINED_DLLISPEC 1 #endif #else #ifndef PLI_DLLISPEC #define PLI_DLLISPEC #endif #endif /* Use to import a symbol */ #if defined (_MSC_VER) #ifndef PLI_DLLESPEC #define PLI_DLLESPEC __declspec(dllexport) #define VHPI_USER_DEFINED_DLLESPEC 1 #endif #else #ifndef PLI_DLLESPEC #define PLI_DLLESPEC #endif #endif /* Use to mark a function as external */ #ifndef PLI_EXTERN #define PLI_EXTERN #endif /* Use to mark a variable as external */ #ifndef PLI_VEXTERN #define PLI_VEXTERN extern #endif #ifndef PLI_PROTOTYPES #define PLI_PROTOTYPES /* object is defined imported by the application */ #define XXTERN PLI_EXTERN PLI_DLLISPEC /* object is exported by the application */ #define EETERN PLI_EXTERN PLI_DLLESPEC #endif /* basic typedefs */ #ifndef VHPI_TYPES #define VHPI_TYPES typedef uint32_t *vhpiHandleT; typedef uint32_t vhpiEnumT; typedef uint8_t vhpiSmallEnumT; typedef int32_t vhpiIntT; typedef int64_t vhpiLongIntT; typedef unsigned char vhpiCharT; typedef double vhpiRealT; typedef int32_t vhpiSmallPhysT; typedef struct vhpiPhysS { int32_t high; uint32_t low; } vhpiPhysT; /********************** time structure ****************************/ typedef struct vhpiTimeS { int32_t high; uint32_t low; } vhpiTimeT; /********************** value structure **************************/ /* value formats */ typedef enum { vhpiBinStrVal = 1, /* do not move */ vhpiOctStrVal = 2, /* do not move */ vhpiDecStrVal = 3, /* do not move */ vhpiHexStrVal = 4, /* do not move */ vhpiEnumVal = 5, vhpiIntVal = 6, vhpiLogicVal = 7, vhpiRealVal = 8, vhpiStrVal = 9, vhpiCharVal = 10, vhpiTimeVal = 11, vhpiPhysVal = 12, vhpiObjTypeVal = 13, vhpiPtrVal = 14, vhpiEnumVecVal = 15, vhpiIntVecVal = 16, vhpiLogicVecVal = 17, vhpiRealVecVal = 18, vhpiTimeVecVal = 19, vhpiPhysVecVal = 20, vhpiPtrVecVal = 21, vhpiRawDataVal = 22, vhpiSmallEnumVal = 23, vhpiSmallEnumVecVal = 24, vhpiLongIntVal = 25, vhpiLongIntVecVal = 26, vhpiSmallPhysVal = 27, vhpiSmallPhysVecVal = 28 #ifdef VHPIEXTEND_VAL_FORMATS VHPIEXTEND_VAL_FORMATS #endif } vhpiFormatT; /* value structure */ typedef struct vhpiValueS { vhpiFormatT format; /* vhpi[Char,[Bin,Oct,Dec,Hex]Str, [Small]Enum,Logic,Int,Real, [Small]Phys,Time,Ptr, [Small]EnumVec,LogicVec,IntVect,RealVec, [Small]PhysVec,TimeVec, PtrVec,ObjType,RawData]Val */ size_t bufSize; /* the size in bytes of the value buffer; this is set by the user */ int32_t numElems; /* different meanings depending on the format: vhpiStrVal, vhpi{Bin...}StrVal: size of string array type values: number of array elements scalar type values: undefined */ vhpiPhysT unit; union { vhpiEnumT enumv, *enumvs; vhpiSmallEnumT smallenumv, *smallenumvs; vhpiIntT intg, *intgs; vhpiLongIntT longintg, *longintgs; vhpiRealT real, *reals; vhpiSmallPhysT smallphys, *smallphyss; vhpiPhysT phys, *physs; vhpiTimeT time, *times; vhpiCharT ch, *str; void *ptr, **ptrs; } value; } vhpiValueT; #endif /* Following are the constant definitions. They are divided into three major areas: 1) object types 2) access methods 3) properties */ #define vhpiUndefined -1 /*************** OBJECT KINDS *******************/ typedef enum { vhpiAccessTypeDeclK = 1001, vhpiAggregateK = 1002, vhpiAliasDeclK = 1003, vhpiAllK = 1004, vhpiAllocatorK = 1005, vhpiAnyCollectionK = 1006, vhpiArchBodyK = 1007, vhpiArgvK = 1008, vhpiArrayTypeDeclK = 1009, DEPRECATED_vhpiAssertStmtK = 1010, vhpiAssocElemK = 1011, vhpiAttrDeclK = 1012, vhpiAttrSpecK = 1013, DEPRECATED_vhpiBinaryExprK = 1014, vhpiBitStringLiteralK = 1015, vhpiBlockConfigK = 1016, vhpiBlockStmtK = 1017, vhpiBranchK = 1018, vhpiCallbackK = 1019, vhpiCaseStmtK = 1020, vhpiCharLiteralK = 1021, vhpiCompConfigK = 1022, vhpiCompDeclK = 1023, vhpiCompInstStmtK = 1024, vhpiCondSigAssignStmtK = 1025, vhpiCondWaveformK = 1026, vhpiConfigDeclK = 1027, vhpiConstDeclK = 1028, vhpiConstParamDeclK = 1029, vhpiConvFuncK = 1030, vhpiDerefObjK = 1031, vhpiDisconnectSpecK = 1032, vhpiDriverK = 1033, vhpiDriverCollectionK = 1034, vhpiElemAssocK = 1035, vhpiElemDeclK = 1036, vhpiEntityClassEntryK = 1037, vhpiEntityDeclK = 1038, vhpiEnumLiteralK = 1039, vhpiEnumRangeK = 1040, vhpiEnumTypeDeclK = 1041, vhpiExitStmtK = 1042, vhpiFileDeclK = 1043, vhpiFileParamDeclK = 1044, vhpiFileTypeDeclK = 1045, vhpiFloatRangeK = 1046, vhpiFloatTypeDeclK = 1047, vhpiForGenerateK = 1048, vhpiForLoopK = 1049, vhpiForeignfK = 1050, vhpiFuncCallK = 1051, vhpiFuncDeclK = 1052, vhpiGenericDeclK = 1053, vhpiGroupDeclK = 1054, vhpiGroupTempDeclK = 1055, vhpiIfGenerateK = 1056, vhpiIfStmtK = 1057, vhpiInPortK = 1058, vhpiIndexedNameK = 1059, vhpiIntLiteralK = 1060, vhpiIntRangeK = 1061, vhpiIntTypeDeclK = 1062, vhpiIteratorK = 1063, vhpiLibraryDeclK = 1064, DEPRECATED_vhpiLoopStmtK = 1065, vhpiNextStmtK = 1066, vhpiNullLiteralK = 1067, vhpiNullStmtK = 1068, DEPRECATED_vhpiOperatorK = 1069, vhpiOthersK = 1070, vhpiOutPortK = 1071, vhpiPackBodyK = 1072, vhpiPackDeclK = 1073, vhpiPackInstK = 1074, vhpiParamAttrNameK = 1075, vhpiPhysLiteralK = 1076, vhpiPhysRangeK = 1077, vhpiPhysTypeDeclK = 1078, vhpiPortDeclK = 1079, DEPRECATED_vhpiProcCallStmtK = 1080, vhpiProcDeclK = 1081, vhpiProcessStmtK = 1082, DEPRECATED_vhpiProtectedTypeK = 1083, vhpiProtectedTypeBodyK = 1084, vhpiProtectedTypeDeclK = 1085, vhpiRealLiteralK = 1086, vhpiRecordTypeDeclK = 1087, vhpiReportStmtK = 1088, vhpiReturnStmtK = 1089, vhpiRootInstK = 1090, vhpiSelectSigAssignStmtK = 1091, vhpiSelectWaveformK = 1092, vhpiSelectedNameK = 1093, vhpiSigDeclK = 1094, vhpiSigParamDeclK = 1095, vhpiSimpAttrNameK = 1096, vhpiSimpleSigAssignStmtK = 1097, vhpiSliceNameK = 1098, vhpiStringLiteralK = 1099, vhpiSubpBodyK = 1100, vhpiSubtypeDeclK = 1101, DEPRECATED_vhpiSubtypeIndicK = 1102, vhpiToolK = 1103, vhpiTransactionK = 1104, vhpiTypeConvK = 1105, DEPRECATED_vhpiUnaryExprK = 1106, vhpiUnitDeclK = 1107, vhpiUserAttrNameK = 1108, vhpiVarAssignStmtK = 1109, vhpiVarDeclK = 1110, vhpiVarParamDeclK = 1111, vhpiWaitStmtK = 1112, vhpiWaveformElemK = 1113, vhpiWhileLoopK = 1114, vhpiQualifiedExprK = 1115, vhpiUseClauseK = 1116, vhpiConcAssertStmtK = 1117, vhpiConcProcCallStmtK = 1118, vhpiForeverLoopK = 1119, vhpiSeqAssertStmtK = 1120, vhpiSeqProcCallStmtK = 1121, vhpiSeqSigAssignStmtK = 1122, vhpiProtectedTypeInstK = 1123 #ifdef VHPIEXTEND_CLASSES VHPIEXTEND_CLASSES #endif } vhpiClassKindT; /********* methods used to traverse 1 to 1 relationships **************/ typedef enum { vhpiAbstractLiteral = 1301, vhpiActual = 1302, vhpiAll = 1303, vhpiAttrDecl = 1304, vhpiAttrSpec = 1305, vhpiBaseType = 1306, vhpiBaseUnit = 1307, DEPRECATED_vhpiBasicSignal = 1308, vhpiBlockConfig = 1309, vhpiCaseExpr = 1310, vhpiCondExpr = 1311, vhpiConfigDecl = 1312, vhpiConfigSpec = 1313, vhpiConstraint = 1314, vhpiContributor = 1315, vhpiCurCallback = 1316, DEPRECATED_vhpiCurEqProcess = 1317, vhpiCurStackFrame = 1318, vhpiDerefObj = 1319, DEPRECATED_vhpiDecl = 1320, vhpiDesignUnit = 1321, vhpiDownStack = 1322, DEPRECATED_vhpiElemSubtype = 1323, vhpiEntityAspect = 1324, vhpiEntityDecl = 1325, vhpiEqProcessStmt = 1326, vhpiExpr = 1327, vhpiFormal = 1328, vhpiFuncDecl = 1329, vhpiGroupTempDecl = 1330, vhpiGuardExpr = 1331, vhpiGuardSig = 1332, vhpiImmRegion = 1333, vhpiInPort = 1334, vhpiInitExpr = 1335, DEPRECATED_vhpiIterScheme = 1336, vhpiLeftExpr = 1337, vhpiLexicalScope = 1338, vhpiLhsExpr = 1339, vhpiLocal = 1340, vhpiLogicalExpr = 1341, DEPRECATED_vhpiName = 1342, DEPRECATED_vhpiOperator = 1343, vhpiOthers = 1344, vhpiOutPort = 1345, vhpiParamDecl = 1346, DEPRECATED_vhpiParamExpr = 1347, vhpiParent = 1348, vhpiPhysLiteral = 1349, vhpiPrefix = 1350, vhpiPrimaryUnit = 1351, vhpiProtectedTypeBody = 1352, vhpiProtectedTypeDecl = 1353, vhpiRejectTime = 1354, vhpiReportExpr = 1355, vhpiResolFunc = 1356, vhpiReturnExpr = 1357, DEPRECATED_vhpiReturnTypeMark = 1358, vhpiRhsExpr = 1359, vhpiRightExpr = 1360, vhpiRootInst = 1361, vhpiSelectExpr = 1362, vhpiSeverityExpr = 1363, vhpiSimpleName = 1364, vhpiSubpBody = 1365, vhpiSubpDecl = 1366, DEPRECATED_vhpiSubtype = 1367, vhpiSuffix = 1368, vhpiTimeExpr = 1369, vhpiTimeOutExpr = 1370, vhpiTool = 1371, vhpiType = 1372, DEPRECATED_vhpiTypeMark = 1373, vhpiUnitDecl = 1374, vhpiUpStack = 1375, vhpiUpperRegion = 1376, vhpiUse = 1377, vhpiValExpr = 1378, DEPRECATED_vhpiValSubtype = 1379, vhpiElemType = 1380, vhpiFirstNamedType = 1381, vhpiReturnType = 1382, vhpiValType = 1383, vhpiCurRegion = 1384, vhpiSignal = 1385, vhpiLibraryDecl = 1386, vhpiSimNet = 1387, vhpiAliasedName = 1388, vhpiCompDecl = 1389, vhpiProtectedTypeInst = 1390, vhpiGenIndex = 1391 #ifdef VHPIEXTEND_ONE_METHODS VHPIEXTEND_ONE_METHODS #endif } vhpiOneToOneT; /******* methods used to traverse 1 to many relationships ************/ typedef enum { vhpiAliasDecls = 1501, vhpiArgvs = 1502, vhpiAttrDecls = 1503, vhpiAttrSpecs = 1504, vhpiBasicSignals = 1505, vhpiBlockStmts = 1506, vhpiBranchs = 1507, /* 1508 */ vhpiChoices = 1509, vhpiCompInstStmts = 1510, DEPRECATED_vhpiCondExprs = 1511, vhpiCondWaveforms = 1512, vhpiConfigItems = 1513, vhpiConfigSpecs = 1514, vhpiConstDecls = 1515, vhpiConstraints = 1516, DEPRECATED_vhpiContributors = 1517, /* 1518 */ vhpiDecls = 1519, vhpiDepUnits = 1520, vhpiDesignUnits = 1521, vhpiDrivenSigs = 1522, vhpiDrivers = 1523, vhpiElemAssocs = 1524, DEPRECATED_vhpiEntityClassEntrys = 1525, vhpiEntityDesignators = 1526, vhpiEnumLiterals = 1527, vhpiForeignfs = 1528, vhpiGenericAssocs = 1529, vhpiGenericDecls = 1530, vhpiIndexExprs = 1531, vhpiIndexedNames = 1532, vhpiInternalRegions = 1533, vhpiMembers = 1534, vhpiPackInsts = 1535, vhpiParamAssocs = 1536, vhpiParamDecls = 1537, vhpiPortAssocs = 1538, vhpiPortDecls = 1539, vhpiRecordElems = 1540, vhpiSelectWaveforms = 1541, vhpiSelectedNames = 1542, DEPRECATED_vhpiSensitivitys = 1543, vhpiSeqStmts = 1544, vhpiSigAttrs = 1545, vhpiSigDecls = 1546, vhpiSigNames = 1547, vhpiSignals = 1548, DEPRECATED_vhpiSpecNames = 1549, vhpiSpecs = 1550, vhpiStmts = 1551, vhpiTransactions = 1552, DEPRECATED_vhpiTypeMarks = 1553, vhpiUnitDecls = 1554, vhpiUses = 1555, vhpiVarDecls = 1556, vhpiWaveformElems = 1557, vhpiLibraryDecls = 1558, vhpiLocalLoads = 1559, vhpiOptimizedLoads = 1560, vhpiTypes = 1561, vhpiUseClauses = 1562, vhpiGenerateStmts = 1563, vhpiLocalContributors = 1564, vhpiOptimizedContributors = 1565, vhpiParamExprs = 1566, vhpiEqProcessStmts = 1567, vhpiEntityClassEntries = 1568, vhpiSensitivities = 1569 #ifdef VHPIEXTEND_MANY_METHODS VHPIEXTEND_MANY_METHODS #endif } vhpiOneToManyT; /* Note: The following macro is defined for compatibility with prototype implementations that use the incorrectly spelled enumeration value. The macro is deprecated and will be removed in a future revision of the standard. */ #define vhpiSensitivitys DEPRECATED_vhpiSensitivitys /****************** PROPERTIES *******************/ /******* INTEGER or BOOLEAN PROPERTIES **********/ typedef enum { vhpiAccessP = 1001, vhpiArgcP = 1002, vhpiAttrKindP = 1003, vhpiBaseIndexP = 1004, vhpiBeginLineNoP = 1005, vhpiEndLineNoP = 1006, vhpiEntityClassP = 1007, vhpiForeignKindP = 1008, vhpiFrameLevelP = 1009, vhpiGenerateIndexP = 1010, vhpiIntValP = 1011, vhpiIsAnonymousP = 1012, vhpiIsBasicP = 1013, vhpiIsCompositeP = 1014, vhpiIsDefaultP = 1015, vhpiIsDeferredP = 1016, vhpiIsDiscreteP = 1017, vhpiIsForcedP = 1018, vhpiIsForeignP = 1019, vhpiIsGuardedP = 1020, vhpiIsImplicitDeclP = 1021, DEPRECATED_vhpiIsInvalidP = 1022, vhpiIsLocalP = 1023, vhpiIsNamedP = 1024, vhpiIsNullP = 1025, vhpiIsOpenP = 1026, vhpiIsPLIP = 1027, vhpiIsPassiveP = 1028, vhpiIsPostponedP = 1029, vhpiIsProtectedTypeP = 1030, vhpiIsPureP = 1031, vhpiIsResolvedP = 1032, vhpiIsScalarP = 1033, vhpiIsSeqStmtP = 1034, vhpiIsSharedP = 1035, vhpiIsTransportP = 1036, vhpiIsUnaffectedP = 1037, vhpiIsUnconstrainedP = 1038, vhpiIsUninstantiatedP = 1039, vhpiIsUpP = 1040, vhpiIsVitalP = 1041, vhpiIteratorTypeP = 1042, vhpiKindP = 1043, vhpiLeftBoundP = 1044, DEPRECATED_vhpiLevelP = 1045, vhpiLineNoP = 1046, vhpiLineOffsetP = 1047, vhpiLoopIndexP = 1048, vhpiModeP = 1049, vhpiNumDimensionsP = 1050, DEPRECATED_vhpiNumFieldsP = 1051, vhpiNumGensP = 1052, vhpiNumLiteralsP = 1053, vhpiNumMembersP = 1054, vhpiNumParamsP = 1055, vhpiNumPortsP = 1056, vhpiOpenModeP = 1057, vhpiPhaseP = 1058, vhpiPositionP = 1059, vhpiPredefAttrP = 1060, /* 1061 */ vhpiReasonP = 1062, vhpiRightBoundP = 1063, vhpiSigKindP = 1064, vhpiSizeP = 1065, vhpiStartLineNoP = 1066, vhpiStateP = 1067, vhpiStaticnessP = 1068, vhpiVHDLversionP = 1069, vhpiIdP = 1070, vhpiCapabilitiesP = 1071, vhpiAutomaticRestoreP = 1072, vhpiCompInstKindP = 1073, vhpiIsBuiltInP = 1074, vhpiIsDynamicP = 1075, vhpiIsOperatorP = 1076, vhpiNumFieldsP = 1077 #ifdef VHPIEXTEND_INT_PROPERTIES VHPIEXTEND_INT_PROPERTIES #endif } vhpiIntPropertyT; /******* STRING PROPERTIES **********/ typedef enum { vhpiCaseNameP = 1301, vhpiCompNameP = 1302, vhpiDefNameP = 1303, vhpiFileNameP = 1304, vhpiFullCaseNameP = 1305, vhpiFullNameP = 1306, vhpiKindStrP = 1307, vhpiLabelNameP = 1308, vhpiLibLogicalNameP = 1309, vhpiLibPhysicalNameP = 1310, vhpiLogicalNameP = 1311, vhpiLoopLabelNameP = 1312, vhpiNameP = 1313, DEPRECATED_vhpiOpNameP = 1314, vhpiStrValP = 1315, vhpiToolVersionP = 1316, vhpiUnitNameP = 1317, vhpiSaveRestartLocationP = 1318, vhpiCompInstNameP = 1319, vhpiInstNamesP = 1320, vhpiSignatureNameP = 1321, vhpiSpecNameP = 1322 #ifdef VHPIEXTEND_STR_PROPERTIES VHPIEXTEND_STR_PROPERTIES #endif } vhpiStrPropertyT; /******* REAL PROPERTIES **********/ typedef enum { vhpiFloatLeftBoundP = 1601, vhpiFloatRightBoundP = 1602, vhpiRealValP = 1603 #ifdef VHPIEXTEND_REAL_PROPERTIES VHPIEXTEND_REAL_PROPERTIES #endif } vhpiRealPropertyT; /******* PHYSICAL PROPERTIES **********/ typedef enum { vhpiPhysLeftBoundP = 1651, vhpiPhysPositionP = 1652, vhpiPhysRightBoundP = 1653, vhpiPhysValP = 1654, DEPRECATED_vhpiPrecisionP = 1655, DEPRECATED_vhpiSimTimeUnitP = 1656, vhpiResolutionLimitP = 1657, vhpiTimeP = 1658 #ifdef VHPIEXTEND_PHYS_PROPERTIES VHPIEXTEND_PHYS_PROPERTIES #endif } vhpiPhysPropertyT; /******************* PROPERTY VALUES ************************/ /* vhpiCapabilitiesP */ typedef enum { vhpiProvidesHierarchy = 1, vhpiProvidesStaticAccess = 2, vhpiProvidesConnectivity = 4, vhpiProvidesPostAnalysis = 8, vhpiProvidesForeignModel = 16, vhpiProvidesAdvancedForeignModel = 32, vhpiProvidesSaveRestart = 64, vhpiProvidesReset = 128, vhpiProvidesDebugRuntime = 256, vhpiProvidesAdvancedDebugRuntime = 512, vhpiProvidesDynamicElab = 1024 } vhpiCapabibilityT; /* vhpiOpenModeP */ typedef enum { vhpiInOpen = 1001, vhpiOutOpen = 1002, vhpiReadOpen = 1003, vhpiWriteOpen = 1004, vhpiAppendOpen = 1005 } vhpiOpenModeT; /* vhpiModeP */ typedef enum { vhpiInMode = 1001, vhpiOutMode = 1002, vhpiInoutMode = 1003, vhpiBufferMode = 1004, vhpiLinkageMode = 1005 } vhpiModeT; /* vhpiSigKindP */ typedef enum { vhpiRegister = 1001, vhpiBus = 1002, vhpiNormal = 1003 } vhpiSigKindT; /* vhpiStaticnessP */ typedef enum { vhpiLocallyStatic = 1001, vhpiGloballyStatic = 1002, vhpiDynamic = 1003 } vhpiStaticnessT; /* vhpiPredefAttrP */ typedef enum { vhpiActivePA = 1001, vhpiAscendingPA = 1002, vhpiBasePA = 1003, vhpiDelayedPA = 1004, vhpiDrivingPA = 1005, vhpiDriving_valuePA= 1006, vhpiEventPA = 1007, vhpiHighPA = 1008, vhpiImagePA = 1009, vhpiInstance_namePA= 1010, vhpiLast_activePA = 1011, vhpiLast_eventPA = 1012, vhpiLast_valuePA = 1013, vhpiLeftPA = 1014, vhpiLeftofPA = 1015, vhpiLengthPA = 1016, vhpiLowPA = 1017, vhpiPath_namePA = 1018, vhpiPosPA = 1019, vhpiPredPA = 1020, vhpiQuietPA = 1021, vhpiRangePA = 1022, vhpiReverse_rangePA= 1023, vhpiRightPA = 1024, vhpiRightofPA = 1025, vhpiSimple_namePA = 1026, vhpiStablePA = 1027, vhpiSuccPA = 1028, vhpiTransactionPA = 1029, vhpiValPA = 1030, vhpiValuePA = 1031 } vhpiPredefAttrT; /* vhpiAttrKindP */ typedef enum { vhpiFunctionAK = 1, vhpiRangeAK = 2, vhpiSignalAK = 3, vhpiTypeAK = 4, vhpiValueAK = 5 #ifdef VHPIEXTEND_ATTR VHPIEXTEND_ATTR #endif } vhpiAttrKindT; /* vhpiEntityClassP */ typedef enum { vhpiEntityEC = 1001, vhpiArchitectureEC = 1002, vhpiConfigurationEC = 1003, vhpiProcedureEC = 1004, vhpiFunctionEC = 1005, vhpiPackageEC = 1006, vhpiTypeEC = 1007, vhpiSubtypeEC = 1008, vhpiConstantEC = 1009, vhpiSignalEC = 1010, vhpiVariableEC = 1011, vhpiComponentEC = 1012, vhpiLabelEC = 1013, vhpiLiteralEC = 1014, vhpiUnitsEC = 1015, vhpiFileEC = 1016, vhpiGroupEC = 1017 } vhpiEntityClassT; /* vhpiAccessP */ typedef enum { vhpiRead = 1, vhpiWrite = 2, vhpiConnectivity = 4, vhpiNoAccess = 8 } vhpiAccessT; /* value for vhpiStateP property for callbacks */ typedef enum { vhpiEnable, vhpiDisable, vhpiMature /* callback has occurred */ } vhpiStateT; /* enumeration type for vhpiCompInstKindP property */ typedef enum { vhpiDirect, vhpiComp, vhpiConfig } vhpiCompInstKindT; /* the following values are used only for the vhpiResolutionLimitP property and for setting the unit field of the value structure; they represent the physical position of a given VHDL time unit */ /* time unit physical position values {high, low} */ PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiFS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiPS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiNS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiUS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiMS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiS; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiMN; PLI_VEXTERN PLI_DLLISPEC const vhpiPhysT vhpiHR; /* IEEE std_logic values */ #define vhpiU 0 /* uninitialized */ #define vhpiX 1 /* unknown */ #define vhpi0 2 /* forcing 0 */ #define vhpi1 3 /* forcing 1 */ #define vhpiZ 4 /* high impedance */ #define vhpiW 5 /* weak unknown */ #define vhpiL 6 /* weak 0 */ #define vhpiH 7 /* weak 1 */ #define vhpiDontCare 8 /* don't care */ /* IEEE std bit values */ #define vhpibit0 0 /* bit 0 */ #define vhpibit1 1 /* bit 1 */ /* IEEE std boolean values */ #define vhpiFalse 0 /* false */ #define vhpiTrue 1 /* true */ /************** vhpiPhaseP property values *************/ typedef enum { vhpiRegistrationPhase = 1, vhpiAnalysisPhase = 2, vhpiElaborationPhase = 3, vhpiInitializationPhase = 4, vhpiSimulationPhase = 5, vhpiTerminationPhase = 6, vhpiSavePhase = 7, vhpiRestartPhase = 8, vhpiResetPhase = 9 } vhpiPhaseT ; /**************** PLI error information structure ****************/ typedef enum { vhpiNote = 1, vhpiWarning = 2, vhpiError = 3, vhpiFailure = 6, vhpiSystem = 4, vhpiInternal = 5 } vhpiSeverityT; typedef struct vhpiErrorInfoS { vhpiSeverityT severity; char *message; char *str; char *file; /* Name of the VHDL file where the VHPI error originated */ int32_t line; /* Line number in the VHDL file */ } vhpiErrorInfoT; /********************* callback structures ************************/ /* callback user data structure */ typedef struct vhpiCbDataS { int32_t reason; /* callback reason */ void (*cb_rtn) (const struct vhpiCbDataS *); /* call routine */ vhpiHandleT obj; /* trigger object */ vhpiTimeT *time; /* callback time */ vhpiValueT *value; /* trigger object value */ void *user_data; /* pointer to user data to be passed to the callback function */ } vhpiCbDataT; /************************* CALLBACK REASONS *************************/ /*********************** Simulation object related ******************/ /* These are repetitive callbacks */ #define vhpiCbValueChange 1001 #define vhpiCbForce 1002 #define vhpiCbRelease 1003 #define vhpiCbTransaction 1004 /* optional callback reason */ /************************** Statement related ***********************/ /* These are repetitive callbacks */ #define vhpiCbStmt 1005 #define vhpiCbResume 1006 #define vhpiCbSuspend 1007 #define vhpiCbStartOfSubpCall 1008 #define vhpiCbEndOfSubpCall 1009 /************************** Time related ****************************/ /* the Rep callback reasons are the repeated versions of the callbacks */ #define vhpiCbAfterDelay 1010 #define vhpiCbRepAfterDelay 1011 /*********************** Simulation cycle phase related *************/ #define vhpiCbNextTimeStep 1012 #define vhpiCbRepNextTimeStep 1013 #define vhpiCbStartOfNextCycle 1014 #define vhpiCbRepStartOfNextCycle 1015 #define vhpiCbStartOfProcesses 1016 #define vhpiCbRepStartOfProcesses 1017 #define vhpiCbEndOfProcesses 1018 #define vhpiCbRepEndOfProcesses 1019 #define vhpiCbLastKnownDeltaCycle 1020 #define vhpiCbRepLastKnownDeltaCycle 1021 #define vhpiCbStartOfPostponed 1022 #define vhpiCbRepStartOfPostponed 1023 #define vhpiCbEndOfTimeStep 1024 #define vhpiCbRepEndOfTimeStep 1025 /************************** Action related **************************/ /* these are one time callback unless otherwise noted */ #define vhpiCbStartOfTool 1026 #define vhpiCbEndOfTool 1027 #define vhpiCbStartOfAnalysis 1028 #define vhpiCbEndOfAnalysis 1029 #define vhpiCbStartOfElaboration 1030 #define vhpiCbEndOfElaboration 1031 #define vhpiCbStartOfInitialization 1032 #define vhpiCbEndOfInitialization 1033 #define vhpiCbStartOfSimulation 1034 #define vhpiCbEndOfSimulation 1035 #define vhpiCbQuiescense 1036 /* repetitive */ #define vhpiCbPLIError 1037 /* repetitive */ #define vhpiCbStartOfSave 1038 #define vhpiCbEndOfSave 1039 #define vhpiCbStartOfRestart 1040 #define vhpiCbEndOfRestart 1041 #define vhpiCbStartOfReset 1042 #define vhpiCbEndOfReset 1043 #define vhpiCbEnterInteractive 1044 /* repetitive */ #define vhpiCbExitInteractive 1045 /* repetitive */ #define vhpiCbSigInterrupt 1046 /* repetitive */ /* Foreign model callbacks */ #define vhpiCbTimeOut 1047 /* non repetitive */ #define vhpiCbRepTimeOut 1048 /* repetitive */ #define vhpiCbSensitivity 1049 /* repetitive */ /************************* CALLBACK FLAGS ***************************/ #define vhpiReturnCb 0x00000001 #define vhpiDisableCb 0x00000010 /************** vhpiAutomaticRestoreP property values *************/ typedef enum { vhpiRestoreAll = 1, vhpiRestoreUserData = 2, vhpiRestoreHandles = 4, vhpiRestoreCallbacks = 8 } vhpiAutomaticRestoreT ; /******************** FUNCTION DECLARATIONS *********************/ XXTERN int vhpi_assert (vhpiSeverityT severity, char *formatmsg, ...); /* callback related */ XXTERN vhpiHandleT vhpi_register_cb (vhpiCbDataT *cb_data_p, int32_t flags); XXTERN int vhpi_remove_cb (vhpiHandleT cb_obj); XXTERN int vhpi_disable_cb (vhpiHandleT cb_obj); XXTERN int vhpi_enable_cb (vhpiHandleT cb_obj); XXTERN int vhpi_get_cb_info (vhpiHandleT object, vhpiCbDataT *cb_data_p); /* utilities for sensitivity-set bitmaps */ /* The replacement text for these macros is implementation defined */ /* The behavior is specified in G.1 */ #define VHPI_SENS_ZERO(sens) vhpi_sens_zero(sens) #define VHPI_SENS_SET(obj, sens) vhpi_sens_set(obj, sens) #define VHPI_SENS_CLR(obj, sens) vhpi_sens_clr(obj, sens) #define VHPI_SENS_ISSET(obj, sens) vhpi_sens_isset(obj, sens) #define VHPI_SENS_FIRST(sens) vhpi_sens_first(sens) /* for obtaining handles */ XXTERN vhpiHandleT vhpi_handle_by_name (const char *name, vhpiHandleT scope); XXTERN vhpiHandleT vhpi_handle_by_index (vhpiOneToManyT itRel, vhpiHandleT parent, int32_t indx); /* for traversing relationships */ XXTERN vhpiHandleT vhpi_handle (vhpiOneToOneT type, vhpiHandleT referenceHandle); XXTERN vhpiHandleT vhpi_iterator (vhpiOneToManyT type, vhpiHandleT referenceHandle); XXTERN vhpiHandleT vhpi_scan (vhpiHandleT iterator); /* for processsing properties */ XXTERN vhpiIntT vhpi_get (vhpiIntPropertyT property, vhpiHandleT object); XXTERN const vhpiCharT * vhpi_get_str (vhpiStrPropertyT property, vhpiHandleT object); XXTERN vhpiRealT vhpi_get_real (vhpiRealPropertyT property, vhpiHandleT object); XXTERN vhpiPhysT vhpi_get_phys (vhpiPhysPropertyT property, vhpiHandleT object); /* for access to protected types */ typedef int (*vhpiUserFctT)(); XXTERN int vhpi_protected_call (vhpiHandleT varHdl, vhpiUserFctT userFct, void *userData); /* value processing */ /* vhpi_put_value modes */ typedef enum { vhpiDeposit, vhpiDepositPropagate, vhpiForce, vhpiForcePropagate, vhpiRelease, vhpiSizeConstraint } vhpiPutValueModeT; typedef enum { vhpiInertial, vhpiTransport } vhpiDelayModeT; XXTERN int vhpi_get_value (vhpiHandleT expr, vhpiValueT *value_p); XXTERN int vhpi_put_value (vhpiHandleT object, vhpiValueT *value_p, vhpiPutValueModeT mode); XXTERN int vhpi_schedule_transaction (vhpiHandleT drivHdl, vhpiValueT *value_p, uint32_t numValues, vhpiTimeT *delayp, vhpiDelayModeT delayMode, vhpiTimeT *pulseRejp); XXTERN int vhpi_format_value (const vhpiValueT *in_value_p, vhpiValueT *out_value_p); /* time processing */ XXTERN void vhpi_get_time (vhpiTimeT *time_p, long *cycles); #define vhpiNoActivity -1 XXTERN int vhpi_get_next_time (vhpiTimeT *time_p); /* simulation control */ typedef enum { vhpiStop = 0, vhpiFinish = 1, vhpiReset = 2 #ifdef VHPIEXTEND_CONTROL VHPIEXTEND_CONTROL #endif } vhpiSimControlT; XXTERN int vhpi_control (vhpiSimControlT command, ...); /* I/O routine */ XXTERN int vhpi_printf (const char *format, ...); XXTERN int vhpi_vprintf (const char *format, va_list args); /* utilities to print VHDL strings */ XXTERN int vhpi_is_printable( char ch ); /* utility routines */ XXTERN int vhpi_compare_handles (vhpiHandleT handle1, vhpiHandleT handle2); XXTERN int vhpi_check_error (vhpiErrorInfoT *error_info_p); XXTERN int vhpi_release_handle (vhpiHandleT object); /* creation functions */ XXTERN vhpiHandleT vhpi_create (vhpiClassKindT kind, vhpiHandleT handle1, vhpiHandleT handle2); /* Foreign model data structures and functions */ typedef enum { vhpiArchF = 1, vhpiFuncF = 2, vhpiProcF = 3, vhpiLibF = 4, vhpiAppF = 5 } vhpiForeignKindT; typedef struct vhpiForeignDataS { vhpiForeignKindT kind; char * libraryName; char * modelName; void (*elabf)(const struct vhpiCbDataS *cb_data_p); void (*execf)(const struct vhpiCbDataS *cb_data_p); } vhpiForeignDataT; XXTERN vhpiHandleT vhpi_register_foreignf (vhpiForeignDataT *foreignDatap); /* vhpi_get_foreign_info is DEPRECATED and is replaced by the function vhpi_get_foreignf_info */ XXTERN int vhpi_get_foreignf_info (vhpiHandleT hdl, vhpiForeignDataT *foreignDatap); /* for saving and restoring foreign models data */ XXTERN size_t vhpi_get_data (int32_t id, void *dataLoc, size_t numBytes); XXTERN size_t vhpi_put_data (int32_t id, void *dataLoc, size_t numBytes); #ifdef VHPIEXTEND_FUNCTIONS VHPIEXTEND_FUNCTIONS #endif /**************************** Typedef for VHPI registration functions ****************************/ typedef void (*vhpiRegistrationFctT)(); #undef PLI_EXTERN #undef PLI_VEXTERN #ifdef VHPI_USER_DEFINED_DLLISPEC #undef VHPI_USER_DEFINED_DLLISPEC #undef PLI_DLLISPEC #endif #ifdef VHPI_USER_DEFINED_DLLESPEC #undef VHPI_USER_DEFINED_DLLESPEC #undef PLI_DLLESPEC #endif #ifdef PLI_PROTOTYPES #undef PLI_PROTOTYPES #undef XXTERN #undef EETERN #endif #ifdef __cplusplus } #endif #endif /* VHPI_USER_H */