1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : STM Version 1.00 */
6 /* Fichier : stm_energy_table.c */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Caroline BLED */
13 /****************************************************************************/
15 /****************************************************************************/
17 /****************************************************************************/
21 /****************************************************************************/
23 /****************************************************************************/
25 void stm_energy_table_destroy (timing_table
*table
)
27 stm_modtbl_destroy (table
);
30 timing_table
*stm_energy_table_duplicate (timing_table
*table
)
32 return (stm_modtbl_duplicate (table
));
35 float stm_energy_table_eval (timing_table
*etable
, float load
, float slew
)
44 if (etable
->XTYPE
== STM_LOAD
&& etable
->YTYPE
== STM_INPUT_SLEW
)
45 energy
= stm_modtbl_interpol2Dbilinear (etable
, load
, slew
);
46 if (etable
->XTYPE
== STM_INPUT_SLEW
&& etable
->YTYPE
== STM_LOAD
)
47 energy
= stm_modtbl_interpol2Dbilinear (etable
, slew
, load
);
51 if (etable
->XTYPE
== STM_LOAD
)
52 energy
= stm_modtbl_interpol1Dlinear (etable
, load
);
53 if (etable
->XTYPE
== STM_INPUT_SLEW
)
54 energy
= stm_modtbl_interpol1Dlinear (etable
, slew
);
56 if (!stm_modtbl_isnull (etable
->CST
))
63 void stm_energy_table_morph2_energy_fparams (timing_model
*model
, double *s_axis
, int ns
, double *l_axis
, int nl
, double slew
, double load
, double ci0
)
67 stm_energy_table_morph2_energy2D_fparams (model
, s_axis
, ns
, l_axis
, nl
, ci0
);
69 stm_energy_table_morph2_energy1Dslewfix_fparams (model
, l_axis
, nl
, slew
, ci0
);
71 stm_energy_table_morph2_energy1Dloadfix_fparams (model
, s_axis
, ns
, load
+ ci0
);
75 void stm_energy_table_morph2_energy2D_fparams (timing_model
*model
, double *s_axis
, int ns
, double *l_axis
, int nl
, double ci0
)
79 tbl
= stm_energy_table_create_energy2D_fparams (model
->ENERGYMODEL
.EPARAMS
, s_axis
, ns
, l_axis
, nl
, ci0
, model
->VDD
);
81 stm_energy_destroy (model
);
82 model
->ENERGYTYPE
= STM_ENERGY_TABLE
;
83 model
->ENERGYMODEL
.ETABLE
= tbl
;
87 void stm_energy_table_morph2_energy1Dslewfix_fparams (timing_model
*model
, double *l_axis
, int nl
, double slew
, double ci0
)
91 tbl
= stm_energy_table_create_energy1Dslewfix_fparams (model
->ENERGYMODEL
.EPARAMS
, l_axis
, nl
, slew
, ci0
, model
->VDD
);
94 stm_energy_destroy (model
);
95 model
->ENERGYTYPE
= STM_ENERGY_TABLE
;
96 model
->ENERGYMODEL
.ETABLE
= tbl
;
100 void stm_energy_table_morph2_energy1Dloadfix_fparams (timing_model
*model
, double *s_axis
, int ns
, double load
)
104 tbl
= stm_energy_table_create_energy1Dloadfix_fparams (model
->ENERGYMODEL
.EPARAMS
, s_axis
, ns
, load
, model
->VDD
);
107 stm_energy_destroy (model
);
108 model
->ENERGYTYPE
= STM_ENERGY_TABLE
;
109 model
->ENERGYMODEL
.ETABLE
= tbl
;
115 timing_table
*stm_energy_table_create_energy2D_fparams (energyparams
*eparams
, double *s_axis
, int ns
, double *l_axis
, int nl
, double ci0
, float vdd
)
120 tbl
= stm_modtbl_create (ns
, nl
, STM_INPUT_SLEW
, STM_LOAD
);
124 for (x
= 0; x
< ns
; x
++)
125 stm_modtbl_setXrangeval (tbl
, x
, s_axis
[x
]);
127 for (y
= 0; y
< nl
; y
++)
128 stm_modtbl_setYrangeval (tbl
, y
, l_axis
[y
]);
132 for (x
= 0; x
< ns
; x
++)
133 for (y
= 0; y
< nl
; y
++)
134 stm_modtbl_set2Dval (tbl
, x
, y
, stm_energy_params_eval (eparams
, l_axis
[y
] + ci0
, s_axis
[x
], vdd
));
140 timing_table
*stm_energy_table_create_energy1Dslewfix_fparams (energyparams
*eparams
, double *l_axis
, int nl
, double slew
, double ci0
, float vdd
)
145 tbl
= stm_modtbl_create (nl
, 0, STM_LOAD
, STM_NOTYPE
);
149 for (x
= 0; x
< nl
; x
++)
150 stm_modtbl_setXrangeval (tbl
, x
, l_axis
[x
]);
154 for (x
= 0; x
< nl
; x
++)
155 stm_modtbl_set1Dval (tbl
, x
, stm_energy_params_eval (eparams
, l_axis
[x
] + ci0
, slew
, vdd
));
160 timing_table
*stm_energy_table_create_energy1Dloadfix_fparams (energyparams
*eparams
, double *s_axis
, int ns
, double load
, float vdd
)
165 tbl
= stm_modtbl_create (ns
, 0, STM_INPUT_SLEW
, STM_NOTYPE
);
169 for (x
= 0; x
< ns
; x
++)
170 stm_modtbl_setXrangeval (tbl
, x
, s_axis
[x
]);
174 for (x
= 0; x
< ns
; x
++)
175 stm_modtbl_set1Dval (tbl
, x
, stm_energy_params_eval (eparams
, load
, s_axis
[x
], vdd
));