1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_energy_params.c */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Caroline BLED */
13 /****************************************************************************/
15 /****************************************************************************/
17 /****************************************************************************/
21 /****************************************************************************/
23 /****************************************************************************/
25 void stm_energy_params_destroy (energyparams
*params
)
36 energyparams
*stm_energy_params_duplicate (energyparams
*params
)
38 energyparams
*dupparams
;
40 dupparams
= stm_energy_params_create (params
->EP
);
44 energyparams
*stm_energy_params_create (float *params
)
46 energyparams
*eparams
= (energyparams
*)mbkalloc (sizeof (struct energyparams
));
48 eparams
->EP
= (float*)mbkalloc (STM_NB_ENERGY_PARAMS
*sizeof (float));
50 eparams
->EP
[STM_EPCONF0
] = params
[STM_EPCONF0
];
51 eparams
->EP
[STM_EPCONF1
] = params
[STM_EPCONF1
];
56 float stm_energy_params_eval (energyparams
*eparams
, float load
, float slew
, float vdd
)
66 pconf0
= eparams
->EP
[STM_EPCONF0
];
67 pconf1
= eparams
->EP
[STM_EPCONF1
];
69 total_load
= (pconf0
+ (pconf1
*slew
) + load
);
70 return (float)(total_load
*vdd
*vdd
/2.0*1e-15);
73 timing_model
*stm_energy_params2tbl (timing_model
*model
, float *slews
, long ns
, float *loads
, long nl
, float ci0
)
76 stm_carac_values
*cvalues
= NULL
;
77 double loc_slews
[1024];
78 double loc_loads
[1024];
86 if (model
->ENERGYTYPE
!= STM_ENERGY_PARAMS
)
90 if ((ptype
= getptype (model
->USER
, STM_CARAC_VALUES
)))
91 cvalues
= (stm_carac_values
*)ptype
->DATA
;
95 loc_ns
= stm_genslewaxis (loc_slews
, cvalues
->SLEW_MIN
, cvalues
->SLEW_MAX
);
98 for (i
= 0; i
< loc_ns
; i
++)
99 loc_slews
[i
] = slews
[i
];
104 loc_nl
= stm_genloadaxis (loc_loads
, cvalues
->LOAD_MIN
, cvalues
->LOAD_MAX
);
107 for (i
= 0; i
< loc_nl
; i
++)
108 loc_loads
[i
] = loads
[i
];
111 if (!loc_ns
&& !loc_nl
)
115 stm_energy_table_morph2_energy_fparams (model
, loc_slews
, loc_ns
, loc_loads
, loc_nl
, STM_DEF_SLEW
, STM_DEF_LOAD
, ci0
);