Browse Source

allow geometry scaling by option `scale'

pre-master-46
dwarning 13 years ago
committed by rlar
parent
commit
921aca9d7e
  1. 18
      src/spicelib/devices/bsim4/b4par.c
  2. 18
      src/spicelib/devices/bsimsoi/b4soipar.c
  3. 18
      src/spicelib/devices/hisim2/hsm2par.c
  4. 18
      src/spicelib/devices/hisimhv1/hsmhvpar.c
  5. 18
      src/spicelib/devices/mos1/mos1par.c
  6. 18
      src/spicelib/devices/mos2/mos2par.c
  7. 18
      src/spicelib/devices/mos3/mos3par.c

18
src/spicelib/devices/bsim4/b4par.c

@ -19,6 +19,7 @@
#include "bsim4def.h" #include "bsim4def.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
int int
BSIM4param( BSIM4param(
@ -27,17 +28,22 @@ IFvalue *value,
GENinstance *inst, GENinstance *inst,
IFvalue *select) IFvalue *select)
{ {
double scale;
BSIM4instance *here = (BSIM4instance*)inst; BSIM4instance *here = (BSIM4instance*)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param) switch(param)
{ case BSIM4_W: { case BSIM4_W:
here->BSIM4w = value->rValue;
here->BSIM4w = value->rValue * scale;
here->BSIM4wGiven = TRUE; here->BSIM4wGiven = TRUE;
break; break;
case BSIM4_L: case BSIM4_L:
here->BSIM4l = value->rValue;
here->BSIM4l = value->rValue * scale;
here->BSIM4lGiven = TRUE; here->BSIM4lGiven = TRUE;
break; break;
case BSIM4_M: case BSIM4_M:
@ -53,19 +59,19 @@ IFvalue *select)
here->BSIM4minGiven = TRUE; here->BSIM4minGiven = TRUE;
break; break;
case BSIM4_AS: case BSIM4_AS:
here->BSIM4sourceArea = value->rValue;
here->BSIM4sourceArea = value->rValue * scale * scale;
here->BSIM4sourceAreaGiven = TRUE; here->BSIM4sourceAreaGiven = TRUE;
break; break;
case BSIM4_AD: case BSIM4_AD:
here->BSIM4drainArea = value->rValue;
here->BSIM4drainArea = value->rValue * scale * scale;
here->BSIM4drainAreaGiven = TRUE; here->BSIM4drainAreaGiven = TRUE;
break; break;
case BSIM4_PS: case BSIM4_PS:
here->BSIM4sourcePerimeter = value->rValue;
here->BSIM4sourcePerimeter = value->rValue * scale;
here->BSIM4sourcePerimeterGiven = TRUE; here->BSIM4sourcePerimeterGiven = TRUE;
break; break;
case BSIM4_PD: case BSIM4_PD:
here->BSIM4drainPerimeter = value->rValue;
here->BSIM4drainPerimeter = value->rValue * scale;
here->BSIM4drainPerimeterGiven = TRUE; here->BSIM4drainPerimeterGiven = TRUE;
break; break;
case BSIM4_NRS: case BSIM4_NRS:

18
src/spicelib/devices/bsimsoi/b4soipar.c

@ -19,6 +19,7 @@
#include "b4soidef.h" #include "b4soidef.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
int int
B4SOIparam( B4SOIparam(
@ -27,17 +28,22 @@ IFvalue *value,
GENinstance *inst, GENinstance *inst,
IFvalue *select) IFvalue *select)
{ {
double scale;
B4SOIinstance *here = (B4SOIinstance*)inst; B4SOIinstance *here = (B4SOIinstance*)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param) switch(param)
{ case B4SOI_W: { case B4SOI_W:
here->B4SOIw = value->rValue;
here->B4SOIw = value->rValue * scale;
here->B4SOIwGiven = TRUE; here->B4SOIwGiven = TRUE;
break; break;
case B4SOI_L: case B4SOI_L:
here->B4SOIl = value->rValue;
here->B4SOIl = value->rValue * scale;
here->B4SOIlGiven = TRUE; here->B4SOIlGiven = TRUE;
break; break;
case B4SOI_M: case B4SOI_M:
@ -45,19 +51,19 @@ IFvalue *select)
here->B4SOImGiven = TRUE; here->B4SOImGiven = TRUE;
break; break;
case B4SOI_AS: case B4SOI_AS:
here->B4SOIsourceArea = value->rValue;
here->B4SOIsourceArea = value->rValue * scale * scale;
here->B4SOIsourceAreaGiven = TRUE; here->B4SOIsourceAreaGiven = TRUE;
break; break;
case B4SOI_AD: case B4SOI_AD:
here->B4SOIdrainArea = value->rValue;
here->B4SOIdrainArea = value->rValue * scale * scale;
here->B4SOIdrainAreaGiven = TRUE; here->B4SOIdrainAreaGiven = TRUE;
break; break;
case B4SOI_PS: case B4SOI_PS:
here->B4SOIsourcePerimeter = value->rValue;
here->B4SOIsourcePerimeter = value->rValue * scale;
here->B4SOIsourcePerimeterGiven = TRUE; here->B4SOIsourcePerimeterGiven = TRUE;
break; break;
case B4SOI_PD: case B4SOI_PD:
here->B4SOIdrainPerimeter = value->rValue;
here->B4SOIdrainPerimeter = value->rValue * scale;
here->B4SOIdrainPerimeterGiven = TRUE; here->B4SOIdrainPerimeterGiven = TRUE;
break; break;
case B4SOI_NRS: case B4SOI_NRS:

18
src/spicelib/devices/hisim2/hsm2par.c

@ -20,6 +20,7 @@
#include "hsm2def.h" #include "hsm2def.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
int HSM2param( int HSM2param(
int param, int param,
@ -27,33 +28,38 @@ int HSM2param(
GENinstance *inst, GENinstance *inst,
IFvalue *select) IFvalue *select)
{ {
double scale;
HSM2instance *here = (HSM2instance*)inst; HSM2instance *here = (HSM2instance*)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch (param) { switch (param) {
case HSM2_W: case HSM2_W:
here->HSM2_w = value->rValue;
here->HSM2_w = value->rValue * scale;
here->HSM2_w_Given = TRUE; here->HSM2_w_Given = TRUE;
break; break;
case HSM2_L: case HSM2_L:
here->HSM2_l = value->rValue;
here->HSM2_l = value->rValue * scale;
here->HSM2_l_Given = TRUE; here->HSM2_l_Given = TRUE;
break; break;
case HSM2_AS: case HSM2_AS:
here->HSM2_as = value->rValue;
here->HSM2_as = value->rValue * scale * scale;
here->HSM2_as_Given = TRUE; here->HSM2_as_Given = TRUE;
break; break;
case HSM2_AD: case HSM2_AD:
here->HSM2_ad = value->rValue;
here->HSM2_ad = value->rValue * scale * scale;
here->HSM2_ad_Given = TRUE; here->HSM2_ad_Given = TRUE;
break; break;
case HSM2_PS: case HSM2_PS:
here->HSM2_ps = value->rValue;
here->HSM2_ps = value->rValue * scale;
here->HSM2_ps_Given = TRUE; here->HSM2_ps_Given = TRUE;
break; break;
case HSM2_PD: case HSM2_PD:
here->HSM2_pd = value->rValue;
here->HSM2_pd = value->rValue * scale;
here->HSM2_pd_Given = TRUE; here->HSM2_pd_Given = TRUE;
break; break;
case HSM2_NRS: case HSM2_NRS:

18
src/spicelib/devices/hisimhv1/hsmhvpar.c

@ -20,6 +20,7 @@
#include "hsmhvdef.h" #include "hsmhvdef.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
int HSMHVparam( int HSMHVparam(
int param, int param,
@ -27,10 +28,15 @@ int HSMHVparam(
GENinstance *inst, GENinstance *inst,
IFvalue *select) IFvalue *select)
{ {
double scale;
HSMHVinstance *here = (HSMHVinstance*)inst; HSMHVinstance *here = (HSMHVinstance*)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch (param) { switch (param) {
case HSMHV_COSELFHEAT: case HSMHV_COSELFHEAT:
here->HSMHV_coselfheat = value->iValue; here->HSMHV_coselfheat = value->iValue;
@ -41,27 +47,27 @@ int HSMHVparam(
here->HSMHV_cosubnode_Given = TRUE; here->HSMHV_cosubnode_Given = TRUE;
break; break;
case HSMHV_W: case HSMHV_W:
here->HSMHV_w = value->rValue;
here->HSMHV_w = value->rValue * scale;
here->HSMHV_w_Given = TRUE; here->HSMHV_w_Given = TRUE;
break; break;
case HSMHV_L: case HSMHV_L:
here->HSMHV_l = value->rValue;
here->HSMHV_l = value->rValue * scale;
here->HSMHV_l_Given = TRUE; here->HSMHV_l_Given = TRUE;
break; break;
case HSMHV_AS: case HSMHV_AS:
here->HSMHV_as = value->rValue;
here->HSMHV_as = value->rValue * scale * scale;
here->HSMHV_as_Given = TRUE; here->HSMHV_as_Given = TRUE;
break; break;
case HSMHV_AD: case HSMHV_AD:
here->HSMHV_ad = value->rValue;
here->HSMHV_ad = value->rValue * scale * scale;
here->HSMHV_ad_Given = TRUE; here->HSMHV_ad_Given = TRUE;
break; break;
case HSMHV_PS: case HSMHV_PS:
here->HSMHV_ps = value->rValue;
here->HSMHV_ps = value->rValue * scale;
here->HSMHV_ps_Given = TRUE; here->HSMHV_ps_Given = TRUE;
break; break;
case HSMHV_PD: case HSMHV_PD:
here->HSMHV_pd = value->rValue;
here->HSMHV_pd = value->rValue * scale;
here->HSMHV_pd_Given = TRUE; here->HSMHV_pd_Given = TRUE;
break; break;
case HSMHV_NRS: case HSMHV_NRS:

18
src/spicelib/devices/mos1/mos1par.c

@ -12,16 +12,22 @@ Modified: 2000 AlansFixes
#include "mos1defs.h" #include "mos1defs.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
/* ARGSUSED */ /* ARGSUSED */
int int
MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
{ {
double scale;
MOS1instance *here = (MOS1instance *)inst; MOS1instance *here = (MOS1instance *)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param) { switch(param) {
case MOS1_TEMP: case MOS1_TEMP:
here->MOS1temp = value->rValue+CONSTCtoK; here->MOS1temp = value->rValue+CONSTCtoK;
@ -36,27 +42,27 @@ MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
here->MOS1mGiven = TRUE; here->MOS1mGiven = TRUE;
break; break;
case MOS1_W: case MOS1_W:
here->MOS1w = value->rValue;
here->MOS1w = value->rValue * scale;
here->MOS1wGiven = TRUE; here->MOS1wGiven = TRUE;
break; break;
case MOS1_L: case MOS1_L:
here->MOS1l = value->rValue;
here->MOS1l = value->rValue * scale;
here->MOS1lGiven = TRUE; here->MOS1lGiven = TRUE;
break; break;
case MOS1_AS: case MOS1_AS:
here->MOS1sourceArea = value->rValue;
here->MOS1sourceArea = value->rValue * scale * scale;
here->MOS1sourceAreaGiven = TRUE; here->MOS1sourceAreaGiven = TRUE;
break; break;
case MOS1_AD: case MOS1_AD:
here->MOS1drainArea = value->rValue;
here->MOS1drainArea = value->rValue * scale * scale;
here->MOS1drainAreaGiven = TRUE; here->MOS1drainAreaGiven = TRUE;
break; break;
case MOS1_PS: case MOS1_PS:
here->MOS1sourcePerimiter = value->rValue;
here->MOS1sourcePerimiter = value->rValue * scale;
here->MOS1sourcePerimiterGiven = TRUE; here->MOS1sourcePerimiterGiven = TRUE;
break; break;
case MOS1_PD: case MOS1_PD:
here->MOS1drainPerimiter = value->rValue;
here->MOS1drainPerimiter = value->rValue * scale;
here->MOS1drainPerimiterGiven = TRUE; here->MOS1drainPerimiterGiven = TRUE;
break; break;
case MOS1_NRS: case MOS1_NRS:

18
src/spicelib/devices/mos2/mos2par.c

@ -12,6 +12,7 @@ Modified: 2000 AlansFixes
#include "mos2defs.h" #include "mos2defs.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
/* ARGSUSED */ /* ARGSUSED */
@ -19,10 +20,15 @@ int
MOS2param(int param, IFvalue *value, GENinstance *inst, MOS2param(int param, IFvalue *value, GENinstance *inst,
IFvalue *select) IFvalue *select)
{ {
double scale;
MOS2instance *here = (MOS2instance *)inst; MOS2instance *here = (MOS2instance *)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param) { switch(param) {
case MOS2_TEMP: case MOS2_TEMP:
here->MOS2temp = value->rValue+CONSTCtoK; here->MOS2temp = value->rValue+CONSTCtoK;
@ -37,27 +43,27 @@ MOS2param(int param, IFvalue *value, GENinstance *inst,
here->MOS2mGiven = TRUE; here->MOS2mGiven = TRUE;
break; break;
case MOS2_W: case MOS2_W:
here->MOS2w = value->rValue;
here->MOS2w = value->rValue * scale;
here->MOS2wGiven = TRUE; here->MOS2wGiven = TRUE;
break; break;
case MOS2_L: case MOS2_L:
here->MOS2l = value->rValue;
here->MOS2l = value->rValue * scale;
here->MOS2lGiven = TRUE; here->MOS2lGiven = TRUE;
break; break;
case MOS2_AS: case MOS2_AS:
here->MOS2sourceArea = value->rValue;
here->MOS2sourceArea = value->rValue * scale * scale;
here->MOS2sourceAreaGiven = TRUE; here->MOS2sourceAreaGiven = TRUE;
break; break;
case MOS2_AD: case MOS2_AD:
here->MOS2drainArea = value->rValue;
here->MOS2drainArea = value->rValue * scale * scale;
here->MOS2drainAreaGiven = TRUE; here->MOS2drainAreaGiven = TRUE;
break; break;
case MOS2_PS: case MOS2_PS:
here->MOS2sourcePerimiter = value->rValue;
here->MOS2sourcePerimiter = value->rValue * scale;
here->MOS2sourcePerimiterGiven = TRUE; here->MOS2sourcePerimiterGiven = TRUE;
break; break;
case MOS2_PD: case MOS2_PD:
here->MOS2drainPerimiter = value->rValue;
here->MOS2drainPerimiter = value->rValue * scale;
here->MOS2drainPerimiterGiven = TRUE; here->MOS2drainPerimiterGiven = TRUE;
break; break;
case MOS2_NRS: case MOS2_NRS:

18
src/spicelib/devices/mos3/mos3par.c

@ -12,16 +12,22 @@ Modified: 2000 AlansFixes
#include "mos3defs.h" #include "mos3defs.h"
#include "ngspice/sperror.h" #include "ngspice/sperror.h"
#include "ngspice/suffix.h" #include "ngspice/suffix.h"
#include "ngspice/fteext.h"
/* ARGSUSED */ /* ARGSUSED */
int int
MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
{ {
double scale;
MOS3instance *here = (MOS3instance *)inst; MOS3instance *here = (MOS3instance *)inst;
NG_IGNORE(select); NG_IGNORE(select);
if (!cp_getvar("scale", CP_REAL, &scale))
scale = 1;
switch(param) { switch(param) {
case MOS3_M: case MOS3_M:
@ -29,27 +35,27 @@ MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
here->MOS3mGiven = TRUE; here->MOS3mGiven = TRUE;
break; break;
case MOS3_W: case MOS3_W:
here->MOS3w = value->rValue;
here->MOS3w = value->rValue * scale;
here->MOS3wGiven = TRUE; here->MOS3wGiven = TRUE;
break; break;
case MOS3_L: case MOS3_L:
here->MOS3l = value->rValue;
here->MOS3l = value->rValue * scale;
here->MOS3lGiven = TRUE; here->MOS3lGiven = TRUE;
break; break;
case MOS3_AS: case MOS3_AS:
here->MOS3sourceArea = value->rValue;
here->MOS3sourceArea = value->rValue * scale * scale;
here->MOS3sourceAreaGiven = TRUE; here->MOS3sourceAreaGiven = TRUE;
break; break;
case MOS3_AD: case MOS3_AD:
here->MOS3drainArea = value->rValue;
here->MOS3drainArea = value->rValue * scale * scale;
here->MOS3drainAreaGiven = TRUE; here->MOS3drainAreaGiven = TRUE;
break; break;
case MOS3_PS: case MOS3_PS:
here->MOS3sourcePerimiter = value->rValue;
here->MOS3sourcePerimiter = value->rValue * scale;
here->MOS3sourcePerimiterGiven = TRUE; here->MOS3sourcePerimiterGiven = TRUE;
break; break;
case MOS3_PD: case MOS3_PD:
here->MOS3drainPerimiter = value->rValue;
here->MOS3drainPerimiter = value->rValue * scale;
here->MOS3drainPerimiterGiven = TRUE; here->MOS3drainPerimiterGiven = TRUE;
break; break;
case MOS3_NRS: case MOS3_NRS:

Loading…
Cancel
Save