1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_env.c */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Gilles Augustins */
13 /****************************************************************************/
17 /****************************************************************************/
19 /****************************************************************************/
21 chain_list
*STM_CELLS_CHAIN
= NULL
;
22 chain_list
*STM_TEMPLATES_CHAIN
= NULL
;
23 chain_list
*STM_TEMPLATE_NAME
= NULL
;
25 ht
*STM_CELLS_HT
= NULL
;
26 ht
*STM_TEMPLATES_HT
= NULL
;
29 char *STM_OUT
= "stm";
31 float STM_DEF_SLEW
= (float)200.0;
32 float STM_DEF_LOAD
= (float)0.0;
33 float STM_DEFAULT_VT
= (float)0.2;
34 float STM_DEFAULT_VTN
= (float)0.2;
35 float STM_DEFAULT_VTP
= (float)0.2;
36 float STM_DEFAULT_VFD
= (float)0.0;
37 float STM_DEFAULT_VFU
= (float)1.0;
38 float STM_DEFAULT_TEMP
= (float)25;
39 float STM_DEFAULT_SMINR
= (float)(0.2);
40 float STM_DEFAULT_SMAXR
= (float)(0.8);
41 float STM_DEFAULT_SMINF
= (float)(0.2);
42 float STM_DEFAULT_SMAXF
= (float)(0.8);
43 float STM_DEFAULT_RLIN
= (float)1000.0;
44 float STM_DEFAULT_VSAT
= (float)1.0;
45 float *STM_AXIS_SLOPEIN
= NULL
;
46 float *STM_AXIS_CAPAOUT
= NULL
;
47 int STM_AXIS_NSLOPE
= 0 ;
48 int STM_AXIS_NCAPA
= 0 ;
49 int STM_BUFSIZE
= 1024;
51 //int STM_SHARE_MODEL = 0;
52 int STM_SOLVER_PILOAD
= 0;
53 int STM_IMAX_FOR_PILOAD
= 0;
54 float STM_OVERSHOOT
= 0.01;
56 char *STM_TECHNONAME
= "unknown";
58 unsigned long int STM_CACHE_SIZE
=0; /* default = 0 */
60 //int STM_USE_MSC = NO;
63 /****************************************************************************/
65 /****************************************************************************/
74 str = avt_gethashvar ("STM_TRACE_MODE");
76 if (!strcmp (str, "yes"))
78 str = V_BOOL_TAB[__STM_SHARE_MODEL].VALUE;
80 if (!strcmp (str, "yes"))
84 str
= avt_gethashvar ("STM_SOLVER_PILOAD");
86 if (!strcmp (str
, "yes"))
87 STM_SOLVER_PILOAD
= 1;
89 str
= avt_gethashvar ("STM_IMAX_FOR_PILOAD" );
91 if (!strcmp (str
, "yes"))
92 STM_IMAX_FOR_PILOAD
= 1;
93 str
= getenv("STM_OVERSHOOT") ;
95 STM_OVERSHOOT
= atof(str
) / 100.0 ;
98 str
= V_STR_TAB
[__STM_CACHESIZE
].VALUE
;
100 STM_CACHE_SIZE
= strtol( str
, &ptend
, 10 );
101 if( *ptend
!= '\0' ) {
102 if( strcasecmp( ptend
, "kb" )==0 )
103 STM_CACHE_SIZE
= STM_CACHE_SIZE
* 1024;
104 else if( strcasecmp( ptend
, "mb" )==0 )
105 STM_CACHE_SIZE
= STM_CACHE_SIZE
* 1048576;
106 else if( strcasecmp( ptend
, "gb" )==0 )
107 STM_CACHE_SIZE
= STM_CACHE_SIZE
* 1073741824;
109 avt_errmsg (STM_ERRMSG
,"037", AVT_FATAL
);
114 str = V_BOOL_TAB[__STM_USE_MSC].VALUE;
116 if (!strcmp (str, "no"))
119 if (!strcmp (str, "yes"))
124 str
= getenv( "STM_PWL_DEBUG_ALLOC" );
126 if (!strcmp (str
, "no"))
127 STM_PWL_DEBUG_ALLOC
= NO
;
129 if (!strcmp (str
, "yes"))
130 STM_PWL_DEBUG_ALLOC
= YES
;
134 /****************************************************************************/
141 for (pt
= STM_TEMPLATES_CHAIN
; pt
; pt
= pt
->NEXT
)
142 stm_modtbl_destroytemplate ((timing_ttable
*)pt
->DATA
);
143 if (STM_TEMPLATES_CHAIN
)
144 freechain (STM_TEMPLATES_CHAIN
);
145 STM_TEMPLATES_CHAIN
= NULL
;
147 /*for (pt = STM_TEMPLATE_NAME; pt; pt = pt->NEXT)
148 mbkfree((char*)pt->DATA);*/
149 if (STM_TEMPLATE_NAME
)
150 freechain (STM_TEMPLATE_NAME
);
151 STM_TEMPLATE_NAME
= NULL
;
153 if (STM_TEMPLATES_HT
) {
154 delht (STM_TEMPLATES_HT
);
155 STM_TEMPLATES_HT
= NULL
;
158 /* for (pt = STM_CELLS_CHAIN; pt; pt = pt->NEXT)
159 stm_freecell ((char*)pt->DATA);
161 freechain (STM_CELLS_CHAIN);
162 STM_CELLS_CHAIN = NULL;
165 delht (STM_CELLS_HT);
170 /****************************************************************************/
174 STM_DEF_SLEW
= elpGeneral
[elpSLOPE
];
175 if((elpGeneral
[elpGSLTHR
] > 0.0) && (elpGeneral
[elpGSHTHR
] > 0.0)){
176 STM_DEFAULT_SMINR
= elpGeneral
[elpGSLTHR
];
177 STM_DEFAULT_SMAXR
= elpGeneral
[elpGSHTHR
];
178 STM_DEFAULT_SMINF
= elpGeneral
[elpGSLTHR
];
179 STM_DEFAULT_SMAXF
= elpGeneral
[elpGSHTHR
];
181 STM_DEFAULT_SMINR
= SIM_VTH_LOW
;
182 STM_DEFAULT_SMAXR
= SIM_VTH_HIGH
;
183 STM_DEFAULT_SMINF
= SIM_VTH_LOW
;
184 STM_DEFAULT_SMAXF
= SIM_VTH_HIGH
;
186 STM_DEFAULT_VFU
= V_FLOAT_TAB
[__SIM_POWER_SUPPLY
].VALUE
;
187 STM_DEFAULT_VFD
= (float)0.0;
188 STM_DEFAULT_VTN
= V_FLOAT_TAB
[__SIM_POWER_SUPPLY
].VALUE
* 0.2;
189 STM_DEFAULT_VTP
= V_FLOAT_TAB
[__SIM_POWER_SUPPLY
].VALUE
* 0.2;
190 STM_DEFAULT_VT
= V_FLOAT_TAB
[__SIM_POWER_SUPPLY
].VALUE
* 0.2;
191 if(elpGeneral
[elpTEMP
] > ELPMINTEMP
)
192 STM_DEFAULT_TEMP
= elpGeneral
[elpTEMP
];
194 STM_DEFAULT_TEMP
= V_FLOAT_TAB
[__SIM_TEMP
].VALUE
;