ElectricalDriverMultiplier.h revision 10447:a465576671d4
12SN/A#ifndef __DSENT_MODEL_ELECTRICAL_DRIVER_MULTIPLIER_H__
21762SN/A#define __DSENT_MODEL_ELECTRICAL_DRIVER_MULTIPLIER_H__
32SN/A
42SN/A#include "util/CommonType.h"
52SN/A#include "model/timing_graph/ElectricalTimingNode.h"
62SN/A
72SN/Anamespace DSENT
82SN/A{
92SN/A    // Simple class that can be used to mimic the presence of multiple drivers
102SN/A    // output drivers (each driving one of the downstream loads) when only one
112SN/A    // such driver has been instantiated (such as models that take advantage of
122SN/A    // bit duplicattion). When the downsream loads differ in load cap, it
132SN/A    // just returns the largest of the caps
142SN/A    class ElectricalDriverMultiplier : public ElectricalTimingNode
152SN/A    {
162SN/A        public:
172SN/A            ElectricalDriverMultiplier(const String& instance_name_, ElectricalModel* model_);
182SN/A            virtual ~ElectricalDriverMultiplier();
192SN/A
202SN/A        public:
212SN/A            // Calculate drive resistance of this node;
222SN/A            double calculateDriveRes(double input_drive_res_) const;
232SN/A            // Calculate wiring delay (or net delay)
242SN/A            double calculateDelay() const;
252SN/A            // Calculate transition
262SN/A            double calculateTransition() const;
272665Ssaidi@eecs.umich.edu            // get total amount of downstream load capacitance
282760Sbinkertn@umich.edu            double getTotalDownstreamCap() const;
292760Sbinkertn@umich.edu
302665Ssaidi@eecs.umich.edu        private:
312SN/A            // Disable copy constructor
322SN/A            ElectricalDriverMultiplier(const ElectricalDriverMultiplier& net_);
332SN/A
34363SN/A        private:
35363SN/A            // Name of this instance
361354SN/A            String m_instance_name_;
372SN/A    };
382SN/A
392SN/A} // namespace DSENT
402SN/A
412SN/A#endif // __DSENT_MODEL_ELECTRICAL_DRIVER_MULTIPLIER_H__
422SN/A
43363SN/A