Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / stm / stm_env.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_env.c */
7 /* */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
10 /* */
11 /* Auteur(s) : Gilles Augustins */
12 /* */
13 /****************************************************************************/
14
15 #include "stm.h"
16
17 /****************************************************************************/
18 /* globals */
19 /****************************************************************************/
20
21 chain_list *STM_CELLS_CHAIN = NULL;
22 chain_list *STM_TEMPLATES_CHAIN = NULL;
23 chain_list *STM_TEMPLATE_NAME = NULL;
24
25 ht *STM_CELLS_HT = NULL;
26 ht *STM_TEMPLATES_HT = NULL;
27
28 char *STM_IN = "stm";
29 char *STM_OUT = "stm";
30
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;
50 int STM_DEBUG = 0;
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;
55
56 char *STM_TECHNONAME = "unknown";
57
58 unsigned long int STM_CACHE_SIZE=0; /* default = 0 */
59
60 //int STM_USE_MSC = NO;
61
62
63 /****************************************************************************/
64 /* functions */
65 /****************************************************************************/
66
67 void stmenv ()
68 {
69 char *str, *ptend ;
70
71 stm_init();
72
73 /*
74 str = avt_gethashvar ("STM_TRACE_MODE");
75 if (str)
76 if (!strcmp (str, "yes"))
77 STM_DEBUG = 1;
78 str = V_BOOL_TAB[__STM_SHARE_MODEL].VALUE;
79 if (str)
80 if (!strcmp (str, "yes"))
81 STM_SHARE_MODEL = 1;
82 */
83
84 str = avt_gethashvar ("STM_SOLVER_PILOAD");
85 if (str)
86 if (!strcmp (str, "yes"))
87 STM_SOLVER_PILOAD = 1;
88
89 str = avt_gethashvar ("STM_IMAX_FOR_PILOAD" );
90 if (str)
91 if (!strcmp (str, "yes"))
92 STM_IMAX_FOR_PILOAD = 1;
93 str = getenv("STM_OVERSHOOT") ;
94 if (str){
95 STM_OVERSHOOT = atof(str) / 100.0 ;
96 }
97
98 str = V_STR_TAB[__STM_CACHESIZE].VALUE;
99 if( str ) {
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;
108 else
109 avt_errmsg (STM_ERRMSG,"037", AVT_FATAL);
110 }
111 }
112
113 /*
114 str = V_BOOL_TAB[__STM_USE_MSC].VALUE;
115 if (str) {
116 if (!strcmp (str, "no"))
117 STM_USE_MSC = NO;
118 else
119 if (!strcmp (str, "yes"))
120 STM_USE_MSC = YES;
121 }
122 */
123
124 str = getenv( "STM_PWL_DEBUG_ALLOC" );
125 if( str ) {
126 if (!strcmp (str, "no"))
127 STM_PWL_DEBUG_ALLOC = NO;
128 else
129 if (!strcmp (str, "yes"))
130 STM_PWL_DEBUG_ALLOC = YES;
131 }
132 }
133
134 /****************************************************************************/
135
136 void stm_exit ()
137 {
138
139 chain_list *pt;
140
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;
146
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;
152
153 if (STM_TEMPLATES_HT) {
154 delht (STM_TEMPLATES_HT);
155 STM_TEMPLATES_HT = NULL;
156 }
157
158 /* for (pt = STM_CELLS_CHAIN; pt; pt = pt->NEXT)
159 stm_freecell ((char*)pt->DATA);
160 if (STM_CELLS_CHAIN)
161 freechain (STM_CELLS_CHAIN);
162 STM_CELLS_CHAIN = NULL;
163
164 if (STM_CELLS_HT) {
165 delht (STM_CELLS_HT);
166 STM_CELLS_HT = NULL;
167 }*/
168 }
169
170 /****************************************************************************/
171
172 void stm_init ()
173 {
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];
180 }else{
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;
185 }
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];
193 else
194 STM_DEFAULT_TEMP = V_FLOAT_TAB[__SIM_TEMP].VALUE;
195 }