IBIS Members,
Included is the data structures that Ron Neville and I are using for building
the 2.0 version of the Golden Parser. You may notice that the package model
data structure is not included in this. Ron and I still had not fully decided
exactly how we wanted to represent the matrix's (matrices?), plus I figured that
the following structures will be fun enough to read through all by themselves.
Note: The following structures are just a cutting and pasting from the various
C header files that we're using.
Enjoy!
Paul Munsey
---------------------------------------------------------------------------------------------------------------
/**********************************************************************
name: ibis_chk.h
**********************************************************************/
#define UL unsigned long
#define IBIS_LINE_MAX 80
#define IBIS_PATH_MAX 256 /* debug/todo is not this defined someplace */
/**********************************************************************
typdefs
**********************************************************************/
typedef enum bool {FALSE, TRUE} BOOL;
typedef enum numstat {NOT_SET, SET, NA} NUMSTAT;
typedef enum ibis_ver {UNKNOWN, VER_1, VER_2} IBIS_VER;
/**********************************************************************
name: ibis.h
desc: Defines the structure for the ibis struct.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct ibis {
HDR *pHdr;
/* this structure holds all the header info */
CMPNT *pCmpnts;
/* this is a ptr to a linked list of structures that
hold all the components */
MDL *pMdls;
/* this is a ptr to a linked list of structures that
hold all the models */
PKGMDL *pPkgmdls;
/* this is a ptr to a linked list of structures that
hold all the package models */
} IBIS;
/**********************************************************************
name: hdr.h
desc: Defines the structure for the "header" information in a .ibs
file.
**********************************************************************/
#define HDR_VER_LEN 70
#define HDR_REV_LEN 70
#define HDR_DATE_LEN 40
#define HDR_FILENAME_LEN 12 /* MSDOS max 8 + 1 + 3 */
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct hdr {
char sIBIS_Ver[HDR_VER_LEN + 1];
char sFile_name[HDR_FILENAME_LEN + 1];
char sFile_Rev[HDR_REV_LEN + 1];
char sDate[HDR_DATE_LEN + 1];
char *sSource; /* ptr to a dynamically maintained array of text. */
char *sNotes; /* ptr to a dynamically maintained array of text. */
char *sDisclaimer; /* ptr to a dynamically maintained array of text. */
char *sCopyright; /* ptr to a dynamically maintained array of text. */
} HDR;
/**********************************************************************
name: cmpnt.h
desc: Defines the structure for a single component within a .ibs file.
**********************************************************************/
#define CMPNT_CMPNT_LEN 40
#define CMPNT_MNFCTR_LEN 40
#define CMPNT_PKGMDL_LEN 40
/**********************************************************************
structure definition
**********************************************************************/
typedef struct cmpnt {
struct cmpnt *pNext; /* link list */
char sComponent[CMPNT_CMPNT_LEN + 1];
char sManufacturer[CMPNT_MNFCTR_LEN + 1];
PKG *pPackage;
PIN *pPin; /* linked list of pins */
char sPackage_Model[CMPNT_PKGMDL_LEN + 1];
PINMPG *pPin_Mapping; /* linked list of pinmappings */
DIFPIN *pDiff_Pin; /* linked list of diffpins */
} CMPNT;
/**********************************************************************
name: mdl.h
desc: Defines the structure for a single model within a .ibs file.
**********************************************************************/
#define MDL_NAME_LEN 20
/**********************************************************************
model types
**********************************************************************/
typedef enum model_type {
NO_TYPE,
INPUT,
OUTPUT,
IO,
THREE_STATE,
OPEN_DRAIN,
IO_OPEN_DRAIN,
OPEN_SINK,
IO_OPEN_SINK,
OPEN_SOURCE,
IO_OPEN_SOURCE,
INPUT_ECL,
OUTPUT_ECL,
IO_ECL,
TERMINATOR
} MODEL_TYPE;
/**********************************************************************
model polarity
**********************************************************************/
typedef enum model_polarity {
NON_INVERTING,
INVERTING
} MODEL_POLARITY;
/**********************************************************************
model enable
**********************************************************************/
typedef enum model_enable {
ACTIVE_HIGH,
ACTIVE_LOW
} MODEL_ENABLE;
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct mdl {
struct mdl *pNext;
char sModel[MDL_NAME_LEN + 1];
MODEL_TYPE *pType;
MODEL_POLARITY *pPolarity;
MODEL_ENABLE *pEnable;
double *pdVinl;
double *pdVinh;
RNG *pC_comp;
double *pdVmeas;
double *pdCref;
double *pdRref;
double *pdVref;
RNG *pTemp_Range;
RNG *pVoltage_Range;
RNG *pPullup_Ref;
RNG *pPulldown_Ref;
RNG *pPOWER_Clamp_Ref;
RNG *pGND_Clamp_Ref;
VRNG *pPulldown;
VRNG *pPullup;
VRNG *pGND_Clamp;
VRNG *pPOWER_Clamp;
RNG *pRgnd;
RNG *pRpower;
RNG *pRac;
RNG *pCac;
RAMP *pDVDT_r;
RAMP *pDVDT_f;
double *pdR_load;
WVFRM *pRising_Waveform;
WVFRM *pFalling_Waveform;
} MDL;
/**********************************************************************
name: pkg.h
desc: Defines the structure for the Package.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct pkg {
RNG *pR_pkg;
RNG *pL_pkg;
RNG *pC_pkg;
} PKG;
/**********************************************************************
name: pin.h
desc: Defines the structure for the Pin data.
**********************************************************************/
#define PIN_NAME_LEN 5
#define PIN_SIGNAL_LEN 20
#define PIN_MODEL_LEN 20
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct pin {
struct pin *pNext; /* linked list of pins... */
int iColumnCount; /* must be 3 or 6 */
char sPin[PIN_NAME_LEN + 1];
char sSignal_name[PIN_SIGNAL_LEN + 1];
char sModel_name[PIN_MODEL_LEN + 1];
double dR_pin;
BOOL bR_pinNA;
double dL_pin;
BOOL bL_pinNA;
double dC_pin;
BOOL bC_pinNA;
} PIN;
/**********************************************************************
name: pinmpg.h
desc: Defines the structure for the pin mapping.
**********************************************************************/
#define PINMPG_NAME_LEN 5
#define PINMPG_REF_LEN 15
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct pinmpg {
struct pinmpg *pNext; /* link list */
int iColumnCount;
char sPin_Mapping[PINMPG_NAME_LEN + 1];
char sPulldown_ref[PINMPG_REF_LEN + 1];
char sPullup_ref[PINMPG_REF_LEN + 1];
char sGnd_clamp_ref[PINMPG_REF_LEN + 1];
char sPower_clamp_ref[PINMPG_REF_LEN + 1];
} PINMPG;
/**********************************************************************
name: difpin.h
desc: Defines the structure for the Diff Pin data.
**********************************************************************/
#define DIFPIN_NAME_LEN 5
#define DIFPIN_INVPIN_LEN 5
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct difpin {
struct difpin *pNext; /* linked list of difpins... */
int iColumnCount;
char sDiff_Pin[DIFPIN_NAME_LEN + 1];
char sInv_pin[DIFPIN_INVPIN_LEN + 1];
VRNG pVrng;
} DIFPIN;
/**********************************************************************
name: rng.h
desc: Defines the structure for the range values.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct rng {
double dTyp;
NUMSTAT eTypStat;
double dMin;
NUMSTAT eMinStat;
double dMax;
NUMSTAT eMaxStat;
} RNG;
/**********************************************************************
name: vrng.h
desc: Defines the structure for the v range values.
Also contains function prototypes for the access methods for
that structure.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct vrng {
double dVolt;
BOOL bVoltNA;
RNG *pTdelay;
} VRNG;
/**********************************************************************
name: ramp.h
desc: Defines the structure for the ramp.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct ramp {
double dTyp_dV;
double dTyp_dt;
double dMin_dV;
double dMin_dt;
BOOL bMinNA;
double dMax_dV;
double dMax_dt;
BOOL bMaxNA;
} RAMP;
/**********************************************************************
name: wvfrm.h
desc: Defines the structure for the wavefrom values.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct wvfrm {
struct wvfrm *pNext; /* link list */
double R_fixture;
double V_fixture;
double C_fixture;
double L_fixture;
double R_dut;
double L_dut;
double C_dut;
TRNG *pTrng;
} WVFRM;
/**********************************************************************
name: trng.h
desc: Defines the structure for the time range values.
**********************************************************************/
/**********************************************************************
structure definitions
**********************************************************************/
typedef struct trng {
struct trng *pNext; /* link list */
double time;
RNG range;
} TRNG;
Received on Sat Sep 3 21:53:17 1994
This archive was generated by hypermail 2.1.8 : Fri Jun 03 2011 - 09:52:28 PDT