/***************************************************************************
 * sv_vpi_user.h
 *
 * Accellera
SystemVerilog VPI extensions.
 *
 * This file contains the constant definitions,
structure definitions, and
 * routine
declarations used by the Verilog PLI procedural
interface VPI
 * access routines.
 *
 **************************************************************************/
#ifndef SV_VPI_USER_H
#define
SV_VPI_USER_H
#include
<vpi_user.h>
#ifdef __cplusplus
extern "C" {
#endif
}
/******************************
OBJECT TYPES ******************************/
#define
vpiPackage                500
#define
vpiInterface              501
#define
vpiProgram                502
#define
vpiInterfaceArray         503
#define
vpiProgramArray           504
#define
vpiTypespec        505
#define
vpiModport                506
#define
vpiInterfaceTfDecl  507
#define
vpiRefObj                 508
#define
vpiVarBitVar      
       vpiRegBit
#define
vpiLongIntVar             509
#define
vpiShortIntVar            510
#define
vpiIntVar                 511
#define
vpiShortRealVar           512
#define
vpiByteVar                513
#define
vpiClassVar        514
#define
vpiStringVar              515
#define
vpiEnumVar                516
#define
vpiStructVar              517
#define
vpiUnionVar        518
#define
vpiBitVar                 519
#define
vpiLogicVar         
     vpiRegVar
#define
vpiArrayVar         
     vpiRegArray
#define
vpiLongIntTypespec  520
#define
vpiShortRealTypespec      521
#define
vpiByteTypespec           522
#define
vpiShortIntTypespec       523
#define
vpiIntTypespec            524
#define
vpiClassTypespec          525
#define
vpiStringTypespec         526
#define
vpiVarBitTypespec         527
#define
vpiEnumTypespec           528
#define
vpiEnumConst              529
#define
vpiIntegerTypespec  530
#define
vpiTimeTypespec           531
#define
vpiRealTypespec           532
#define
vpiStructTypespec         533
#define
vpiUnionTypespec          534
#define
vpiBitTypespec            535
#define
vpiLogicTypespec          536
#define
vpiArrayTypespec          537
#define
vpiVoidTypespec           538
#define
vpiMemberTypespec         539
#define
vpiClockingBlock          540
#define
vpiClockingIODecl         541
#define
vpiClassDefn              542
#define
vpiConstraint             543
#define
vpiConstraintOrdering     544
#define
vpiConstraintDist         545
#define
vpiDistItem        546
#define
vpiAliasStmt              547
#define
vpiThread                 548
#define
vpiMethodFuncCall         549
#define
vpiMethodTaskCall         550
#define
vpiAssertProperty         551
#define
vpiAssumeProperty         552
#define
vpiCoverProperty          553
#define
vpiDisableCondition       554
#define
vpiClockingEvent          555
#define
vpiPropertyDecl           556
#define
vpiPropertySpec           557
#define
vpiPropertyExpr           558
#define
vpiMulticlockSequenceExpr 559
#define
vpiClockedSeq             560
#define
vpiPropertyInst           561
#define
vpiSequenceDecl           562
#define
vpiSequenceSpec           563
#define
vpiActualArgExpr          564
#define
vpiSequenceInst           565
#define
vpiImmediateAssert  566
#define
vpiReturn                 567
#define
vpiAnyPattern             568
#define
vpiTaggedPattern          569
#define
vpiStructPattern          570
#define
vpiDoWhile                571
#define
vpiOrderedWait            572
#define
vpiWaitFork        573
#define
vpiDisableFork            574
#define
vpiExpectStmt             575
#define
vpiForeachStmt            576
#define
vpiFinal                  577
/********************************
METHODS *********************************/
/*************
methods used to traverse 1 to 1 relationships **************/
#define
vpiInterfaceConn          500
#define
vpiTypedefAlias           501
#define
vpiBaseTypespec           502
#define
vpiElemTypespec           503
#define
vpiDefInputSkew           504
#define
vpiDefOutputSkew          505
#define
vpiSkew                   506
#define
vpiBaseClass              507
#define
vpiActualDefn             508
#define
vpiLhs                    509
#define
vpiRhs                    510
#define
vpiOrigin                 511
#define
vpiPrefix                 512
#define
vpiWith                   513
#define
vpiSuccessStmt            514
#define
vpiFailStmt        515
#define
vpiProperty        516
/************
methods used to traverse 1 to many relationships ************/
#define
vpiTypedef                517
#define
vpiDefaultClocking  518
#define
vpiInstance        519
#define
vpiImport                 520
#define
vpiDerivedClasses         521
#define
vpiMethods                522
#define
vpiSolveBefore            523
#define
vpiSolveAfter             524
#define
vpiWeight                 525
#define
vpiWaitingProcesses       526
#define
vpiMessages        527
#define
vpiMembers                528
#define
vpiLoopVars        529
/************************
generic object properties ***********************/
#define
vpiTop                    530
#define
vpiUnit                   531
#define
vpiAccessType             532
#define
vpiForkJoin        533
#define
vpiExtern                 534
#define
vpiDPIExtern              535
#define
vpiDPIImport              536
#define
vpiArrayType              537
#define
vpiDynamicArray           538
#define
vpiQueueArray             539
#define
vpiStaticArray            540
#define
vpiIsRandomized           541
#define
vpiRandType        542
#define
vpiVpiRand                543
#define
vpiRandC                  544
#define
vpiNotRand                545
#define
vpiConstantVar            546
#define
vpiMember                 547
#define
vpiVisibility             548
#define
vpiPublic                 549
#define
vpiProtected              550
#define
vpiPrivate                551
#define
vpiPacked                 552
#define
vpiTagged                 553
#define
vpiRef                    554
#define
vpiDefaultSkew            555
#define
vpiVirtual                556
#define
vpiUserDefined            557
#define
vpiIsConstraintEnabled    558
#define
vpiClassType              559
#define
vpiMailbox                560
#define
vpiSemaphore              561
#define
vpiAssociativeArray       562
#define
vpiIndexTypespec          563
#define
vpiMethod                 564
#define
vpiValid                  565
#define
vpiActive                 566
#define
vpiIsClockInferred  567
#define
vpiUniqueQualifier  568
#define
vpiPriorityQualifier      569
#define
vpiTaggedQualifier  570
#define
vpiNullConst              571
#define
vpiOneStepConst           572
#define
VpiAlwaysType             573
#define
vpiAlwaysComb             574
#define
vpiAlwaysFF        575
#define
vpiAlwaysLatch            576
/********************************
Operators *******************************/
#define
vpiEqualDist              577    /* constraint equal distribution
                                         * operator */
