1 /*
2  * This file is part of the Alliance CAD System
3  * Copyright (C) Laboratoire LIP6 - D�partement ASIM
4  * Universite Pierre et Marie Curie
5  *
6  * Home page          : http://www-asim.lip6.fr/alliance/
7  * E-mail             : mailto:alliance-users@asim.lip6.fr
8  *
9  * This progam is  free software; you can redistribute it  and/or modify it
10  * under the  terms of the GNU  General Public License as  published by the
11  * Free Software Foundation;  either version 2 of the License,  or (at your
12  * option) any later version.
13  *
14  * Alliance VLSI  CAD System  is distributed  in the hope  that it  will be
15  * useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
17  * Public License for more details.
18  *
19  * You should have received a copy  of the GNU General Public License along
20  * with the GNU C Library; see the  file COPYING. If not, write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 /*******************************************************************************
25 * mgn.h                                                                        *
26 * header for the definition of genlib functions, and macros                    *
27 * author  : Frederic Petrot                                                    *
28 * version : 3.18                                                               *
29 * date    : 03/09/93                                                           *
30 * version : 3.26                                                               *
31 * date    : 10/06/97                                                           *
32 *******************************************************************************/
33 /* Types for the ptype lists as required in version 3.26
34    As the types are all exclusives from another there is no need for
35    styled values. */
36 
37 /*******************************************************************************
38 * physical placement functions                                                 *
39 *******************************************************************************/
40 extern void genDEF_PHFIG();
41 extern void genLOAD_PHFIG();
42 extern void genSAVE_PHFIG();
43 extern void genDEF_AB();
44 extern void genDEF_PHINS();
45 extern ptype_list *genPHCON();
46 extern ptype_list *genCOPY_UP_CON();
47 extern ptype_list *genCOPY_UP_CON_FACE();
48 extern ptype_list *genCOPY_UP_ALL_CON();
49 extern ptype_list *genPHSEG();
50 extern ptype_list *genCOPY_UP_SEG();
51 extern ptype_list *genTHRU_H();
52 extern ptype_list *genTHRU_V();
53 extern ptype_list *genTHRU_CON_H();
54 extern ptype_list *genTHRU_CON_V();
55 extern ptype_list *genWIRE1();
56 extern ptype_list *genWIRE2();
57 extern ptype_list *genWIRE3();
58 extern ptype_list *genPHVIA();
59 extern ptype_list *genPHBIGVIA();
60 extern ptype_list *genPLACE();
61 extern ptype_list *genPLACE_RIGHT();
62 extern ptype_list *genPLACE_TOP();
63 extern ptype_list *genPLACE_LEFT();
64 extern ptype_list *genPLACE_BOTTOM();
65 extern ptype_list *genPLACE_REF();
66 extern ptype_list *genPLACE_ON();
67 extern ptype_list *genPHREF();
68 extern void        genDEL_PHREF();
69 extern ptype_list *genCOPY_UP_REF();
70 extern ptype_list *genCOPY_UP_ALL_REF();
71 extern ptype_list *genPLACE_VIA_REF();
72 extern ptype_list *genPLACE_CON_REF();
73 extern ptype_list *genPLACE_SEG_REF();
74 extern void genFLATTEN_PHFIG();
75 extern void genFLATTEN_ALL_PHINS();
76 extern long genGET_PHFIG_REF_X();
77 extern long genGET_PHFIG_REF_Y();
78 extern long genGET_REF_X();
79 extern long genGET_REF_Y();
80 extern long genGET_CON_X();
81 extern long genGET_CON_Y();
82 extern long genGET_INS_X();
83 extern long genGET_INS_Y();
84 extern long genHEIGHT();
85 extern long genWIDTH();
86 extern void genREVERSE_PHCON();
87 extern void genOUTLINE();
88 /*******************************************************************************
89 * netlist description functions                                                *
90 *******************************************************************************/
91 extern void genDEF_LOFIG();
92 extern void genLOAD_LOFIG();
93 extern void genSAVE_LOFIG();
94 extern void genLOINS(char *, ...);
95 extern void genLOINSE(char *, ...);
96 extern void genLOINSA();
97 extern void genLOTRS( char type, unsigned short width, unsigned short length, char *grid, char *source, char *drain );
98 extern void genLOCON( char *conname, char direction, char *signame );
99 extern void genLOSIGMERGE( char *sig1, char *sig2 );
100 extern void genFLATTEN_LOFIG( char *insname, char concat );
101 extern void genFLATTEN_ALL_LOINS( char concat, int catal );
102 extern void genDEF_PHSC( char *name );
103 extern void genSAVE_PHSC();
104 extern void genSC_PLACE( char  *insname, int   sym, long  x, long y );
105 extern void genSC_RIGHT( char  *insname, int   sym );
106 extern void genSC_LEFT( char  *insname, int   sym );
107 extern void genSC_TOP( char *insname, int sym );
108 extern void genSC_BOTTOM( char *insname, int sym );
109 extern void genSC_CHANNEL();
110 extern void genSC_CON_CHANNEL();
111 extern void genLOGEN(char *, int, ...);
112 extern void genSETLOGEN(char *, char *, ...);
113 
114 /********************************* Analogical world ************************************/
115 
116 extern void genLOCAP(char type,double capa,char *tcon,char *bcon,char *name)    ;
117 extern void genLORES(char type,double resi,char *rcon1,char *rcon2,char *name)  ;
118 extern void genLOSELF(char type,double self,char *scon1,char *scon2,char *name) ;
119 
120 extern void genSET_LOCAP(char *figname,char *capname,double newcap)    ;
121 extern void genSET_LORES(char *figname,char *resname,double newres)    ;
122 extern void genSET_LOSELF(char *figname,char *selfname,double newself) ;
123 
124 /***************************************************************************************/
125 
126 
127 /*******************************************************************************
128 * name forming functions, for both views                                       *
129 *******************************************************************************/
130 extern char *genBUS();
131 extern char *genELM();
132 extern char *genNAME(char *, ...);
133 
134 /*******************************************************************************
135 * macro definitions for allowed stdlib functions                               *
136 *******************************************************************************/
137 #define PRINTF       printf
138 #define STRLEN(a)    (long)(a == NULL ? 0 : strlen(a))
139 
140 /*******************************************************************************
141 * macro definitions in order to allows float and integer typed parameters      *
142 *******************************************************************************/
143 #ifndef  __GENLIB__
144 #define GENLIB_DEF_PHFIG(name)                      genDEF_PHFIG(name)
145 #define GENLIB_LOAD_PHFIG(name)                     genLOAD_PHFIG(name)
146 #define GENLIB_SAVE_PHFIG                           genSAVE_PHFIG
147 #define GENLIB_DEF_AB(dx1,dy1,dx2,dy2) \
148             genDEF_AB((long)((dx1)*SCALE_X),(long)((dy1)*SCALE_X), \
149                         (long)((dx2)*SCALE_X),(long)((dy2)*SCALE_X))
150 #define GENLIB_DEF_PHINS(name) \
151             genDEF_PHINS(name)
152 #define GENLIB_PHCON(layer,width,name,orient,x,y) \
153             genPHCON(layer,(long)((width)*SCALE_X),name,orient, \
154                      (long)((x)*SCALE_X),(long)((y)*SCALE_X))
155 #define GENLIB_COPY_UP_CON(index,locname,insname,newname) \
156             genCOPY_UP_CON(index,locname,insname,newname)
157 #define GENLIB_COPY_UP_ALL_CON(orient,insname,cheminom) \
158             genCOPY_UP_ALL_CON(orient,insname,cheminom)
159 #define GENLIB_COPY_UP_CON_FACE(orient,locname,insname,newname) \
160             genCOPY_UP_CON_FACE(orient,locname,insname,newname)
161 #define GENLIB_PHSEG(layer,width,name,x1,y1,x2,y2) \
162             genPHSEG(layer,(long)((width)*SCALE_X),name,(long)((x1)*SCALE_X), \
163                      (long)((y1)*SCALE_X), (long)((x2)*SCALE_X), \
164                      (long)((y2)*SCALE_X))
165 #define GENLIB_COPY_UP_SEG(locname,insname,newname) \
166             genCOPY_UP_SEG(locname,insname,newname)
167 #define GENLIB_WIRE1(layer,width,ins1,con1,index1,ins2,con2,index2) \
168             genWIRE1(layer,(long)((width)*SCALE_X),ins1,con1,index1,ins2, \
169                      con2,index2)
170 #define GENLIB_WIRE2(layer,width,ins1,con1,index1,ins2,con2,index2,x,y) \
171             genWIRE2(layer,(long)((width)*SCALE_X),ins1,con1,index1,ins2, \
172                      con2,index2, (long)((x)*SCALE_X),(long)((y)*SCALE_X))
173 #define GENLIB_WIRE3(layer,width,ins1,con1,index1,ins2,con2,index2,x1,y1,x2,y2)  \
174             genWIRE3(layer,(long)((width)*SCALE_X),ins1,con1,index1,ins2, \
175                      con2,index2, (long)((x1)*SCALE_X),(long)((y1)*SCALE_X), \
176                      (long)((x2)*SCALE_X),(long)((y2)*SCALE_X))
177 #define GENLIB_PHVIA(type,x,y) \
178             genPHVIA(type,(long)((x)*SCALE_X),(long)((y)*SCALE_X))
179 #define GENLIB_PHBIGVIA(type,x,y,dx,dy,name) \
180             genPHBIGVIA(type,(long)((x)*SCALE_X),(long)((y)*SCALE_X), \
181                              (long)((dx)*SCALE_X),(long)((dy)*SCALE_X),name)
182 #define GENLIB_PLACE(figname,insname,sym,x,y) \
183             genPLACE(figname,insname,sym,(long)((x)*SCALE_X),(long)((y)*SCALE_X))
184 #define GENLIB_PLACE_RIGHT(figname,insname,sym)  genPLACE_RIGHT(figname,insname,sym)
185 #define GENLIB_PLACE_TOP(figname,insname,sym)    genPLACE_TOP(figname,insname,sym)
186 #define GENLIB_PLACE_LEFT(figname,insname,sym)   genPLACE_LEFT(figname,insname,sym)
187 #define GENLIB_PLACE_BOTTOM(figname,insname,sym) genPLACE_BOTTOM(figname,insname,sym)
188 #define GENLIB_PLACE_REF(figname,insname,sym,insref,refname) \
189             genPLACE_REF(figname,insname,sym,insref,refname)
190 #define GENLIB_PLACE_ON(figname,insname1,con1,index1,sym,insname2,con2,index2) \
191             genPLACE_ON(figname,insname1,con1,index1,sym,\
192                      insname2,con2,index2)
193 #define GENLIB_THRU_H(layer,width,y) \
194             genTHRU_H(layer,(long)((width)*SCALE_X),(long)((y)*SCALE_X))
195 #define GENLIB_THRU_V(layer,width,x) \
196             genTHRU_V(layer,(long)((width)*SCALE_X),(long)((x)*SCALE_X))
197 #define GENLIB_THRU_CON_H(layer,width,name,y) \
198             genTHRU_CON_H(layer,(long)((width)*SCALE_X),name,(long)((y)*SCALE_X))
199 #define GENLIB_THRU_CON_V(layer,width,name,x) \
200             genTHRU_CON_V(layer,(long)((width)*SCALE_X),name,(long)((x)*SCALE_X))
201 #define GENLIB_PHREF(type,name,x,y) \
202             genPHREF(type,name,(long)((x)*SCALE_X),(long)((y)*SCALE_X))
203 #define GENLIB_DEL_PHREF genDEL_PHREF
204 #define GENLIB_COPY_UP_REF(refname,insname,newname) \
205             genCOPY_UP_REF(refname,insname,newname)
206 #define GENLIB_COPY_UP_ALL_REF(reftype,insname,cheminom) \
207             genCOPY_UP_ALL_REF(reftype,insname,cheminom)
208 #define GENLIB_PLACE_VIA_REF(insname,refname,type) \
209             genPLACE_VIA_REF(insname,refname,type)
210 #define GENLIB_PLACE_CON_REF(insname,refname,conname,layer,width,face) \
211             genPLACE_CON_REF(insname,refname,conname,layer,\
212                            (long)((width)*SCALE_X),face)
213 #define GENLIB_PLACE_SEG_REF(insname,refname,layer,width,face) \
214             genPLACE_SEG_REF(insname,refname,layer,(long)((width)*SCALE_X),face)
215 #define GENLIB_GET_PHFIG_REF_X(refname) \
216             ((genGET_PHFIG_REF_X(refname)/SCALE_X))
217 #define GENLIB_GET_PHFIG_REF_Y(refname) \
218             ((genGET_PHFIG_REF_Y(refname)/SCALE_X))
219 #define GENLIB_GET_REF_X(insname,refname) \
220             ((genGET_REF_X(insname,refname)/SCALE_X))
221 #define GENLIB_GET_REF_Y(insname,refname) \
222             ((genGET_REF_Y(insname,refname)/SCALE_X))
223 #define GENLIB_GET_INS_X(insname)                ((genGET_INS_X(insname)/SCALE_X))
224 #define GENLIB_GET_INS_Y(insname)                ((genGET_INS_Y(insname)/SCALE_X))
225 #define GENLIB_GET_INS_XDX(insname)              ((genGET_INS_XDX(insname)/SCALE_X))
226 #define GENLIB_GET_INS_YDY(insname)              ((genGET_INS_YDY(insname)/SCALE_X))
227 #define GENLIB_GET_CON_X(insname,conname,index) \
228             ((genGET_CON_X(insname,conname,index)/SCALE_X))
229 #define GENLIB_GET_CON_Y(insname,conname,index) \
230             ((genGET_CON_Y(insname,conname,index)/SCALE_X))
231 #define GENLIB_GET_CON_LAYER(insname,conname,index) \
232             (genGET_CON_LAYER(insname,conname,index))
233 #define GENLIB_HEIGHT(cellName)                  ((genHEIGHT(cellName)/SCALE_X))
234 #define GENLIB_WIDTH(cellName)                   ((genWIDTH(cellName)/SCALE_X))
235 #define GENLIB_FLATTEN_PHFIG(insname,concat)     genFLATTEN_PHFIG(insname,concat)
236 #define GENLIB_FLATTEN_ALL_PHINS(concat, catal)  genFLATTEN_ALL_PHINS(concat, catal)
237 #define GENLIB_REVERSE_PHCON(conname)            genREVERSE_PHCON(conname)
238 #define GENLIB_OUTLINE                           genOUTLINE
239 
240 #define GENLIB_DEF_LOFIG(name)                   genDEF_LOFIG(name)
241 #define GENLIB_LOAD_LOFIG(name)                  genLOAD_LOFIG(name)
242 #define GENLIB_SAVE_LOFIG                        genSAVE_LOFIG
243 #define GENLIB_LOSIG(name)                       genLOSIG(name)
244 #define GENLIB_LOINS                             genLOINS
245 #define GENLIB_LOINSE                            genLOINSE
246 #define GENLIB_LOINSA                            genLOINSA
247 #define GENLIB_LOGEN                             genLOGEN
248 #define GENLIB_SETLOGEN                          genSETLOGEN
249 #define GENLIB_LOTRS(type,width,length,grid,source,drain) \
250             genLOTRS(type,(long)((width)*SCALE_X), \
251                      (long)((length)*SCALE_X),grid,source,drain)
252 #define GENLIB_LOCON(conname,direction,signame)  genLOCON(conname,direction,signame)
253 #define GENLIB_LOSIGMERGE(signame1, signame2)    genLOSIGMERGE(signame1, signame2)
254 #define GENLIB_FLATTEN_LOFIG(insname,concat)     genFLATTEN_LOFIG(insname,concat)
255 #define GENLIB_FLATTEN_ALL_LOINS(concat, catal)  genFLATTEN_ALL_LOINS(concat, catal)
256 #define GENLIB_UNFLATTEN_LOFIG                   genUNFLATTEN_LOFIG
257 
258 #define GENLIB_USED(s, c)                        genUSED(s, c)
259 
260 #define GENLIB_DEF_PHSC(name)                    genDEF_PHSC(name)
261 #define GENLIB_SAVE_PHSC                         genSAVE_PHSC
262 #define GENLIB_SC_PLACE(insname,sym,x,y) \
263             genSC_PLACE(insname,sym,(long)((x)*SCALE_X),(long)((y)*SCALE_X))
264 #define GENLIB_SC_RIGHT(insname,sym)             genSC_RIGHT(insname,sym)
265 #define GENLIB_SC_LEFT(insname,sym)              genSC_LEFT(insname,sym)
266 #define GENLIB_SC_TOP(insname,sym)               genSC_TOP(insname,sym)
267 #define GENLIB_SC_BOTTOM(insname,sym)            genSC_BOTTOM(insname,sym)
268 #define GENLIB_SC_CHANNEL(direction,width,insname) \
269             genSC_CHANNEL(direction,(long)((width)*SCALE_X),insname)
270 #define GENLIB_SC_CON_CHANNEL(conname,orient,layer,width,insname) \
271             genSC_CON_CHANNEL(conname,orient,layer,\
272                               (long)((width)*SCALE_X),insname)
273 
274 #define GENLIB_BUS(signame,from,to)              genBUS(signame,from,to)
275 #define GENLIB_ELM(signame,number)               genELM(signame,number)
276 #define GENLIB_NAME                              genNAME
277 
278 
279 /********************************* Analogical world ************************************/
280 
281 #define GENLIB_LOCAP(type,capa,tcon,bcon,name)      genLOCAP(type,capa,tcon,bcon,name)
282 #define GENLIB_LORES(type,resi,rcon1,rcon2,name)    genLORES(type,resi,rcon1,rcon2,name)
283 #define GENLIB_LOSELF(type,self,scon1,scon2,name)   genLOSELF(type,self,scon1,scon2,name)
284 
285 #define GENLIB_SET_LOCAP(figname,capname,newcap)    genSET_LOCAP(figname,capname,newcap)
286 #define GENLIB_SET_LORES(figname,resname,newres)    genSET_LORES(figname,resname,newres)
287 #define GENLIB_SET_LOSELF(figname,selfname,newself) genSET_LOSELF(figname,selfname,newself)
288 
289 /***************************************************************************************/
290 
291 #endif
292 
293 /*
294  * New allowed names for layers and contacts
295  */
296 #define METAL   ALU1
297 #define ALLOWM  TALU1
298 #define METAL2  ALU2
299 #define ALLOWM2 TALU2
300 #define METAL3  ALU3
301 #define ALLOWM3 TALU3
302 #define METAL4  ALU4
303 #define ALLOWM4 TALU4
304 #define METAL5  ALU5
305 #define ALLOWM5 TALU5
306 #define METAL6  ALU6
307 #define ALLOWM6 TALU6
308 #define METAL7  ALU7
309 #define ALLOWM7 TALU7
310 #define METAL8  ALU8
311 #define ALLOWM8 TALU8
312 #define METAL9  ALU9
313 #define ALLOWM9 TALU9
314 
315 #define VIA12 CONT_VIA
316 #define VIA23 CONT_VIA2
317 #define VIA34 CONT_VIA3
318 #define VIA45 CONT_VIA4
319 #define VIA56 CONT_VIA5
320 #define VIA67 CONT_VIA6
321 #define VIA78 CONT_VIA7
322 #define VIA89 CONT_VIA8
323 
324 /* Names usable that macro-expand into several contacts: they have no
325  * internal counterparts.
326  */
327 #define VIA13 (LAST_CONTACT + 1)
328 #define VIA14 (LAST_CONTACT + 2)
329 #define VIA15 (LAST_CONTACT + 3)
330 #define VIA16 (LAST_CONTACT + 4)
331 #define VIA17 (LAST_CONTACT + 5)
332 #define VIA18 (LAST_CONTACT + 6)
333 #define VIA19 (LAST_CONTACT + 7)
334 #define VIA24 (LAST_CONTACT + 8)
335 #define VIA25 (LAST_CONTACT + 9)
336 #define VIA26 (LAST_CONTACT + 10)
337 #define VIA27 (LAST_CONTACT + 11)
338 #define VIA28 (LAST_CONTACT + 12)
339 #define VIA29 (LAST_CONTACT + 13)
340 #define VIA35 (LAST_CONTACT + 14)
341 #define VIA36 (LAST_CONTACT + 15)
342 #define VIA37 (LAST_CONTACT + 16)
343 #define VIA38 (LAST_CONTACT + 17)
344 #define VIA39 (LAST_CONTACT + 18)
345 #define VIA46 (LAST_CONTACT + 19)
346 #define VIA47 (LAST_CONTACT + 20)
347 #define VIA48 (LAST_CONTACT + 21)
348 #define VIA49 (LAST_CONTACT + 22)
349 #define VIA57 (LAST_CONTACT + 23)
350 #define VIA58 (LAST_CONTACT + 24)
351 #define VIA59 (LAST_CONTACT + 25)
352 #define VIA68 (LAST_CONTACT + 26)
353 #define VIA69 (LAST_CONTACT + 27)
354 #define VIA79 (LAST_CONTACT + 28)
355 
356 #define CONT_VIA13 VIA13
357 #define CONT_VIA14 VIA14
358 #define CONT_VIA15 VIA15
359 #define CONT_VIA16 VIA16
360 #define CONT_VIA17 VIA17
361 #define CONT_VIA18 VIA18
362 #define CONT_VIA19 VIA19
363 #define CONT_VIA24 VIA24
364 #define CONT_VIA25 VIA25
365 #define CONT_VIA26 VIA26
366 #define CONT_VIA27 VIA27
367 #define CONT_VIA28 VIA28
368 #define CONT_VIA29 VIA29
369 #define CONT_VIA35 VIA35
370 #define CONT_VIA36 VIA36
371 #define CONT_VIA37 VIA37
372 #define CONT_VIA38 VIA38
373 #define CONT_VIA39 VIA39
374 #define CONT_VIA46 VIA46
375 #define CONT_VIA47 VIA47
376 #define CONT_VIA48 VIA48
377 #define CONT_VIA49 VIA49
378 #define CONT_VIA57 VIA57
379 #define CONT_VIA58 VIA58
380 #define CONT_VIA59 VIA59
381 #define CONT_VIA68 VIA68
382 #define CONT_VIA69 VIA69
383 #define CONT_VIA79 VIA79
384 
385 /* Quick and dirty hack as required */
386 #define LOGEN 21
387 
388 #define GENTYPE_EMPTY 0
389 #define GENTYPE_BIT   1
390 #define GENTYPE_VAL   2
391 #define GENTYPE_ARG   3
392 #define GENTYPE_TEXT  4
393 #define GENTYPE_LIST  5
394 #define GENTYPE_HEX   6
395 #define GENTYPE_MAX   6
396 
397 
398 typedef struct logen
399 {
400    struct logen *NEXT;
401    char         *NAME;
402    char          TYPE;
403    union {
404       char          CHAR;
405       long           VAL;
406       char         *TEXT;
407       struct logen *LIST;
408    }            VALUE;
409    char           TAG;
410 } logen_list;
411 
412 extern logen_list *addlogen(logen_list *,char *);
413 extern logen_list *getlogen(logen_list *,char *);
414 extern logen_list *duplogen(logen_list *,logen_list *, char *);
415 extern logen_list *duplogenlist(logen_list *,logen_list *, char *);
416 extern logen_list *chklogen(logen_list *,logen_list *, char *, char *);
417 extern logen_list *dellogen(logen_list *, char *name);
418 
419 /* End of hack */
420