/***************************************************************************
* 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