ElectricalTimingTree.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 210447Snilay@cs.wisc.edu#define __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edu#include <vector> 510447Snilay@cs.wisc.edu 610447Snilay@cs.wisc.edu#include "util/CommonType.h" 710447Snilay@cs.wisc.edu#include "model/timing_graph/ElectricalTimingNode.h" 810447Snilay@cs.wisc.edu 910447Snilay@cs.wisc.edunamespace DSENT 1010447Snilay@cs.wisc.edu{ 1110447Snilay@cs.wisc.edu using std::vector; 1210447Snilay@cs.wisc.edu 1310447Snilay@cs.wisc.edu class ElectricalDriver; 1410447Snilay@cs.wisc.edu 1510447Snilay@cs.wisc.edu class ElectricalTimingTree 1610447Snilay@cs.wisc.edu { 1710447Snilay@cs.wisc.edu public: 1810447Snilay@cs.wisc.edu // The visited number for the next timing run. This needs to be 1910447Snilay@cs.wisc.edu // global because several timing trees may be created to evaluate 2010447Snilay@cs.wisc.edu // a single timing path, causing problems 2110447Snilay@cs.wisc.edu static int msTreeNum; 2210447Snilay@cs.wisc.edu 2310447Snilay@cs.wisc.edu public: 2410447Snilay@cs.wisc.edu // Construct timing tree that watches over model_ 2510447Snilay@cs.wisc.edu ElectricalTimingTree(const String& instance_name_, ElectricalModel* model_); 2610447Snilay@cs.wisc.edu ~ElectricalTimingTree(); 2710447Snilay@cs.wisc.edu 2810447Snilay@cs.wisc.edu public: 2910447Snilay@cs.wisc.edu // Get tree name 3010447Snilay@cs.wisc.edu const String& getInstanceName() const; 3110447Snilay@cs.wisc.edu 3210447Snilay@cs.wisc.edu // A wrapper for extractCritPathDelay 3310447Snilay@cs.wisc.edu // Update the tree num before do extract critical path delay recursively 3410447Snilay@cs.wisc.edu double performCritPathExtract(ElectricalTimingNode* node_); 3510447Snilay@cs.wisc.edu // Calculate the delay of the marked critical path from a starting node 3610447Snilay@cs.wisc.edu double calculateCritPathDelay(ElectricalTimingNode* node_) const; 3710447Snilay@cs.wisc.edu // Calculate the transition at a node 3810447Snilay@cs.wisc.edu double calculateNodeTransition(ElectricalTimingNode* node_) const; 3910447Snilay@cs.wisc.edu // Returns the optimal node to optimize timing (by sizing up) in the critical 4010447Snilay@cs.wisc.edu // path to reduce critical path delay 4110447Snilay@cs.wisc.edu ElectricalTimingNode* findNodeForTimingOpt(ElectricalTimingNode* node_) const; 4210447Snilay@cs.wisc.edu // Perform incremental timing optimization to guarantee that all timing paths from a 4310447Snilay@cs.wisc.edu // starting node meets a required delay 4410447Snilay@cs.wisc.edu // Return false if the timing optimization fails to meet the required delay 4510447Snilay@cs.wisc.edu bool performTimingOpt(ElectricalTimingNode* node_, double required_delay_); 4610447Snilay@cs.wisc.edu 4710447Snilay@cs.wisc.edu // Return the model 4810447Snilay@cs.wisc.edu ElectricalModel* getModel(); 4910447Snilay@cs.wisc.edu 5010447Snilay@cs.wisc.edu private: 5110447Snilay@cs.wisc.edu // Disable the use of copy constructor 5210447Snilay@cs.wisc.edu ElectricalTimingTree(const ElectricalTimingTree& graph_); 5310447Snilay@cs.wisc.edu 5410447Snilay@cs.wisc.edu // Recursively calculate delay from a starting node, finding and marking the 5510447Snilay@cs.wisc.edu // critical path along the way and returns the delay of the critical path 5610447Snilay@cs.wisc.edu double extractCritPathDelay(ElectricalTimingNode* node_); 5710447Snilay@cs.wisc.edu 5810447Snilay@cs.wisc.edu public: 5910447Snilay@cs.wisc.edu // Set the sequence number of the timing tree 6010447Snilay@cs.wisc.edu static void setTreeNum(int tree_num_); 6110447Snilay@cs.wisc.edu static int getTreeNum(); 6210447Snilay@cs.wisc.edu 6310447Snilay@cs.wisc.edu private: 6410447Snilay@cs.wisc.edu // Name of the timing tree 6510447Snilay@cs.wisc.edu const String m_instance_name_; 6610447Snilay@cs.wisc.edu // A pointer to the model that contains this node 6710447Snilay@cs.wisc.edu ElectricalModel* m_model_; 6810447Snilay@cs.wisc.edu 6910447Snilay@cs.wisc.edu }; // class ElectricalTimingTree 7010447Snilay@cs.wisc.edu} // namespace DSENT 7110447Snilay@cs.wisc.edu 7210447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_ELECTRICAL_TIMING_TREE_H__ 7310447Snilay@cs.wisc.edu 74