TechModel.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_TECH_TECH_MODEL_H__ 210447Snilay@cs.wisc.edu#define __DSENT_TECH_TECH_MODEL_H__ 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edu#include <vector> 510447Snilay@cs.wisc.edu#include <set> 610447Snilay@cs.wisc.edu 710447Snilay@cs.wisc.edu#include "libutil/Config.h" 810447Snilay@cs.wisc.edu#include "libutil/String.h" 910447Snilay@cs.wisc.edu 1010447Snilay@cs.wisc.edunamespace DSENT 1110447Snilay@cs.wisc.edu{ 1210447Snilay@cs.wisc.edu class StdCellLib; 1310447Snilay@cs.wisc.edu 1410447Snilay@cs.wisc.edu using std::set; 1510447Snilay@cs.wisc.edu using std::vector; 1610447Snilay@cs.wisc.edu using LibUtil::String; 1710447Snilay@cs.wisc.edu 1810447Snilay@cs.wisc.edu class TechModel : public LibUtil::Config 1910447Snilay@cs.wisc.edu { 2010447Snilay@cs.wisc.edu public: 2110447Snilay@cs.wisc.edu typedef std::set<String>::const_iterator ConstWireLayerIterator; 2210447Snilay@cs.wisc.edu 2310447Snilay@cs.wisc.edu public: 2410447Snilay@cs.wisc.edu TechModel(); 2510447Snilay@cs.wisc.edu virtual ~TechModel(); 2610447Snilay@cs.wisc.edu 2710447Snilay@cs.wisc.edu public: 2810447Snilay@cs.wisc.edu // Set the pointer to a standard cell library 2910447Snilay@cs.wisc.edu void setStdCellLib(const StdCellLib* std_cell_lib_); 3010447Snilay@cs.wisc.edu // Get the pointer to the standard cell library 3110447Snilay@cs.wisc.edu const StdCellLib* getStdCellLib() const; 3210447Snilay@cs.wisc.edu 3310447Snilay@cs.wisc.edu // Return a cloned copy of this instance 3410447Snilay@cs.wisc.edu virtual TechModel* clone() const; 3510447Snilay@cs.wisc.edu // Override readFile function to include multiple technology files 3610447Snilay@cs.wisc.edu virtual void readFile(const String& filename_); 3710447Snilay@cs.wisc.edu 3810447Snilay@cs.wisc.edu // Transistor 3910447Snilay@cs.wisc.edu // Returns the leakage current of NMOS transistors, given the transistor stakcing, transistor widths, and input combination 4010447Snilay@cs.wisc.edu double calculateNmosLeakageCurrent(unsigned int num_stacks_, double uni_stacked_mos_width_, unsigned int input_vector_) const; 4110447Snilay@cs.wisc.edu double calculateNmosLeakageCurrent(unsigned int num_stacks_, const vector<double>& stacked_mos_widths_, unsigned int input_vector_) const; 4210447Snilay@cs.wisc.edu // Returns the leakage current of PMOS transistors, given the transistor stakcing, transistor widths, and input combination 4310447Snilay@cs.wisc.edu double calculatePmosLeakageCurrent(unsigned int num_stacks_, double uni_stacked_mos_width_, unsigned int input_vector_) const; 4410447Snilay@cs.wisc.edu double calculatePmosLeakageCurrent(unsigned int num_stacks_, const vector<double>& stacked_mos_widths_, unsigned int input_vector_) const; 4510447Snilay@cs.wisc.edu // Returns the leakage current, given the transistor stakcing, transistor widths, input combination, 4610447Snilay@cs.wisc.edu // and technology information (vdd, subthreshold swing, subthreshold dibl swing) 4710447Snilay@cs.wisc.edu double calculateLeakageCurrentFactor(unsigned int num_stacks_, const vector<double>& stacked_mos_widths_, unsigned int input_vector_, double vdd_, double subthreshold_swing_, double dibl_swing_) const; 4810447Snilay@cs.wisc.edu 4910447Snilay@cs.wisc.edu // Wire 5010447Snilay@cs.wisc.edu // Check if the wire layer exist 5110447Snilay@cs.wisc.edu bool isWireLayerExist(const String& layer_name_) const; 5210447Snilay@cs.wisc.edu const std::set<String>* getAvailableWireLayers() const; 5310447Snilay@cs.wisc.edu // Return wire capacitance for given wire layer, wire width, wire spacing, and wire length 5410447Snilay@cs.wisc.edu double calculateWireCapacitance(const String& layer_name_, double width_, double spacing_, double length_) const; 5510447Snilay@cs.wisc.edu // Return wire resistance for given wire layer, wire width, and wire length 5610447Snilay@cs.wisc.edu double calculateWireResistance(const String& layer_name_, double width_, double length_) const; 5710447Snilay@cs.wisc.edu 5810447Snilay@cs.wisc.edu private: 5910447Snilay@cs.wisc.edu // Private copy constructor. Use clone to perform copy operation 6010447Snilay@cs.wisc.edu TechModel(const TechModel& tech_model_); 6110447Snilay@cs.wisc.edu 6210447Snilay@cs.wisc.edu private: 6310447Snilay@cs.wisc.edu // A pointer to a standard cell library 6410447Snilay@cs.wisc.edu const StdCellLib* m_std_cell_lib_; 6510447Snilay@cs.wisc.edu // A set of available wire layers 6610447Snilay@cs.wisc.edu std::set<String>* m_available_wire_layers_; 6710447Snilay@cs.wisc.edu }; // class TechModel 6810447Snilay@cs.wisc.edu} // namespace DSENT 6910447Snilay@cs.wisc.edu 7010447Snilay@cs.wisc.edu#endif // __DSENT_TECH_TECH_MODEL_H__ 7110447Snilay@cs.wisc.edu 72