00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #define LONG 1
00054 #define SHORT 2
00055
00056 #define OUTPUTTYPE LONG
00057
00058
00059
00060
00061
00062 #define ADDRESS_BITS 32
00063 #define BITOUT 64
00064
00065
00066
00067
00068 #define MAXN 32
00069 #define MAXSUBARRAYS 32
00070 #define MAXSPD 32
00071
00072
00073
00074
00075
00076
00077
00078
00079 static float FUDGEFACTOR;
00080 #define FEATURESIZE 0.8
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 #define WIRESPACING (2*FEATURESIZE)
00097 #define WIREWIDTH (3*FEATURESIZE)
00098 #define WIREPITCH (WIRESPACING+WIREWIDTH)
00099 #define Cmetal 275e-18
00100 #define Rmetal 48e-3
00101
00102 static double Cwordmetal;
00103 static double Cbitmetal;
00104 static double Rwordmetal;
00105 static double Rbitmetal;
00106 static double FACwordmetal;
00107 static double FACbitmetal;
00108 static double FARwordmetal;
00109 static double FARbitmetal;
00110
00111 static int muxover;
00112
00113
00114 #define Cndiffarea 0.137e-15
00115
00116
00117 #define Cpdiffarea 0.343e-15
00118
00119
00120 #define Cndiffside 0.275e-15
00121
00122
00123 #define Cpdiffside 0.275e-15
00124
00125
00126 #define Cndiffovlp 0.138e-15
00127
00128
00129 #define Cpdiffovlp 0.138e-15
00130
00131
00132 #define Cnoxideovlp 0.263e-15
00133
00134
00135 #define Cpoxideovlp 0.338e-15
00136
00137
00138 #define Leff (0.8)
00139
00140
00141 #define Cgate 1.95e-15
00142
00143
00144 #define Cgatepass 1.45e-15
00145
00146
00147
00148
00149
00150
00151 #define Cpolywire (0.25e-15)
00152
00153
00154 #define Rnchannelstatic (25800)
00155
00156
00157 #define Rpchannelstatic (61200)
00158
00159 #define Rnchannelon (8751)
00160
00161 #define Rpchannelon (20160)
00162
00163
00164 #define Vdd 5
00165 static float VddPow;
00166
00167
00168
00169 #define VTHNAND 0.561
00170 #define VTHFA1 0.452
00171 #define VTHFA2 0.304
00172 #define VTHFA3 0.420
00173 #define VTHFA4 0.413
00174 #define VTHFA5 0.405
00175 #define VTHFA6 0.452
00176 #define VSINV 0.452
00177 #define VTHINV100x60 0.438
00178 #define VTHINV360x240 0.420
00179 #define VTHNAND60x90 0.561
00180 #define VTHNOR12x4x1 0.503
00181 #define VTHNOR12x4x2 0.452
00182 #define VTHNOR12x4x3 0.417
00183 #define VTHNOR12x4x4 0.390
00184 #define VTHOUTDRINV 0.437
00185 #define VTHOUTDRNOR 0.379
00186 #define VTHOUTDRNAND 0.63
00187 #define VTHOUTDRIVE 0.425
00188 #define VTHCOMPINV 0.437
00189 #define VTHMUXNAND 0.548
00190 #define VTHMUXDRV1 0.406
00191 #define VTHMUXDRV2 0.334
00192 #define VTHMUXDRV3 0.478
00193 #define VTHEVALINV 0.452
00194 #define VTHSENSEEXTDRV 0.438
00195
00196 #define VTHNAND60x120 0.522
00197
00198
00199
00200 #define Wdecdrivep (360.0)
00201 #define Wdecdriven (240.0)
00202 #define Wdec3to8n 120.0
00203 #define Wdec3to8p 60.0
00204 #define WdecNORn 2.4
00205 #define WdecNORp 12.0
00206 #define Wdecinvn 20.0
00207 #define Wdecinvp 40.0
00208 #define Wworddrivemax 100.0
00209 #define Wmemcella (2.4)
00210 #define Wmemcellbscale 2
00211 #define Wbitpreequ (80.0)
00212 #define Wbitmuxn (10.0)
00213 #define WsenseQ1to4 (4.0)
00214 #define Wcompinvp1 (10.0)
00215 #define Wcompinvn1 (6.0)
00216 #define Wcompinvp2 (20.0)
00217 #define Wcompinvn2 (12.0)
00218 #define Wcompinvp3 (40.0)
00219 #define Wcompinvn3 (24.0)
00220 #define Wevalinvp (80.0)
00221 #define Wevalinvn (40.0)
00222
00223 #define Wfadriven (50.0)
00224 #define Wfadrivep (100.0)
00225 #define Wfadrive2n (200.0)
00226 #define Wfadrive2p (400.0)
00227 #define Wfadecdrive1n (5.0)
00228 #define Wfadecdrive1p (10.0)
00229 #define Wfadecdrive2n (20.0)
00230 #define Wfadecdrive2p (40.0)
00231 #define Wfadecdriven (50.0)
00232 #define Wfadecdrivep (100.0)
00233 #define Wfaprechn (6.0)
00234 #define Wfaprechp (10.0)
00235 #define Wdummyn (10.0)
00236 #define Wdummyinvn (60.0)
00237 #define Wdummyinvp (80.0)
00238 #define Wfainvn (10.0)
00239 #define Wfainvp (20.0)
00240 #define Waddrnandn (50.0)
00241 #define Waddrnandp (50.0)
00242 #define Wfanandn (20.0)
00243 #define Wfanandp (30.0)
00244 #define Wfanorn (5.0)
00245 #define Wfanorp (10.0)
00246 #define Wdecnandn (10.0)
00247 #define Wdecnandp (30.0)
00248
00249 #define Wcompn (10.0)
00250 #define Wcompp (30.0)
00251 #define Wmuxdrv12n (60.0)
00252 #define Wmuxdrv12p (100.0)
00253 #define WmuxdrvNANDn (60.0)
00254 #define WmuxdrvNANDp (80.0)
00255 #define WmuxdrvNORn (40.0)
00256 #define WmuxdrvNORp (100.0)
00257 #define Wmuxdrv3n (80.0)
00258 #define Wmuxdrv3p (200.0)
00259 #define Woutdrvseln (24.0)
00260 #define Woutdrvselp (40.0)
00261 #define Woutdrvnandn (10.0)
00262 #define Woutdrvnandp (30.0)
00263 #define Woutdrvnorn (5.0)
00264 #define Woutdrvnorp (20.0)
00265 #define Woutdrivern (48.0)
00266 #define Woutdriverp (80.0)
00267
00268 #define Wsenseextdrv1p (80.0)
00269 #define Wsenseextdrv1n (40.0)
00270 #define Wsenseextdrv2p (240.0)
00271 #define Wsenseextdrv2n (160.0)
00272
00273
00274
00275 #define krise (0.4e-9)
00276 #define tsensedata (5.8e-10)
00277
00278 #define psensedata (0.02e-9)
00279 #define tsensescale 0.02e-10
00280 #define tsensetag (2.6e-10)
00281
00282 #define psensetag (0.016e-9)
00283 #define tfalldata (7e-10)
00284 #define tfalltag (7e-10)
00285 #define Vbitpre (3.3)
00286 static float VbitprePow;
00287 #define Vt (1.09)
00288 #define Vbitsense (0.10)
00289
00290
00291 #define BitWidth (8.0)
00292
00293
00294 #define BitHeight (16.0)
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305 #define TRUE 1
00306 #define FALSE 0
00307 #ifndef NULL
00308 #define NULL 0
00309 #endif
00310 #define OK 1
00311 #define ERROR 0
00312 #define BIGNUM 1e30
00313 #define DIVIDE(a,b) ((b)==0)? 0:(a)/(b)
00314 #define MAX(a,b) (((a)>(b))?(a):(b))
00315
00316 #define WAVE_PIPE 3
00317 #define MAX_COL_MUX 16
00318
00319
00320
00321 #define RISE 1
00322 #define FALL 0
00323 #define NCH 1
00324 #define PCH 0
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345 typedef struct _fu_memory_param_t {
00346 int cache_size;
00347 int number_of_sets;
00348 int associativity;
00349 int block_size;
00350 int num_write_ports;
00351 int num_readwrite_ports;
00352 int num_read_ports;
00353 int num_single_ended_read_ports;
00354 char fully_assoc;
00355 float fudgefactor;
00356 float tech_size;
00357 float VddPow;
00358 double sCeff;
00359 } fu_memory_param_t;
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403 typedef struct _fu_memory_pif_t {
00404 double access_time,cycle_time;
00405 double senseext_scale;
00406 double total_power;
00407 int best_Ndwl,best_Ndbl;
00408 double max_power, max_access_time;
00409 int best_Nspd;
00410 int best_Ntwl,best_Ntbl;
00411 int best_Ntspd;
00412 int best_muxover;
00413 double total_routing_power;
00414 double total_power_without_routing, total_power_allbanks;
00415 double subbank_address_routing_delay,subbank_address_routing_power;
00416 double decoder_delay_data,decoder_delay_tag;
00417 double decoder_power_data,decoder_power_tag;
00418 double dec_data_driver,dec_data_3to8,dec_data_inv;
00419 double dec_tag_driver,dec_tag_3to8,dec_tag_inv;
00420 double wordline_delay_data,wordline_delay_tag;
00421 double wordline_power_data,wordline_power_tag;
00422 double bitline_delay_data,bitline_delay_tag;
00423 double bitline_power_data,bitline_power_tag;
00424 double sense_amp_delay_data,sense_amp_delay_tag;
00425 double sense_amp_power_data,sense_amp_power_tag;
00426 double total_out_driver_delay_data;
00427 double total_out_driver_power_data;
00428 double compare_part_delay;
00429 double drive_mux_delay;
00430 double selb_delay;
00431 double compare_part_power;
00432 double drive_mux_power;
00433 double selb_power;
00434 double data_output_delay;
00435 double data_output_power;
00436 double drive_valid_delay;
00437 double drive_valid_power;
00438 double precharge_delay;
00439 int data_nor_inputs;
00440 int tag_nor_inputs;
00441 } fu_memory_pif_t;