ElectricalDriver.cc revision 10447
1 2#include "model/timing_graph/ElectricalDriver.h" 3#include "model/timing_graph/ElectricalNet.h" 4#include "model/ElectricalModel.h" 5 6namespace DSENT 7{ 8 ElectricalDriver::ElectricalDriver(const String& instance_name_, ElectricalModel* model_, bool sizable_) 9 : ElectricalTimingNode(instance_name_, model_), m_output_res_(0.0), m_sizable_(sizable_) 10 { 11 12 } 13 14 ElectricalDriver::~ElectricalDriver() 15 { 16 17 } 18 19 void ElectricalDriver::setOutputRes(double output_res_) 20 { 21 m_output_res_ = output_res_; 22 return; 23 } 24 25 double ElectricalDriver::getOutputRes() const 26 { 27 return m_output_res_; 28 } 29 30 double ElectricalDriver::calculateDelay() const 31 { 32 return 0.693 * m_output_res_ * getTotalDownstreamCap(); 33 } 34 35 double ElectricalDriver::calculateTransition() const 36 { 37 return 1.386 * getMaxUpstreamRes() * getTotalDownstreamCap(); 38 } 39 40 double ElectricalDriver::getMaxUpstreamRes() const 41 { 42 return m_output_res_; 43 } 44 45 bool ElectricalDriver::isSizable() const 46 { 47 return m_sizable_; 48 } 49 50 bool ElectricalDriver::hasMaxDrivingStrength() const 51 { 52 if (!isSizable()) 53 { 54 return true; 55 } 56 return (getModel() == NULL) || (getModel()->hasMaxDrivingStrength()); 57 } 58 59 bool ElectricalDriver::hasMinDrivingStrength() const 60 { 61 if (!isSizable()) 62 { 63 return true; 64 } 65 return (getModel() == NULL) || (getModel()->hasMinDrivingStrength()); 66 } 67 68 void ElectricalDriver::increaseDrivingStrength() 69 { 70 ASSERT(isSizable(), "[Error] " + getInstanceName() + 71 " -> Attempted to size up unsizable driver!"); 72 if(!hasMaxDrivingStrength()) 73 { 74 getModel()->increaseDrivingStrength(); 75 } 76 return; 77 } 78 79 void ElectricalDriver::decreaseDrivingStrength() 80 { 81 ASSERT(isSizable(), "[Error] " + getInstanceName() + 82 " -> Attempted to size down unsizable driver!"); 83 if(!hasMinDrivingStrength()) 84 { 85 getModel()->decreaseDrivingStrength(); 86 } 87 return; 88 } 89 90 bool ElectricalDriver::isDriver() const 91 { 92 return true; 93 } 94} // namespace DSENT 95 96