Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / mcc / mcc_mod_bsim4.h
1 /******************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Fichier : mcc_mod_bsim3v3.h */
6 /* */
7 /* */
8 /* (c) copyright 2001 AVERTEC */
9 /* Tous droits reserves */
10 /* */
11 /* Auteur(s) : Marc KUOCH */
12 /*----------------------------------------------------------------------------*/
13 /* */
14 /* */
15 /*----------------------------------------------------------------------------*/
16
17 /******************************************************************************/
18 /* includes */
19 /******************************************************************************/
20
21 /******************************************************************************/
22 /* functions */
23 /******************************************************************************/
24
25 extern void mcc_initparam_bsim4(mcc_modellist *ptmodel) ;
26
27 // specific func for bsim43
28 extern int mcc_need_stress_bs43 ( mcc_modellist *ptmodel,
29 elp_lotrs_param *lotrsparam
30 );
31
32 extern double mcc_update_Kstress_vsat_bs43 ( mcc_modellist *ptmodel,
33 elp_lotrs_param *lotrsparam,
34 double vsat_orig,
35 double temp,
36 double L,
37 double W
38 );
39
40 extern double mcc_update_Kstress_ueff_bs43 ( mcc_modellist *ptmodel,
41 elp_lotrs_param *lotrsparam,
42 double ueff_orig,
43 double temp,
44 double L,
45 double W
46 );
47
48 extern double mcc_update_Kstress_eta0_bs43 ( mcc_modellist *ptmodel,
49 elp_lotrs_param *lotrsparam,
50 double K2_orig,
51 double L,
52 double W,
53 int NF
54 );
55
56 extern double mcc_update_Kstress_k2_bs43 ( mcc_modellist *ptmodel,
57 elp_lotrs_param *lotrsparam,
58 double K2_orig,
59 double L,
60 double W
61 );
62
63 extern double mcc_update_Kstress_vth0_bs43 ( mcc_modellist *ptmodel,
64 elp_lotrs_param *lotrsparam,
65 double VTH0_orig,
66 double L,
67 double W
68 );
69
70 extern double mcc_calc_Kstress_vth0_bs43 ( mcc_modellist *ptmodel,
71 double L,
72 double W,
73 int NF, elp_lotrs_param *lotrsparam);
74
75 extern double mcc_calc_Pueff_bs43 ( mcc_modellist *ptmodel,
76 double inv_sa, double inv_sb,
77 double temp,
78 double L,
79 double W,
80 int NF, elp_lotrs_param *lotrsparam );
81
82 extern double mcc_calc_Kstress_u0_bs43 ( mcc_modellist *ptmodel,
83 double temp,
84 double L,
85 double W,
86 int NF, elp_lotrs_param *lotrsparam);
87
88 extern void mcc_calc_inv_sa_bs43 ( mcc_modellist *ptmodel,
89 elp_lotrs_param *lotrsparam,
90 double L,
91 double *inv_sa,
92 double *inv_saref);
93 extern void mcc_calc_inv_sb_bs43 ( mcc_modellist *ptmodel,
94 elp_lotrs_param *lotrsparam,
95 double L,
96 double *inv_sa,
97 double *inv_saref);
98 // low level func
99 extern double mcc_calc_coxe_bsim4 ( mcc_modellist *ptmodel );
100 extern double mcc_calc_coxp_bsim4 ( mcc_modellist *ptmodel );
101 extern double mcc_calc_coxeff_bsim4 (mcc_modellist *ptmodel,
102 double Vgsteff, double temp,
103 double Leff, double Weff,
104 double L, double W,
105 double Vgseff,double Vbseff, double Vfbeff,
106 double BINUNIT, int cv_model,
107 double *coxeff_acc_dep,
108 elp_lotrs_param *lotrsparam,
109 int getparm_flag);
110 extern double mcc_calc_gamma1_bsim4 (mcc_modellist *ptmodel, double Leff,double Weff, double BINUNIT);
111 extern double mcc_calc_gamma2_bsim4 (mcc_modellist *ptmodel);
112 extern double mcc_calc_ni_bsim4 (mcc_modellist *model,double temp);
113 extern double mcc_calc_phis_bsim4 (mcc_modellist *ptmodel,double Leff,double Weff,
114 double BINUNIT,double temp);
115 extern double mcc_calc_vbi_bsim4 (mcc_modellist *ptmodel,double temp,
116 double Leff, double Weff, int getparm_flag);
117 extern double mcc_calc_vbx_bsim4 (mcc_modellist *ptmodel,double Leff,double Weff,
118 double BINUNIT,double temp);
119
120 // dimensions
121 extern double mcc_calc_leff_bsim4 (mcc_modellist *ptmodel,elp_lotrs_param *lotrsparam,double L,double W);
122 extern double mcc_calc_weffcj_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam, double L,double W);
123 extern double mcc_calc_weff_bsim4 (mcc_modellist *ptmodel,elp_lotrs_param *lotrsparam,double L,double W);
124 extern double mcc_calcDW_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,double L, double W) ;
125 extern double mcc_calcDL_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,double L, double W) ;
126 extern double mcc_calcDLC_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,double L, double W) ;
127 extern double mcc_calcDWC_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,double L, double W) ;
128 extern double mcc_calcDWCJ_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam, double L, double W) ;
129
130 // efficace voltage
131 extern double mcc_calc_vbseff_bsim4 (mcc_modellist *ptmodel,
132 double Vbs,
133 double Leff, double Weff,
134 double Temp, double K2,
135 int getparm_flag,elp_lotrs_param *lotrsparam);
136 extern double mcc_calc_vgsteffcv_bsim4 (mcc_modellist *ptmodel,
137 double Vth, double Vbseff,
138 double Vds, double Vgs,
139 double temp,
140 double Leff, double Weff,
141 double L, double W,
142 elp_lotrs_param *lotrsparam,
143 int getparm_flag
144 );
145 extern double mcc_calc_vgsteff_bsim4 (mcc_modellist *ptmodel,
146 double Vth, double Vbseff,
147 double Vds, double Vgs,
148 double temp,
149 double Leff, double Weff,
150 double L, double W,
151 double *Vgseff_r,
152 elp_lotrs_param *lotrsparam,
153 int getparm_flag
154 );
155 extern void mcc_calc_vdseff_bsim4 ( mcc_modellist *ptmodel,
156 double *Vdseff, double *Vdsat,
157 double *Esat, double *ueffT,
158 double *Abulk_r, double *Rds_r,
159 double *VsatT_r, double *lambda_r,
160 double *Rfactor_r, double *Weff_v_r,
161 double Vth, double Vbseff,
162 double Vds, double Vgsteff,
163 double temp,
164 double L, double W,
165 elp_lotrs_param *lotrsparam,
166 int getparm_flag
167 );
168
169 // high level func
170 extern double mcc_calcVTH_bsim4 (mcc_modellist *ptmodel,
171 double L,
172 double W,
173 double temp,
174 double vbs,
175 double vds,
176 int capa,
177 elp_lotrs_param *lotrsparam,
178 int mcclog) ;
179
180 extern double mcc_calcIDS_bsim4 (mcc_modellist *ptmodel,
181 double Vbstrue,
182 double Vgs,
183 double Vds,
184 double W,
185 double L,
186 double Temp,
187 elp_lotrs_param *lotrsparam);
188 double mcc_calcCGP_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,double vdd,
189 double L, double W, double *ptQov);
190 double mcc_calcCDS_bsim4 (mcc_modellist *ptmodel, double temp, double vbx1, double vbx2);
191 double mcc_calcCDP_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,
192 double temp, double vbx1,double vbx2);
193 double mcc_calcCDW_bsim4 (mcc_modellist *ptmodel, elp_lotrs_param *lotrsparam,
194 double temp, double vbx1, double vbx2,
195 double vdd, double L, double W) ;
196 /*
197 double mcc_calcIdiode_bsim4 (mcc_modellist *ptmodel, double AX,
198 double PX, double temp,
199 double L, double W, double vbx);
200 */
201 void mcc_calcQint_bsim4 (mcc_modellist *ptmodel, double L, double W,
202 double temp, double vgs, double vbs, double vds,
203 double *ptQg, double *ptQs, double *ptQd,
204 double *ptQb,elp_lotrs_param *lotrsparam);
205 double mcc_calcCGD_bsim4 (mcc_modellist *ptmodel,
206 double L, double W,
207 double temp,
208 double vgs0,
209 double vgs1,
210 double vbs,
211 double vds,
212 elp_lotrs_param *elp_lotrs_param) ;
213 double mcc_calcCGSI_bsim4 (mcc_modellist *ptmodel,
214 double L, double W,
215 double temp,
216 double vgs,
217 double vbs,
218 double vds,
219 elp_lotrs_param *elp_lotrs_param) ;
220 double mcc_calcIgb_bsim4 (mcc_modellist *ptmodel, double L, double W, double temp,
221 double Vgs, double Vds, double Vbs,
222 elp_lotrs_param *lotrsparam);
223 void mcc_calcIgixl_bsim4 (mcc_modellist *ptmodel, double L, double W,
224 double *ptIgidl, double *ptIgisl,
225 double temp, double Vgs, double Vds, double Vbs,
226 elp_lotrs_param *lotrsparam);
227 void mcc_calcIxb_bsim4 (mcc_modellist *ptmodel, double L, double W,
228 double *ptIdb, double *Isb,
229 double temp, double Vds, double Vbs,
230 double AD, double PD, double AS, double PS,
231 elp_lotrs_param *lotrsparam);
232 void mcc_calcIgx_bsim4 (mcc_modellist *ptmodel, double L, double W,
233 double *ptIgd, double *ptIgs,
234 double temp, double Vds, double Vgs,
235 elp_lotrs_param *lotrsparam);
236 void mcc_calcIgcx_bsim4 (mcc_modellist *ptmodel, double L, double W,
237 double *ptIgcd, double *ptIgcs,
238 double temp, double Vds, double Vgs, double Vbs,
239 elp_lotrs_param *lotrsparam);
240 void mcc_calcPAfromgeomod_bsim4( lotrs_list *lotrs,
241 mcc_modellist *model,
242 elp_lotrs_param *lotrsparam,
243 double *as,
244 double *ad,
245 double *ps,
246 double *pd
247 );
248 void mcc_calcPA_bsim4( double nf,
249 double geomod,
250 double minsd,
251 double weffcj,
252 double dmcg,
253 double dmci,
254 double dmdg,
255 double *ps,
256 double *pd,
257 double *as,
258 double *ad
259 );
260 void mcc_calcnumberfingerdiff( double nf,
261 double minsd,
262 double *nuintd,
263 double *nuend,
264 double *nuints,
265 double *nuends
266 );
267
268
269 double mcc_update_wpe_ueff( mcc_modellist *model,
270 elp_lotrs_param *lotrsparam,
271 double l,
272 double w,
273 double leff,
274 double weff,
275 int binunit,
276 double ueff_orig
277 );
278 double mcc_update_wpe_k2( mcc_modellist *model,
279 elp_lotrs_param *lotrsparam,
280 double l,
281 double w,
282 double leff,
283 double weff,
284 int binunit,
285 double k2_orig
286 );
287 double mcc_update_wpe_vth0( mcc_modellist *model,
288 elp_lotrs_param *lotrsparam,
289 double l,
290 double w,
291 double leff,
292 double weff,
293 int binunit,
294 double vt0_orig
295 );
296 int mcc_get_wpe( mcc_modellist *model,
297 elp_lotrs_param *lotrsparam,
298 double l,
299 double w,
300 double *sca,
301 double *scb,
302 double *scc
303 );
304