#define
vpiDivDist                578    /* constraint divided distribution
                                         * operator */
#define
vpiImplyOp                579    /* -> implication operator */
#define
vpiNonOverlapImplyOp      580    /* |=> non-overlapped implication */
#define
vpiOverlapImplyOp         581    /* |-> overlapped implication
                                         * operator */
#define
vpiUnaryCycleDelayOp      582    /* binary cycle delay (##) operator */
#define
vpiCycleDelayOp           583    /* binary cycle delay (##) operator */
#define
vpiIntersectOp            584    /* intersection operator */
#define
vpiFirstMatchOp           585    /* first_match
operator */
#define
vpiThroughoutOp           586    /* throught
operator */
#define
vpiWithinOp        587    /* within operator */
#define
vpiRepeatOp        588    /* [=] non-consecutive repetition */
#define
vpiConsecutiveRepeatOp    589    /* [*] consecutive repetition
*/
#define
vpiGotoRepeatOp           590    /* [->] goto
repetition */
#define
vpiPostIncOp              591    /* ++ post-increment */
#define
vpiPreIncOp        592    /* ++ pre-increment */
#define
vpiPostDecOp              593    /* -- post-decrement */
#define
vpiPreDecOp        594    /* -- pre-decrement */
#define
vpiMatchOp                595    /* match()
operator */
#define
vpiCastOp                 596    /* type`()
operator */
#define
vpiIffOp                  597    /* iff operator
*/
#define
vpiWildEqOp        598    /* =?= operator */
#define
vpiWildNeqOp              599   
/* !?= operator */
#define
vpiStreamLROp             600    /* the left-to-right streaming {>>}
                                         * operator */
#define
vpiStreamRLOp             601    /* the right-to-left streaming {<<}
                                         * operator */
#define
vpiMatchedOp              602    /* the .matched sequence operation */
#define
vpiEndedOp                603    /* the .ended sequence operation */
/**************************
STRUCTURE DEFINITIONS *************************/
/*****************************  structure
*****************************/
/****************************
CALLBACK REASONS ****************************/
#define
cbStartOfThread          500   
/* callback on thread creation */
#define
cbEndOfThread  
         501    /* callback on thread termination */
