diff options
Diffstat (limited to 'src/grt/vhpi_user.h')
-rw-r--r-- | src/grt/vhpi_user.h | 1212 |
1 files changed, 1212 insertions, 0 deletions
diff --git a/src/grt/vhpi_user.h b/src/grt/vhpi_user.h new file mode 100644 index 000000000..c20e21f05 --- /dev/null +++ b/src/grt/vhpi_user.h @@ -0,0 +1,1212 @@ +/* -------------------------------------------------------------------- +/* +/* 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 <stddef.h> +#include <stdarg.h> +/* 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 <stdint.h> +#elif defined(__linux) || (defined(__APPLE__) && defined(__MACH__)) +#include <inttypes.h> +#else +#include <sys/types.h> +#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 */ |