/*******************************************************************************
* vpi_user.h
*
* IEEE 1364-2005 Verilog HDL Programming Language Interface (PLI)
*
* This file contains the constant definitions,
structure definitions, and
* routine declarations used by the Verilog PLI procedural interface VPI
* access routines.
*
******************************************************************************/
/*******************************************************************************
* NOTE: the constant values 1 through 299 are reserved for use in this
* vpi_user.h file.
******************************************************************************/
#ifndef VPI_USER_H
#define VPI_USER_H
#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------------------*/
/*--------------------------- Version compatibility
--------------------------*/
/*----------------------------------------------------------------------------*/
/* This is the VPI API version that can be
selected by the user.
There are four possible versions (assuming the next SystemVerilog update to
happen in 2008) here: VERILOG_1995, VERILOG_2001,
VERILOG_2005, and the
default value set below, which is VERILOG_2008. The define below selects
the VERILOG_2008 version to be the default one, which can be
overridden
by the user by defining VPI_USER_VERSION.
NOTE: this asserts that VPI_USER_VERSION is always defined ...
below it will be checked
to have always a correct value ...
*/
#ifndef VPI_USER_VERSION
#define VPI_USER_VERSION VERILOG_2008
#endif
/* The code below maps the standard VPI functions
to the specific function
for the given interface kind (2008, 2005, 2001, or 1995). It
also checks
that VPI_USER_VERSION just have valid values assigned.
NOTE: This assumes we want to have a complete set of functions
for each
Verilog standard version.
It might be sufficient to just have two ...
NOTE: If VPI_USER_VERSION has no value assigned, no mapping
will happen,
and the user chooses the
standard vpi_ functions (which might be
the same as the 1995
ones).
*/
#if VPI_USER_VERSION == VERILOG_2008
#define vpi_register_cb
vpi2008_register_cb
#define vpi_remove_cb
vpi2008_remove_cb
#define vpi_get_cb_info
vpi2008_get_cb_info
#define vpi_register_systf
vpi2008_register_systf
#define vpi_get_systf_info
vpi2008_get_systf_info
#define vpi_handle_by_name
vpi2008_handle_by_name
#define vpi_handle_by_index
vpi2008_handle_by_index
#define vpi_handle
vpi2008_handle
#define vpi_handle_multi
vpi2008_handle_multi
#define vpi_iterate
vpi2008_iterate
#define vpi_scan
vpi2008_scan
#define vpi_get
vpi2008_get
#define vpi_get_str
vpi2008_get_str
#define vpi_get_delays
vpi2008_get_delays;
#define vpi_put_delays
vpi2008_put_delays
#define vpi_get_value
vpi2008_get_value
#define vpi_put_value
vpi2008_put_value
#define vpi_get_time
vpi2008_get_time
#define vpi_mcd_open
vpi2008_mcd_open
#define vpi_mcd_close
vpi2008_mcd_close
#define vpi_mcd_name
vpi2008_mcd_name
#define vpi_mcd_printf
vpi2008_mcd_printf
#define vpi_printf
vpi2008_printf
#define vpi_compare_objects
vpi2008_compare_objects
#define vpi_chk_error
vpi2008_chk_error
#define vpi_free_object
vpi2008_free_object
#define vpi_get_vlog_info
vpi2008_get_vlog_info
#define vpi_get_data
vpi2008_get_data
#define vpi_put_data
vpi2008_put_data
#define vpi_get_userdata
vpi2008_get_userdata
#define vpi_put_userdata
vpi2008_put_userdata
#define vpi_vprintf
vpi2008_vprintf
#define vpi_mcd_vprintf
vpi2008_mcd_vprintf
#define vpi_flush
vpi2008_flush
#define vpi_mcd_flush
vpi2008_mcd_flush
#define vpi_control
vpi2008_control
#define vpi_handle_by_multi_index
vpi2008_handle_by_multi_index
#else
/* #if VPI_USER_VERSION == VERILOG_2008 */
#if VPI_USER_VERSION == VERILOG_2005
#define vpi_register_cb
vpi2005_register_cb
#define vpi_remove_cb
vpi2005_remove_cb
#define vpi_get_cb_info
vpi2005_get_cb_info
#define vpi_register_systf
vpi2005_register_systf
#define vpi_get_systf_info
vpi2005_get_systf_info
#define vpi_handle_by_name
vpi2005_handle_by_name
#define vpi_handle_by_index
vpi2005_handle_by_index
#define vpi_handle
vpi2005_handle
#define vpi_handle_multi
vpi2005_handle_multi
#define vpi_iterate
vpi2005_iterate
#define vpi_scan
vpi2005_scan
#define vpi_get
vpi2005_get
#define vpi_get_str
vpi2005_get_str
#define vpi_get_delays
vpi2005_get_delays;
#define vpi_put_delays
vpi2005_put_delays
#define vpi_get_value
vpi2005_get_value
#define vpi_put_value
vpi2005_put_value
#define vpi_get_time
vpi2005_get_time
#define vpi_mcd_open
vpi2005_mcd_open
#define vpi_mcd_close
vpi2005_mcd_close
#define vpi_mcd_name
vpi2005_mcd_name
#define vpi_mcd_printf
vpi2005_mcd_printf
#define vpi_printf
vpi2005_printf
#define vpi_compare_objects
vpi2005_compare_objects
#define vpi_chk_error
vpi2005_chk_error
#define vpi_free_object
vpi2005_free_object
#define vpi_get_vlog_info
vpi2005_get_vlog_info
#define vpi_get_data
vpi2005_get_data
#define vpi_put_data
vpi2005_put_data
#define vpi_get_userdata
vpi2005_get_userdata
#define vpi_put_userdata
vpi2005_put_userdata
#define vpi_vprintf
vpi2005_vprintf
#define vpi_mcd_vprintf
vpi2005_mcd_vprintf
#define vpi_flush
vpi2005_flush
#define vpi_mcd_flush
vpi2005_mcd_flush
#define vpi_control
vpi2005_control
#define vpi_handle_by_multi_index
vpi2005_handle_by_multi_index
#else
/* #if VPI_USER_VERSION == VERILOG_2005 */
#if VPI_USER_VERSION == VERILOG_2001
#define vpi_register_cb
vpi2001_register_cb
...
#define vpi_handle_by_multi_index
vpi2001_handle_by_multi_index
#else
/*
#if VPI_USER_VERSION == VERILOG_2001 */
#if
VPI_USER_VERSION == VERILOG_1995
#define vpi_register_cb
vpi1995_register_cb
...
#define vpi_handle_by_multi_index
vpi1995_handle_by_multi_index
#else /*
#if VPI_USER_VERSION == VERILOG_1995 */
/* This will be raised, if VPI_USER_VERSION has an illegal value */
#error "#define VPI_USER_VERSION must have a value of
VERILOG_{1995|2001|2005|2008}"
#endif /* #if VPI_USER_VERSION == VERILOG_1995
*/
#endif /* #if VPI_USER_VERSION == VERILOG_2001
*/
#endif /* #if VPI_USER_VERSION ==
VERILOG_2005 */
#endif /* #if VPI_USER_VERSION ==
VERILOG_2008 */
/*----------------------------------------------------------------------------*/
/*--------------------------- Version compatibility
--------------------------*/
/*----------------------------------------------------------------------------*/
/* This is the VPI API version that can be
selected by the user.
There are four possible versions (assuming the next SystemVerilog update to
happen in 2008) here: VERILOG_1995, VERILOG_2001,
VERILOG_2005, and the
default value set below, which is VERILOG_2008. The define below selects
the VERILOG_2008 version to be the default one, which can be
overridden
by the user by defining VPI_USER_VERSION.
NOTE: this asserts that VPI_USER_VERSION is always defined ...
below it will be checked
to have always a correct value ...
*/
#ifndef VPI_USER_VERSION
/* this is the default value, if it has not
been defined elsewhere */
#define VPI_USER_VERSION VERILOG_2008
#else
#if (VPI_USER_VERSION !=
VERILOG_2005) && (VPI_USER_VERSION != VERILOG_2001) && (VPI_USER_VERSION
!= VERILOG_1995)
/* This will be raised, if VPI_USER_VERSION has an illegal value */
#error "#define VPI_USER_VERSION must have a value of
VERILOG_{1995|2001|2005|2008}"
#endif
#endif
/************************** FUNCTION TRAY
DECLARATION *************************/
typedef struct t_vpi_user_function_tray
{
XXTERN vpiHandle register_cb
PROTO_PARAMS((p_cb_data cb_data_p));
XXTERN PLI_INT32 remove_cb PROTO_PARAMS((vpiHandle cb_obj));
XXTERN void get_cb_info PROTO_PARAMS((vpiHandle object,p_cb_data cb_data_p));
XXTERN vpiHandle register_systf
PROTO_PARAMS((p_vpi_systf_data systf_data_p));
XXTERN void get_systf_info PROTO_PARAMS((vpiHandle object, p_vpi_systf_data
systf_data_p));
/* for obtaining handles */
XXTERN vpiHandle handle_by_name
PROTO_PARAMS((PLI_BYTE8 *name, vpiHandle scope));
XXTERN vpiHandle handle_by_index
PROTO_PARAMS((vpiHandle object, PLI_INT32 indx));
/* for traversing relationships */
XXTERN vpiHandle handle PROTO_PARAMS((PLI_INT32
type, vpiHandle refHandle));
XXTERN vpiHandle handle_multi
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle1, vpiHandle refHandle2, ... ));
XXTERN vpiHandle iterate PROTO_PARAMS((PLI_INT32
type, vpiHandle refHandle));
XXTERN vpiHandle scan PROTO_PARAMS((vpiHandle iterator));
/* for processing properties */
XXTERN PLI_INT32 get PROTO_PARAMS((PLI_INT32 property, vpiHandle
object));
XXTERN PLI_BYTE8 *vpi_get_str
PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
/* delay processing */
XXTERN void get_delays PROTO_PARAMS((vpiHandle object, p_vpi_delay delay_p));
XXTERN void put_delays PROTO_PARAMS((vpiHandle object, p_vpi_delay delay_p));
/* value processing */
XXTERN void get_value PROTO_PARAMS((vpiHandle expr, p_vpi_value value_p));
XXTERN vpiHandle put_value
PROTO_PARAMS((vpiHandle object, p_vpi_value
value_p,
p_vpi_time time_p,
PLI_INT32 flags));
/* time processing */
XXTERN void get_time PROTO_PARAMS((vpiHandle object, p_vpi_time time_p));
/* I/O routines */
XXTERN PLI_UINT32 mcd_open
PROTO_PARAMS((PLI_BYTE8 *fileName));
XXTERN PLI_UINT32 mcd_close
PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_BYTE8 *vpi_mcd_name
PROTO_PARAMS((PLI_UINT32 cd));
XXTERN PLI_INT32 mcd_printf PROTO_PARAMS((PLI_UINT32
mcd, PLI_BYTE8 *format, ...));
XXTERN PLI_INT32 printf PROTO_PARAMS((PLI_BYTE8
*format,...));
/* utility routines */
XXTERN PLI_INT32 compare_objects PROTO_PARAMS((vpiHandle object1, vpiHandle
object2));
XXTERN PLI_INT32 chk_error PROTO_PARAMS((p_vpi_error_info error_info_p));
XXTERN PLI_INT32 free_object PROTO_PARAMS((vpiHandle object));
XXTERN PLI_INT32 get_vlog_info PROTO_PARAMS((p_vpi_vlog_info vlog_info_p));
/* routines added with 1364-1995 */
XXTERN PLI_INT32 get_data PROTO_PARAMS((PLI_INT32
id, PLI_BYTE8 *dataLoc,PLI_INT32 numOfBytes));
XXTERN PLI_INT32 put_data PROTO_PARAMS((PLI_INT32
id,PLI_BYTE8 *dataLoc,PLI_INT32 numOfBytes));
XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj));
XXTERN PLI_INT32 put_userdata PROTO_PARAMS((vpiHandle obj,void *userdata));
XXTERN PLI_INT32 vprintf PROTO_PARAMS((PLI_BYTE8
*format, va_list ap));
XXTERN PLI_INT32 mcd_vprintf
PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 flush PROTO_PARAMS((void));
XXTERN PLI_INT32 mcd_flush
PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_INT32 control PROTO_PARAMS((PLI_INT32 operation, ...));
XXTERN vpiHandle handle_by_multi_index
PROTO_PARAMS((vpiHandle obj,
PLI_INT32 num_index, PLI_INT32 *index_array));
...
} s_vpi_user_function_tray_data,
* p_vpi_user_function_tray_data;
/* This is the declaration of the only new
symbol to be added */
extern t_vpi_user_function_tray*
vpi_standard_function_tray;
/* The code below maps the standard VPI functions
to the specific function
defined within the common function
tray. For this function tray we can
define a function to switch between
interfaces.
Benefit: more flexible
Drawback: only two possible versions
(standard code + function_tray)
*/
#if VPI_USER_VERSION != VERILOG_2008
#define vpi_register_cb
vpi_standard_function_tray->register_cb
#define vpi_remove_cb
vpi_standard_function_tray->remove_cb
#define vpi_get_cb_info
vpi_standard_function_tray->get_cb_info
#define vpi_register_systf
vpi_standard_function_tray->register_systf
#define vpi_get_systf_info
vpi_standard_function_tray->get_systf_info
#define vpi_handle_by_name
vpi_standard_function_tray->handle_by_name
#define vpi_handle_by_index
vpi_standard_function_tray->handle_by_index
#define vpi_handle
vpi_standard_function_tray->handle
#define vpi_handle_multi
vpi_standard_function_tray->handle_multi
#define vpi_iterate
vpi_standard_function_tray->iterate
#define vpi_scan
vpi_standard_function_tray->scan
#define vpi_get
vpi_standard_function_tray->get
#define vpi_get_str
vpi_standard_function_tray->get_str
#define vpi_get_delays
vpi_standard_function_tray->get_delays;
#define vpi_put_delays
vpi_standard_function_tray->put_delays
#define vpi_get_value
vpi_standard_function_tray->get_value
#define vpi_put_value
vpi_standard_function_tray->put_value
#define vpi_get_time
vpi_standard_function_tray->get_time
#define vpi_mcd_open
vpi_standard_function_tray->mcd_open
#define vpi_mcd_close
vpi_standard_function_tray->mcd_close
#define vpi_mcd_name
vpi_standard_function_tray->mcd_name
#define vpi_mcd_printf
vpi_standard_function_tray->mcd_printf
#define vpi_printf
vpi_standard_function_tray->printf
#define vpi_compare_objects
vpi_standard_function_tray->compare_objects
#define vpi_chk_error
vpi_standard_function_tray->chk_error
#define vpi_free_object
vpi_standard_function_tray->free_object
#define vpi_get_vlog_info
vpi_standard_function_tray->get_vlog_info
#define vpi_get_data
vpi_standard_function_tray->get_data
#define vpi_put_data
vpi_standard_function_tray->put_data
#define vpi_get_userdata
vpi_standard_function_tray->get_userdata
#define vpi_put_userdata
vpi_standard_function_tray->put_userdata
#define vpi_vprintf
vpi_standard_function_tray->vprintf
#define vpi_mcd_vprintf
vpi_standard_function_tray->mcd_vprintf
#define vpi_flush
vpi_standard_function_tray->flush
#define vpi_mcd_flush
vpi_standard_function_tray->mcd_flush
#define vpi_control
vpi_standard_function_tray->control
#define vpi_handle_by_multi_index vpi_standard_function_tray->handle_by_multi_index
#endif
/*----------------------------------------------------------------------------*/
/*----------------------------- Portability Help
-----------------------------*/
/*----------------------------------------------------------------------------*/
/* Sized variables */
#ifndef PLI_TYPES
...
/********************************** TYPEDEFS
**********************************/
typedef PLI_UINT32 *vpiHandle;
/******************************** OBJECT TYPES
********************************/
#define vpiAlways 1 /* always construct */
...
/*************************** STRUCTURE DEFINITIONS
****************************/
/******************************* time structure
*******************************/
typedef struct
t_vpi_time
{
...
/***************************** value structures
*******************************/
/
#define vpiSupplyDrive 0x80
...
/* bit mask for the flags argument to vpi_put_value()
*/
#define vpiReturnEvent 0x1000
...
/*********************** system task/function structure ***********************/
/* I am not sure something needs to be done here as well. ???? */
typedef struct
t_vpi_systf_data
{
...
PLI_INT32 (*calltf)(PLI_BYTE8 *);
PLI_INT32 (*compiletf)(PLI_BYTE8 *);
PLI_INT32 (*sizetf)(PLI_BYTE8 *); /* for sized
function callbacks only */
...
} s_vpi_systf_data, *p_vpi_systf_data;
#define vpiSysTask 1
...
/**************************** callback structures
*****************************/
/* normal callback structure */
/* NOTE: I do not think we need to modify this structure, any special
handling
for callbacks should be
done by the register_cb function, which can
then wrap the callback
function accordingly.
*/
typedef struct
t_cb_data
{
...
PLI_INT32 (*cb_rtn)(struct
t_cb_data *); /* call routine */
...
} s_cb_data, *p_cb_data;
/****************************** CALLBACK REASONS
******************************/
/***************************** Simulation related
*****************************/
#define cbValueChange 1
...
/**************************** FUNCTION DECLARATIONS
***************************/
/* callback related */
XXTERN vpiHandle vpi_register_cb
PROTO_PARAMS((p_cb_data cb_data_p));
XXTERN PLI_INT32 vpi_remove_cb PROTO_PARAMS((vpiHandle cb_obj));
XXTERN void vpi_get_cb_info PROTO_PARAMS((vpiHandle object,p_cb_data cb_data_p));
XXTERN vpiHandle vpi_register_systf
PROTO_PARAMS((p_vpi_systf_data systf_data_p));
XXTERN void vpi_get_systf_info PROTO_PARAMS((vpiHandle object, p_vpi_systf_data
systf_data_p));
/* for obtaining handles */
XXTERN vpiHandle vpi_handle_by_name
PROTO_PARAMS((PLI_BYTE8 *name, vpiHandle scope));
XXTERN vpiHandle vpi_handle_by_index
PROTO_PARAMS((vpiHandle object, PLI_INT32 indx));
/* for traversing relationships */
XXTERN vpiHandle vpi_handle
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi_handle_multi
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle1, vpiHandle refHandle2, ... ));
XXTERN vpiHandle vpi_iterate
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi_scan
PROTO_PARAMS((vpiHandle iterator));
/* for processing properties */
XXTERN PLI_INT32 vpi_get PROTO_PARAMS((PLI_INT32
property, vpiHandle object));
XXTERN PLI_BYTE8 *vpi_get_str
PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
/* delay processing */
XXTERN void vpi_get_delays PROTO_PARAMS((vpiHandle object, p_vpi_delay delay_p));
XXTERN void vpi_put_delays PROTO_PARAMS((vpiHandle object, p_vpi_delay delay_p));
/* value processing */
XXTERN void vpi_get_value PROTO_PARAMS((vpiHandle expr, p_vpi_value value_p));
XXTERN vpiHandle vpi_put_value
PROTO_PARAMS((vpiHandle object, p_vpi_value
value_p,
p_vpi_time time_p,
PLI_INT32 flags));
/* time processing */
XXTERN void vpi_get_time PROTO_PARAMS((vpiHandle object, p_vpi_time time_p));
/* I/O routines */
XXTERN PLI_UINT32 vpi_mcd_open
PROTO_PARAMS((PLI_BYTE8 *fileName));
XXTERN PLI_UINT32 vpi_mcd_close
PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_BYTE8 *vpi_mcd_name
PROTO_PARAMS((PLI_UINT32 cd));
XXTERN PLI_INT32 vpi_mcd_printf
PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format,
...));
XXTERN PLI_INT32 vpi_printf
PROTO_PARAMS((PLI_BYTE8 *format,...));
/* utility routines */
XXTERN PLI_INT32 vpi_compare_objects
PROTO_PARAMS((vpiHandle object1, vpiHandle
object2));
XXTERN PLI_INT32 vpi_chk_error PROTO_PARAMS((p_vpi_error_info error_info_p));
XXTERN PLI_INT32 vpi_free_object PROTO_PARAMS((vpiHandle object));
XXTERN PLI_INT32 vpi_get_vlog_info PROTO_PARAMS((p_vpi_vlog_info vlog_info_p));
/* routines added with 1364-1995 */
XXTERN PLI_INT32 vpi_get_data
PROTO_PARAMS((PLI_INT32 id, PLI_BYTE8 *dataLoc,PLI_INT32 numOfBytes));
XXTERN PLI_INT32 vpi_put_data
PROTO_PARAMS((PLI_INT32 id,PLI_BYTE8 *dataLoc,PLI_INT32 numOfBytes));
XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj));
XXTERN PLI_INT32 vpi_put_userdata PROTO_PARAMS((vpiHandle obj,void *userdata));
XXTERN PLI_INT32 vpi_vprintf
PROTO_PARAMS((PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi_mcd_vprintf
PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi_flush PROTO_PARAMS((void));
XXTERN PLI_INT32 vpi_mcd_flush
PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_INT32 vpi_control
PROTO_PARAMS((PLI_INT32 operation, ...));
XXTERN vpiHandle vpi_handle_by_multi_index
PROTO_PARAMS((vpiHandle obj,
PLI_INT32 num_index, PLI_INT32 *index_array));
/****************************
FUNCTION DECLARATIONS ***************************/
/* callback related */
XXTERN vpiHandle vpi2005_register_cb
PROTO_PARAMS((p_cb_data cb_data_p));
XXTERN PLI_INT32 vpi2005_remove_cb PROTO_PARAMS((vpiHandle
cb_obj));
XXTERN void vpi2005_get_cb_info PROTO_PARAMS((vpiHandle
object,p_cb_data cb_data_p));
XXTERN vpiHandle vpi2005_register_systf
PROTO_PARAMS((p_vpi_systf_data systf_data_p));
XXTERN void vpi2005_get_systf_info PROTO_PARAMS((vpiHandle
object, p_vpi_systf_data systf_data_p));
/* for obtaining handles */
XXTERN vpiHandle vpi2005_handle_by_name
PROTO_PARAMS((PLI_BYTE8 *name, vpiHandle scope));
XXTERN vpiHandle vpi2005_handle_by_index
PROTO_PARAMS((vpiHandle object, PLI_INT32 indx));
/* for traversing relationships */
XXTERN vpiHandle vpi2005_handle
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi2005_handle_multi
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle1, vpiHandle refHandle2, ... ));
XXTERN vpiHandle vpi2005_iterate
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi2005_scan PROTO_PARAMS((vpiHandle iterator));
/* for processing properties */
XXTERN PLI_INT32 vpi2005_get PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
XXTERN PLI_BYTE8 *vpi_get_str
PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
/* delay processing */
XXTERN void vpi2005_get_delays PROTO_PARAMS((vpiHandle
object, p_vpi_delay delay_p));
XXTERN void vpi2005_put_delays PROTO_PARAMS((vpiHandle
object, p_vpi_delay delay_p));
/* value processing */
XXTERN void vpi2005_get_value PROTO_PARAMS((vpiHandle
expr, p_vpi_value value_p));
XXTERN vpiHandle vpi2005_put_value PROTO_PARAMS((vpiHandle object, p_vpi_value value_p,
p_vpi_time time_p,
PLI_INT32 flags));
/* time processing */
XXTERN void vpi2005_get_time PROTO_PARAMS((vpiHandle
object, p_vpi_time time_p));
/* I/O routines */
XXTERN PLI_UINT32 vpi2005_mcd_open PROTO_PARAMS((PLI_BYTE8 *fileName));
XXTERN PLI_UINT32 vpi2005_mcd_close PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_BYTE8 *vpi_mcd_name
PROTO_PARAMS((PLI_UINT32 cd));
XXTERN PLI_INT32 vpi2005_mcd_printf PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, ...));
XXTERN PLI_INT32 vpi2005_printf PROTO_PARAMS((PLI_BYTE8 *format,...));
/* utility routines */
XXTERN PLI_INT32 vpi2005_compare_objects PROTO_PARAMS((vpiHandle
object1, vpiHandle object2));
XXTERN PLI_INT32 vpi2005_chk_error PROTO_PARAMS((p_vpi_error_info
error_info_p));
XXTERN PLI_INT32 vpi2005_free_object PROTO_PARAMS((vpiHandle
object));
XXTERN PLI_INT32 vpi2005_get_vlog_info PROTO_PARAMS((p_vpi_vlog_info
vlog_info_p));
/* routines added with 1364-1995 */
XXTERN PLI_INT32 vpi2005_get_data PROTO_PARAMS((PLI_INT32 id, PLI_BYTE8
*dataLoc,PLI_INT32 numOfBytes));
XXTERN PLI_INT32 vpi2005_put_data PROTO_PARAMS((PLI_INT32 id,PLI_BYTE8
*dataLoc,PLI_INT32 numOfBytes));
XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj));
XXTERN PLI_INT32 vpi2005_put_userdata PROTO_PARAMS((vpiHandle
obj,void *userdata));
XXTERN PLI_INT32 vpi2005_vprintf PROTO_PARAMS((PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi2005_mcd_vprintf PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi2005_flush PROTO_PARAMS((void));
XXTERN PLI_INT32 vpi2005_mcd_flush PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_INT32 vpi2005_control PROTO_PARAMS((PLI_INT32 operation, ...));
XXTERN vpiHandle vpi2005_handle_by_multi_index
PROTO_PARAMS((vpiHandle obj,
PLI_INT32 num_index, PLI_INT32 *index_array));
/****************************
FUNCTION DECLARATIONS ***************************/
/* callback related */
XXTERN vpiHandle vpi2001_register_cb
PROTO_PARAMS((p_cb_data cb_data_p));
XXTERN PLI_INT32 vpi2001_remove_cb PROTO_PARAMS((vpiHandle
cb_obj));
XXTERN void vpi2001_get_cb_info PROTO_PARAMS((vpiHandle
object,p_cb_data cb_data_p));
XXTERN vpiHandle vpi2001_register_systf
PROTO_PARAMS((p_vpi_systf_data systf_data_p));
XXTERN void vpi2001_get_systf_info PROTO_PARAMS((vpiHandle
object, p_vpi_systf_data systf_data_p));
/* for obtaining handles */
XXTERN vpiHandle vpi2001_handle_by_name
PROTO_PARAMS((PLI_BYTE8 *name, vpiHandle scope));
XXTERN vpiHandle vpi2001_handle_by_index
PROTO_PARAMS((vpiHandle object, PLI_INT32 indx));
/* for traversing relationships */
XXTERN vpiHandle vpi2001_handle
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi2001_handle_multi
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle1, vpiHandle refHandle2, ... ));
XXTERN vpiHandle vpi2001_iterate
PROTO_PARAMS((PLI_INT32 type, vpiHandle refHandle));
XXTERN vpiHandle vpi2001_scan PROTO_PARAMS((vpiHandle iterator));
/* for processing properties */
XXTERN PLI_INT32 vpi2001_get PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
XXTERN PLI_BYTE8 *vpi_get_str
PROTO_PARAMS((PLI_INT32 property, vpiHandle object));
/* delay processing */
XXTERN void vpi2001_get_delays PROTO_PARAMS((vpiHandle
object, p_vpi_delay delay_p));
XXTERN void vpi2001_put_delays PROTO_PARAMS((vpiHandle
object, p_vpi_delay delay_p));
/* value processing */
XXTERN void vpi2001_get_value PROTO_PARAMS((vpiHandle
expr, p_vpi_value value_p));
XXTERN vpiHandle vpi2001_put_value PROTO_PARAMS((vpiHandle object, p_vpi_value value_p,
p_vpi_time time_p,
PLI_INT32 flags));
/* time processing */
XXTERN void vpi2001_get_time PROTO_PARAMS((vpiHandle
object, p_vpi_time time_p));
/* I/O routines */
XXTERN PLI_UINT32 vpi2001_mcd_open PROTO_PARAMS((PLI_BYTE8 *fileName));
XXTERN PLI_UINT32 vpi2001_mcd_close PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_BYTE8 *vpi_mcd_name
PROTO_PARAMS((PLI_UINT32 cd));
XXTERN PLI_INT32 vpi2001_mcd_printf PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, ...));
XXTERN PLI_INT32 vpi2001_printf PROTO_PARAMS((PLI_BYTE8 *format,...));
/* utility routines */
XXTERN PLI_INT32 vpi2001_compare_objects PROTO_PARAMS((vpiHandle
object1, vpiHandle object2));
XXTERN PLI_INT32 vpi2001_chk_error PROTO_PARAMS((p_vpi_error_info
error_info_p));
XXTERN PLI_INT32 vpi2001_free_object PROTO_PARAMS((vpiHandle
object));
XXTERN PLI_INT32 vpi2001_get_vlog_info PROTO_PARAMS((p_vpi_vlog_info
vlog_info_p));
/* routines added with 1364-1995 */
XXTERN PLI_INT32 vpi2001_get_data PROTO_PARAMS((PLI_INT32 id, PLI_BYTE8
*dataLoc,PLI_INT32 numOfBytes));
XXTERN PLI_INT32 vpi2001_put_data PROTO_PARAMS((PLI_INT32 id,PLI_BYTE8
*dataLoc,PLI_INT32 numOfBytes));
XXTERN void *vpi_get_userdata PROTO_PARAMS((vpiHandle obj));
XXTERN PLI_INT32 vpi2001_put_userdata PROTO_PARAMS((vpiHandle
obj,void *userdata));
XXTERN PLI_INT32 vpi2001_vprintf PROTO_PARAMS((PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi2001_mcd_vprintf PROTO_PARAMS((PLI_UINT32 mcd, PLI_BYTE8 *format, va_list ap));
XXTERN PLI_INT32 vpi2001_flush PROTO_PARAMS((void));
XXTERN PLI_INT32 vpi2001_mcd_flush PROTO_PARAMS((PLI_UINT32 mcd));
XXTERN PLI_INT32 vpi2001_control PROTO_PARAMS((PLI_INT32 operation, ...));
XXTERN vpiHandle vpi2001_handle_by_multi_index
PROTO_PARAMS((vpiHandle obj,
PLI_INT32 num_index, PLI_INT32 *index_array));
/****************************** GLOBAL VARIABLES
******************************/
PLI_VEXTERN PLI_DLLESPEC void (*vlog_startup_routines[])();
/* array of function pointers, last pointer should be null */
#undef PLI_EXTERN
#undef PLI_VEXTERN
#ifdef __cplusplus
}
#endif
#endif /* USER_H */