#define
cbEnterThread  
         502    /* callback on re-entering thread */
#define
cbStartOfFrame 
         503    /* callback on frame creation */
#define
cbEndOfFrame   
         504    /* callback on frame exit */
#define
cbTypeChange   
         505    /* callback on variable type/size
                                         * change */
/*************************
FUNCTION DECLARATIONS **************************/
/******************************************************************************/
/******************************************************************************/
/*******************************
Coverage VPI *********************************/
/*
coverage has been assigned the numeric range 650-699 */
/*
coverage control */
#define
vpiCoverageStart 
        650
#define
vpiCoverageStop 
         651
#define
vpiCoverageReset          652
#define
vpiCoverageCheck          653
#define
vpiCoverageMerge          654
#define
vpiCoverageSave           655
/*
coverage type properties */
#define
vpiAssertCoverage         656
#define
vpiFsmStateCoverage       657
#define
vpiStatementCoverage      658
#define
vpiToggleCoverage         659
/*
Coverage status properties */
#define
vpiCovered                660
#define
vpiCoverMax        661
#define
vpiCoveredCount           662
/*
Assertion-specific coverage status properties */
#define
vpiAssertAttemptCovered   663
#define
vpiAssertSuccessCovered   664
#define
vpiAssertFailureCovered   665
/*
FSM-specific coverage status properties */
#define
vpiFsmStates              667
#define
vpiFsmStateExpression     668
/*
FSM handle types */ 
#define
vpiFsm                    669
#define
vpiFsmHandle              670
/******************************************************************************/
/******************************************************************************/
/********************************
Assertion VPI *******************************/
/*
assertions have been assigned the numeric range 700-799 */
/*
assertion types */
#define
vpiSequenceType           701
#define
vpiAssertType             702
#define
vpiCoverType       703
#define
vpiPropertyType           704
#define
vpiImmediateAssertType    705
/*
assertion callback types */
#define
cbAssertionStart          700
#define
cbAssertionSuccess  701
#define
cbAssertionFailure  702
#define
cbAssertionStepSuccess    703
#define
cbAssertionStepFailure    704
#define
cbAssertionDisable  705
#define
cbAssertionEnable         706
#define
cbAssertionReset          707    
#define
cbAssertionKill           708
#define
cbAssertionSysInitialized 709
#define
cbAssertionSysStart       710
#define
cbAssertionSysStop  711
#define
cbAssertionSysEnd         712
#define
cbAssertionSysReset       713
/*
Assertion control constants */
#define
vpiAssertionDisable       730
#define
vpiAssertionEnable  731
#define
vpiAssertionReset         732
#define
vpiAssertionKill          733
#define
vpiAssertionEnableStep    734
#define
vpiAssertionDisableStep   735
#define
vpiAssertionClockSteps    736
#define
vpiAssertionSysStart      737
#define
vpiAssertionSysStop       738
#define
vpiAssertionSysEnd  739
#define
vpiAssertionSysReset      740
/*
Assertion related structs and types */
typedef struct
t_vpi_source_info {
    PLI_BYTE8 *fileName;
    PLI_INT32 startLine;
    PLI_INT32 startColumn;
    PLI_INT32 endLine;
    PLI_INT32 endColumn;
} s_vpi_source_info, *p_vpi_source_info;
typedef struct
t_vpi_assertion_info {
    PLI_BYTE8 *assertName;              /* name of assertion */
    vpiHandle
instance;                 /* instance
containing assertion */
    PLI_BYTE8 defname;                  /* name of module/interface
containing
                                         * assertion */
    vpiHandle
clock;                    /* clocking expression */
    PLI_INT32 assertionType;            /* vpiSequenceType,
vpiAssertType,
                                         * vpiCoverType, vpiPropertyType,
                                         * vpiImmediateAssertType */
    s_vpi_source_info
sourceInfo;
} s_vpi_assertion_info, *p_vpi_assertion_info;
typedef struct
t_vpi_assertion_step_info {
    PLI_INT32 matched_expression_count;
    vpiHandle
*matched_exprs;                 /* array of expressions */
    p_vpi_source_info
*exprs_source_info;     /* array of source info */
    PLI_INT32 stateFrom,
stateTo;            
/* identify transition */
} s_vpi_assertion_step_info, *p_vpi_assertion_step_info;
typedef struct
t_vpi_attempt_info {
    union {
        vpiHandle failExpr;
        p_vpi_assertion_step_info
step;
    } detail;
    s_vpi_time
attemptStartTime;        /* Time attempt triggered */
} s_vpi_attempt_info, *p_vpi_attempt_info;
/* typedef for vpi_register_assertion_cb
callback function */
typedef PLI_INT32 (vpi_assertion_callback_func)(
    PLI_INT32 reason,                   /* callback reason */
    p_vpi_time cb_time,                
/* callback time */
    vpiHandle
assertion,                /* handle to
assertion */
    p_vpi_attempt_info
info,            /* attempt related
information */
    PLI_BYTE8 *user_data                /* user data entered upon
                                         * registration */
    );
