00001 #ifndef __TEMPERATURE_GRID_H_
00002 #define __TEMPERATURE_GRID_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "temperature.h"
00012
00013
00014 #define LCF_NPARAMS 7
00015 #define LCF_SNO 0
00016 #define LCF_LATERAL 1
00017 #define LCF_POWER 2
00018 #define LCF_SP 3
00019 #define LCF_RHO 4
00020 #define LCF_THICK 5
00021 #define LCF_FLP 6
00022
00023
00024 #define V_POWER 0
00025 #define V_TEMP 1
00026
00027
00028
00029
00030 #define DEFAULT_CHIP_LAYERS 2
00031 #define LAYER_SI 0
00032 #define LAYER_INT 1
00033
00034
00035 #define SEC_CHIP_LAYERS 2
00036 #define LAYER_METAL 0
00037 #define LAYER_C4 1
00038
00039
00040 #define DEFAULT_PACK_LAYERS 2
00041 #define LAYER_SP 0
00042 #define LAYER_SINK 1
00043
00044
00045 #define SEC_PACK_LAYERS 3
00046 #define LAYER_SUB 0
00047 #define LAYER_SOLDER 1
00048 #define LAYER_PCB 2
00049
00050
00051
00052
00053 typedef struct blist_t_st
00054 {
00055
00056 int idx;
00057
00058
00059
00060 double occupancy;
00061
00062 struct blist_t_st *next;
00063 }blist_t;
00064
00065
00066
00067
00068
00069 typedef struct glist_t_st
00070 {
00071
00072 int i1;
00073
00074 int i2;
00075
00076 int j1;
00077
00078 int j2;
00079 } glist_t;
00080
00081
00082
00083
00084 typedef struct layer_t_st
00085 {
00086
00087 flp_t *flp;
00088
00089
00090 int no;
00091 int has_lateral;
00092 int has_power;
00093 double k;
00094 double k1;
00095 double thickness;
00096 double sp;
00097 double sp1;
00098
00099
00100 double rx, ry, rz;
00101 double rx1, ry1, rz1;
00102 double c, c1;
00103
00104
00105 blist_t ***b2gmap;
00106
00107 glist_t *g2bmap;
00108 }layer_t;
00109
00110
00111 typedef struct grid_model_vector_t_st
00112 {
00113
00114 double ***cuboid;
00115
00116 double *extra;
00117 }grid_model_vector_t;
00118
00119
00120 typedef struct grid_model_t_st
00121 {
00122
00123 thermal_config_t config;
00124
00125
00126 layer_t *layers;
00127 int n_layers;
00128
00129
00130 int rows;
00131 int cols;
00132
00133 double width;
00134 double height;
00135
00136
00137 package_RC_t pack;
00138
00139
00140 int total_n_blocks;
00141
00142 int map_mode;
00143
00144
00145 int r_ready;
00146 int c_ready;
00147 int has_lcf;
00148
00149
00150
00151
00152 grid_model_vector_t *last_steady;
00153
00154
00155
00156
00157 grid_model_vector_t *last_trans;
00158
00159 double *last_temp;
00160
00161
00162 int base_n_units;
00163 }grid_model_t;
00164
00165
00166 grid_model_t *alloc_grid_model(thermal_config_t *config, flp_t *flp_default);
00167 void delete_grid_model(grid_model_t *model);
00168
00169
00170 void populate_R_model_grid(grid_model_t *model, flp_t *flp);
00171 void populate_C_model_grid(grid_model_t *model, flp_t *flp);
00172
00173
00174 void steady_state_temp_grid(grid_model_t *model, double *power, double *temp);
00175 void compute_temp_grid(grid_model_t *model, double *power, double *temp, double time_elapsed);
00176
00177
00178 double *hotspot_vector_grid(grid_model_t *model);
00179
00180
00181
00182
00183 void trim_hotspot_vector_grid(grid_model_t *model, double *dst, double *src,
00184 int at, int size);
00185
00186 void resize_thermal_model_grid(grid_model_t *model, int n_units);
00187 void set_temp_grid (grid_model_t *model, double *temp, double val);
00188 void dump_top_layer_temp_grid(grid_model_t *model, char *file, grid_model_vector_t *temp);
00189 void dump_steady_temp_grid (grid_model_t *model, char *file);
00190 void dump_temp_grid (grid_model_t *model, double *temp, char *file);
00191 void copy_temp_grid (grid_model_t *model, double *dst, double *src);
00192 void read_temp_grid (grid_model_t *model, double *temp, char *file, int clip);
00193 void dump_power_grid(grid_model_t *model, double *power, char *file);
00194 void read_power_grid (grid_model_t *model, double *power, char *file);
00195 double find_max_temp_grid(grid_model_t *model, double *temp);
00196 double find_avg_temp_grid(grid_model_t *model, double *temp);
00197 double calc_sink_temp_grid(grid_model_t *model, double *temp, thermal_config_t *config);
00198
00199
00200
00201 grid_model_vector_t *new_grid_model_vector(grid_model_t *model);
00202
00203 void free_grid_model_vector(grid_model_vector_t *v);
00204
00205 void xlate_vector_b2g(grid_model_t *model, double *b, grid_model_vector_t *g, int type);
00206
00207 void xlate_temp_g2b(grid_model_t *model, double *b, grid_model_vector_t *g);
00208
00209 void debug_print_grid(grid_model_t *model);
00210
00211 #endif