• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

sst/core/techModels/libHotSpot/wire.h

00001 #ifndef __WIRE_H
00002 #define __WIRE_H
00003 
00004 #include "flp.h"
00005 #include "math.h"
00006 
00007 /* 
00008  * a simple wire-delay model based on 
00009  * 
00010  * 1) Equations 1-3 of the following paper: 
00011  * R. H. J. M. Otten and R. K. Brayton, "Planning for 
00012  * performance," in DAC '98: Proceedings of the 35th annual 
00013  * conference on Design automation, pp. 122--127, 1998.
00014  *
00015  * and
00016  *
00017  * 2) Equations 30-33 of the following paper: 
00018  * K. Banerjee and A. Mehrotra, "Global (interconnect) 
00019  * warming," IEEE Circuits and Devices Magazine, vol. 17, 
00020  * pp. 16--32, September 2001. The lcrit and sopt values
00021  * for the global metal layers defined below are taken from 
00022  * Table 4 of this paper.
00023  *
00024  * The resistance and capacitance values of wires per unit 
00025  * length defined below (WIRE_R*, WIRE_C*) are taken from 
00026  * Table 2 of the following paper:
00027  *
00028  * V. Agarwal, S. W. Keckler, and D. Burger, "The effect 
00029  * of technology scaling on microarchitectural structures,"
00030  * Tech. Rep. TR-00-02, University of Texas at Austin Computer 
00031  * Sciences, May 2001.
00032  */
00033 
00034 /* we are modeling a 130 nm wire        */
00035 #define TECHNODE130
00036 
00037 /* metal layer  */
00038 #define WIRE_GLOBAL                     0
00039 #define WIRE_INTER                      1
00040 
00041 /* 
00042  * constants dependent on the swing assumptions of the
00043  * repeaters inserted. usually, a 50% swing is assumed.
00044  * in such a case, a = 0.4, b = 0.7
00045  */
00046 #define WIRE_A                          0.4
00047 #define WIRE_B                          0.7
00048 
00049 /* 
00050  * *_G are values for global metal while *_I are
00051  * for intermediate metal layers respectively. 
00052  * The units used are listed below:
00053  * WIRE_R_* - mohm/u
00054  * WIRE_C_* - fF/u
00055  * WIRE_LCRIT_* - mm
00056  * WIRE_SOPT_* - dimensionless
00057  */
00058 #if     defined(TECHNODE180)
00059         #define WIRE_R_G                36.0
00060         #define WIRE_C_G                0.350
00061         #define WIRE_R_I                107.0
00062         #define WIRE_C_I                0.333
00063         #define WIRE_LCRIT_G    3.0
00064         #define WIRE_SOPT_G             179.0
00065 #elif defined(TECHNODE130)
00066         #define WIRE_R_G                61.0
00067         #define WIRE_C_G                0.359
00068         #define WIRE_R_I                188.0
00069         #define WIRE_C_I                0.336
00070         #define WIRE_LCRIT_G    2.4
00071         #define WIRE_SOPT_G             146.0
00072 #elif defined(TECHNODE100)
00073         #define WIRE_R_G                103.0
00074         #define WIRE_C_G                0.361
00075         #define WIRE_R_I                316.0
00076         #define WIRE_C_I                0.332
00077         #define WIRE_LCRIT_G    2.12
00078         #define WIRE_SOPT_G             96.0
00079 #elif defined(TECHNODE70)
00080         #define WIRE_R_G                164.0
00081         #define WIRE_C_G                0.360
00082         #define WIRE_R_I                500.0
00083         #define WIRE_C_I                0.331
00084         #define WIRE_LCRIT_G    1.2
00085         #define WIRE_SOPT_G             82.0
00086 #elif defined(TECHNODE50)
00087         #define WIRE_R_G                321.0
00088         #define WIRE_C_G                0.358
00089         #define WIRE_R_I                1020.0
00090         #define WIRE_C_I                0.341
00091         #define WIRE_LCRIT_G    0.99
00092         #define WIRE_SOPT_G             48.0
00093 #endif  
00094 
00095 /* 
00096  * lcrit and sopt values for intermediate layer
00097  * are derived from the values for global layer.
00098  * lcrit * sqrt(wire_r * wire_c) is a constant
00099  * for a given layer. So is the expression
00100  * sopt * sqrt(wire_r / wire_c) (Equation 2 and
00101  * Theorem 2 from Brayton et. al). Using this
00102  * for the global layer, one can find the constants
00103  * for the intermediate layer and combining this
00104  * with the wire_r and wire_c values for the
00105  * intermediate layer, its lcrit and sopt values
00106  * can be calculated.
00107  */
00108 #define WIRE_LCRIT_I            (WIRE_LCRIT_G * \
00109                                                          sqrt((WIRE_R_G / WIRE_R_I) * (WIRE_C_G / WIRE_C_I)))
00110 #define WIRE_SOPT_I                     (WIRE_SOPT_G * \
00111                                                          sqrt((WIRE_R_G / WIRE_R_I) / (WIRE_C_G / WIRE_C_I)))
00112 
00113 /* 
00114  * delay (in secs) per meter of a wire using 
00115  * Equation 2 and Theorem 2 of Brayton et al. 
00116  * the following expression is derived by 
00117  * setting cp = co in the delay equation and
00118  * substituting for sqrt(ro*co) in the same
00119  * from Equation 2. The 1.0e-9 is added to take
00120  * care of the units
00121  */
00122 #define WIRE_DELAY_G            (WIRE_LCRIT_G * WIRE_R_G * WIRE_C_G * 1.0e-9 * \
00123                                                         (2.0 * WIRE_A + sqrt (2.0 * WIRE_A * WIRE_B)))
00124 #define WIRE_DELAY_I            (WIRE_LCRIT_I * WIRE_R_I * WIRE_C_I * 1.0e-9 * \
00125                                                         (2.0 * WIRE_A + sqrt (2.0 * WIRE_A * WIRE_B)))
00126 
00127 /* function for wire-length to wire-delay conversion    */
00128 double wire_length2delay(double length, int layer);
00129 
00130 #endif

Generated on Fri Oct 22 2010 11:02:14 for SST by  doxygen 1.7.1