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 #ifndef __WIRE_H__
00045 #define __WIRE_H__
00046
00047 #include "basic_circuit.h"
00048 #include "McPATcomponent.h"
00049 #include "parameter.h"
00050 #include "assert.h"
00051 #include "cacti_interface.h"
00052 #include <iostream>
00053 #include <list>
00054
00055 class Wire : public McPATComponent
00056 {
00057 public:
00058 Wire(enum Wire_type wire_model, double len ,
00059 int nsense = 1,
00060 double width_scaling = 1,
00061 double spacing_scaling = 1,
00062 enum Wire_placement wire_placement = outside_mat,
00063 double resistivity = CU_RESISTIVITY,
00064 TechnologyParameter::DeviceType *dt = &(g_tp.peri_global));
00065 ~Wire();
00066
00067 Wire( double width_scaling = 1,
00068 double spacing_scaling = 1,
00069 enum Wire_placement wire_placement = outside_mat,
00070 double resistivity = CU_RESISTIVITY,
00071 TechnologyParameter::DeviceType *dt = &(g_tp.peri_global)
00072 );
00073 void init_wire();
00074
00075 void calculate_wire_stats();
00076 void delay_optimal_wire();
00077 double wire_cap(double len, bool call_from_outside=false);
00078 double wire_res(double len);
00079 void low_swing_model();
00080 double signal_fall_time();
00081 double signal_rise_time();
00082 double sense_amp_input_cap();
00083
00084 enum Wire_type wt;
00085 double wire_spacing;
00086 double wire_width;
00087 enum Wire_placement wire_placement;
00088 double repeater_size;
00089 double repeater_spacing;
00090 double wire_length;
00091 double in_rise_time, out_rise_time;
00092
00093 void set_in_rise_time(double rt)
00094 {
00095 in_rise_time = rt;
00096 }
00097 static McPATComponent global;
00098 static McPATComponent global_5;
00099 static McPATComponent global_10;
00100 static McPATComponent global_20;
00101 static McPATComponent global_30;
00102 static McPATComponent low_swing;
00103 static double wire_width_init;
00104 static double wire_spacing_init;
00105 void print_wire();
00106
00107 private:
00108
00109 int nsense;
00110
00111
00112
00113
00114 double w_scale, s_scale;
00115 double resistivity;
00116 powerDef wire_model (double space, double size, double *delay);
00117 list <McPATComponent> repeated_wire;
00118 void update_fullswing();
00119 static int initialized;
00120
00121
00122
00123 McPATComponent transmitter;
00124 McPATComponent l_wire;
00125 McPATComponent sense_amp;
00126
00127 double min_w_pmos;
00128
00129 TechnologyParameter::DeviceType *deviceType;
00130
00131 };
00132
00133 #endif