ElectricalNet.cc revision 10447
110447Snilay@cs.wisc.edu
210447Snilay@cs.wisc.edu#include "model/timing_graph/ElectricalNet.h"
310447Snilay@cs.wisc.edu#include "model/timing_graph/ElectricalLoad.h"
410447Snilay@cs.wisc.edu
510447Snilay@cs.wisc.edunamespace DSENT
610447Snilay@cs.wisc.edu{
710447Snilay@cs.wisc.edu    //-------------------------------------------------------------------------
810447Snilay@cs.wisc.edu    // Electrical Net
910447Snilay@cs.wisc.edu    //-------------------------------------------------------------------------
1010447Snilay@cs.wisc.edu
1110447Snilay@cs.wisc.edu    ElectricalNet::ElectricalNet(const String& instance_name_, ElectricalModel* model_)
1210447Snilay@cs.wisc.edu        : ElectricalTimingNode(instance_name_, model_), m_distributed_res_(0), m_distributed_cap_(0)
1310447Snilay@cs.wisc.edu    {
1410447Snilay@cs.wisc.edu
1510447Snilay@cs.wisc.edu    }
1610447Snilay@cs.wisc.edu
1710447Snilay@cs.wisc.edu    ElectricalNet::~ElectricalNet()
1810447Snilay@cs.wisc.edu    {
1910447Snilay@cs.wisc.edu
2010447Snilay@cs.wisc.edu    }
2110447Snilay@cs.wisc.edu
2210447Snilay@cs.wisc.edu    double ElectricalNet::calculateDelay() const
2310447Snilay@cs.wisc.edu    {
2410447Snilay@cs.wisc.edu        // Remember that this is a pi model, delay is distributed cap * distributed_res / 2 +
2510447Snilay@cs.wisc.edu        // distributed res * (other downstream caps)
2610447Snilay@cs.wisc.edu        return 0.693 * (getTotalDownstreamCap() - m_distributed_cap_ / 2) * m_distributed_res_;
2710447Snilay@cs.wisc.edu    }
2810447Snilay@cs.wisc.edu
2910447Snilay@cs.wisc.edu    double ElectricalNet::calculateTransition() const
3010447Snilay@cs.wisc.edu    {
3110447Snilay@cs.wisc.edu        return 1.386 * getMaxUpstreamRes() * (m_distributed_cap_ * 0.2 + ElectricalTimingNode::getTotalDownstreamCap());
3210447Snilay@cs.wisc.edu    }
3310447Snilay@cs.wisc.edu
3410447Snilay@cs.wisc.edu    double ElectricalNet::getMaxUpstreamRes() const
3510447Snilay@cs.wisc.edu    {
3610447Snilay@cs.wisc.edu        return m_distributed_res_ + ElectricalTimingNode::getMaxUpstreamRes();
3710447Snilay@cs.wisc.edu    }
3810447Snilay@cs.wisc.edu
3910447Snilay@cs.wisc.edu    double ElectricalNet::getTotalDownstreamCap() const
4010447Snilay@cs.wisc.edu    {
4110447Snilay@cs.wisc.edu        return m_distributed_cap_ + ElectricalTimingNode::getTotalDownstreamCap();
4210447Snilay@cs.wisc.edu    }
4310447Snilay@cs.wisc.edu
4410447Snilay@cs.wisc.edu    void ElectricalNet::setDistributedCap(double distributed_cap_)
4510447Snilay@cs.wisc.edu    {
4610447Snilay@cs.wisc.edu        m_distributed_cap_ = distributed_cap_;
4710447Snilay@cs.wisc.edu        return;
4810447Snilay@cs.wisc.edu    }
4910447Snilay@cs.wisc.edu
5010447Snilay@cs.wisc.edu    void ElectricalNet::setDistributedRes(double distributed_res_)
5110447Snilay@cs.wisc.edu    {
5210447Snilay@cs.wisc.edu        m_distributed_res_ = distributed_res_;
5310447Snilay@cs.wisc.edu        return;
5410447Snilay@cs.wisc.edu    }
5510447Snilay@cs.wisc.edu
5610447Snilay@cs.wisc.edu    double ElectricalNet::getDistributedCap() const
5710447Snilay@cs.wisc.edu    {
5810447Snilay@cs.wisc.edu        return m_distributed_cap_;
5910447Snilay@cs.wisc.edu    }
6010447Snilay@cs.wisc.edu
6110447Snilay@cs.wisc.edu    double ElectricalNet::getDistributedRes() const
6210447Snilay@cs.wisc.edu    {
6310447Snilay@cs.wisc.edu        return m_distributed_res_;
6410447Snilay@cs.wisc.edu    }
6510447Snilay@cs.wisc.edu
6610447Snilay@cs.wisc.edu    bool ElectricalNet::isNet() const
6710447Snilay@cs.wisc.edu    {
6810447Snilay@cs.wisc.edu        return true;
6910447Snilay@cs.wisc.edu    }
7010447Snilay@cs.wisc.edu
7110447Snilay@cs.wisc.edu} // namespace DSENT
7210447Snilay@cs.wisc.edu
7310447Snilay@cs.wisc.edu
74