00001
00002
00003
00004
00005
00006
00007
00008
00009 #if !defined(oagTimerOptMinDelay_P)
00010 #define oagTimerOptMinDelay_P
00011
00012 #include "oaDesignDB.h"
00013 #include "oagTimerTimer.h"
00014 #include "oagTimerUtil.h"
00015
00016 #include <map>
00017 #include <vector>
00018 namespace oagTimer{
00019
00020 class OptMinDelay{
00021 public:
00022 OptMinDelay(oaDesign *d, Timer *t);
00023 ~OptMinDelay();
00024 void run();
00025
00026 private:
00027 double getDelaySum();
00028 vector<int> getIndices(oaModInst *inst);
00029 void updateLM();
00030 void reverseLM();
00031 void saveCurrSizing();
00032 void reverseSizing();
00033 void save();
00034 void reload();
00035
00036
00037 void test1();
00038 void test2();
00039 void printLMAssignment();
00040 double globalLM;
00041
00042 private:
00043 oaDesign *design;
00044 Timer *timing;
00045 map<oaModInst*,oaString> currSizing;
00046 map<oaModInst*,oaString> bestDesign;
00047
00048 int _N;
00049 double tau, alpha1, alpha2;
00050 Util ut;
00051 vector<oaModInst*> G;
00052
00053 };
00054
00055 }
00056 #endif