Jspice3
proc2mod.c File Reference
#include "spice.h"
#include <stdio.h>
#include "inpdefs.h"
#include "misc.h"
Include dependency graph for proc2mod.c:

Go to the source code of this file.

Data Structures

struct  snmod
 
struct  spmod
 
struct  sdmod
 
struct  symod
 
struct  smmod
 

Typedefs

typedef struct snmod nmod
 
typedef struct spmod pmod
 
typedef struct sdmod dmod
 
typedef struct symod ymod
 
typedef struct smmod mmod
 

Functions

void perror ()
 
void getdata ()
 
int main ()
 
void getdata (vals, int count, int width)
 

Variables

FILE * m = NULL
 
FILE * p = NULL
 
char * dataline
 

Typedef Documentation

typedef struct sdmod dmod
typedef struct smmod mmod
typedef struct snmod nmod
typedef struct spmod pmod
typedef struct symod ymod

Function Documentation

void getdata ( )
void getdata ( vals  ,
int  count,
int  width 
)

Definition at line 305 of file proc2mod.c.

309 {
310  int i;
311  int error;
312  int start;
313  char *c;
314 
315  do {
316  if(fgets(dataline,1023,p)==NULL) {
317  printf("premature end of file getting input data line\n");
318  exit(1);
319  }
320  start=0;
321  } while (*dataline == '*') ;
322  c = dataline;
323  for(i=0;i<count;i++) {
324 retry:
325  vals[i] = INPevaluate(&c,&error,1);
326  start++;
327  if(error || (start>width)) { /* end of line, so read another one */
328  do {
329  if(fgets(dataline,1023,p)==NULL) {
330  printf("premature end of file reading input data line \n");
331  exit(1);
332  }
333  start=0;
334  } while (*dataline == '*') ;
335  c = dataline;
336  goto retry;
337  }
338  }
339 }
double INPevaluate()
Definition: cddefs.h:215
static char start[32]
Definition: subckt.c:76
#define NULL
Definition: spdefs.h:121
static double c
Definition: vectors.c:16
char * dataline
Definition: proc2mod.c:49
int count
Definition: output.c:152
int main ( )

Definition at line 53 of file proc2mod.c.

53  {
54  char *typeline;
55  char *prname;
56  nmod *nlist=NULL,*ncur;
57  pmod *plist=NULL,*pcur;
58  dmod *dlist=NULL,*dcur;
59  ymod *ylist=NULL,*ycur;
60  mmod *mlist=NULL,*mcur;
61  char *filename;
62 
63 
64  filename = (char *)malloc(1024);
65  typeline = (char *)malloc(1024);
66  dataline = (char *)malloc(1024);
67 
68  while(p == NULL) {
69  printf("name of process file (input): ");
70  if(scanf("%s",filename)!=1) {
71  printf("error reading process file name\n");
72  return (1);
73  }
74  p = fopen(filename,"r");
75  if(p==NULL) {
76  printf("can't open %s:",filename);
77  perror("");
78  }
79  }
80  while(m == NULL) {
81  printf("name of .model file (output): ");
82  if(scanf("%s",filename)!=1) {
83  printf("error reading model file name\n");
84  return (1);
85  }
86  m = fopen(filename,"w");
87  if(m==NULL) {
88  printf("can't open %s:",filename);
89  perror("");
90  }
91  }
92  printf("process name : ");
93  if(scanf("%s",filename)!=1) {
94  printf("error reading process name\n");
95  return (1);
96  }
97  prname = filename;
98  if(fgets(typeline,1023,p)==NULL) {
99  printf("error reading input description line\n");
100  return (1);
101  }
102  strtolower(typeline);
103  while(1) {
104  while(*typeline == ' ' || *typeline == '\t' || *typeline == ',' ||
105  *typeline == '\n' ) {
106  typeline ++;
107  }
108  if(*typeline == '\0') break;
109  if(strncmp("nm",typeline,2) == 0) {
110  ncur = (nmod *)malloc(sizeof(nmod));
111  ncur->nnext = NULL;
112  ncur->nname = typeline;
113  *(typeline+3) = (char)NULL;
114  typeline += 4;
115  getdata(ncur->nparms,69,3);
116  ncur->nnext = nlist;
117  nlist = ncur;
118  } else if(strncmp("pm",typeline,2) == 0) {
119  pcur = (pmod *)malloc(sizeof(pmod));
120  pcur->pnext = NULL;
121  pcur->pname = typeline;
122  *(typeline+3) = (char)NULL;
123  typeline += 4;
124  getdata(pcur->pparms,69,3);
125  pcur->pnext = plist;
126  plist = pcur;
127  } else if(strncmp("py",typeline,2) == 0) {
128  ycur = (ymod *)malloc(sizeof(ymod));
129  ycur->ynext = NULL;
130  ycur->yname = typeline;
131  *(typeline+3) = (char)NULL;
132  typeline += 4;
133  getdata(ycur->yparms,10,5);
134  ycur->ynext = ylist;
135  ylist = ycur;
136  } else if(strncmp("du",typeline,2) == 0) {
137  dcur = (dmod *)malloc(sizeof(dmod));
138  dcur->dnext = NULL;
139  dcur->dname = typeline;
140  *(typeline+3) = (char)NULL;
141  typeline += 4;
142  getdata(dcur->dparms,10,5);
143  dcur->dnext = dlist;
144  dlist = dcur;
145  } else if(strncmp("ml",typeline,2) == 0) {
146  mcur = (mmod *)malloc(sizeof(mmod));
147  mcur->mnext = NULL;
148  mcur->mname = typeline;
149  *(typeline+3) = (char)NULL;
150  typeline += 4;
151  getdata(mcur->mparms,10,5);
152  mcur->mnext = mlist;
153  mlist = mcur;
154  } else {
155  printf(" illegal header line in process file: run terminated\n");
156  printf(" error occurred while parsing %s\n",typeline);
157  return (1);
158  }
159  }
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],
165  dcur->dparms[9]);
166  }
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],
172  ycur->yparms[9]);
173  }
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],
179  mcur->mparms[9]);
180  }
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,
184  dcur->dname);
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",
224  pcur->pparms[57]);
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",
238  dcur->dparms[9]);
239  }
240  }
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,
244  dcur->dname);
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",
284  ncur->nparms[57]);
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",
298  dcur->dparms[9]);
299  }
300  }
301  return (0);
302 }
static void mlist()
Definition: proc2mod.c:26
Definition: proc2mod.c:21
void getdata()
char * malloc()
Definition: proc2mod.c:36
Definition: cddefs.h:215
Definition: proc2mod.c:41
Definition: polyclip.c:32
#define NULL
Definition: spdefs.h:121
struct symod * ynext
Definition: proc2mod.c:37
struct sdmod * dnext
Definition: proc2mod.c:32
void strtolower()
struct snmod * nnext
Definition: proc2mod.c:22
void perror()
struct spmod * pnext
Definition: proc2mod.c:27
struct smmod * mnext
Definition: proc2mod.c:42
char * dataline
Definition: proc2mod.c:49
Definition: proc2mod.c:31
Definition: cddefs.h:109
void perror ( )

Variable Documentation

char* dataline

Definition at line 49 of file proc2mod.c.

FILE* m = NULL

Definition at line 47 of file proc2mod.c.

FILE* p = NULL

Definition at line 48 of file proc2mod.c.