⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifsim.h

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1986 Thomas L. Quarles**********/#ifndef IFSIMULATOR#define IFSIMULATOR/* * We don't always have access to an ANSI C compiler yet, so we * make the following convenient definition */#ifdef __STDC__    /* using an ansi C compiler, so we have the void* construct */typedef void GENERIC;#else    /* not using an ansi C compiler, so we have to use char* as the */    /* most generic pointer type */typedef char GENERIC;#endif/*  * structure:   IFparm * * * The structure used to describe all values passed * between the front end and the simulator when there is any * possibility one argument of the function could have more * than one type. * * keyword is provided for the front end and is the token *    the user is expected to label the data with. * * id is an integer intended to uniquely identify the parameter *    to the simulator * * dataType is an integer which indicates the type of argument *    that must be passed for this parameter * * description is a longer description intended for help menus *    the description should all fit on one line, but should *    give a knowledgable user a good idea what the parameter is *    used for. */typedef struct sIFparm {    char *keyword;    int id;    int dataType;    char *description;} IFparm;/* * * datatype: IFuid * * unique identifier for all name-type data in the simulator. * this permits the front end to use something other than * a unique, fully qualified character string to identify * an object. * */typedef GENERIC *IFuid;/*  * * types for IFnewUid * */#define UID_ANALYSIS 0x1#define UID_TASK 0x2#define UID_INSTANCE 0x4#define UID_MODEL 0x8#define UID_SIGNAL 0x10#define UID_OTHER 0x20/*  * dataType values: * * Note:  These structures are put together by ORing together the *    appropriate bits from the fields below as is shown for the vector *    types.   * IF_REQUIRED indicates that the parameter must be specified. *    The front end does not NEED to check for this, but can to save time, *    since failure to do so will cause the simulator to fail. * IF_SET indicates that the specified item is an input parameter. * IF_ASK indicates that the specified item is something the simulator *    can provide information about. * IF_SET and IF_ASK are NOT mutually exclusive. * if IF_SET and IF_ASK are both zero, it indicates a parameter that *    the simulator recoginizes are being a reasonable paremeter, but *    which this simulator does not implement. */#define IF_FLAG 0x1#define IF_INTEGER 0x2#define IF_REAL 0x4#define IF_COMPLEX 0x8#define IF_NODE 0x10#define IF_STRING 0x20#define IF_INSTANCE 0x40#define IF_PARSETREE 0x80/* indicates that for a query the integer field will have a selector * in it to pick a sub-field */#define IF_SELECT 0x800#define IF_VSELECT 0x400/* indicates a vector of the specified type */#define IF_VECTOR 0x8000#define IF_FLAGVEC     (IF_FLAG|IF_VECTOR)#define IF_INTVEC      (IF_INTEGER|IF_VECTOR)#define IF_REALVEC     (IF_REAL|IF_VECTOR)#define IF_CPLXVEC     (IF_COMPLEX|IF_VECTOR)#define IF_NODEVEC     (IF_NODE|IF_VECTOR)#define IF_STRINGVEC   (IF_STRING|IF_VECTOR)#define IF_INSTVEC     (IF_INSTANCE|IF_VECTOR)#define IF_REQUIRED 0x4000#define IF_VARTYPES 0x80ff#define IF_SET 0x2000#define IF_ASK 0x1000/* If you AND with IF_UNIMP_MASK and get 0, it is recognized, but not * implemented  */#define IF_UNIMP_MASK (~0xfff)/* Used by sensetivity to check if a parameter is or is not useful */#define IF_REDUNDANT	0x0010000#define IF_PRINCIPAL	0x0020000#define IF_AC		0x0040000#define IF_AC_ONLY	0x0080000#define IF_NOISE	0x0100000#define IF_NONSENSE	0x0200000#define IF_SETQUERY	0x0400000#define IF_ORQUERY	0x0800000#define IF_CHKQUERY	0x1000000/* For "show" command: do not print value in a table by default */#define IF_UNINTERESTING 0x2000000/* Structure:   IFparseTree * * This structure is returned by the parser for a IF_PARSETREE valued * parameter and describes the information that the simulator needs * to know about the parse tree in order to use it. * It is expected that the front end will have a more extensive * structure which this structure will be a prefix of. * * Note that the function pointer is provided as a hook for  * versions which may want to compile code for the parse trees * if they are used heavily. * */typedef struct sIFparseTree {    int numVars;            /* number of variables used */    int *varTypes;          /* array of types of variables */    union uIFvalue * vars;  /* array of structures describing values */#ifdef __STDC__    int ((*IFeval)(struct sIFparseTree*,double,double*,double*,double*));#else    int ((*IFeval)());      /* function to call to get evaluated */#endif /* STDC */} IFparseTree;/* * Structure:    IFvalue * * structure used to pass the values corresponding to the above * dataType.  All types are passed in one of these structures, with * relatively simple rules concerning the handling of the structure. * * whoever makes the subroutine call allocates a single instance of the * structure.  The basic data structure belongs to you, and you * should arrange to free it when appropriate. * * The responsibilities of the data supplier are: * Any vectors referenced by the structure are to be malloc()'d  * and are assumed to have been turned over to the recipient and  * thus should not be re-used or free()'d. * * The responsibilities of the data recipient are: * scalar valued data is to be copied by the recipient * vector valued data is now the property of the recipient, * and must be free()'d when no longer needed. * * Character strings are a special case:  Since it is assumed * that all character strings are directly descended from input  * tokens, it is assumed that they are static, thus nobody * frees them until the circuit is deleted, when the front end * may do so. * * EVERYBODY's responsibility is to be SURE that the right data * is filled in and read out of the structure as per the IFparm * structure describing the parameter being passed.  Programs * neglecting this rule are fated to die of data corruption * *//* * Some preliminary definitions: * * IFnode's are returned by the simulator, thus we don't really  * know what they look like, just that we get to carry pointers * to them around all the time, and will need to save them occasionally * */typedef void * IFnode;/* * and of course, the standard complex data type  */typedef struct sIFcomplex {    double real;    double imag;} IFcomplex;typedef union uIFvalue {    int iValue;             /* integer or flag valued data */    double rValue;          /* real valued data */    IFcomplex cValue;       /* complex valued data */    char *sValue;           /* string valued data */    IFuid uValue;           /* UID valued data */    IFnode nValue;          /* node valued data */    IFparseTree *tValue;    /* parse tree */    struct {        int numValue;       /* length of vector */        union {            int *iVec;      /* pointer to integer vector */            double *rVec;   /* pointer to real vector */            IFcomplex *cVec;/* pointer to complex vector */            char **sVec;    /* pointer to string vector */            IFuid *uVec;    /* pointer to UID vector */            IFnode *nVec;   /* pointer to node vector */        }vec;    }v;} IFvalue;/* * structure:  IFdevice * * This structure contains all the information available to the * front end about a particular device.  The simulator will * present the front end with an array of pointers to these structures * which it will use to determine legal device types and parameters.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -