Subject: Golden Parse data structures

From: Paul Munsey <[email-masked]>
Date: 04 Sep 94 00:46:57 EDT

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;