1 /********** 2 Copyright 1990 Regents of the University of California. All rights reserved. 3 **********/ 4 5 #include "spice.h" 6 #define CONFIG 7 8 #include <stdio.h> 9 #include "devdefs.h" 10 #include "cktext.h" 11 12 #include "jobdefs.h" 13 #include "acdefs.h" 14 #include "distodef.h" 15 #include "dcodefs.h" 16 #include "optdefs.h" 17 #include "noisedef.h" 18 #include "pzdefs.h" 19 #include "tfdefs.h" 20 #include "trandefs.h" 21 #include "dctdefs.h" 22 23 #ifndef AN_dc 24 25 #ifdef AN_ac 26 #define AN_dc 27 #endif 28 #ifdef AN_pz 29 #define AN_dc 30 #endif 31 #ifdef AN_tran 32 #define AN_dc 33 #endif 34 #ifdef AN_noise 35 #define AN_dc 36 #endif 37 #ifdef AN_disto 38 #define AN_dc 39 #endif 40 #ifdef AN_sense 41 #define AN_dc 42 #endif 43 44 #endif 45 46 extern SPICEanalysis OPTinfo; 47 extern SPICEanalysis ACinfo; 48 extern SPICEanalysis DCTinfo; 49 extern SPICEanalysis DCOinfo; 50 extern SPICEanalysis TRANinfo; 51 extern SPICEanalysis PZinfo; 52 extern SPICEanalysis SENSinfo; 53 extern SPICEanalysis TFinfo; 54 extern SPICEanalysis DISTOinfo; 55 extern SPICEanalysis NOISEinfo; 56 57 SPICEanalysis *analInfo[] = { 58 &OPTinfo, 59 #ifdef AN_ac 60 &ACinfo, 61 #endif 62 #ifdef AN_dc 63 &DCTinfo, 64 #endif 65 #ifdef AN_op 66 &DCOinfo, 67 #endif 68 #ifdef AN_tran 69 &TRANinfo, 70 #endif 71 #ifdef AN_pz 72 &PZinfo, 73 #endif 74 #ifdef AN_sense 75 &SENSinfo, 76 #endif 77 #ifdef AN_tf 78 &TFinfo, 79 #endif 80 #ifdef AN_disto 81 &DISTOinfo, 82 #endif 83 #ifdef AN_noise 84 &NOISEinfo, 85 #endif 86 }; 87 88 int ANALmaxnum = sizeof(analInfo)/sizeof(SPICEanalysis*); 89 90 extern SPICEdev BJTinfo; 91 extern SPICEdev B1info; 92 extern SPICEdev B2info; 93 extern SPICEdev CAPinfo; 94 extern SPICEdev DIOinfo; 95 extern SPICEdev INDinfo; 96 extern SPICEdev JFETinfo; 97 extern SPICEdev JJinfo; 98 extern SPICEdev LTRAinfo; 99 extern SPICEdev MESinfo; 100 extern SPICEdev MOSinfo; 101 extern SPICEdev MUTinfo; 102 extern SPICEdev RESinfo; 103 extern SPICEdev SRCinfo; 104 extern SPICEdev SWinfo; 105 extern SPICEdev TRAinfo; 106 extern SPICEdev URCinfo; 107 extern SPICEdev SFFTinfo; 108 109 SPICEdev *DEVices[] = { 110 111 #ifdef DEV_bjt 112 &BJTinfo, 113 #endif 114 #ifdef DEV_bsim1 115 &B1info, 116 #endif 117 #ifdef DEV_bsim2 118 &B2info, 119 #endif 120 #ifdef DEV_cap 121 &CAPinfo, 122 #endif 123 #ifdef DEV_dio 124 &DIOinfo, 125 #endif 126 #ifdef DEV_ind 127 &INDinfo, 128 &MUTinfo, 129 #endif 130 #ifdef DEV_jfet 131 &JFETinfo, 132 #endif 133 #ifdef DEV_jj 134 &JJinfo, 135 #endif 136 #ifdef DEV_ltra 137 <RAinfo, 138 #endif 139 #ifdef DEV_mes 140 &MESinfo, 141 #endif 142 #ifdef DEV_mos 143 &MOSinfo, 144 #endif 145 #ifdef DEV_res 146 &RESinfo, 147 #endif 148 #ifdef DEV_src 149 &SRCinfo, 150 #endif 151 #ifdef DEV_sw 152 &SWinfo, 153 #endif 154 #ifdef DEV_tra 155 &TRAinfo, 156 #endif 157 #ifdef DEV_urc 158 &URCinfo, 159 #endif 160 #ifdef DEV_sfft 161 &SFFTinfo, 162 #endif 163 }; 164 165 /* my internal global constant for number of device types */ 166 int DEVmaxnum = sizeof(DEVices)/sizeof(SPICEdev *); 167 168 static char * specSigList[] = { 169 "time" 170 }; 171 172 static IFparm nodeParms[] = { 173 IP( "nodeset",PARM_NS ,IF_REAL,"suggested initial voltage"), 174 IP( "ic",PARM_IC ,IF_REAL,"initial voltage"), 175 IP( "type",PARM_NODETYPE ,IF_INTEGER,"output type of equation") 176 }; 177 178 IFsimulator SIMinfo = { 179 "jspice3", /* name */ 180 "jspice3 circuit level simulation program", /* more about me */ 181 Spice_Version, /* version */ 182 183 CKTinit, /* newCircuit function */ 184 CKTdestroy, /* deleteCircuit function */ 185 186 CKTnewNode, /* newNode function */ 187 CKTground, /* groundNode function */ 188 CKTbindNode, /* bindNode function */ 189 CKTfndNode, /* findNode function */ 190 CKTinst2Node, /* instToNode function */ 191 CKTsetNodPm, /* setNodeParm function */ 192 CKTaskNodQst, /* askNodeQuest function */ 193 CKTdltNod, /* deleteNode function */ 194 195 CKTcrtElt, /* newInstance function */ 196 CKTparam, /* setInstanceParm function */ 197 CKTask, /* askInstanceQuest function */ 198 CKTfndDev, /* findInstance funciton */ 199 CKTdltInst, /* deleteInstance function */ 200 201 CKTmodCrt, /* newModel function */ 202 CKTmodParam, /* setModelParm function */ 203 CKTmodAsk, /* askModelQuest function */ 204 CKTfndMod, /* findModel function */ 205 CKTdltMod, /* deleteModel function */ 206 207 CKTnewTask, /* newTask function */ 208 CKTnewAnal, /* newAnalysis function */ 209 CKTsetAnalPm, /* setAnalysisParm function */ 210 CKTaskAnalQ, /* askAnalysisQuest function */ 211 CKTfndAnal, /* findAnalysis function */ 212 CKTfndTask, /* findTask function */ 213 CKTdelTask, /* deleteTask function */ 214 215 CKTdoJob, /* doAnalyses function */ 216 CKTtrouble, /* non-convergence message function */ 217 218 sizeof(DEVices)/sizeof(SPICEdev *), 219 (IFdevice**)DEVices, 220 221 sizeof(analInfo)/sizeof(SPICEanalysis *), 222 (IFanalysis **)analInfo, 223 224 sizeof(nodeParms)/sizeof(IFparm), 225 nodeParms, 226 227 sizeof(specSigList)/sizeof(char *), 228 specSigList, 229 230 }; 231