ElectricalTimingNode.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_ELECTRICAL_TIMING_NODE_H__ 210447Snilay@cs.wisc.edu#define __DSENT_MODEL_ELECTRICAL_TIMING_NODE_H__ 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edu#include "util/CommonType.h" 510447Snilay@cs.wisc.edu 610447Snilay@cs.wisc.edunamespace DSENT 710447Snilay@cs.wisc.edu{ 810447Snilay@cs.wisc.edu class ElectricalModel; 910447Snilay@cs.wisc.edu 1010447Snilay@cs.wisc.edu class ElectricalTimingNode 1110447Snilay@cs.wisc.edu { 1210447Snilay@cs.wisc.edu public: 1310447Snilay@cs.wisc.edu // The starting visited number flag of all timing nodes 1410447Snilay@cs.wisc.edu static const int TIMING_NODE_INIT_VISITED_NUM; 1510447Snilay@cs.wisc.edu 1610447Snilay@cs.wisc.edu public: 1710447Snilay@cs.wisc.edu ElectricalTimingNode(const String& instance_name_, ElectricalModel* model_); 1810447Snilay@cs.wisc.edu virtual ~ElectricalTimingNode(); 1910447Snilay@cs.wisc.edu 2010447Snilay@cs.wisc.edu public: 2110447Snilay@cs.wisc.edu 2210447Snilay@cs.wisc.edu // Calculate the delay this node contributes 2310447Snilay@cs.wisc.edu virtual double calculateDelay() const = 0; 2410447Snilay@cs.wisc.edu // Calculate the transition at this node 2510447Snilay@cs.wisc.edu virtual double calculateTransition() const = 0; 2610447Snilay@cs.wisc.edu // get maximum of upstream drive resistance 2710447Snilay@cs.wisc.edu virtual double getMaxUpstreamRes() const; 2810447Snilay@cs.wisc.edu // get total amount of downstream load capacitance 2910447Snilay@cs.wisc.edu virtual double getTotalDownstreamCap() const; 3010447Snilay@cs.wisc.edu // Return instance name 3110447Snilay@cs.wisc.edu const String& getInstanceName() const; 3210447Snilay@cs.wisc.edu // get upstream timing nodes 3310447Snilay@cs.wisc.edu vector<ElectricalTimingNode*>* getUpstreamNodes() const; 3410447Snilay@cs.wisc.edu // get downstream timing nodes 3510447Snilay@cs.wisc.edu vector<ElectricalTimingNode*>* getDownstreamNodes() const; 3610447Snilay@cs.wisc.edu // Connect a downstream timing node 3710447Snilay@cs.wisc.edu void addDownstreamNode(ElectricalTimingNode* node_); 3810447Snilay@cs.wisc.edu // Return the node's parent model 3910447Snilay@cs.wisc.edu ElectricalModel* getModel(); 4010447Snilay@cs.wisc.edu const ElectricalModel* getModel() const; 4110447Snilay@cs.wisc.edu // Set/get false path marker 4210447Snilay@cs.wisc.edu void setFalsePath(bool false_path_); 4310447Snilay@cs.wisc.edu bool getFalsePath() const; 4410447Snilay@cs.wisc.edu 4510447Snilay@cs.wisc.edu virtual bool isDriver() const; 4610447Snilay@cs.wisc.edu virtual bool isNet() const; 4710447Snilay@cs.wisc.edu virtual bool isLoad() const; 4810447Snilay@cs.wisc.edu 4910447Snilay@cs.wisc.edu 5010447Snilay@cs.wisc.edu //----------------------------------------------------------------- 5110447Snilay@cs.wisc.edu // Functions for delay optimization 5210447Snilay@cs.wisc.edu //----------------------------------------------------------------- 5310447Snilay@cs.wisc.edu // Return true if the instance has minimum driving strength 5410447Snilay@cs.wisc.edu virtual bool hasMinDrivingStrength() const; 5510447Snilay@cs.wisc.edu // Return true if the instance has maximum driving strength 5610447Snilay@cs.wisc.edu virtual bool hasMaxDrivingStrength() const; 5710447Snilay@cs.wisc.edu // Increase driving strength index by 1 5810447Snilay@cs.wisc.edu virtual void increaseDrivingStrength(); 5910447Snilay@cs.wisc.edu // Decrease driving strength index by 1 6010447Snilay@cs.wisc.edu virtual void decreaseDrivingStrength(); 6110447Snilay@cs.wisc.edu //----------------------------------------------------------------- 6210447Snilay@cs.wisc.edu 6310447Snilay@cs.wisc.edu //----------------------------------------------------------------- 6410447Snilay@cs.wisc.edu // Node variables for critical path delay calculations 6510447Snilay@cs.wisc.edu //----------------------------------------------------------------- 6610447Snilay@cs.wisc.edu // Critical path marker 6710447Snilay@cs.wisc.edu void setCritPath(int crit_path_); 6810447Snilay@cs.wisc.edu int getCritPath() const; 6910447Snilay@cs.wisc.edu // Visited parity marker 7010447Snilay@cs.wisc.edu void setVisitedNum(int visited_parity_); 7110447Snilay@cs.wisc.edu int getVisitedNum() const; 7210447Snilay@cs.wisc.edu // Delay left in this path 7310447Snilay@cs.wisc.edu void setDelayLeft(double delay_left_); 7410447Snilay@cs.wisc.edu double getDelayLeft() const; 7510447Snilay@cs.wisc.edu //----------------------------------------------------------------- 7610447Snilay@cs.wisc.edu 7710447Snilay@cs.wisc.edu 7810447Snilay@cs.wisc.edu private: 7910447Snilay@cs.wisc.edu // Disable copy constructor 8010447Snilay@cs.wisc.edu ElectricalTimingNode(const ElectricalTimingNode& node_); 8110447Snilay@cs.wisc.edu 8210447Snilay@cs.wisc.edu private: 8310447Snilay@cs.wisc.edu // Name of this instance 8410447Snilay@cs.wisc.edu String m_instance_name_; 8510447Snilay@cs.wisc.edu // A pointer to the model that contains this node 8610447Snilay@cs.wisc.edu ElectricalModel* m_model_; 8710447Snilay@cs.wisc.edu // Upstream electrical nets 8810447Snilay@cs.wisc.edu vector<ElectricalTimingNode*>* m_upstream_nodes_; 8910447Snilay@cs.wisc.edu // Downstream electrical nets 9010447Snilay@cs.wisc.edu vector<ElectricalTimingNode*>* m_downstream_nodes_; 9110447Snilay@cs.wisc.edu // False path marker 9210447Snilay@cs.wisc.edu bool m_false_path_; 9310447Snilay@cs.wisc.edu // Critical path index (to next downstream node) 9410447Snilay@cs.wisc.edu int m_crit_path_; 9510447Snilay@cs.wisc.edu // Odd / even path visited (so that you don't have to clear it) 9610447Snilay@cs.wisc.edu int m_visited_num_; 9710447Snilay@cs.wisc.edu // The amount of delay left to the end of the timing path 9810447Snilay@cs.wisc.edu double m_delay_left_; 9910447Snilay@cs.wisc.edu }; 10010447Snilay@cs.wisc.edu 10110447Snilay@cs.wisc.edu} // namespace DSENT 10210447Snilay@cs.wisc.edu 10310447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_ELECTRICAL_TIMING_NODE_H__ 10410447Snilay@cs.wisc.edu 105