ElectricalTimingTree.h revision 10447:a465576671d4
16313Sgblack@eecs.umich.edu#ifndef __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 26313Sgblack@eecs.umich.edu#define __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 36313Sgblack@eecs.umich.edu 46313Sgblack@eecs.umich.edu#include <vector> 56313Sgblack@eecs.umich.edu 66313Sgblack@eecs.umich.edu#include "util/CommonType.h" 76313Sgblack@eecs.umich.edu#include "model/timing_graph/ElectricalTimingNode.h" 86313Sgblack@eecs.umich.edu 96313Sgblack@eecs.umich.edunamespace DSENT 106313Sgblack@eecs.umich.edu{ 116313Sgblack@eecs.umich.edu using std::vector; 126313Sgblack@eecs.umich.edu 136313Sgblack@eecs.umich.edu class ElectricalDriver; 146313Sgblack@eecs.umich.edu 156313Sgblack@eecs.umich.edu class ElectricalTimingTree 166313Sgblack@eecs.umich.edu { 176313Sgblack@eecs.umich.edu public: 186313Sgblack@eecs.umich.edu // The visited number for the next timing run. This needs to be 196313Sgblack@eecs.umich.edu // global because several timing trees may be created to evaluate 206313Sgblack@eecs.umich.edu // a single timing path, causing problems 216313Sgblack@eecs.umich.edu static int msTreeNum; 226313Sgblack@eecs.umich.edu 236313Sgblack@eecs.umich.edu public: 246313Sgblack@eecs.umich.edu // Construct timing tree that watches over model_ 256313Sgblack@eecs.umich.edu ElectricalTimingTree(const String& instance_name_, ElectricalModel* model_); 266313Sgblack@eecs.umich.edu ~ElectricalTimingTree(); 276313Sgblack@eecs.umich.edu 286313Sgblack@eecs.umich.edu public: 296313Sgblack@eecs.umich.edu // Get tree name 306313Sgblack@eecs.umich.edu const String& getInstanceName() const; 316313Sgblack@eecs.umich.edu 326336Sgblack@eecs.umich.edu // A wrapper for extractCritPathDelay 336336Sgblack@eecs.umich.edu // Update the tree num before do extract critical path delay recursively 346313Sgblack@eecs.umich.edu double performCritPathExtract(ElectricalTimingNode* node_); 356336Sgblack@eecs.umich.edu // Calculate the delay of the marked critical path from a starting node 366313Sgblack@eecs.umich.edu double calculateCritPathDelay(ElectricalTimingNode* node_) const; 376313Sgblack@eecs.umich.edu // Calculate the transition at a node 386313Sgblack@eecs.umich.edu double calculateNodeTransition(ElectricalTimingNode* node_) const; 396313Sgblack@eecs.umich.edu // Returns the optimal node to optimize timing (by sizing up) in the critical 406313Sgblack@eecs.umich.edu // path to reduce critical path delay 416336Sgblack@eecs.umich.edu ElectricalTimingNode* findNodeForTimingOpt(ElectricalTimingNode* node_) const; 426336Sgblack@eecs.umich.edu // Perform incremental timing optimization to guarantee that all timing paths from a 436336Sgblack@eecs.umich.edu // starting node meets a required delay 446712Snate@binkert.org // Return false if the timing optimization fails to meet the required delay 456336Sgblack@eecs.umich.edu bool performTimingOpt(ElectricalTimingNode* node_, double required_delay_); 466336Sgblack@eecs.umich.edu 476336Sgblack@eecs.umich.edu // Return the model 486336Sgblack@eecs.umich.edu ElectricalModel* getModel(); 496336Sgblack@eecs.umich.edu 506336Sgblack@eecs.umich.edu private: 516336Sgblack@eecs.umich.edu // Disable the use of copy constructor 526336Sgblack@eecs.umich.edu ElectricalTimingTree(const ElectricalTimingTree& graph_); 536336Sgblack@eecs.umich.edu 546336Sgblack@eecs.umich.edu // Recursively calculate delay from a starting node, finding and marking the 556336Sgblack@eecs.umich.edu // critical path along the way and returns the delay of the critical path 566336Sgblack@eecs.umich.edu double extractCritPathDelay(ElectricalTimingNode* node_); 576336Sgblack@eecs.umich.edu 586336Sgblack@eecs.umich.edu public: 596336Sgblack@eecs.umich.edu // Set the sequence number of the timing tree 606336Sgblack@eecs.umich.edu static void setTreeNum(int tree_num_); 616336Sgblack@eecs.umich.edu static int getTreeNum(); 626336Sgblack@eecs.umich.edu 636336Sgblack@eecs.umich.edu private: 646336Sgblack@eecs.umich.edu // Name of the timing tree 656336Sgblack@eecs.umich.edu const String m_instance_name_; 666336Sgblack@eecs.umich.edu // A pointer to the model that contains this node 676336Sgblack@eecs.umich.edu ElectricalModel* m_model_; 686336Sgblack@eecs.umich.edu 696336Sgblack@eecs.umich.edu }; // class ElectricalTimingTree 706336Sgblack@eecs.umich.edu} // namespace DSENT 716336Sgblack@eecs.umich.edu 726336Sgblack@eecs.umich.edu#endif // __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 736336Sgblack@eecs.umich.edu 746336Sgblack@eecs.umich.edu