1 changed files with 0 additions and 163 deletions
@ -1,163 +0,0 @@ |
|||
/********** |
|||
Copyright 1991 Regents of the University of California. All rights reserved. |
|||
Author: 1991 David A. Gates, U. C. Berkeley CAD Group |
|||
Modified: 2001 Paolo Nenzi |
|||
**********/ |
|||
|
|||
#include "ngspice.h" |
|||
#include "numcards.h" |
|||
#include "numgen.h" |
|||
#include "optndefs.h" |
|||
#include "devdefs.h" |
|||
#include "sperror.h" |
|||
#include "suffix.h" |
|||
|
|||
#define M_TO_CM 1.0e2 |
|||
#define M2_TO_CM2 (M_TO_CM * M_TO_CM) |
|||
#define UM_TO_CM 1.0e-4 |
|||
#define UM2_TO_CM2 (UM_TO_CM * UM_TO_CM) |
|||
|
|||
extern int OPTNnewCard(void**,void*); |
|||
extern int OPTNparam(int,IFvalue*,void*); |
|||
|
|||
|
|||
|
|||
IFparm OPTNpTable[] = { |
|||
/* Supported Types of Devices. Ideally should be automatically extracted */ |
|||
IP("resistor",OPTN_RESISTOR, IF_FLAG, "Resistor"), |
|||
IP("capacitor",OPTN_CAPACITOR, IF_FLAG, "Capacitor"), |
|||
IP("diode", OPTN_DIODE, IF_FLAG, "Diode"), |
|||
IP("bipolar", OPTN_BIPOLAR, IF_FLAG, "Bipolar Transistor"), |
|||
IP("bjt", OPTN_BIPOLAR, IF_FLAG, "Bipolar Transistor"), |
|||
IP("soibjt", OPTN_SOIBJT, IF_FLAG, "SOI Bipolar"), |
|||
IP("moscap", OPTN_MOSCAP, IF_FLAG, "MOS Capacitor"), |
|||
IP("mosfet", OPTN_MOSFET, IF_FLAG, "MOSFET"), |
|||
IP("soimos", OPTN_SOIMOS, IF_FLAG, "SOI MOSFET"), |
|||
IP("jfet", OPTN_JFET, IF_FLAG, "Junction FET"), |
|||
IP("mesfet", OPTN_MESFET, IF_FLAG, "MESFET"), |
|||
/* Various layout dimensions */ |
|||
IP("defa", OPTN_DEFA, IF_REAL, "Default Mask Area"), |
|||
IP("defw", OPTN_DEFW, IF_REAL, "Default Mask Width"), |
|||
IP("defl", OPTN_DEFL, IF_REAL, "Default Mask Length"), |
|||
IP("base.area",OPTN_BASE_AREA, IF_REAL, "1D BJT Base Area"), |
|||
IP("base.length",OPTN_BASE_LENGTH,IF_REAL, "1D BJT Base Length"), |
|||
IP("base.depth",OPTN_BASE_DEPTH, IF_REAL, "1D BJT Base Depth"), |
|||
/* Values */ |
|||
IP("tnom", OPTN_TNOM, IF_REAL, "Nominal Temperature"), |
|||
/* Device Initial Condition File */ |
|||
IP("ic.file", OPTN_IC_FILE, IF_STRING, "Initial condition file"), |
|||
IP("unique", OPTN_UNIQUE, IF_FLAG, "Generate unique filename") |
|||
}; |
|||
|
|||
IFcardInfo OPTNinfo = { |
|||
"options", |
|||
"Provide optional information and hints", |
|||
NUMELEMS(OPTNpTable), |
|||
OPTNpTable, |
|||
|
|||
OPTNnewCard, |
|||
OPTNparam, |
|||
NULL |
|||
}; |
|||
|
|||
int |
|||
OPTNnewCard(void **inCard, void *inModel) |
|||
{ |
|||
OPTNcard *tmpCard, *newCard; |
|||
GENnumModel *model = (GENnumModel *)inModel; |
|||
|
|||
tmpCard = model->GENoptions; |
|||
if (!tmpCard) { /* First in list */ |
|||
newCard = NEW( OPTNcard ); |
|||
if (!newCard) { |
|||
*inCard = (void *)NULL; |
|||
return(E_NOMEM); |
|||
} |
|||
newCard->OPTNnextCard = (OPTNcard *)NULL; |
|||
*inCard = (void *)newCard; |
|||
model->GENoptions = newCard; |
|||
} else { /* Only one card of this type allowed */ |
|||
*inCard = (void *)tmpCard; |
|||
} |
|||
return(OK); |
|||
} |
|||
|
|||
int |
|||
OPTNparam(int param, IFvalue *value, void *inCard) |
|||
{ |
|||
OPTNcard *card = (OPTNcard *)inCard; |
|||
|
|||
switch (param) { |
|||
case OPTN_RESISTOR: |
|||
card->OPTNdeviceType = OPTN_RESISTOR; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_CAPACITOR: |
|||
card->OPTNdeviceType = OPTN_CAPACITOR; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_DIODE: |
|||
card->OPTNdeviceType = OPTN_DIODE; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_MOSCAP: |
|||
card->OPTNdeviceType = OPTN_MOSCAP; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_BIPOLAR: |
|||
case OPTN_SOIBJT: /* XXX Treat SOI as normal */ |
|||
card->OPTNdeviceType = OPTN_BIPOLAR; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_MOSFET: |
|||
case OPTN_SOIMOS: /* XXX Treat SOI as normal */ |
|||
card->OPTNdeviceType = OPTN_MOSFET; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_JFET: |
|||
case OPTN_MESFET: /* XXX Treat MES as junction */ |
|||
card->OPTNdeviceType = OPTN_JFET; |
|||
card->OPTNdeviceTypeGiven = TRUE; |
|||
break; |
|||
case OPTN_DEFA: |
|||
card->OPTNdefa = value->rValue * M2_TO_CM2; |
|||
card->OPTNdefaGiven = TRUE; |
|||
break; |
|||
case OPTN_DEFW: |
|||
card->OPTNdefw = value->rValue * M_TO_CM; |
|||
card->OPTNdefwGiven = TRUE; |
|||
break; |
|||
case OPTN_DEFL: |
|||
card->OPTNdefl = value->rValue * M_TO_CM; |
|||
card->OPTNdeflGiven = TRUE; |
|||
break; |
|||
case OPTN_BASE_AREA: |
|||
card->OPTNbaseArea = value->rValue; |
|||
card->OPTNbaseAreaGiven = TRUE; |
|||
break; |
|||
case OPTN_BASE_LENGTH: |
|||
card->OPTNbaseLength = value->rValue * UM_TO_CM; |
|||
card->OPTNbaseLengthGiven = TRUE; |
|||
break; |
|||
case OPTN_BASE_DEPTH: |
|||
card->OPTNbaseDepth = value->rValue * UM_TO_CM; |
|||
card->OPTNbaseDepthGiven = TRUE; |
|||
break; |
|||
case OPTN_TNOM: |
|||
card->OPTNtnom = value->rValue; |
|||
card->OPTNtnomGiven = TRUE; |
|||
break; |
|||
case OPTN_IC_FILE: |
|||
card->OPTNicFile = value->sValue; |
|||
card->OPTNicFileGiven = TRUE; |
|||
break; |
|||
case OPTN_UNIQUE: |
|||
card->OPTNunique = value->iValue; |
|||
card->OPTNuniqueGiven = TRUE; |
|||
break; |
|||
default: |
|||
return(E_BADPARM); |
|||
break; |
|||
} |
|||
return(OK); |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue