6 #define API_USE_REAL_TYPES
10 #include "sim_API_lowlevel.h"
13 //_____________________________________________________________________________
15 double sim_ComputeSetup (sim_model
*sc
, char *data
, double tstart_d
,
16 double tslope_d
, char sens_d
, char *cmd
,
17 double t_start_min_c
, double t_start_max_c
, double tslope_c
,
18 char sens_c
, char *mem
, int data_val
)
28 sens_d
=tolower(sens_d
);
31 else if (sens_d
== 'd')
34 avt_errmsg(SIM_API_ERRMSG
, "005", AVT_ERROR
);
35 // avt_error("sim_api", -1, AVT_ERR, "sim_ComputeSetup: sens_d must be 'U' or 'D'\n");
38 sens_c
=tolower(sens_c
);
41 else if (sens_c
== 'd')
44 avt_errmsg(SIM_API_ERRMSG
, "005", AVT_ERROR
);
45 // avt_error("sim_api", -1, AVT_ERR, "sim_ComputeSetup: sens_d must be 'U' or 'D'\n");
48 setup
= sim_get_setup_time ((sim_model
*)sc
,gen_sim_devect (data
),
49 SIM_UNIT_X_TO_Y (tstart_d
,1,SIM_UNIT_TIME
),
50 SIM_UNIT_X_TO_Y (tslope_d
,1,SIM_UNIT_TIME
),
51 sens_data
,gen_sim_devect (cmd
),
52 SIM_UNIT_X_TO_Y (t_start_min_c
,1,SIM_UNIT_TIME
),
53 SIM_UNIT_X_TO_Y (t_start_max_c
,1,SIM_UNIT_TIME
),
54 SIM_UNIT_X_TO_Y (tslope_c
,1,SIM_UNIT_TIME
),
55 sens_c
,gen_sim_devect (mem
),data_val
);
60 //_____________________________________________________________________________
62 double sim_ComputeHold (sim_model
*sc
, char *data
, double tstart_d
,
63 double tslope_d
, char sens_d
, char *cmd
,
64 double t_start_min_c
, double t_start_max_c
, double tslope_c
,
65 char sens_c
, char *mem
, int data_val
)
75 sens_d
=tolower(sens_d
);
78 else if (sens_d
== 'd')
81 avt_errmsg(SIM_API_ERRMSG
, "006", AVT_ERROR
);
82 // avt_error("sim_api", -1, AVT_ERR, "sim_ComputeHold: sens_d must be 'U' or 'D'\n");
85 sens_c
=tolower(sens_c
);
88 else if (sens_c
== 'd')
91 avt_errmsg(SIM_API_ERRMSG
, "006", AVT_ERROR
);
92 // avt_error("sim_api", -1, AVT_ERR, "sim_ComputeHold: sens_d must be 'U' or 'D'\n");
95 hold
= sim_get_hold_time ((sim_model
*)sc
,gen_sim_devect (data
),
96 SIM_UNIT_X_TO_Y (tstart_d
,1,SIM_UNIT_TIME
),
97 SIM_UNIT_X_TO_Y (tslope_d
,1,SIM_UNIT_TIME
),
98 sens_data
,gen_sim_devect (cmd
),
99 SIM_UNIT_X_TO_Y (t_start_min_c
,1,SIM_UNIT_TIME
),
100 SIM_UNIT_X_TO_Y (t_start_max_c
,1,SIM_UNIT_TIME
),
101 SIM_UNIT_X_TO_Y (tslope_c
,1,SIM_UNIT_TIME
),
102 sens_c
,gen_sim_devect (mem
),data_val
);
107 //_____________________________________________________________________________
109 double sim_ComputeAccess (sim_model
*sc
, char *dout
, int dout_val
, char *cmd
, double tstart_c
,
110 double tslope_c
, char sens_c
, char *mem
, int mem_val
, double *out_slope
)
118 sens_c
=tolower(sens_c
);
121 else if (sens_c
== 'd')
124 avt_errmsg(SIM_API_ERRMSG
, "007", AVT_ERROR
);
125 // avt_error("sim_api", -1, AVT_ERR, "sim_ComputeAccess: sens_c must be 'U' or 'D'\n");
128 access
= sim_get_access_time ((sim_model
*)sc
,gen_sim_devect (dout
),dout_val
,gen_sim_devect (cmd
),
129 SIM_UNIT_X_TO_Y (tstart_c
,1,SIM_UNIT_TIME
),
130 SIM_UNIT_X_TO_Y (tslope_c
,1,SIM_UNIT_TIME
),
131 sens_cmd
,gen_sim_devect (mem
),mem_val
, out_slope
);
136 //_____________________________________________________________________________
138 chain_list
*sim_ComputeDelay (sim_model
*sc
, char *input
, char sens
, chain_list
*list_measure
)
146 if (!sc
) return NULL
;
149 slope
= sim_parameter_get_slope( (sim_model
*)sc
);
150 // positionne le front d entree
151 sim_AddSlope (sc
, gen_sim_devect(input
),0.0,slope
,sens
);
153 // ajoute les mesures sur les points de sortie
154 for (chain
= (chain_list
*)list_measure
; chain
; chain
= chain
->NEXT
) {
155 name
= (char*)chain
->DATA
;
156 sim_AddMeasure (sc
, gen_sim_devect(name
));
160 sim_RunSimulation (sc
, NULL
);
161 sim_parse_spiceout ((sim_model
*)sc
);
163 // Recupere les delais
164 for (chain
= (chain_list
*)list_measure
; chain
; chain
= chain
->NEXT
) {
165 name
= (char*)chain
->DATA
;
166 if (!sim_find_locon (gen_sim_devect (name
), sim_model_get_lofig((sim_model
*)sc
),NULL
,NULL
))
167 type_node_dest
= 's';
169 type_node_dest
= 'c';
170 sim_GetTmgList ((sim_model
*)sc
,'c',gen_sim_devect(input
),type_node_dest
,gen_sim_devect(name
));
173 return (chain_list
*)SIM_HEAD_TMG
;
176 //_____________________________________________________________________________
178 double sim_compute_delay_transition (sim_model
*sc
, char dtype
,char *input
, double input_start
,double slope
,char *output
, char *event
)
187 double th_in
, th_out
;
193 in_ind
= strtol(&event
[1],&endstr
,0);
194 out_event
= endstr
[0];
195 if (out_event
== SIM_FALL
)
200 input_start
= SIM_UNIT_X_TO_Y (input_start
, 1.0, SIM_UNIT_TIME
);
201 // positionne le front d entree
202 sim_AddSlope (sc
, gen_sim_devect(input
),input_start
,slope
,in_event
);
204 // ajoute les mesures sur les points de sortie
205 sim_AddMeasure (sc
, gen_sim_devect(output
));
207 // initialise la sortie
208 sim_AddInitLevel (sc
, gen_sim_devect(output
),init_output
);
211 sim_RunSimulation (sc
, NULL
);
212 sim_parse_spiceout ((sim_model
*)sc
);
214 if (!sim_find_locon (gen_sim_devect (output
), sim_model_get_lofig((sim_model
*)sc
),NULL
,NULL
))
215 type_node_dest
= 's';
217 type_node_dest
= 'c';
220 sim_get_THR(sc
, &th_in
, &th_out
, NULL
, NULL
);
223 return sim_get_trans_delay ((sim_model
*)sc
,
226 gen_sim_devect(input
),
228 gen_sim_devect(output
),
229 event
, th_in
, th_out
);
232 //_____________________________________________________________________________
234 double sim_ComputeMaxDelayTransition (sim_model
*sc
, char *input
, double input_start
,double input_slope
,char *output
, char *event
)
236 return sim_compute_delay_transition (sc
, SIM_MAX
,input
,input_start
,input_slope
,output
,event
);
239 //_____________________________________________________________________________
241 double sim_ComputeMinDelayTransition (sim_model
*sc
, char *input
, double input_start
,double input_slope
,char *output
, char *event
)
243 return sim_compute_delay_transition (sc
, SIM_MIN
,input
,input_start
,input_slope
,output
,event
);
246 //_____________________________________________________________________________
247 void SET_CONTEXT(sim_model
*sc
)
252 sim_model
*GET_CONTEXT()
254 return sim_get_ctx();
257 void sim_DefineInclude(sim_model
*sc
, char *filename
)
259 sim_set_filename(sc
, filename
);