oagTimerSubTimer.h

Go to the documentation of this file.
00001 /************************************************************
00002 * 
00003 * File: oagTimerSubTimer.h
00004 * Author: Santiago Mok (smok@ee.ucla.edu)
00005 * Created: 03-11-2011
00006 * Last Modified: Thu 24 Mar 2011 01:58:38 PM PDT
00007 *
00008 ************************************************************/
00009 #if !defined(oagTimerSubTimer_H)
00010 #define oagTimerSubTimer_H
00011 
00012 #include "oaDesignDB.h"
00013 #include "oagTimerTimer.h"
00014 
00015 #include <map>
00016 #include <vector>
00017 
00018 namespace oagTimer {
00019     using namespace std;
00020     using namespace oa;
00021 /*---------------------------------------------------------*/
00022 class SubTPoint{
00023   public:
00024     SubTPoint();
00025     ~SubTPoint();
00026     double getArr();
00027     double getReq();
00028     double getSlew();
00029     double getSlack();
00030     double getRiseSlack();
00031     double getFallSlack();
00032     
00033   public:
00034     double delay;
00035     double riseArr;
00036     double fallArr;
00037     double riseReq;
00038     double fallReq;
00039     double riseSlew;
00040     double fallSlew;
00041 };
00042 /*---------------------------------------------------------*/
00043 class SubTimer{
00044   public:
00045     SubTimer(oaDesign *des, Timer *t, oaOccInst *i, oaString c);
00046     ~SubTimer();
00047 
00048     void setLoad(double l);
00049     double getCellDelayEstimate(oaOccInstTerm *i);
00050     double getDeltaDelay();
00051     double getDeltaSlack();
00052     double getWorstSlack();
00053 
00054   private:
00055     SubTPoint getSubTP(oaOccInstTerm *i);
00056     void buildTimingGraph();
00057     double getDeltaArr(oaOccInstTerm *it);
00058     double getMinDeltaSlack(oaOccInst *i);
00059     double getDeltaSlack(oaOccInstTerm *it);
00060     void getOtherInsts(oaOccInstTerm *i);
00061 
00062     void updateArr();
00063     double getCapLoad(oaOccInstTerm *i, oaString otherSize);
00064     void computeArr(oaOccInstTerm *inpTerm, oaString cellMaster, double load);
00065     void getOtherArr(oaOccInstTerm *instTerm);
00066 
00067     void updateReq();
00068     void computeReq(oaOccInstTerm *inpTerm, oaString cellMaster, double load);
00069     void getOtherReq(oaOccInstTerm *instTerm, SubTPoint &subTP);
00070 
00071     //void computeNetDelay(oaOccInstTerm *i);
00072 
00073     //DEBUG
00074     void printAll();
00075     void print(oaOccInstTerm *i);
00076   private:
00077     oaDesign *design;
00078     Timer *timer;
00079     //current cell data
00080     oaOccInst *occInst;
00081     oaString masterCell;
00082     double currLoad;
00083     bool loadGiven;
00084 
00085     map<oaOccInstTerm*,SubTPoint> tpMap;
00086     vector<oaOccInst*> faninVec;
00087     vector<oaOccInst*> fanoutVec;
00088 };
00089 /*---------------------------------------------------------*/
00090 }//namespace
00091 #endif

Generated on Thu Aug 25 14:24:05 2011 by  doxygen 1.3.9.1