ElectricalDriver.cc revision 10447
110152Satgutier@umich.edu 210152Satgutier@umich.edu#include "model/timing_graph/ElectricalDriver.h" 310152Satgutier@umich.edu#include "model/timing_graph/ElectricalNet.h" 410152Satgutier@umich.edu#include "model/ElectricalModel.h" 510152Satgutier@umich.edu 610152Satgutier@umich.edunamespace DSENT 710152Satgutier@umich.edu{ 810152Satgutier@umich.edu ElectricalDriver::ElectricalDriver(const String& instance_name_, ElectricalModel* model_, bool sizable_) 910152Satgutier@umich.edu : ElectricalTimingNode(instance_name_, model_), m_output_res_(0.0), m_sizable_(sizable_) 1010152Satgutier@umich.edu { 1110152Satgutier@umich.edu 1210152Satgutier@umich.edu } 1310152Satgutier@umich.edu 1410152Satgutier@umich.edu ElectricalDriver::~ElectricalDriver() 1510152Satgutier@umich.edu { 1610152Satgutier@umich.edu 1710152Satgutier@umich.edu } 1810152Satgutier@umich.edu 1910152Satgutier@umich.edu void ElectricalDriver::setOutputRes(double output_res_) 2010152Satgutier@umich.edu { 2110152Satgutier@umich.edu m_output_res_ = output_res_; 2210152Satgutier@umich.edu return; 2310152Satgutier@umich.edu } 2410152Satgutier@umich.edu 2510233Syasuko.eckert@amd.com double ElectricalDriver::getOutputRes() const 2610233Syasuko.eckert@amd.com { 2710152Satgutier@umich.edu return m_output_res_; 2810152Satgutier@umich.edu } 2910152Satgutier@umich.edu 3010152Satgutier@umich.edu double ElectricalDriver::calculateDelay() const 3110152Satgutier@umich.edu { 3210152Satgutier@umich.edu return 0.693 * m_output_res_ * getTotalDownstreamCap(); 3310152Satgutier@umich.edu } 3410152Satgutier@umich.edu 3510152Satgutier@umich.edu double ElectricalDriver::calculateTransition() const 3610152Satgutier@umich.edu { 3710152Satgutier@umich.edu return 1.386 * getMaxUpstreamRes() * getTotalDownstreamCap(); 3810234Syasuko.eckert@amd.com } 3910234Syasuko.eckert@amd.com 4010234Syasuko.eckert@amd.com double ElectricalDriver::getMaxUpstreamRes() const 4110234Syasuko.eckert@amd.com { 4210152Satgutier@umich.edu return m_output_res_; 4310152Satgutier@umich.edu } 4410152Satgutier@umich.edu 4510152Satgutier@umich.edu bool ElectricalDriver::isSizable() const 4610152Satgutier@umich.edu { 4710152Satgutier@umich.edu return m_sizable_; 4810152Satgutier@umich.edu } 4910152Satgutier@umich.edu 5010152Satgutier@umich.edu bool ElectricalDriver::hasMaxDrivingStrength() const 5110152Satgutier@umich.edu { 5210152Satgutier@umich.edu if (!isSizable()) 5310152Satgutier@umich.edu { 5410152Satgutier@umich.edu return true; 5510152Satgutier@umich.edu } 5610152Satgutier@umich.edu return (getModel() == NULL) || (getModel()->hasMaxDrivingStrength()); 5710152Satgutier@umich.edu } 5810152Satgutier@umich.edu 5910152Satgutier@umich.edu bool ElectricalDriver::hasMinDrivingStrength() const 6010234Syasuko.eckert@amd.com { 6110152Satgutier@umich.edu if (!isSizable()) 6210152Satgutier@umich.edu { 6310152Satgutier@umich.edu return true; 6410234Syasuko.eckert@amd.com } 6510152Satgutier@umich.edu return (getModel() == NULL) || (getModel()->hasMinDrivingStrength()); 6610232Syasuko.eckert@amd.com } 6710152Satgutier@umich.edu 6810232Syasuko.eckert@amd.com void ElectricalDriver::increaseDrivingStrength() 6910232Syasuko.eckert@amd.com { 7010152Satgutier@umich.edu ASSERT(isSizable(), "[Error] " + getInstanceName() + 7110232Syasuko.eckert@amd.com " -> Attempted to size up unsizable driver!"); 7210232Syasuko.eckert@amd.com if(!hasMaxDrivingStrength()) 7310152Satgutier@umich.edu { 7410232Syasuko.eckert@amd.com getModel()->increaseDrivingStrength(); 7510152Satgutier@umich.edu } 7610152Satgutier@umich.edu return; 7710152Satgutier@umich.edu } 7810232Syasuko.eckert@amd.com 7910152Satgutier@umich.edu void ElectricalDriver::decreaseDrivingStrength() 8010152Satgutier@umich.edu { 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