some heavy cleaning

This commit is contained in:
Christophe Alexandre 2008-04-08 19:32:53 +00:00
parent 85840d026e
commit e5892a9fb9
12 changed files with 172 additions and 166 deletions

View File

@ -13,12 +13,6 @@
// Macros Declaration.
// *********************************************************************
#define TRANSN 'N'
#define TRANSP 'P'
#define MAXNBCONTACT 8
#define IF_DEBUG_HUR_ANALOG \
if(getenv("DEBUG_HUR_ANALOG")) {

View File

@ -188,28 +188,18 @@ class GenTrans {
class GenV1Trans : public GenTrans {
// *********************************
public:
typedef GenTrans Inherit;
// Types
// *****
public : typedef GenTrans Inherit;
const Transistor::MaskV1Info* _masqueV1Info;
static const int maxNbContacts = 8;
// Attributs
// *********
public : const Transistor::MaskV1Info* _masqueV1Info;
GenV1Trans(Transistor::MaskV1Info*);
// Constructors
// ************
public : GenV1Trans(Transistor::MaskV1Info*);
virtual ~GenV1Trans() {};
// Destructors
// ************
public : virtual ~GenV1Trans() {};
// Operators
// *********
public : virtual void Calculate(Transistor*) ;
public : virtual void Generate(Transistor*) ;
virtual void Calculate(Transistor*) ;
virtual void Generate(Transistor*) ;
};

View File

@ -4,16 +4,16 @@
// Date : 04/04/2007
// ****************************************************************************************************
#include "Collection.h"
#include "RdsUnit.h"
#include "GenTrans.h"
#include "DtrAccess.h"
#include "Technology.h"
#include "UpdateSession.h"
#include "DataBase.h"
#include "RdsUnit.h"
#include "DtrAccess.h"
#include "AnalogicalCommons.h"
#include "GenTrans.h"
namespace Hurricane {
@ -55,8 +55,8 @@ void GenV1Trans::Calculate(Transistor* transistor)
+ " of this transistor is invalid."
);
if(_masqueV1Info->getNbSourceColumn() < 1 || _masqueV1Info->getNbSourceColumn() > MAXNBCONTACT ||
_masqueV1Info->getNbDrainColumn() < 1 || _masqueV1Info->getNbDrainColumn() > MAXNBCONTACT )
if(_masqueV1Info->getNbSourceColumn() < 1 || _masqueV1Info->getNbSourceColumn() > GenV1Trans::maxNbContacts ||
_masqueV1Info->getNbDrainColumn() < 1 || _masqueV1Info->getNbDrainColumn() > GenV1Trans::maxNbContacts )
throw Error("Can't launch function GenV1Trans::Calculate for " + getString(transistor)
+ " the nbsourcecolumn " + getString(_masqueV1Info->getNbSourceColumn())

View File

@ -4,14 +4,13 @@
// Date : 21/12/2006
// ****************************************************************************************************
#include "MetaTransistor.h"
#include "Transistor.h"
#include "Instances.h"
#include "UpdateSession.h"
#include "Vertical.h"
using namespace Hurricane;
namespace Hurricane {
#include "Transistor.h"
#include "MetaTransistor.h"
namespace Chamsin {
// ****************************************************************************************************
// MetaTransistor implementation

View File

@ -8,15 +8,11 @@
#define HURRICANE_METATRANSISTOR
#include "Cell.h"
using namespace Hurricane;
#include "AnalogicalCommons.h"
namespace Hurricane {
class Library;
class Name;
class Symbol;
class Record;
class MetaTransistor: public Cell {
// ********************************

View File

@ -10,8 +10,6 @@
#include "Collection.h"
BEGIN_NAMESPACE_HURRICANE
class MetaTransistor;
@ -53,7 +51,5 @@ typedef GenericFilter<MetaTransistor*> MetaTransistorFilter;
END_NAMESPACE_HURRICANE
#endif // HURRICANE_METATRANSISTORS

View File

@ -4,16 +4,53 @@
// Date : 21/12/2006
// ****************************************************************************************************
#include "AnalogicalCommons.h"
#include "Transistor.h"
#include "GenTrans.h"
#include "Vertical.h"
#include "Horizontal.h"
#include "UpdateSession.h"
using namespace Hurricane;
#include "AnalogicalCommons.h"
#include "GenTrans.h"
#include "Transistor.h"
namespace Chamsin {
// ****************************************************************************************************
// Transistor::Polarity implementation
// ****************************************************************************************************
Transistor::Polarity::Polarity(const Code& code) :_code(code)
{}
Transistor::Polarity::Polarity(const Polarity& type) :_code(type._code)
{}
Transistor::Polarity& Transistor::Polarity::operator=(const Polarity& type) {
_code = type._code;
return *this;
}
string Transistor::Polarity::_getString() const {
switch(_code) {
case N : return "N";
case P : return "P";
}
return "ABNORMAL";
}
Record* Transistor::Polarity::_getRecord() const
// *****************************************
{
Record* record = new Record(getString(this));
record->Add(getSlot("Code", _code));
return record;
}
namespace Hurricane {
// ****************************************************************************************************
// Transistor::MaskVersion implementation
@ -39,13 +76,6 @@ Transistor::MaskVersion& Transistor::MaskVersion::operator=(const MaskVersion& v
}
bool Transistor::MaskVersion::operator==(const MaskVersion& version) const
// ***************************************************************************
{
return _code==version._code;
}
string Transistor::MaskVersion::_getString() const
// *************************************************
{
@ -228,20 +258,16 @@ Record* Transistor::MaskV1Info::_getRecord() const
// Transistor implementation
// ****************************************************************************************************
Transistor::Transistor(Library* library, const Name& name, char type)
// *******************************************************************
: Inherit(library, name),
_type(type),
Transistor::Transistor(Library* library, const Name& name, const Polarity& polarity) :
Inherit(library, name),
_polarity(polarity),
_masqueInfo(NULL),
_genTrans(NULL)
{
}
{}
Transistor* Transistor::create(Library* library, const Name& name, char type)
// **************************************************************************
{
Transistor* transistor = new Transistor(library, name, type);
Transistor* Transistor::create(Library* library, const Name& name, const Polarity& polarity) {
Transistor* transistor = new Transistor(library, name, polarity);
transistor->_postCreate();
@ -250,9 +276,7 @@ Transistor* Transistor::create(Library* library, const Name& name, char type)
void Transistor::_preDestroy()
// ******************************
{
void Transistor::_preDestroy() {
// Delete aggregated objets.
// *************************
if(_masqueInfo)
@ -281,19 +305,15 @@ void Transistor::_postCreate()
}
string Transistor::_getString() const
// ***********************************
{
string Transistor::_getString() const {
string s = Inherit::_getString();
s.insert(s.length()-1, " " + getString(_type));
s.insert(s.length()-1, " " + getString(_polarity));
s.insert(s.length()-1, " " + getAbutmentType()._getString());
return s;
}
Record* Transistor::_getRecord() const
// ************************************
{
Record* Transistor::_getRecord() const {
Record* record = Inherit::_getRecord();
return record;
}
@ -440,15 +460,3 @@ void Transistor::duplicateLayout(Transistor* transistor)
}
}
// ****************************************************************************************************
// Generic functions
// ****************************************************************************************************
string getString(const Hurricane::Transistor::MaskInfo& masqueinfo)
// **********************************************************
{
return masqueinfo._getString();
}

View File

@ -8,19 +8,17 @@
#define HURRICANE_TRANSISTOR
#include "Cell.h"
#include "AnalogicalCommons.h"
using namespace Hurricane;
#include "Transistors.h"
namespace Hurricane {
class Library;
class Name;
class Symbol;
class Record;
class GenTrans;
class Transistor : public Cell {
// ********************************
//# if !defined(__DOXYGEN_PROCESSOR__)
@ -29,9 +27,26 @@ class Transistor : public Cell {
public: typedef Cell Inherit;
public: class Polarity {
public: enum Code {N=0, P=1};
private: Code _code;
public : Polarity(const Code& code=N);
public : Polarity(const Polarity&);
public : Polarity& operator=(const Polarity&);
public : operator const Code& () const { return _code; };
public : const Code& getCode() const { return _code; };
public : string _getTypeName() const { return _TName("Transistor::Polarity"); };
public : string _getString() const;
public : Record* _getRecord() const;
};
public : class MaskVersion {
// ******************
public : enum Code { VERSION1=0 };
private: Code _code;
@ -40,8 +55,6 @@ class Transistor : public Cell {
public : MaskVersion(const MaskVersion&);
public : MaskVersion& operator=(const MaskVersion&);
public : bool operator==(const MaskVersion&) const;
public : operator const Code& () const { return _code; };
public : const Code& getCode() const { return _code; };
@ -173,7 +186,7 @@ class Transistor : public Cell {
// Attributes
// *******************
private : char _type;
private : Polarity _polarity;
private : MaskInfo* _masqueInfo;
private : GenTrans * _genTrans;
//public : RealInfo * _realInfo;
@ -185,10 +198,10 @@ class Transistor : public Cell {
// Constructors
// ************
# if !defined(__DOXYGEN_PROCESSOR__)
protected : Transistor(Library* library, const Name& name, char type);
protected : Transistor(Library* library, const Name& name, const Polarity& polarity);
# endif
public : static Transistor* create(Library* library, const Name& name, char type);
public : static Transistor* create(Library* library, const Name& name, const Polarity& polarity);
# if !defined(__DOXYGEN_PROCESSOR__)
protected : virtual void _postCreate();
@ -202,11 +215,11 @@ class Transistor : public Cell {
// Accessors
// *********
public : char getType() const { return _type; };
public : const Polarity& getPolarity() const { return _polarity; };
public : MaskVersion getMaskVersion() const { return _getMaskInfoVersion(_masqueInfo); };
public : const MaskInfo* getMaskInfo() const { return _masqueInfo; };
public : const double& getL() const { return _masqueInfo->getL(); };
public : const double& getW() const { return _masqueInfo->getW(); };
public : const double getL() const { return _masqueInfo->getL(); };
public : const double getW() const { return _masqueInfo->getW(); };
public : const unsigned& getNbDrainColumn() const { return _masqueInfo->getNbDrainColumn(); };
public : const unsigned& getNbSourceColumn() const { return _masqueInfo->getNbSourceColumn(); };
public : const char* getDrainName() const { return "DRAIN"; };
@ -219,8 +232,8 @@ class Transistor : public Cell {
// Predicats
// *********
public : bool isNmos() const { return _type==TRANSN; };
public : bool isPmos() const { return _type==TRANSP; };
public : bool isNmos() const { return _polarity==Polarity::N; };
public : bool isPmos() const { return _polarity==Polarity::P; };
public : bool isInternal() const { return getAbutmentType().getCode()==Type::INTERNAL; };
public : bool isLeft() const { return getAbutmentType().getCode()==Type::LEFT; };
public : bool isRight() const { return getAbutmentType().getCode()==Type::RIGHT; };
@ -254,9 +267,40 @@ class Transistor : public Cell {
};
#if !defined(__DOXYGEN_PROCESSOR__)
// -------------------------------------------------------------------
// Class : "Proxy...<const Transistor::Polarity::Code*>".
template<>
inline string ProxyTypeName<Transistor::Polarity::Code>
( const Transistor::Polarity::Code* object )
{ return "<PointerSlotAdapter<Transistor::Polarity::Code>>"; }
template<>
inline string ProxyString <Transistor::Polarity::Code>
( const Transistor::Polarity::Code* object )
{
switch ( *object ) {
case Transistor::Polarity::N: return "N";
case Transistor::Polarity::P: return "P";
}
return "ABNORMAL";
}
template<>
inline Record* ProxyRecord <Transistor::Polarity::Code>
( const Transistor::Polarity::Code* object )
{
Record* record = new Record(getString(object));
record->Add(getSlot("Code", (unsigned int*)object));
return record;
}
// -------------------------------------------------------------------
// Class : "Proxy...<const Transistor::MaskVersion::Code*>".
@ -329,4 +373,6 @@ template<>
string getString(const Hurricane::Transistor::MaskInfo&);
#endif // HURRICANE_TRANSISTOR

View File

@ -12,7 +12,6 @@
namespace Hurricane {
class Transistor;

View File

@ -5,7 +5,6 @@
// ****************************************************************************************************
#include "TrMos.h"
#include "Instance.h"
#include "MetaTransistor.h"
@ -16,6 +15,8 @@
#include "UpdateSession.h"
#include "DtrAccess.h"
#include "TrMos.h"
using namespace Hurricane;
@ -27,7 +28,7 @@ namespace DEVICE {
TrMos::TrMos(Library* library, const Name& name):
Inherit(library, name),
_type('N'),
_polarity(Transistor::Polarity::N),
_isBsConnected(false),
_m(1),
_sourceIsFirst(true),
@ -75,19 +76,14 @@ Transistors TrMos::getTransistors() const {
}
void TrMos::create(const char type, const bool isbsconnected)
// **********************************************************
void TrMos::create(const Transistor::Polarity& polarity, const bool isbsconnected)
{
if( _tr1 ) {
throw Error("Can't Create Logical View of TrMos " + getString(getName()) +
" : " + "it has already been created");
}
if( (type!=TRANSN) && (type!=TRANSP)) {
throw Error("Can't Create TrMos " + getString(getName()) + " : type " + getString(type) + " is invalid");
}
_type = type;
_polarity = polarity;
_isBsConnected = isbsconnected;
// MetaTransistor is in the same library than Trmos
@ -114,7 +110,7 @@ void TrMos::create(const char type, const bool isbsconnected)
// The name of MetaTransistor is nameoftrmos_tr1
// ****************************************************
_tr1 = MetaTransistor::create(library, Name( getString(getName())+"_Mos1" ), _type);
_tr1 = MetaTransistor::create(library, Name( getString(getName())+"_Mos1" ), _polarity);
Instance * instance = Instance::create(this,
Name("Ins_" + getString(_tr1->getName())),
_tr1);
@ -195,7 +191,7 @@ void TrMos::generate(const unsigned m, const bool sourceisfirst, const bool hasr
for(unsigned i=0; i<m; i++){
Transistor* finger = Transistor::create(library,
getString(_tr1->getName()) + "_Finger_" + getString(i),
_type);
_polarity);
_transistorList.push_back(finger);
Instance::create(_tr1, Name("Ins_" + getString(finger->getName())), finger);

View File

@ -7,34 +7,16 @@
#ifndef DEVICE_TRMOS
#define DEVICE_TRMOS
#include "Net.h"
using namespace Hurricane;
#include "Device.h"
#include "Transistors.h"
#include "Transistor.h"
#include "MetaTransistor.h"
namespace Hurricane {
class Library;
class Name;
class Record;
class Transistor;
class Net;
class Pin;
}
namespace DEVICE {
using Hurricane::Library;
using Hurricane::Name;
using Hurricane::Record;
using Hurricane::MetaTransistor;
using Hurricane::Transistor;
using Hurricane::Transistors;
using Hurricane::Net;
using Hurricane::Pin;
class TrMos : public Device {
// **************************
@ -51,7 +33,7 @@ class TrMos : public Device {
// Structural parameter.
// ********************
private : char _type;
private : Transistor::Polarity _polarity;
private : bool _isBsConnected;
private : unsigned _m;
@ -100,13 +82,13 @@ class TrMos : public Device {
#endif
public : void create(const char type, const bool isbsconnected);
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 : char getType() const { return _type; };
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; };

View File

@ -44,11 +44,11 @@ void TrMos::_PlaceAndRoute()
// **************************************************************
DtrAccess * dtraccess = DtrAccess::getDtrAccess();
char type;
if(_type == 'P') type = 'N';
else type = 'P';
Transistor::Polarity polarity;
if(_polarity == Transistor::Polarity::P) polarity = Transistor::Polarity::N;
else polarity = Transistor::Polarity::P;
long minImpWidth = dtraccess->getSingleRdsRuleByLabel("RW_", getString(type), "IMP");
long minImpWidth = dtraccess->getSingleRdsRuleByLabel("RW_", getString(polarity), "IMP");
long minContWidth = dtraccess->getSingleRdsRuleByLabel(string("RW_CONT"));
long minAlu1Width = dtraccess->getSingleRdsRuleByLabel(string("RW_ALU1"));
long minVia1Width = dtraccess->getSingleRdsRuleByLabel(string("RW_VIA1"));
@ -57,7 +57,7 @@ void TrMos::_PlaceAndRoute()
long rdActive = dtraccess->getSingleRdsRuleByLabel(string("RD_ACTI"));
long rdAlu2 = dtraccess->getSingleRdsRuleByLabel(string("RD_ALU1"));
long reImpActi = dtraccess->getSingleRdsRuleByLabel("RE_", getString(type), "IMP_CONT");
long reImpActi = dtraccess->getSingleRdsRuleByLabel("RE_", getString(polarity), "IMP_CONT");
long reActiContact = dtraccess->getSingleRdsRuleByLabel("RE_ACTI_CONT");
long reAlu1Contact = dtraccess->getSingleRdsRuleByLabel("RE_ALU1_CONT");
long reAlu1Via1 = dtraccess->getSingleRdsRuleByLabel("RE_ALU1_VIA1");
@ -235,7 +235,7 @@ void TrMos::_PlaceAndRoute()
Layer * layerImp = NULL;
if(_type == 'P')
if(_polarity == Transistor::Polarity::P)
layerImp = db->getTechnology()->getLayer(Name("NIMP"));
else
layerImp = db->getTechnology()->getLayer(Name("PIMP"));
@ -670,7 +670,7 @@ void TrMos::_PlaceAndRoute()
// Create Caission NWELL if this is a PMOS.
// ****************************************
if(_type == 'P') {
if(_polarity == Transistor::Polarity::P) {
Net * netCaisson = Net::create(this, Name("CAISSON"));
Contact::create(netCaisson, layerNwell
, getAbutmentBox().getXCenter()