1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Alliance */
5 /* Produit : GENIUS v1.00 */
6 /* Fichier : gen_model_transistor.c */
8 /* (c) copyright 1999 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
12 /* Auteur(s) : Francois DONNET le : 23/06/1999 */
14 /* Modifie par : le : ../../.... */
15 /* Modifie par : le : ../../.... */
16 /* Modifie par : le : ../../.... */
18 /****************************************************************************/
27 #include "gen_model_utils.h"
28 #include "gen_model_transistor.h"
34 /****************************************************************************/
35 /* build the model for a transistor X */
36 /****************************************************************************/
37 extern lofig_list
*Build_Transistor(char* name
) {
39 chain_list
*namechain
;
40 losig_list
*source
,*drain
,*grid
,*bulk
;
44 long x
=1,y
=1; /*no extraction->no location*/
45 /*put to quite reasonable values*/
46 unsigned short width
=120, length
=10, ps
=280, pd
=280, xs
=20, xd
=20;
47 int lineno
=0; /* for PUT_ATO() */
48 char* file
=NULL
; /* for PUT_ATO() */
57 namechain
=addchain(NULL
,MBK_BULK_NAME
);
58 bulk
=addlosig(fig_t
,index
++,namechain
,EXTERNAL
); /*WARN:no more capa*/
59 con
=addlocon(fig_t
,MBK_BULK_NAME
,bulk
,INOUT
);/*default addlocon set EXTERNAL*/
61 con
->USER
=addptype(con
->USER
,GENCONCHAIN
,NULL
);
62 con
->USER
->DATA
=addgenconchain(NULL
, PUT_ATO(GEN_TOKEN_DIGIT
,-1),
63 bulk
, PUT_ATO(GEN_TOKEN_DIGIT
,-1));
66 namechain
=addchain(NULL
,MBK_DRAIN_NAME
);
67 drain
=addlosig(fig_t
,index
++,namechain
,EXTERNAL
); /*WARN:no more capa*/
68 con
=addlocon(fig_t
,MBK_DRAIN_NAME
,drain
,INOUT
);/*default addlocon set EXTERNAL*/
70 con
->USER
=addptype(con
->USER
,GENCONCHAIN
,NULL
);
71 con
->USER
->DATA
=addgenconchain(NULL
, PUT_ATO(GEN_TOKEN_DIGIT
,-1),
72 drain
, PUT_ATO(GEN_TOKEN_DIGIT
,-1));
75 namechain
=addchain(NULL
,MBK_SOURCE_NAME
);
76 source
=addlosig(fig_t
,index
++,namechain
,EXTERNAL
); /*WARN:no more capa*/
77 con
=addlocon(fig_t
,MBK_SOURCE_NAME
,source
,INOUT
);/*default addlocon set to EXTERNAL*/
79 con
->USER
=addptype(con
->USER
,GENCONCHAIN
,NULL
);
80 con
->USER
->DATA
=addgenconchain(NULL
, PUT_ATO(GEN_TOKEN_DIGIT
,-1),
81 source
, PUT_ATO(GEN_TOKEN_DIGIT
,-1));
84 namechain
=addchain(NULL
,MBK_GRID_NAME
);
85 grid
=addlosig(fig_t
,index
++,namechain
,EXTERNAL
); /*WARN:no more capa*/
86 con
=addlocon(fig_t
,MBK_GRID_NAME
,grid
,INOUT
); /*default addlocon set EXTERNAL*/
88 con
->USER
=addptype(con
->USER
,GENCONCHAIN
,NULL
);
89 con
->USER
->DATA
=addgenconchain(NULL
, PUT_ATO(GEN_TOKEN_DIGIT
,-1),
90 grid
, PUT_ATO(GEN_TOKEN_DIGIT
,-1));
92 type
= mbk_istransn(name
)?TRANSN
:TRANSP
;
93 fig_t
->LOTRS
=addlotrs(fig_t
, type
, /*MBK data*/
94 x
,y
,width
,length
,ps
,pd
,xs
,xd
,/*physical data*/
95 grid
,source
,drain
,bulk
,/*connexion data*/
96 namealloc("transistor") /*MBK data*/);
97 addlotrsmodel(fig_t
->LOTRS
, name
) ;
102 locon_list
*myaddlocon(char *name
, losig_list
*ptsig
, char dir
, void *root
)
106 ptcon
= (locon_list
*)mbkalloc(sizeof(locon_list
));
111 ptcon
->DIRECTION
= dir
;
119 extern lotrs_list
*BuildFakeTransistor(char type
, losig_list
*grid
, losig_list
*drain
, losig_list
*source
, losig_list
*bulk
)
124 tr
=(lotrs_list
*)mbkalloc(sizeof(lotrs_list
));
126 con
=myaddlocon(MBK_DRAIN_NAME
, drain
, INOUT
, tr
);
129 con
=myaddlocon(MBK_DRAIN_NAME
, source
, INOUT
, tr
);
132 con
=myaddlocon(MBK_DRAIN_NAME
, grid
, INOUT
, tr
);
136 if (SPI_IGNORE_BULK
=='N')
138 con
=myaddlocon(MBK_BULK_NAME
, bulk
, INOUT
, tr
);
144 tr
->TRNAME
=FAKE_TRAN_NAME
;
146 tr
->MODINDEX
= EMPTYHT
;
150 ClearLOTRSLoconFlags(tr
);