ElectricalDriver.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_ELECTRICAL_DRIVER_H__
210447Snilay@cs.wisc.edu#define __DSENT_MODEL_ELECTRICAL_DRIVER_H__
310447Snilay@cs.wisc.edu
410447Snilay@cs.wisc.edu#include "util/CommonType.h"
510447Snilay@cs.wisc.edu#include "model/timing_graph/ElectricalTimingNode.h"
610447Snilay@cs.wisc.edu
710447Snilay@cs.wisc.edunamespace DSENT
810447Snilay@cs.wisc.edu{
910447Snilay@cs.wisc.edu    class ElectricalModel;
1010447Snilay@cs.wisc.edu
1110447Snilay@cs.wisc.edu    class ElectricalDriver : public ElectricalTimingNode
1210447Snilay@cs.wisc.edu    {
1310447Snilay@cs.wisc.edu        public:
1410447Snilay@cs.wisc.edu            ElectricalDriver(const String& instance_name_, ElectricalModel* model_, bool sizable_);
1510447Snilay@cs.wisc.edu            virtual ~ElectricalDriver();
1610447Snilay@cs.wisc.edu
1710447Snilay@cs.wisc.edu        public:
1810447Snilay@cs.wisc.edu            // Set the output resistance of this driver
1910447Snilay@cs.wisc.edu            void setOutputRes(double output_res_);
2010447Snilay@cs.wisc.edu            // Get the output resistance of this driver
2110447Snilay@cs.wisc.edu            double getOutputRes() const;
2210447Snilay@cs.wisc.edu            // Calculate delay due to total load capacitance
2310447Snilay@cs.wisc.edu            double calculateDelay() const;
2410447Snilay@cs.wisc.edu            // Calculate transition
2510447Snilay@cs.wisc.edu            double calculateTransition() const;
2610447Snilay@cs.wisc.edu            // get maximum of upstream drive resistance
2710447Snilay@cs.wisc.edu            double getMaxUpstreamRes() const;
2810447Snilay@cs.wisc.edu
2910447Snilay@cs.wisc.edu            // Get whether the driver is sizable
3010447Snilay@cs.wisc.edu            bool isSizable() const;
3110447Snilay@cs.wisc.edu            // Return true if the instance has minimum driving strength
3210447Snilay@cs.wisc.edu            bool hasMinDrivingStrength() const;
3310447Snilay@cs.wisc.edu            // Return true if the instance has maximum driving strength
3410447Snilay@cs.wisc.edu            bool hasMaxDrivingStrength() const;
3510447Snilay@cs.wisc.edu            // Increase driving strength index by 1
3610447Snilay@cs.wisc.edu            void increaseDrivingStrength();
3710447Snilay@cs.wisc.edu            // Decrease driving strength index by 1
3810447Snilay@cs.wisc.edu            void decreaseDrivingStrength();
3910447Snilay@cs.wisc.edu
4010447Snilay@cs.wisc.edu            bool isDriver() const;
4110447Snilay@cs.wisc.edu
4210447Snilay@cs.wisc.edu        private:
4310447Snilay@cs.wisc.edu            // Disable copy constructor
4410447Snilay@cs.wisc.edu            ElectricalDriver(const ElectricalDriver& port_);
4510447Snilay@cs.wisc.edu
4610447Snilay@cs.wisc.edu        private:
4710447Snilay@cs.wisc.edu            // Name of this instance
4810447Snilay@cs.wisc.edu            String m_instance_name_;
4910447Snilay@cs.wisc.edu            // Output resistance
5010447Snilay@cs.wisc.edu            double m_output_res_;
5110447Snilay@cs.wisc.edu            // Sizable flag
5210447Snilay@cs.wisc.edu            bool m_sizable_;
5310447Snilay@cs.wisc.edu    };
5410447Snilay@cs.wisc.edu} // namespace DSENT
5510447Snilay@cs.wisc.edu
5610447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_ELECTRICAL_DRIVER_H__
5710447Snilay@cs.wisc.edu
58