00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #if !defined(oagTPointMaster_P)
00013 #define oagTPointMaster_P
00014
00015 #include <assert.h>
00016 #include <vector>
00017 #include "oaDesignDB.h"
00018
00019 #include "oagTimerModel.h"
00020 #include "oagTimerTPoint.h"
00021
00022 namespace oagTimer {
00023
00027 struct TimerPath {
00028 oaModTerm *other;
00029 ModelType *delay;
00030 ModelType *slew;
00031 int transition;
00032 };
00033
00045 class TPointMaster {
00046 friend class TPoint;
00047 friend class Timer;
00048 friend class Report;
00049 friend class LibData;
00050 friend class ElmoreWireModel;
00051 friend class PowerSenseOpt;
00052 friend class DuetSensitivity;
00053 friend class Opt;
00054 friend class Util;
00055 friend class TimerUtil;
00056 friend class SubTimer;
00057
00058 public:
00059 static const int TRANSITION_SRC_RISE = 0x01;
00060 static const int TRANSITION_SRC_FALL = 0x02;
00061 static const int TRANSITION_DST_RISE = 0x10;
00062 static const int TRANSITION_DST_FALL = 0x20;
00063
00064 public:
00066 TPointMaster() { loadLimit = 0.0; }
00068 ~TPointMaster();
00069
00070 public:
00072 double cap;
00074 double loadLimit;
00075
00076 private:
00078 typedef std::vector<TimerPath> pathVector;
00080 pathVector inPaths;
00082 pathVector outPaths;
00083
00084 private:
00086 typedef std::vector<ModelType *> modelVector;
00088 modelVector _models;
00089
00091
00092 private:
00093
00094 static oaVoidPointerAppDef<oaModTerm> *_termAppDef;
00095
00097 static void initAppDefs();
00098
00106 static TPointMaster *create(oaModTerm *term);
00107
00113 static TPointMaster *get(oaModTerm *term);
00114
00115 private:
00125 void _makePath(TimerPath &p,
00126 oaModTerm *term,
00127 const ModelType *delay,
00128 const ModelType *slew,
00129 int transition);
00130
00131 public:
00139 void addInPath(oaModTerm *term,
00140 const ModelType *delay,
00141 const ModelType *slew,
00142 int transition);
00143
00151 void addOutPath(oaModTerm *term,
00152 const ModelType *delay,
00153 const ModelType *slew,
00154 int transition);
00155
00157
00158 };
00159
00160 }
00161
00162 #endif