coriolis/chamsin/src/device_backup/TrMos.h

127 lines
4.0 KiB
C++

// ****************************************************************************************************
// File: TrMos.h
// Authors: Wu YiFei
// Date : 21/12/2006
// ****************************************************************************************************
#ifndef TRMOS_H
#define TRMOS_H
#include "Net.h"
using namespace Hurricane;
#include "Transistor.h"
//#include "MetaTransistor.h"
#include "Device.h"
namespace DEVICE {
class TrMos : public Device {
public : enum PinName { D, G, S, B };
// Attributes
// *******************
// Structural parameter.
// ********************
private : Transistor::Polarity _polarity;
private : bool _isBsConnected;
private : unsigned _m;
// Parameter of the electric synthesis.
// ***********************************
/* to do */
// Physical parameter of realization.
// **********************************
/* Placement. */
private : bool _sourceIsFirst;
private : bool _hasDummy;
private : bool _hasRing;
/* Routing. */
private : vector<PinName> _lowPinOrder; // relative position of the connectors on the basis of the top.
private : vector<PinName> _highPinOrder;
private : map<Net*, Pin*> _mapNetToPinBoxInLeftSide;
private : map<Net*, Pin*> _mapNetToPinBoxInRightSide;
private : double _widthOfSourceWire; // by defect, minWidth, unit of valeur is Micro
private : double _widthOfDrainWire; // by defect, minWidth, unit of valeur is Micro
/* Others */
private : MetaTransistor * _tr1;
private : double _capaRouting;
private : list<Transistor*> _transistorList;
// Constructors
// ************
protected : TrMos(Library* library, const Name& name);
protected : virtual void _postCreate();
public : static TrMos* create(Library* library, const Name & name);
// Operations
// **********
public : virtual void dses() { /* to do */};
public : virtual void shape() { /* to do */};
public : void create(const Transistor::Polarity& polarity, const bool isbsconnected);
public : void generate(const unsigned m, const bool sourceisfirst, const bool hasring,
const unsigned nbsourcecolumn, const unsigned nbdraincolumn);
// Accessors
// *********
public : const Transistor::Polarity& getPolarity() const { return _polarity; };
public : unsigned getM() const { return _m; };
public : const double getWidthOfSourceWire() const { return _widthOfSourceWire; };
public : const double getWidthOfDrainWire() const { return _widthOfDrainWire; };
public : MetaTransistor* getTr1() const { return _tr1; };
// Updators
// ********
public : void setMosLength(const double length) { if(_tr1) _tr1->setLe(length); }
public : void setMosWidth(const double width) { if(_tr1) _tr1->setWe(width); }
public : void setWidthOfSourceWire(const double width) { _widthOfSourceWire = width; };
public : void setWidthOfDrainWire(const double width) { _widthOfDrainWire=width; };
public : void setLowPinOrder(const PinName, const PinName) ;
public : void setHighPinOrder(const PinName, const PinName) ;
// Predicats
// *********
public : bool isBsConnected() const { return _isBsConnected; };
public : bool sourceIsFirst() const { return _sourceIsFirst; };
public : bool hasRing() const { return _hasRing; };
# if !defined(__DOXYGEN_PROCESSOR__)
// Others
// ******
public: virtual string _getTypeName() const {return _TName("TrMos"); };
public: virtual string _getString() const;
public: virtual Record* _getRecord() const;
public: vector<PinName>& getLowPinOrder() { return _lowPinOrder; };
public: vector<PinName>& getHighPinOrder() { return _highPinOrder; };
public: map<Net*, Pin*>& getMapNetToPinBoxInLeftSide() { return _mapNetToPinBoxInLeftSide; };
public: map<Net*, Pin*>& getMapNetToPinBoxInRightSide() { return _mapNetToPinBoxInRightSide; };
public : virtual void _Flush();
protected : void _PlaceAndRoute();
#endif
};
}
#endif // TRMOS_H