00001 #ifndef ECACTI_H
00002 #define ECACTI_H
00003 #include "../libpanalyzer/panalyzer.h"
00004
00005
00006
00007
00008
00009
00010
00011 #define LONG 1
00012 #define SHORT 2
00013 #define OUTPUTTYPE LONG
00014
00015
00016
00017
00018
00019 #define ADDRESS_BITS 32
00020 #define BITOUT 32
00021
00022
00023
00024
00025 #define MAXN 32
00026 #define MAXSUBARRAYS 32
00027 #define MAXSPD 32
00028
00029
00030
00031
00032
00033
00034
00035
00036 #define FEATURESIZE 0.8
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #define WIRESPACING (2*FEATURESIZE)
00053 #define WIREWIDTH (3*FEATURESIZE)
00054 #define WIREPITCH (WIRESPACING+WIREWIDTH)
00055 #define Cmetal 275e-18
00056 #define Rmetal 48e-3
00057
00058
00059 #define Cndiffarea 0.137e-15
00060
00061
00062 #define Cpdiffarea 0.343e-15
00063
00064
00065 #define Cndiffside 0.275e-15
00066
00067
00068 #define Cpdiffside 0.275e-15
00069
00070
00071 #define Cndiffovlp 0.138e-15
00072
00073
00074 #define Cpdiffovlp 0.138e-15
00075
00076
00077 #define Cnoxideovlp 0.263e-15
00078
00079
00080 #define Cpoxideovlp 0.338e-15
00081
00082
00083 #define Leff (0.8)
00084
00085
00086 #define Cgate 1.95e-15
00087
00088
00089 #define Cgatepass 1.45e-15
00090
00091
00092
00093
00094
00095
00096 #define Cpolywire (0.25e-15)
00097
00098
00099 #define Rnchannelstatic (25800)
00100
00101
00102 #define Rpchannelstatic (61200)
00103
00104 #define Rnchannelon (8751)
00105
00106 #define Rpchannelon (20160)
00107
00108
00109 #define Vdd 5
00110
00111
00112
00113 #define VTHNAND 0.561
00114 #define VTHFA1 0.452
00115 #define VTHFA2 0.304
00116 #define VTHFA3 0.420
00117 #define VTHFA4 0.413
00118 #define VTHFA5 0.405
00119 #define VTHFA6 0.452
00120 #define VSINV 0.452
00121 #define VTHINV100x60 0.438
00122 #define VTHINV360x240 0.420
00123 #define VTHNAND60x90 0.561
00124 #define VTHNOR12x4x1 0.503
00125 #define VTHNOR12x4x2 0.452
00126 #define VTHNOR12x4x3 0.417
00127 #define VTHNOR12x4x4 0.390
00128 #define VTHOUTDRINV 0.437
00129 #define VTHOUTDRNOR 0.379
00130 #define VTHOUTDRNAND 0.63
00131 #define VTHOUTDRIVE 0.425
00132 #define VTHCOMPINV 0.437
00133 #define VTHMUXNAND 0.548
00134 #define VTHMUXDRV1 0.406
00135 #define VTHMUXDRV2 0.334
00136 #define VTHMUXDRV3 0.478
00137 #define VTHEVALINV 0.452
00138 #define VTHSENSEEXTDRV 0.438
00139
00140 #define VTHNAND60x120 0.522
00141
00142
00143
00144 #define Wdecdrivep (360.0)
00145 #define Wdecdriven (240.0)
00146 #define Wdec3to8n 120.0
00147 #define Wdec3to8p 60.0
00148 #define WdecNORn 2.4
00149 #define WdecNORp 12.0
00150 #define Wdecinvn 20.0
00151 #define Wdecinvp 40.0
00152 #define Wworddrivemax 100.0
00153 #define Wmemcella (2.4)
00154 #define Wmemcellbscale 2
00155 #define Wbitpreequ (80.0)
00156 #define Wbitmuxn (10.0)
00157 #define WsenseQ1to4 (4.0)
00158 #define Wcompinvp1 (10.0)
00159 #define Wcompinvn1 (6.0)
00160 #define Wcompinvp2 (20.0)
00161 #define Wcompinvn2 (12.0)
00162 #define Wcompinvp3 (40.0)
00163 #define Wcompinvn3 (24.0)
00164 #define Wevalinvp (80.0)
00165 #define Wevalinvn (40.0)
00166
00167 #define Wfadriven (50.0)
00168 #define Wfadrivep (100.0)
00169 #define Wfadrive2n (200.0)
00170 #define Wfadrive2p (400.0)
00171 #define Wfadecdrive1n (5.0)
00172 #define Wfadecdrive1p (10.0)
00173 #define Wfadecdrive2n (20.0)
00174 #define Wfadecdrive2p (40.0)
00175 #define Wfadecdriven (50.0)
00176 #define Wfadecdrivep (100.0)
00177 #define Wfaprechn (6.0)
00178 #define Wfaprechp (10.0)
00179 #define Wdummyn (10.0)
00180 #define Wdummyinvn (60.0)
00181 #define Wdummyinvp (80.0)
00182 #define Wfainvn (10.0)
00183 #define Wfainvp (20.0)
00184 #define Waddrnandn (50.0)
00185 #define Waddrnandp (50.0)
00186 #define Wfanandn (20.0)
00187 #define Wfanandp (30.0)
00188 #define Wfanorn (5.0)
00189 #define Wfanorp (10.0)
00190 #define Wdecnandn (10.0)
00191 #define Wdecnandp (30.0)
00192
00193 #define Wcompn (10.0)
00194 #define Wcompp (30.0)
00195 #define Wmuxdrv12n (60.0)
00196 #define Wmuxdrv12p (100.0)
00197 #define WmuxdrvNANDn (60.0)
00198 #define WmuxdrvNANDp (80.0)
00199 #define WmuxdrvNORn (40.0)
00200 #define WmuxdrvNORp (100.0)
00201 #define Wmuxdrv3n (80.0)
00202 #define Wmuxdrv3p (200.0)
00203 #define Woutdrvseln (24.0)
00204 #define Woutdrvselp (40.0)
00205 #define Woutdrvnandn (10.0)
00206 #define Woutdrvnandp (30.0)
00207 #define Woutdrvnorn (5.0)
00208 #define Woutdrvnorp (20.0)
00209 #define Woutdrivern (48.0)
00210 #define Woutdriverp (80.0)
00211
00212 #define Wsenseextdrv1p (80.0)
00213 #define Wsenseextdrv1n (40.0)
00214 #define Wsenseextdrv2p (240.0)
00215 #define Wsenseextdrv2n (160.0)
00216
00217
00218
00219 #define krise (0.4e-9)
00220 #define tsensedata (5.8e-10)
00221
00222 #define psensedata (0.02e-9)
00223 #define tsensescale 0.02e-10
00224 #define tsensetag (2.6e-10)
00225
00226 #define psensetag (0.016e-9)
00227 #define tfalldata (7e-10)
00228 #define tfalltag (7e-10)
00229 #define Vbitpre (3.3)
00230 #define Vt (1.09)
00231 #define Vbitsense (0.10)
00232
00233
00234 #define BitWidth (8.0)
00235
00236
00237 #define BitHeight (16.0)
00238
00239 #define Cout (0.5e-12)
00240
00241 #define Widthptondiff 4.0
00242 #define Widthtrack 3.2
00243 #define Widthcontact 1.6
00244 #define Wpoly 0.8
00245 #define ptocontact 0.4
00246 #define stitch_ramv 6.0
00247 #define BitHeight16x2 33.6
00248 #define stitch_ramh 12.0
00249 #define BitWidth16x2 192.8
00250 #define WidthNOR1 11.6
00251 #define WidthNOR2 13.6
00252 #define WidthNOR3 20.8
00253 #define WidthNOR4 28.8
00254 #define WidthNOR5 34.4
00255 #define WidthNOR6 41.6
00256 #define Predec_height1 140.8
00257 #define Predec_width1 270.4
00258 #define Predec_height2 140.8
00259 #define Predec_width2 539.2
00260 #define Predec_height3 281.6
00261 #define Predec_width3 584.0
00262 #define Predec_height4 281.6
00263 #define Predec_width4 628.8
00264 #define Predec_height5 422.4
00265 #define Predec_width5 673.6
00266 #define Predec_height6 422.4
00267 #define Predec_width6 718.4
00268 #define Wwrite 1.2
00269 #define SenseampHeight 152.0
00270 #define OutdriveHeight 200.0
00271 #define FAOutdriveHeight 229.2
00272 #define FArowWidth 382.8
00273 #define CAM2x2Height_1p 48.8
00274 #define CAM2x2Width_1p 44.8
00275 #define CAM2x2Height_2p 80.8
00276 #define CAM2x2Width_2p 76.8
00277 #define DatainvHeight 25.6
00278 #define Wbitdropv 30.0
00279 #define decNandWidth 34.4
00280 #define FArowNANDWidth 71.2
00281 #define FArowNOR_INVWidth 28.0
00282
00283 #define FAHeightIncrPer_first_rw_or_w_port 16.0
00284 #define FAHeightIncrPer_later_rw_or_w_port 16.0
00285 #define FAHeightIncrPer_first_r_port 12.0
00286 #define FAHeightIncrPer_later_r_port 12.0
00287 #define FAWidthIncrPer_first_rw_or_w_port 16.0
00288 #define FAWidthIncrPer_later_rw_or_w_port 9.6
00289 #define FAWidthIncrPer_first_r_port 12.0
00290 #define FAWidthIncrPer_later_r_port 9.6
00291
00292 #define tracks_precharge_p 12
00293 #define tracks_precharge_nx2 5
00294 #define tracks_outdrvselinv_p 3
00295 #define tracks_outdrvfanand_p 6
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 typedef struct _fu_memory_param_t {
00330 int csize;
00331 int nsets;
00332 int assoc;
00333 int bsize;
00334 int nsbank;
00335 int nwport;
00336 int nrwport;
00337 int nrport;
00338 int nserport;
00339 char fully_assoc;
00340 double fudgefactor;
00341 double tsize;
00342 double opvolt;
00343 double sCeff;
00344 } fu_memory_param_t;
00345
00346 typedef struct _fu_memory_pif_t {
00347 double access_time,cycle_time;
00348 double senseext_scale;
00349 double total_power;
00350 int best_Ndwl,best_Ndbl;
00351 double max_power, max_access_time;
00352 int best_Nspd;
00353 int best_Ntwl,best_Ntbl;
00354 int best_Ntspd;
00355 int best_muxover;
00356 double total_routing_power;
00357 double total_power_without_routing, total_power_allbanks;
00358 double subbank_address_routing_delay,subbank_address_routing_power;
00359 double decoder_delay_data,decoder_delay_tag;
00360 double decoder_power_data,decoder_power_tag;
00361 double dec_data_driver,dec_data_3to8,dec_data_inv;
00362 double dec_tag_driver,dec_tag_3to8,dec_tag_inv;
00363 double wordline_delay_data,wordline_delay_tag;
00364 double wordline_power_data,wordline_power_tag;
00365 double bitline_delay_data,bitline_delay_tag;
00366 double bitline_power_data,bitline_power_tag;
00367 double sense_amp_delay_data,sense_amp_delay_tag;
00368 double sense_amp_power_data,sense_amp_power_tag;
00369 double total_out_driver_delay_data;
00370 double total_out_driver_power_data;
00371 double compare_part_delay;
00372 double drive_mux_delay;
00373 double selb_delay;
00374 double compare_part_power;
00375 double drive_mux_power;
00376 double selb_power;
00377 double data_output_delay;
00378 double data_output_power;
00379 double drive_valid_delay;
00380 double drive_valid_power;
00381 double precharge_delay;
00382 int data_nor_inputs;
00383 int tag_nor_inputs;
00384 } fu_memory_pif_t;
00385
00386 typedef struct _fu_memory_aif_t {
00387 fu_area_t dataarray_area,datapredecode_area;
00388 fu_area_t datacolmuxpredecode_area,datacolmuxpostdecode_area;
00389 fu_area_t datawritesig_area;
00390 fu_area_t tagarray_area,tagpredecode_area;
00391 fu_area_t tagcolmuxpredecode_area,tagcolmuxpostdecode_area;
00392 fu_area_t tagoutdrvdecode_area;
00393 fu_area_t tagoutdrvsig_area;
00394 double totalarea;
00395 double total_dataarea;
00396 double total_tagarea;
00397 double max_efficiency, efficiency;
00398 double max_aspect_ratio_total, aspect_ratio_total;
00399 } fu_memory_aif_t;
00400
00401 extern double Cwordmetal;
00402 extern double Cbitmetal;
00403 extern double Rwordmetal;
00404 extern double Rbitmetal;
00405 extern double FACwordmetal;
00406 extern double FACbitmetal;
00407 extern double FARwordmetal;
00408 extern double FARbitmetal;
00409
00410 extern int muxover;
00411
00412 double gatecap(
00413 double width,
00414 double wirelength);
00415
00416 double gatecappass(
00417 double width,
00418 double wirelength);
00419
00420 double draincap(
00421 double width,
00422 int nchannel,
00423 int stack);
00424
00425 double transresswitch(
00426 double width,
00427 int nchannel,
00428 int stack);
00429
00430 double transreson(
00431 double width,
00432 int nchannel,
00433 int stack);
00434
00435 double restowidth(
00436 double res,
00437 int nchannel);
00438
00439 double horowitz(
00440 double inputramptime,
00441 double tf,
00442 double vs1, double vs2,
00443 int rise);
00444
00445 void subbank_routing_length(
00446 int C, int B, int A, char fullyassoc,
00447 int Ndbl, int Nspd, int Ndwl, int Ntbl, int Ntwl, int Ntspd,
00448 int nsbank, int *subbank_v, int *subbank_h);
00449
00450
00451
00452
00453
00454
00455 extern double area_all_datasubarrays;
00456 extern double area_all_tagsubarrays;
00457 extern double area_all_dataramcells;
00458 extern double area_all_tagramcells;
00459 extern double faarea_all_subarrays ;
00460
00461 extern double aspect_ratio_data;
00462 extern double aspect_ratio_tag;
00463 extern double aspect_ratio_subbank;
00464 extern double aspect_ratio_total;
00465
00466 double estimate_area(
00467 fu_area_t module_area,
00468 double tscaling_factor);
00469
00470 void estimate_time(
00471 fu_memory_pif_t *result,
00472 fu_memory_aif_t *arearesult,
00473 fu_area_t *arearesult_subbanked,
00474 fu_memory_param_t *parameters);
00475
00476 fu_area_t inverter_area(
00477 double Widthp,
00478 double Widthn);
00479
00480
00481 fu_area_t subarraymem_area(
00482 int C, int B, int A,
00483 int Ndbl, int Ndwl, int Nspd,
00484 int nrwport, int nrport, int nwport, int nserport,
00485 double techscaling_factor);
00486
00487
00488 fu_area_t decodemem_row(
00489 int C, int B, int A,
00490 int Ndbl, int Nspd, int Ndwl,
00491 int nrwport, int nrport, int nwport);
00492
00493
00494 fu_area_t predecode_area(
00495 int noof_rows,
00496 int nrwport, int nrport, int nwport);
00497
00498
00499 fu_area_t colmux(
00500 int Ndbl, int Nspd,
00501 int nrwport, int nrport, int nwport, int nserport);
00502
00503 fu_area_t precharge(
00504 int Ndbl, int Nspd,
00505 int nrwport, int nrport, int nwport, int nserport);
00506
00507 void area_subbanked(
00508 int baddr, int b0,
00509 int nrwport, int nrport, int nwport,
00510 int Ndbl, int Ndwl, int Nspd,
00511 int Ntbl, int Ntwl, int Ntspd,
00512 int nsbank, fu_memory_param_t *parameters,
00513 fu_area_t *result_subbanked, fu_memory_aif_t *result);
00514
00515 int organizational_parameters_valid(
00516 int B, int A, int C,
00517 int Ndwl, int Ndbl, int Nspd,
00518 int Ntwl, int Ntbl, int Ntspd, char assoc);
00519
00520 #endif
00521