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 #ifndef Vdd
00109 #define Vdd 5
00110 #endif
00111
00112
00113
00114 #define VTHNAND 0.561
00115 #define VTHFA1 0.452
00116 #define VTHFA2 0.304
00117 #define VTHFA3 0.420
00118 #define VTHFA4 0.413
00119 #define VTHFA5 0.405
00120 #define VTHFA6 0.452
00121 #define VSINV 0.452
00122 #define VTHINV100x60 0.438
00123 #define VTHINV360x240 0.420
00124 #define VTHNAND60x90 0.561
00125 #define VTHNOR12x4x1 0.503
00126 #define VTHNOR12x4x2 0.452
00127 #define VTHNOR12x4x3 0.417
00128 #define VTHNOR12x4x4 0.390
00129 #define VTHOUTDRINV 0.437
00130 #define VTHOUTDRNOR 0.379
00131 #define VTHOUTDRNAND 0.63
00132 #define VTHOUTDRIVE 0.425
00133 #define VTHCOMPINV 0.437
00134 #define VTHMUXNAND 0.548
00135 #define VTHMUXDRV1 0.406
00136 #define VTHMUXDRV2 0.334
00137 #define VTHMUXDRV3 0.478
00138 #define VTHEVALINV 0.452
00139 #define VTHSENSEEXTDRV 0.438
00140
00141 #define VTHNAND60x120 0.522
00142
00143
00144
00145 #define Wdecdrivep (360.0)
00146 #define Wdecdriven (240.0)
00147 #define Wdec3to8n 120.0
00148 #define Wdec3to8p 60.0
00149 #define WdecNORn 2.4
00150 #define WdecNORp 12.0
00151 #define Wdecinvn 20.0
00152 #define Wdecinvp 40.0
00153 #define Wworddrivemax 100.0
00154 #define Wmemcella (2.4)
00155 #define Wmemcellbscale 2
00156 #define Wbitpreequ (80.0)
00157 #define Wbitmuxn (10.0)
00158 #define WsenseQ1to4 (4.0)
00159 #define Wcompinvp1 (10.0)
00160 #define Wcompinvn1 (6.0)
00161 #define Wcompinvp2 (20.0)
00162 #define Wcompinvn2 (12.0)
00163 #define Wcompinvp3 (40.0)
00164 #define Wcompinvn3 (24.0)
00165 #define Wevalinvp (80.0)
00166 #define Wevalinvn (40.0)
00167
00168 #define Wfadriven (50.0)
00169 #define Wfadrivep (100.0)
00170 #define Wfadrive2n (200.0)
00171 #define Wfadrive2p (400.0)
00172 #define Wfadecdrive1n (5.0)
00173 #define Wfadecdrive1p (10.0)
00174 #define Wfadecdrive2n (20.0)
00175 #define Wfadecdrive2p (40.0)
00176 #define Wfadecdriven (50.0)
00177 #define Wfadecdrivep (100.0)
00178 #define Wfaprechn (6.0)
00179 #define Wfaprechp (10.0)
00180 #define Wdummyn (10.0)
00181 #define Wdummyinvn (60.0)
00182 #define Wdummyinvp (80.0)
00183 #define Wfainvn (10.0)
00184 #define Wfainvp (20.0)
00185 #define Waddrnandn (50.0)
00186 #define Waddrnandp (50.0)
00187 #define Wfanandn (20.0)
00188 #define Wfanandp (30.0)
00189 #define Wfanorn (5.0)
00190 #define Wfanorp (10.0)
00191 #define Wdecnandn (10.0)
00192 #define Wdecnandp (30.0)
00193
00194 #define Wcompn (10.0)
00195 #define Wcompp (30.0)
00196 #define Wmuxdrv12n (60.0)
00197 #define Wmuxdrv12p (100.0)
00198 #define WmuxdrvNANDn (60.0)
00199 #define WmuxdrvNANDp (80.0)
00200 #define WmuxdrvNORn (40.0)
00201 #define WmuxdrvNORp (100.0)
00202 #define Wmuxdrv3n (80.0)
00203 #define Wmuxdrv3p (200.0)
00204 #define Woutdrvseln (24.0)
00205 #define Woutdrvselp (40.0)
00206 #define Woutdrvnandn (10.0)
00207 #define Woutdrvnandp (30.0)
00208 #define Woutdrvnorn (5.0)
00209 #define Woutdrvnorp (20.0)
00210 #define Woutdrivern (48.0)
00211 #define Woutdriverp (80.0)
00212
00213 #define Wsenseextdrv1p (80.0)
00214 #define Wsenseextdrv1n (40.0)
00215 #define Wsenseextdrv2p (240.0)
00216 #define Wsenseextdrv2n (160.0)
00217
00218
00219
00220 #define krise (0.4e-9)
00221 #define tsensedata (5.8e-10)
00222
00223 #define psensedata (0.02e-9)
00224 #define tsensescale 0.02e-10
00225 #define tsensetag (2.6e-10)
00226
00227 #define psensetag (0.016e-9)
00228 #define tfalldata (7e-10)
00229 #define tfalltag (7e-10)
00230 #define Vbitpre (3.3)
00231 #define Vt (1.09)
00232 #define Vbitsense (0.10)
00233
00234
00235 #define BitWidth (8.0)
00236
00237
00238 #define BitHeight (16.0)
00239
00240 #define Cout (0.5e-12)
00241
00242 #define Widthptondiff 4.0
00243 #define Widthtrack 3.2
00244 #define Widthcontact 1.6
00245 #define Wpoly 0.8
00246 #define ptocontact 0.4
00247 #define stitch_ramv 6.0
00248 #define BitHeight16x2 33.6
00249 #define stitch_ramh 12.0
00250 #define BitWidth16x2 192.8
00251 #define WidthNOR1 11.6
00252 #define WidthNOR2 13.6
00253 #define WidthNOR3 20.8
00254 #define WidthNOR4 28.8
00255 #define WidthNOR5 34.4
00256 #define WidthNOR6 41.6
00257 #define Predec_height1 140.8
00258 #define Predec_width1 270.4
00259 #define Predec_height2 140.8
00260 #define Predec_width2 539.2
00261 #define Predec_height3 281.6
00262 #define Predec_width3 584.0
00263 #define Predec_height4 281.6
00264 #define Predec_width4 628.8
00265 #define Predec_height5 422.4
00266 #define Predec_width5 673.6
00267 #define Predec_height6 422.4
00268 #define Predec_width6 718.4
00269 #define Wwrite 1.2
00270 #define SenseampHeight 152.0
00271 #define OutdriveHeight 200.0
00272 #define FAOutdriveHeight 229.2
00273 #define FArowWidth 382.8
00274 #define CAM2x2Height_1p 48.8
00275 #define CAM2x2Width_1p 44.8
00276 #define CAM2x2Height_2p 80.8
00277 #define CAM2x2Width_2p 76.8
00278 #define DatainvHeight 25.6
00279 #define Wbitdropv 30.0
00280 #define decNandWidth 34.4
00281 #define FArowNANDWidth 71.2
00282 #define FArowNOR_INVWidth 28.0
00283
00284 #define FAHeightIncrPer_first_rw_or_w_port 16.0
00285 #define FAHeightIncrPer_later_rw_or_w_port 16.0
00286 #define FAHeightIncrPer_first_r_port 12.0
00287 #define FAHeightIncrPer_later_r_port 12.0
00288 #define FAWidthIncrPer_first_rw_or_w_port 16.0
00289 #define FAWidthIncrPer_later_rw_or_w_port 9.6
00290 #define FAWidthIncrPer_first_r_port 12.0
00291 #define FAWidthIncrPer_later_r_port 9.6
00292
00293 #define tracks_precharge_p 12
00294 #define tracks_precharge_nx2 5
00295 #define tracks_outdrvselinv_p 3
00296 #define tracks_outdrvfanand_p 6
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 #define TRUE 1
00307 #define FALSE 0
00308 #ifndef NULL
00309 #define NULL 0
00310 #endif
00311 #define OK 1
00312 #define ERROR 0
00313 #define BIGNUM 1e30
00314 #define DIVIDE(a,b) ((b)==0)? 0:(a)/(b)
00315 #define MAX(a,b) (((a)>(b))?(a):(b))
00316
00317 #define WAVE_PIPE 3
00318 #define MAX_COL_MUX 16
00319
00320
00321
00322 #define RISE 1
00323 #define FALL 0
00324 #define NCH 1
00325 #define PCH 0
00326
00327
00328
00329
00330 typedef struct _fu_memory_param_t {
00331 int csize;
00332 int nsets;
00333 int assoc;
00334 int bsize;
00335 int nsbank;
00336 int nwport;
00337 int nrwport;
00338 int nrport;
00339 int nserport;
00340 char fully_assoc;
00341 double fudgefactor;
00342 double tsize;
00343 double opvolt;
00344 double sCeff;
00345 } fu_memory_param_t;
00346
00347 typedef struct _fu_memory_pif_t {
00348 double access_time,cycle_time;
00349 double senseext_scale;
00350 double total_power;
00351 int best_Ndwl,best_Ndbl;
00352 double max_power, max_access_time;
00353 int best_Nspd;
00354 int best_Ntwl,best_Ntbl;
00355 int best_Ntspd;
00356 int best_muxover;
00357 double total_routing_power;
00358 double total_power_without_routing, total_power_allbanks;
00359 double subbank_address_routing_delay,subbank_address_routing_power;
00360 double decoder_delay_data,decoder_delay_tag;
00361 double decoder_power_data,decoder_power_tag;
00362 double dec_data_driver,dec_data_3to8,dec_data_inv;
00363 double dec_tag_driver,dec_tag_3to8,dec_tag_inv;
00364 double wordline_delay_data,wordline_delay_tag;
00365 double wordline_power_data,wordline_power_tag;
00366 double bitline_delay_data,bitline_delay_tag;
00367 double bitline_power_data,bitline_power_tag;
00368 double sense_amp_delay_data,sense_amp_delay_tag;
00369 double sense_amp_power_data,sense_amp_power_tag;
00370 double total_out_driver_delay_data;
00371 double total_out_driver_power_data;
00372 double compare_part_delay;
00373 double drive_mux_delay;
00374 double selb_delay;
00375 double compare_part_power;
00376 double drive_mux_power;
00377 double selb_power;
00378 double data_output_delay;
00379 double data_output_power;
00380 double drive_valid_delay;
00381 double drive_valid_power;
00382 double precharge_delay;
00383 int data_nor_inputs;
00384 int tag_nor_inputs;
00385 } fu_memory_pif_t;
00386
00387 typedef struct _fu_memory_aif_t {
00388 fu_area_t dataarray_area,datapredecode_area;
00389 fu_area_t datacolmuxpredecode_area,datacolmuxpostdecode_area;
00390 fu_area_t datawritesig_area;
00391 fu_area_t tagarray_area,tagpredecode_area;
00392 fu_area_t tagcolmuxpredecode_area,tagcolmuxpostdecode_area;
00393 fu_area_t tagoutdrvdecode_area;
00394 fu_area_t tagoutdrvsig_area;
00395 double totalarea;
00396 double total_dataarea;
00397 double total_tagarea;
00398 double max_efficiency, efficiency;
00399 double max_aspect_ratio_total, aspect_ratio_total;
00400 } fu_memory_aif_t;
00401
00402 extern double Cwordmetal;
00403 extern double Cbitmetal;
00404 extern double Rwordmetal;
00405 extern double Rbitmetal;
00406 extern double FACwordmetal;
00407 extern double FACbitmetal;
00408 extern double FARwordmetal;
00409 extern double FARbitmetal;
00410
00411 extern int muxover;
00412
00413 double gatecap(
00414 double width,
00415 double wirelength);
00416
00417 double gatecappass(
00418 double width,
00419 double wirelength);
00420
00421 double draincap(
00422 double width,
00423 int nchannel,
00424 int stack);
00425
00426 double transresswitch(
00427 double width,
00428 int nchannel,
00429 int stack);
00430
00431 double transreson(
00432 double width,
00433 int nchannel,
00434 int stack);
00435
00436 double restowidth(
00437 double res,
00438 int nchannel);
00439
00440 double horowitz(
00441 double inputramptime,
00442 double tf,
00443 double vs1, double vs2,
00444 int rise);
00445
00446 void subbank_routing_length(
00447 int C, int B, int A, char fullyassoc,
00448 int Ndbl, int Nspd, int Ndwl, int Ntbl, int Ntwl, int Ntspd,
00449 int nsbank, int *subbank_v, int *subbank_h);
00450
00451
00452
00453
00454
00455
00456 extern double area_all_datasubarrays;
00457 extern double area_all_tagsubarrays;
00458 extern double area_all_dataramcells;
00459 extern double area_all_tagramcells;
00460 extern double faarea_all_subarrays ;
00461
00462 extern double aspect_ratio_data;
00463 extern double aspect_ratio_tag;
00464 extern double aspect_ratio_subbank;
00465 extern double aspect_ratio_total;
00466
00467 double estimate_area(
00468 fu_area_t module_area,
00469 double tscaling_factor);
00470
00471 void estimate_time(
00472 fu_memory_pif_t *result,
00473 fu_memory_aif_t *arearesult,
00474 fu_area_t *arearesult_subbanked,
00475 fu_memory_param_t *parameters);
00476
00477 fu_area_t inverter_area(
00478 double Widthp,
00479 double Widthn);
00480
00481
00482 fu_area_t subarraymem_area(
00483 int C, int B, int A,
00484 int Ndbl, int Ndwl, int Nspd,
00485 int nrwport, int nrport, int nwport, int nserport,
00486 double techscaling_factor);
00487
00488
00489 fu_area_t decodemem_row(
00490 int C, int B, int A,
00491 int Ndbl, int Nspd, int Ndwl,
00492 int nrwport, int nrport, int nwport);
00493
00494
00495 fu_area_t predecode_area(
00496 int noof_rows,
00497 int nrwport, int nrport, int nwport);
00498
00499
00500 fu_area_t colmux(
00501 int Ndbl, int Nspd,
00502 int nrwport, int nrport, int nwport, int nserport);
00503
00504 fu_area_t precharge(
00505 int Ndbl, int Nspd,
00506 int nrwport, int nrport, int nwport, int nserport);
00507
00508 void area_subbanked(
00509 int baddr, int b0,
00510 int nrwport, int nrport, int nwport,
00511 int Ndbl, int Ndwl, int Nspd,
00512 int Ntbl, int Ntwl, int Ntspd,
00513 int nsbank, fu_memory_param_t *parameters,
00514 fu_area_t *result_subbanked, fu_memory_aif_t *result);
00515
00516 int organizational_parameters_valid(
00517 int B, int A, int C,
00518 int Ndwl, int Ndbl, int Nspd,
00519 int Ntwl, int Ntbl, int Ntspd, char assoc);
00520
00521 #endif
00522