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

📄 globals.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1991 Regents of the University of California.  All rights reserved.Author:	1987 Kartikeya Mayaram, U. C. Berkeley CAD GroupAuthor:	1991 David A. Gates, U. C. Berkeley CAD Group**********/#include <stdio.h>#include <math.h>#include "numglobs.h"#include "numconst.h"#include "numenum.h"#include "nummacs.h"/* Forward Declarations */void GLOBputGlobals();void GLOBgetGlobals();void GLOBprnGlobals();/* Global Variable Declarations */char *LogFileName = "cider.log";BOOLEAN BandGapNarrowing;BOOLEAN TempDepMobility, ConcDepMobility, FieldDepMobility, TransDepMobility;BOOLEAN SurfaceMobility, MatchingMobility, MobDeriv;BOOLEAN CCScattering;BOOLEAN Srh, Auger, ConcDepLifetime, AvalancheGen;BOOLEAN FreezeOut = FALSE;BOOLEAN OneCarrier;int MaxIterations = 100;int AcAnalysisMethod = DIRECT;double Temp, RelTemp, Vt, RefPsi;double EpsNorm, VNorm, NNorm, LNorm, TNorm, JNorm, GNorm, ENorm;/* RefPsi is the potential at Infinity *//* * Compute global values for this device. */void GLOBcomputeGlobals( pGlobals, temp )GLOBvalues *pGlobals;			/* Global Parameter Data Structure */double temp;				/* Instance Temperature */{    double tmp1;    double mnSi, mpSi;			/* electron and hole conduction mass */    double eg0;				/* band gap */    double nc0, nv0;			/* conduction/valence band states */    /* compute temp. dependent global parameters */    Temp = temp;    RelTemp = Temp / 300.0;    tmp1 = pow( RelTemp, 1.5 );    Vt = BOLTZMANN_CONSTANT * Temp / CHARGE;    eg0 = EGAP300_SI + DGAPDT_SI * ( (300.0 * 300.0) / (300.0 + TREF_EG_SI)	- (Temp * Temp) / (Temp + TREF_EG_SI) );    mnSi = 1.039 + 5.477e-4 * Temp - 2.326e-7 * Temp * Temp;    mpSi = 0.262 * log( 0.259 * Temp );    nc0 = NCV_NOM * pow( mnSi, 1.5 ) * tmp1;    nv0 = NCV_NOM * pow( mpSi, 1.5 ) * tmp1;    RefPsi = 0.0;    /* set up the normalization factors */    EpsNorm = EPS_SI;    VNorm = Vt;    NNorm = sqrt( nc0 ) * sqrt( nv0 );        /* this way no overflow */    LNorm = sqrt( ( VNorm * EpsNorm ) / ( CHARGE * NNorm ) );    TNorm = LNorm * LNorm / VNorm;    JNorm = CHARGE * NNorm * VNorm / LNorm;    GNorm = JNorm / VNorm;    ENorm = VNorm / LNorm;    RefPsi /= VNorm;    /* Save Globals */    GLOBputGlobals( pGlobals );    /*    GLOBprnGlobals( stdout, pGlobals );    */}void GLOBputGlobals( values )GLOBvalues *values;{  if ( values IS NIL(GLOBvalues) ) {    fprintf( stderr, "Error: tried to get from NIL GLOBvalues\n");    exit(-1);  }  /* Temperature-related globals */  values->Temp = Temp;  values->RelTemp = RelTemp;  values->Vt = Vt;  values->RefPsi = RefPsi;  /* Normalization Factors */  values->EpsNorm = EpsNorm;  values->VNorm = VNorm;  values->NNorm = NNorm;  values->LNorm = LNorm;  values->TNorm = TNorm;  values->JNorm = JNorm;  values->GNorm = GNorm;  values->ENorm = ENorm;  return;}/* * Reload all globals needed during DEV loading routines * and DEV output routines */void GLOBgetGlobals( values )GLOBvalues *values;{  if ( values IS NIL(GLOBvalues) ) {    fprintf( stderr, "Error: tried to get from NIL GLOBvalues\n");    exit(-1);  }  /* Temperature-related globals */  Temp = values->Temp;  RelTemp = values->RelTemp;  Vt = values->Vt;  RefPsi = values->RefPsi;  /* Normalization Factors */  EpsNorm = values->EpsNorm;  VNorm = values->VNorm;  NNorm = values->NNorm;  LNorm = values->LNorm;  TNorm = values->TNorm;  JNorm = values->JNorm;  GNorm = values->GNorm;  ENorm = values->ENorm;  return;}void GLOBprnGlobals( file, values )FILE *file;GLOBvalues *values;{  static char *tabformat = "%12s: % .4e %-12s\t";  static char *newformat = "%12s: % .4e %-12s\n";  if ( values IS NIL( GLOBvalues ) ) {    fprintf( stderr, "Error: tried to print NIL GLOBvalues\n");    exit(-1);  }  fprintf( file, "*** GLOBAL PARAMETERS AT %g deg K\n", values->Temp );  fprintf( file, "****** Temperature-Dependent Voltages\n" );  fprintf( file, tabformat, "Vt", values->Vt, "V" );  fprintf( file, newformat, "RefPsi", values->RefPsi * values->VNorm, "V" );  fprintf( file, "****** Normalization Factors\n" );  fprintf( file, newformat, "EpsNorm", values->EpsNorm, "F/cm" );  fprintf( file, newformat, "VNorm", values->VNorm, "V" );  fprintf( file, newformat, "NNorm", values->NNorm, "/cm^3" );  fprintf( file, newformat, "LNorm", values->LNorm, "cm" );  fprintf( file, newformat, "TNorm", values->TNorm, "s" );  fprintf( file, newformat, "JNorm", values->JNorm, "A/cm^2" );  fprintf( file, newformat, "GNorm", values->GNorm, "A/V" );  fprintf( file, newformat, "ENorm", values->ENorm, "V/cm" );  return;}

⌨️ 快捷键说明

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