/*
assertion specific VPI functions */
PLI_INT32
vpi_get_assertion_info (assert_handle,
p_vpi_assertion_info);
vpiHandle vpi_register_assertion_cb(
    vpiHandle
assertion,                /* handle to
assertion */
    PLI_INT32 reason,                   /* reason for which
callbacks needed */
    vpi_assertion_callback_func
*cb_rtn,
    PLI_BYTE8 *user_data                /* user data to be supplied to cb */
    );
/******************************************************************************/
/******************************************************************************/
/***************
Reader VPI ***********************/
/*
reader VPI has been assigned the numeric range 800-899 */
/**********
Reader types ***********/
#define
vpiTrvsObj        
      800    /*
Data traverse object */
#define
vpiCollection     
      810    /* Collection of VPI handle  */
#define
vpiObjCollection  
      811    /* Collection of traversable design
                                         * objs */
#define
vpiTrvsCollection 
      812    /* Collection of vpiTrvsObjs  */
/*********
Reader methods *********/
/*
Check */
#define
vpiIsLoaded       
      820    /* Object data is loaded check */
#define
vpiHasDataVC      
      821    /* Traverse object has at least one VC
                                         * at some
point in time in the
                                         * database check */
#define
vpiHasVC          
      822    /* Has VC at specific time check */ 
#define
vpiHasNoValue     
      823    /* Has no value at
specific time
                                         * check
*/
#define
vpiBelong         
      824    /* Belongs to extension check */
/*
Access */
#define
vpiAccessLimitedInteractive 830 /* Interactive access
*/
#define
vpiAccessInteractive     831   
/* interactive with history access */
#define
vpiAccessPostProcess     832   
/* Database access */
/*
Member of a collection */
#define
vpiMember                840    /* Member of a collection */
/*
Iteration on instances for loaded */
#define
vpiDataLoaded            850    /* Use in vpi_iterate() */
/*
Control Traverse/Check Time */
#define
vpiMinTime               860    /* Min time  */
#define
vpiMaxTime               864    /* Max time  */
#define
vpiPrevVC                868    /* Previous Value Change (VC) */
#define
vpiNextVC                870    /* Next Value Change (VC) */
#define
vpiTime                  874    /* Time jump */
/**********
routines **********/
PLI_INT32
vpi_load_extension PROTO_PARAMS((PLI_BYTE8
*extension_name, ...))
       /* In its general
form */
     
/**********
Reader routines **********/
PLI_INT32
vpi_load_extension PROTO_PARAMS((PLI_BYTE8
*extension_name, 
                                  PLI_BYTE8
*name, vpiType mode, ...))
                                        /* for the reader extension */
     
PLI_INT32
vpi_close PROTO_PARAMS((PLI_INT32
tool, vpiType prop,
                                 PLI_BYTE8*
name));
PLI_INT32
vpi_load_init PROTO_PARAMS((vpiHandle objCollection, vpiHandle scope,
                                 PLI_INT32
level));
PLI_INT32
vpi_load PROTO_PARAMS((vpiHandle h));
PLI_INT32
vpi_unload PROTO_PARAMS((vpiHandle h));
vpiHandle vpi_create
PROTO_PARAMS((vpiType prop, vpiHandle
h, vpiHandle obj));
vpiHandle vpi_goto
PROTO_PARAMS((vpiType prop, vpiHandle
obj, p_vpi_time time_p,
      PLI_INT32
*ret_code));
vpiHandle vpi_filter
PROTO_PARAMS((vpiHandle h, PLI_INT32 ft, PLI_INT32
flag));
#ifdef __cplusplus
}
#endif
#endif