Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / stm / stm_energy_params.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_energy_params.c */
7 /* */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
10 /* */
11 /* Auteur(s) : Caroline BLED */
12 /* */
13 /****************************************************************************/
14
15 /****************************************************************************/
16 /* includes */
17 /****************************************************************************/
18
19 #include "stm.h"
20
21 /****************************************************************************/
22 /* functions */
23 /****************************************************************************/
24
25 void stm_energy_params_destroy (energyparams *params)
26 {
27 if (!params)
28 return;
29
30 if (params->EP)
31 mbkfree (params->EP);
32
33 mbkfree (params);
34 }
35
36 energyparams *stm_energy_params_duplicate (energyparams *params)
37 {
38 energyparams *dupparams;
39
40 dupparams = stm_energy_params_create (params->EP);
41 return dupparams;
42 }
43
44 energyparams *stm_energy_params_create (float *params)
45 {
46 energyparams *eparams = (energyparams*)mbkalloc (sizeof (struct energyparams));
47
48 eparams->EP = (float*)mbkalloc (STM_NB_ENERGY_PARAMS*sizeof (float));
49
50 eparams->EP[STM_EPCONF0] = params[STM_EPCONF0];
51 eparams->EP[STM_EPCONF1] = params[STM_EPCONF1];
52
53 return eparams;
54 }
55
56 float stm_energy_params_eval (energyparams *eparams, float load, float slew, float vdd)
57 {
58 float total_load;
59 float pconf0;
60 float pconf1;
61
62 if (!eparams) {
63 return 0;
64 }
65
66 pconf0 = eparams->EP[STM_EPCONF0];
67 pconf1 = eparams->EP[STM_EPCONF1];
68
69 total_load = (pconf0 + (pconf1*slew) + load);
70 return (float)(total_load*vdd*vdd/2.0*1e-15);
71 }
72
73 timing_model *stm_energy_params2tbl (timing_model *model, float *slews, long ns, float *loads, long nl, float ci0)
74 {
75 ptype_list *ptype;
76 stm_carac_values *cvalues = NULL;
77 double loc_slews[1024];
78 double loc_loads[1024];
79 long loc_ns = 0;
80 long loc_nl = 0;
81 int i;
82
83 if (!model)
84 return NULL;
85
86 if (model->ENERGYTYPE != STM_ENERGY_PARAMS)
87 return NULL;
88
89
90 if ((ptype = getptype (model->USER, STM_CARAC_VALUES)))
91 cvalues = (stm_carac_values*)ptype->DATA;
92
93 if (!slews && !ns) {
94 if (cvalues)
95 loc_ns = stm_genslewaxis (loc_slews, cvalues->SLEW_MIN, cvalues->SLEW_MAX);
96 } else {
97 loc_ns = ns;
98 for (i = 0; i < loc_ns; i++)
99 loc_slews[i] = slews[i];
100 }
101
102 if (!loads && !nl) {
103 if (cvalues)
104 loc_nl = stm_genloadaxis (loc_loads, cvalues->LOAD_MIN, cvalues->LOAD_MAX);
105 } else {
106 loc_nl = nl;
107 for (i = 0; i < loc_nl; i++)
108 loc_loads[i] = loads[i];
109 }
110
111 if (!loc_ns && !loc_nl)
112 return NULL;
113 else
114 {
115 stm_energy_table_morph2_energy_fparams (model, loc_slews, loc_ns, loc_loads, loc_nl, STM_DEF_SLEW, STM_DEF_LOAD, ci0);
116 return model;
117 }
118
119
120 }