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