5 char *ANNOT_T_D
=NULL
, *ANNOT_T_S
=NULL
, *ANNOT_T_G
=NULL
, *ANNOT_T_B
=NULL
;
6 char *ANNOT_R_POS
=NULL
, *ANNOT_R_NEG
=NULL
;
7 char *ANNOT_D_POS
=NULL
, *ANNOT_D_NEG
=NULL
;
8 char *ANNOT_C_POS
=NULL
, *ANNOT_C_NEG
=NULL
;
9 unsigned long int RCN_CACHE_SIZE
=10*1024*1024;
11 int avtAnnotationDeviceConnectorSetting_init(char *var
, char *val
, char *result
)
13 char **items
[]={&ANNOT_T_S
, &ANNOT_T_G
, &ANNOT_T_D
, &ANNOT_T_B
,
14 &ANNOT_R_POS
, &ANNOT_R_NEG
,
15 &ANNOT_C_POS
, &ANNOT_C_NEG
,
16 &ANNOT_D_POS
, &ANNOT_D_NEG
};
22 tok
=strtok_r(buf
, " ", &c
);
23 while (tok
!=NULL
&& i
<sizeof(items
)/sizeof(*items
))
25 if (*items
[i
]!=NULL
) free(*items
[i
]);
26 if (strcmp(tok
,"-")!=0) *items
[i
]=strdup(tok
);
27 tok
=strtok_r(NULL
, " ", &c
);
31 if (i
!=sizeof(items
)/sizeof(*items
))
33 avt_errmsg(AVT_ERRMSG
, "041", AVT_ERROR
, val
, var
);
40 // -----------------------------------------
42 char *SIMUINVCONENAME
=NULL
, *SIMUINV_PREFIX
=NULL
;
43 int tpiv_inverter_config_reverse
=1;
44 float tpiv_inverter_config_t0r
=0, tpiv_inverter_config_t0f
=0;
45 float tpiv_inverter_config_tmax
=100e-12;
47 int tasSimulateInverter_init(char *var
, char *env
, char *result
)
50 if (SIMUINV_PREFIX
!=NULL
) free(SIMUINV_PREFIX
);
51 if (SIMUINVCONENAME
!=NULL
) free(SIMUINVCONENAME
);
65 while (*env
== ' ' && *env
!= '\0')
68 while (*env
!= ' ' && *env
!= '\0')
70 if (*env
==' ') *env
='\0', env
++;
72 SIMUINVCONENAME
= strdup(tmp
);
73 while (*env
== ' ' && *env
!= '\0')
76 if (*tmp
!='\0') SIMUINV_PREFIX
= strdup(tmp
);
80 ("*** inverter simulator for cone %s with model '%c' ***\n",
81 SIMUINVCONENAME
, env_SIMUINV
);
86 int tpiv_inverter_config_init(char *var
, char *config
, char *result
)
97 tpiv_inverter_config_reverse
= 1 ;
98 tpiv_inverter_config_t0r
=tpiv_inverter_config_t0f
= 0.0 ;
103 tmp
= alloca( sizeof( char ) * ( strlen( config
)+1 ) );
104 strcpy( tmp
, config
);
107 tok
= strtok( tmp
, " " );
110 eq
=strchr( tok
, '=' );
111 if( !eq
) { error
=1 ; break ; }
112 strncpy( token
, tok
, eq
-tok
) ;
113 token
[ eq
-tok
] = '\0' ;
114 value
= strtod( eq
+1, &endval
);
115 if( ! ( *endval
== ' ' || *endval
== '\0' ) ) { error
=1 ; break ; }
118 if( !strcmp( token
, "reverse" ) ) { tpiv_inverter_config_reverse
= mbk_long_round(value
) ; error
= 0 ; }
119 if( !strcmp( token
, "t0" ) ) { tpiv_inverter_config_t0r
=tpiv_inverter_config_t0f
=value
; error
= 0 ; }
120 if( !strcmp( token
, "t0r" ) ) { tpiv_inverter_config_t0r
=value
; error
= 0 ; }
121 if( !strcmp( token
, "t0f" ) ) { tpiv_inverter_config_t0f
=value
; error
= 0 ; }
122 if( !strcmp( token
, "tmax" ) ) { tpiv_inverter_config_tmax
=value
; error
= 0 ; }
126 tok
= strtok( NULL
, " " );
130 printf( "bad configuration for %s\n", tok
);
137 int yagSimpleLatchDetection_init(char *var
, char *val
, char *result
)
143 tok
=strtok_r(buf
, "+", &c
);
146 if (strcasecmp(tok
,"latch")!=0 && strcasecmp(tok
,"memsym")!=0 && strcasecmp(tok
,"levelhold")!=0 && strcasecmp(tok
,"strictlevelhold")!=0)
148 avt_errmsg (AVT_ERRMSG
, "041", AVT_WARNING
, tok
, var
);
151 tok
=strtok_r(NULL
, "+", &c
);
156 int yagDetectClockGating_init(char *var
, char *val
, char *result
)
162 tok
=strtok_r(buf
, "+", &c
);
165 if (strcasecmp(tok
,"yes")!=0 && strcasecmp(tok
,"no")!=0 && strcasecmp(tok
,"check")!=0 && strcasecmp(tok
,"filter")!=0)
167 avt_errmsg (AVT_ERRMSG
, "041", AVT_WARNING
, tok
, var
);
170 tok
=strtok_r(NULL
, "+", &c
);
176 // -----------------------------------------
177 int TTV_MaxPathPeriodPrecharge
=0;
178 // mask: 1=latch, 2=precharge, 4=filter
179 int TTV_IgnoreMaxFilter
=0;
181 int avtTransparentPrecharge_init(char *var
, char *val
, int *result
)
183 TTV_IgnoreMaxFilter
&=~2;
184 if (!strcasecmp (val
, "yes")) *result
=1, TTV_MaxPathPeriodPrecharge
=1;
185 else if (!strcasecmp (val
, "no")) *result
=0, TTV_MaxPathPeriodPrecharge
=0;
186 else if (!strcasecmp (val
, "unfiltered")) *result
=1, TTV_MaxPathPeriodPrecharge
=1, TTV_IgnoreMaxFilter
|=2;
188 avt_errmsg (AVT_ERRMSG
, "040", AVT_WARNING
, val
, var
);
194 // -----------------------------------------
196 int ttvIgnoreMaxFilter_init(char *var
, char *val
, char *result
)
201 TTV_IgnoreMaxFilter
=0;
203 tok
=strtok_r(buf
, " ", &c
);
206 if (strcasecmp(tok
,"latch")==0) TTV_IgnoreMaxFilter
|=1;
207 else if (strcasecmp(tok
,"precharge")==0) TTV_IgnoreMaxFilter
|=2;
208 else if (strcasecmp(tok
,"filter")==0) TTV_IgnoreMaxFilter
|=4;
211 avt_errmsg (AVT_ERRMSG
, "040", AVT_WARNING
, var
, tok
);
214 tok
=strtok_r(NULL
, " ", &c
);
219 int avtParasiticCacheSize_init(char *var
, char *val
, char *result
)
221 long oldval
=RCN_CACHE_SIZE
;
224 RCN_CACHE_SIZE
= strtol( val
, &ptend
, 10 );
226 if( *ptend
!= '\0' ) {
227 if( strcasecmp( ptend
, "kb" )==0 )
228 RCN_CACHE_SIZE
= RCN_CACHE_SIZE
* 1024;
230 if( strcasecmp( ptend
, "mb" )==0 )
231 RCN_CACHE_SIZE
= RCN_CACHE_SIZE
* 1048576;
233 if( strcasecmp( ptend
, "gb" )==0 )
234 RCN_CACHE_SIZE
= RCN_CACHE_SIZE
* 1073741824;
236 avt_errmsg (AVT_ERRMSG
, "040", AVT_WARNING
, var
, val
);
237 RCN_CACHE_SIZE
= oldval
;
248 } time_unit_tab
[]={{"", 1},
263 } capa_unit_tab
[]={{"", 1},
278 } mem_unit_tab
[]={{"", 1},
282 {"gb", 1024*1024*1024}};
287 } voltage_unit_tab
[]={{"", 1},
300 double avt_parse_unit(char *str
, char type
)
308 val
=strtod(str
, &nxt
);
311 for (i
=0; i
<sizeof(time_unit_tab
)/sizeof(*time_unit_tab
); i
++)
312 if (strcasecmp(time_unit_tab
[i
].unit
, nxt
)==0) break;
314 if (i
>=sizeof(time_unit_tab
)/sizeof(*time_unit_tab
))
316 avt_errmsg(AVT_ERRMSG
, "049", AVT_FATAL
, str
);
318 else val
*=time_unit_tab
[i
].mult
;
321 avt_errmsg(AVT_ERRMSG
, "049", AVT_WARNING
, str
);
325 val
=strtod(str
, &nxt
);
328 for (i
=0; i
<sizeof(capa_unit_tab
)/sizeof(*capa_unit_tab
); i
++)
329 if (strcasecmp(capa_unit_tab
[i
].unit
, nxt
)==0) break;
331 if (i
>=sizeof(capa_unit_tab
)/sizeof(*capa_unit_tab
))
333 avt_errmsg(AVT_API_ERRMSG
, "006", AVT_FATAL
, str
);
335 else val
*=capa_unit_tab
[i
].mult
;
338 avt_errmsg(AVT_ERRMSG
, "049", AVT_WARNING
, str
);
342 val
=strtod(str
, &nxt
);
345 for (i
=0; i
<sizeof(mem_unit_tab
)/sizeof(*mem_unit_tab
); i
++)
346 if (strcasecmp(mem_unit_tab
[i
].unit
, nxt
)==0) break;
348 if (i
>=sizeof(mem_unit_tab
)/sizeof(*mem_unit_tab
))
350 avt_errmsg(AVT_API_ERRMSG
, "006", AVT_FATAL
, str
);
352 else val
*=mem_unit_tab
[i
].mult
;
355 avt_errmsg(AVT_ERRMSG
, "049", AVT_WARNING
, str
);
359 val
=strtod(str
, &nxt
);
362 for (i
=0; i
<sizeof(voltage_unit_tab
)/sizeof(*voltage_unit_tab
); i
++)
363 if (strcasecmp(voltage_unit_tab
[i
].unit
, nxt
)==0) break;
365 if (i
>=sizeof(voltage_unit_tab
)/sizeof(*voltage_unit_tab
))
367 avt_errmsg(AVT_API_ERRMSG
, "006", AVT_FATAL
, str
);
369 else val
*=voltage_unit_tab
[i
].mult
;
372 avt_errmsg(AVT_ERRMSG
, "049", AVT_WARNING
, str
);
375 avt_errmsg(AVT_API_ERRMSG
, "006", AVT_FATAL
, str
);
380 int avt_parse_time (char *var
, char *val
, float *result
)
382 *result
=avt_parse_unit(val
, 't');
386 int avt_parse_capa (char *var
, char *val
, float *result
)
388 *result
=avt_parse_unit(val
, 'c');
391 int avt_parse_mem (char *var
, char *val
, float *result
)
393 *result
=avt_parse_unit(val
, 'm');
397 void avt_init_model(chain_list
**list
, char *str
)
401 freechain(*list
); *list
=NULL
;
402 if (namealloc_ok() && str
!=NULL
&& strlen(str
)>0)
405 *list
= addchain(*list
, namealloc(strtok_r(buf
, ":", &tmp
)));
406 while ((pttok
= strtok_r(NULL
, ":", &tmp
)))
407 *list
= addchain(*list
, namealloc(pttok
));
411 int avt_init_model_tn (char *var
, char *val
, char *result
)
413 avt_init_model(&TNMOS
, val
);
414 result
=NULL
; var
=NULL
;
417 int avt_init_model_tp (char *var
, char *val
, char *result
)
419 avt_init_model(&TPMOS
, val
);
420 result
=NULL
; var
=NULL
;
423 int avt_init_model_dn (char *var
, char *val
, char *result
)
425 avt_init_model(&DNMOS
, val
);
426 result
=NULL
; var
=NULL
;
429 int avt_init_model_dp (char *var
, char *val
, char *result
)
431 avt_init_model(&DPMOS
, val
);
432 result
=NULL
; var
=NULL
;