64 filename = (
char *)
malloc(1024);
65 typeline = (
char *)
malloc(1024);
69 printf(
"name of process file (input): ");
70 if(scanf(
"%s",filename)!=1) {
71 printf(
"error reading process file name\n");
74 p = fopen(filename,
"r");
76 printf(
"can't open %s:",filename);
81 printf(
"name of .model file (output): ");
82 if(scanf(
"%s",filename)!=1) {
83 printf(
"error reading model file name\n");
86 m = fopen(filename,
"w");
88 printf(
"can't open %s:",filename);
92 printf(
"process name : ");
93 if(scanf(
"%s",filename)!=1) {
94 printf(
"error reading process name\n");
98 if(fgets(typeline,1023,
p)==
NULL) {
99 printf(
"error reading input description line\n");
104 while(*typeline ==
' ' || *typeline ==
'\t' || *typeline ==
',' ||
105 *typeline ==
'\n' ) {
108 if(*typeline ==
'\0')
break;
109 if(strncmp(
"nm",typeline,2) == 0) {
112 ncur->nname = typeline;
113 *(typeline+3) = (
char)
NULL;
118 }
else if(strncmp(
"pm",typeline,2) == 0) {
121 pcur->pname = typeline;
122 *(typeline+3) = (
char)
NULL;
127 }
else if(strncmp(
"py",typeline,2) == 0) {
130 ycur->yname = typeline;
131 *(typeline+3) = (
char)
NULL;
136 }
else if(strncmp(
"du",typeline,2) == 0) {
139 dcur->dname = typeline;
140 *(typeline+3) = (
char)
NULL;
145 }
else if(strncmp(
"ml",typeline,2) == 0) {
148 mcur->mname = typeline;
149 *(typeline+3) = (
char)
NULL;
155 printf(
" illegal header line in process file: run terminated\n");
156 printf(
" error occurred while parsing %s\n",typeline);
160 for(dcur=dlist;dcur;dcur=dcur->
dnext) {
161 fprintf(
m,
".model %s_%s r rsh = %g defw = %g narrow = %g\n",
162 prname,dcur->dname,dcur->dparms[0],dcur->dparms[8],dcur->dparms[9]);
163 fprintf(
m,
".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n",
164 prname,dcur->dname,dcur->dparms[1],dcur->dparms[2],dcur->dparms[8],
167 for(ycur=ylist;ycur;ycur=ycur->
ynext) {
168 fprintf(
m,
".model %s_%s r rsh = %g defw = %g narrow = %g\n",
169 prname,ycur->yname,ycur->yparms[0],ycur->yparms[8],ycur->yparms[9]);
170 fprintf(
m,
".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n",
171 prname,ycur->yname,ycur->yparms[1],ycur->yparms[2],ycur->yparms[8],
174 for(mcur=mlist;mcur;mcur=mcur->
mnext) {
175 fprintf(
m,
".model %s_%s r rsh = %g defw = %g narrow = %g\n",
176 prname,mcur->mname,mcur->mparms[0],mcur->mparms[8],mcur->mparms[9]);
177 fprintf(
m,
".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n",
178 prname,mcur->mname,mcur->mparms[1],mcur->mparms[2],mcur->mparms[8],
181 for(pcur=plist;pcur;pcur=pcur->
pnext) {
182 for(dcur=dlist;dcur;dcur=dcur->
dnext) {
183 fprintf(
m,
".model %s_%s_%s pmos level=4\n",prname,pcur->pname,
185 fprintf(
m,
"+ vfb = %g lvfb = %g wvfb = %g\n",
186 pcur->pparms[0],pcur->pparms[1],pcur->pparms[2]);
187 fprintf(
m,
"+ phi = %g lphi = %g wphi = %g\n",
188 pcur->pparms[3],pcur->pparms[4],pcur->pparms[5]);
189 fprintf(
m,
"+ k1 = %g lk1 = %g wk1 = %g\n",
190 pcur->pparms[6],pcur->pparms[7],pcur->pparms[8]);
191 fprintf(
m,
"+ k2 = %g lk2 = %g wk2 = %g\n",
192 pcur->pparms[9],pcur->pparms[10],pcur->pparms[11]);
193 fprintf(
m,
"+ eta = %g leta = %g weta = %g\n",
194 pcur->pparms[12],pcur->pparms[13],pcur->pparms[14]);
195 fprintf(
m,
"+ muz = %g dl = %g dw = %g\n",
196 pcur->pparms[15],pcur->pparms[16],pcur->pparms[17]);
197 fprintf(
m,
"+ u0 = %g lu0 = %g wu0 = %g\n",
198 pcur->pparms[18],pcur->pparms[19],pcur->pparms[20]);
199 fprintf(
m,
"+ u1 = %g lu1 = %g wu1 = %g\n",
200 pcur->pparms[21],pcur->pparms[22],pcur->pparms[23]);
201 fprintf(
m,
"+ x2mz = %g lx2mz = %g wx2mz = %g\n",
202 pcur->pparms[24],pcur->pparms[25],pcur->pparms[26]);
203 fprintf(
m,
"+ x2e = %g lx2e = %g wx2e = %g\n",
204 pcur->pparms[27],pcur->pparms[28],pcur->pparms[29]);
205 fprintf(
m,
"+ x3e = %g lx3e = %g wx3e = %g\n",
206 pcur->pparms[30],pcur->pparms[31],pcur->pparms[32]);
207 fprintf(
m,
"+ x2u0 = %g lx2u0 = %g wx2u0 = %g\n",
208 pcur->pparms[33],pcur->pparms[34],pcur->pparms[35]);
209 fprintf(
m,
"+ x2u1 = %g lx2u1 = %g wx2u1 = %g\n",
210 pcur->pparms[36],pcur->pparms[37],pcur->pparms[38]);
211 fprintf(
m,
"+ mus = %g lmus = %g wmus = %g\n",
212 pcur->pparms[39],pcur->pparms[40],pcur->pparms[41]);
213 fprintf(
m,
"+ x2ms = %g lx2ms = %g wx2ms = %g\n",
214 pcur->pparms[42],pcur->pparms[43],pcur->pparms[44]);
215 fprintf(
m,
"+ x3ms = %g lx3ms = %g wx3ms = %g\n",
216 pcur->pparms[45],pcur->pparms[46],pcur->pparms[47]);
217 fprintf(
m,
"+ x3u1 = %g lx3u1 = %g wx3u1 = %g\n",
218 pcur->pparms[48],pcur->pparms[49],pcur->pparms[50]);
219 fprintf(
m,
"+ tox = %g temp = %g vdd = %g\n",
220 pcur->pparms[51],pcur->pparms[52],pcur->pparms[53]);
221 fprintf(
m,
"+ cgdo = %g cgso = %g cgbo = %g\n",
222 pcur->pparms[54],pcur->pparms[55],pcur->pparms[56]);
223 fprintf(
m,
"+ xpart = %g \n",
225 fprintf(
m,
"+ n0 = %g ln0 = %g wn0 = %g\n",
226 pcur->pparms[60],pcur->pparms[61],pcur->pparms[62]);
227 fprintf(
m,
"+ nb = %g lnb = %g wnb = %g\n",
228 pcur->pparms[63],pcur->pparms[64],pcur->pparms[65]);
229 fprintf(
m,
"+ nd = %g lnd = %g wnd = %g\n",
230 pcur->pparms[66],pcur->pparms[67],pcur->pparms[68]);
231 fprintf(
m,
"+ rsh = %g cj = %g cjsw = %g\n",
232 dcur->dparms[0], dcur->dparms[1], dcur->dparms[2]);
233 fprintf(
m,
"+ js = %g pb = %g pbsw = %g\n",
234 dcur->dparms[3], dcur->dparms[4], dcur->dparms[5]);
235 fprintf(
m,
"+ mj = %g mjsw = %g wdf = %g\n",
236 dcur->dparms[6], dcur->dparms[7], dcur->dparms[8]);
237 fprintf(
m,
"+ dell = %g\n",
241 for(ncur=nlist;ncur;ncur=ncur->
nnext) {
242 for(dcur=dlist;dcur;dcur=dcur->
dnext) {
243 fprintf(
m,
".model %s_%s_%s nmos level=4\n",prname,ncur->nname,
245 fprintf(
m,
"+ vfb = %g lvfb = %g wvfb = %g\n",
246 ncur->nparms[0],ncur->nparms[1],ncur->nparms[2]);
247 fprintf(
m,
"+ phi = %g lphi = %g wphi = %g\n",
248 ncur->nparms[3],ncur->nparms[4],ncur->nparms[5]);
249 fprintf(
m,
"+ k1 = %g lk1 = %g wk1 = %g\n",
250 ncur->nparms[6],ncur->nparms[7],ncur->nparms[8]);
251 fprintf(
m,
"+ k2 = %g lk2 = %g wk2 = %g\n",
252 ncur->nparms[9],ncur->nparms[10],ncur->nparms[11]);
253 fprintf(
m,
"+ eta = %g leta = %g weta = %g\n",
254 ncur->nparms[12],ncur->nparms[13],ncur->nparms[14]);
255 fprintf(
m,
"+ muz = %g dl = %g dw = %g\n",
256 ncur->nparms[15],ncur->nparms[16],ncur->nparms[17]);
257 fprintf(
m,
"+ u0 = %g lu0 = %g wu0 = %g\n",
258 ncur->nparms[18],ncur->nparms[19],ncur->nparms[20]);
259 fprintf(
m,
"+ u1 = %g lu1 = %g wu1 = %g\n",
260 ncur->nparms[21],ncur->nparms[22],ncur->nparms[23]);
261 fprintf(
m,
"+ x2mz = %g lx2mz = %g wx2mz = %g\n",
262 ncur->nparms[24],ncur->nparms[25],ncur->nparms[26]);
263 fprintf(
m,
"+ x2e = %g lx2e = %g wx2e = %g\n",
264 ncur->nparms[27],ncur->nparms[28],ncur->nparms[29]);
265 fprintf(
m,
"+ x3e = %g lx3e = %g wx3e = %g\n",
266 ncur->nparms[30],ncur->nparms[31],ncur->nparms[32]);
267 fprintf(
m,
"+ x2u0 = %g lx2u0 = %g wx2u0 = %g\n",
268 ncur->nparms[33],ncur->nparms[34],ncur->nparms[35]);
269 fprintf(
m,
"+ x2u1 = %g lx2u1 = %g wx2u1 = %g\n",
270 ncur->nparms[36],ncur->nparms[37],ncur->nparms[38]);
271 fprintf(
m,
"+ mus = %g lmus = %g wmus = %g\n",
272 ncur->nparms[39],ncur->nparms[40],ncur->nparms[41]);
273 fprintf(
m,
"+ x2ms = %g lx2ms = %g wx2ms = %g\n",
274 ncur->nparms[42],ncur->nparms[43],ncur->nparms[44]);
275 fprintf(
m,
"+ x3ms = %g lx3ms = %g wx3ms = %g\n",
276 ncur->nparms[45],ncur->nparms[46],ncur->nparms[47]);
277 fprintf(
m,
"+ x3u1 = %g lx3u1 = %g wx3u1 = %g\n",
278 ncur->nparms[48],ncur->nparms[49],ncur->nparms[50]);
279 fprintf(
m,
"+ tox = %g temp = %g vdd = %g\n",
280 ncur->nparms[51],ncur->nparms[52],ncur->nparms[53]);
281 fprintf(
m,
"+ cgdo = %g cgso = %g cgbo = %g\n",
282 ncur->nparms[54],ncur->nparms[55],ncur->nparms[56]);
283 fprintf(
m,
"+ xpart = %g \n",
285 fprintf(
m,
"+ n0 = %g ln0 = %g wn0 = %g\n",
286 ncur->nparms[60],ncur->nparms[61],ncur->nparms[62]);
287 fprintf(
m,
"+ nb = %g lnb = %g wnb = %g\n",
288 ncur->nparms[63],ncur->nparms[64],ncur->nparms[65]);
289 fprintf(
m,
"+ nd = %g lnd = %g wnd = %g\n",
290 ncur->nparms[66],ncur->nparms[67],ncur->nparms[68]);
291 fprintf(
m,
"+ rsh = %g cj = %g cjsw = %g\n",
292 dcur->dparms[0], dcur->dparms[1], dcur->dparms[2]);
293 fprintf(
m,
"+ js = %g pb = %g pbsw = %g\n",
294 dcur->dparms[3], dcur->dparms[4], dcur->dparms[5]);
295 fprintf(
m,
"+ mj = %g mjsw = %g wdf = %g\n",
296 dcur->dparms[6], dcur->dparms[7], dcur->dparms[8]);
297 fprintf(
m,
"+ dell = %g\n",