This commit is contained in:
Christophe Alexandre 2008-04-08 16:30:10 +00:00
parent afda64c645
commit 85840d026e
10 changed files with 81 additions and 92 deletions

View File

@ -97,7 +97,7 @@ void GenV1Trans::Calculate(Transistor* transistor)
long ymax = 0; long ymax = 0;
string mostype; // get Mos Type (N/P). string mostype; // get Mos Type (N/P).
if(transistor->IsNmos()) if(transistor->isNmos())
mostype='N'; mostype='N';
else else
mostype='P'; mostype='P';
@ -277,7 +277,7 @@ void GenV1Trans::Calculate(Transistor* transistor)
// Calculate Rectangle 50 just for PMOS. // Calculate Rectangle 50 just for PMOS.
// ------------------------------------------------------------- // -------------------------------------------------------------
if (transistor->IsPmos()) { // Calculate Rectangle 50 for PMos. if (transistor->isPmos()) { // Calculate Rectangle 50 for PMos.
x50 = x10 - GET_RULE("RE_NWELL_ACTI"); x50 = x10 - GET_RULE("RE_NWELL_ACTI");
y50 = y10 - GET_RULE("RE_NWELL_ACTI"); y50 = y10 - GET_RULE("RE_NWELL_ACTI");
dx50 = dx10 + 2 * GET_RULE("RE_NWELL_ACTI"); dx50 = dx10 + 2 * GET_RULE("RE_NWELL_ACTI");
@ -322,7 +322,7 @@ void GenV1Trans::Generate(Transistor* transistor)
string mostype; // get Mos Type (N/P). string mostype; // get Mos Type (N/P).
if(transistor->IsNmos()) if(transistor->isNmos())
mostype='N'; mostype='N';
else else
mostype='P'; mostype='P';
@ -454,7 +454,7 @@ IF_DEBUG_HUR_ANALOG
END_IF END_IF
Net * anonym = Net::create(transistor, Name("anonym")); Net * anonym = Net::create(transistor, Name("anonym"));
for(size_t i=0; i<sizeof(segsforanonym)/sizeof(string);i++) { for(size_t i=0; i<sizeof(segsforanonym)/sizeof(string);i++) {
if(transistor->IsNmos() && segsforanonym[i]=="50") if(transistor->isNmos() && segsforanonym[i]=="50")
continue; continue;
Contact::create(anonym, GET_LAYER_BYNP("TRANS_",mostype,"_LAYER_"+segsforanonym[i]) Contact::create(anonym, GET_LAYER_BYNP("TRANS_",mostype,"_LAYER_"+segsforanonym[i])

View File

@ -105,33 +105,30 @@ void MetaTransistor::createLayout()
string err_msg = "Can't genrate layout : " + getString(mastercell) + " isn't a Transistor"; string err_msg = "Can't genrate layout : " + getString(mastercell) + " isn't a Transistor";
} }
if(trans->IsInternal()) { if(trans->isInternal()) {
if(!internal_ref) { if(!internal_ref) {
trans->createLayout(); trans->createLayout();
internal_ref = trans; internal_ref = trans;
} else {
trans->duplicateLayout(internal_ref);
} }
else { } else if(trans->isLeft()) {
trans->DuplicateLayout(internal_ref);
}
}
else if(trans->IsLeft()) {
if(!left_ref) { if(!left_ref) {
trans->createLayout(); trans->createLayout();
left_ref=trans; left_ref=trans;
} else {
trans->duplicateLayout(left_ref);
} }
else } else if(trans->isRight()) {
trans->DuplicateLayout(left_ref);
}
else if(trans->IsRight()) {
if(!right_ref) { if(!right_ref) {
trans->createLayout(); trans->createLayout();
right_ref=trans; right_ref=trans;
} else {
trans->duplicateLayout(right_ref);
} }
else } else {
trans->DuplicateLayout(right_ref);
}
else
trans->createLayout(); trans->createLayout();
}
end_for end_for

View File

@ -10,9 +10,6 @@
#include "Cell.h" #include "Cell.h"
#include "AnalogicalCommons.h" #include "AnalogicalCommons.h"
//BEGIN_NAMESPACE_HURRICANE
namespace Hurricane { namespace Hurricane {
class Library; class Library;
@ -105,10 +102,10 @@ class MetaTransistor: public Cell {
// Updators // Updators
// ******** // ********
public : void SetLe (const Micro le) { _le=le; }; public : void setLe (const Micro le) { _le=le; };
public : void SetWe (const Micro we) { _we=we; }; public : void setWe (const Micro we) { _we=we; };
public : void SetType(const char type) { _type=type; }; public : void setType(const char type) { _type=type; };
public : void SetM (const unsigned m) { _m=m; }; public : void setM (const unsigned m) { _m=m; };
//#endif //#endif
@ -126,8 +123,4 @@ class MetaTransistor: public Cell {
} }
//END_NAMESPACE_HURRICANE
#endif // HURRICANE_METATRANSISTOR #endif // HURRICANE_METATRANSISTOR

View File

@ -327,7 +327,7 @@ Transistor::MaskInfo* Transistor::_createMaskInfo(const MaskVersion& version)
} }
void Transistor::SetMaskInfo(MaskInfo* masqueinfo) void Transistor::setMaskInfo(MaskInfo* masqueinfo)
// *************************************************** // ***************************************************
{ {
if(!masqueinfo) if(!masqueinfo)
@ -386,7 +386,7 @@ void Transistor::createLayout()
} }
void Transistor::DuplicateLayout(Transistor* transistor) void Transistor::duplicateLayout(Transistor* transistor)
// ***************************************************** // *****************************************************
{ {
OpenUpdateSession(); OpenUpdateSession();

View File

@ -11,8 +11,6 @@
#include "AnalogicalCommons.h" #include "AnalogicalCommons.h"
//BEGIN_NAMESPACE_HURRICANE
namespace Hurricane { namespace Hurricane {
class Library; class Library;
@ -66,7 +64,7 @@ class Transistor : public Cell {
public : Type& operator=(const Type& type); public : Type& operator=(const Type& type);
public : operator const Code&() const { return _code; }; public : operator const Code&() const { return _code; };
public : void SetCode(const Code& code) { _code = code; }; public : void setCode(const Code& code) { _code = code; };
public : const Code& getCode() const { return _code; }; public : const Code& getCode() const { return _code; };
@ -113,12 +111,12 @@ class Transistor : public Cell {
// Update // Update
// ****** // ******
public : void SetL(const double& l) { _l=l;}; public : void setL(const double& l) { _l=l;};
public : void SetW(const double& w) { _w=w;}; public : void setW(const double& w) { _w=w;};
public : void SetNbDrainColumn(const unsigned& column) { _nbDrainColumn=column; }; public : void setNbDrainColumn(const unsigned& column) { _nbDrainColumn=column; };
public : void SetNbSourceColumn(const unsigned& column) { _nbSourceColumn=column; }; public : void setNbSourceColumn(const unsigned& column) { _nbSourceColumn=column; };
public : void SetType(const Type::Code& code) { _type.SetCode(code); }; public : void setType(const Type::Code& code) { _type.setCode(code); };
public : void SetType(const Type& type) { _type = type; }; public : void setType(const Type& type) { _type = type; };
// Predicats // Predicats
// ********* // *********
@ -221,17 +219,17 @@ class Transistor : public Cell {
// Predicats // Predicats
// ********* // *********
public : bool IsNmos() const { return _type==TRANSN; }; public : bool isNmos() const { return _type==TRANSN; };
public : bool IsPmos() const { return _type==TRANSP; }; public : bool isPmos() const { return _type==TRANSP; };
public : bool IsInternal() const { return getAbutmentType().getCode()==Type::INTERNAL; }; public : bool isInternal() const { return getAbutmentType().getCode()==Type::INTERNAL; };
public : bool IsLeft() const { return getAbutmentType().getCode()==Type::LEFT; }; public : bool isLeft() const { return getAbutmentType().getCode()==Type::LEFT; };
public : bool IsRight() const { return getAbutmentType().getCode()==Type::RIGHT; }; public : bool isRight() const { return getAbutmentType().getCode()==Type::RIGHT; };
public : bool IsSingle() const { return getAbutmentType().getCode()==Type::SINGLE; }; public : bool isSingle() const { return getAbutmentType().getCode()==Type::SINGLE; };
// Updators // Updators
// ******** // ********
public : void SetL(const double& l) { _masqueInfo->SetL(l); }; public : void setL(const double& l) { _masqueInfo->setL(l); };
public : void SetW(const double& w) { _masqueInfo->SetW(w); }; public : void setW(const double& w) { _masqueInfo->setW(w); };
//# endif //# endif
@ -250,9 +248,9 @@ class Transistor : public Cell {
// Operators // Operators
// ********* // *********
public : void SetMaskInfo(MaskInfo*); public : void setMaskInfo(MaskInfo*);
public : void createLayout(); public : void createLayout();
public : void DuplicateLayout(Transistor* transistor) ; public : void duplicateLayout(Transistor* transistor) ;
}; };

View File

@ -57,8 +57,8 @@ class Device : public Cell {
// Operations // Operations
// ********** // **********
// public : virtual void Create(const char, const bool) = 0; // public : virtual void Create(const char, const bool) = 0;
public : virtual void Dses() = 0; public : virtual void dses() = 0;
public : virtual void Shape() = 0; public : virtual void shape() = 0;
// public : virtual void Generate() = 0; // public : virtual void Generate() = 0;

View File

@ -19,7 +19,7 @@
using namespace Hurricane; using namespace Hurricane;
namespace DEVICE{ namespace DEVICE {
// **************************************************************************************************** // ****************************************************************************************************
// TrMos implementation // TrMos implementation
@ -132,7 +132,7 @@ void TrMos::create(const char type, const bool isbsconnected)
} }
void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasring void TrMos::generate(const unsigned m, const bool sourceisfirst, const bool hasring
, const unsigned nbsourcecolumn, const unsigned nbdraincolumn) , const unsigned nbsourcecolumn, const unsigned nbdraincolumn)
// ********************************************************************************* // *********************************************************************************
{ {
@ -190,7 +190,7 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
// Set m of MetaTransistor. // Set m of MetaTransistor.
// The name of motif is nameofDevice_nameofMetaTrans_finger_index // The name of motif is nameofDevice_nameofMetaTrans_finger_index
// **************************************************************** // ****************************************************************
_tr1->SetM(_m); _tr1->setM(_m);
for(unsigned i=0; i<m; i++){ for(unsigned i=0; i<m; i++){
Transistor* finger = Transistor::create(library, Transistor* finger = Transistor::create(library,
@ -228,8 +228,8 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
// Pseudo dimensionnement of metatransistor. // Pseudo dimensionnement of metatransistor.
// In the futur, this will be the work of auto-dimensionnement tool (DSES). // In the futur, this will be the work of auto-dimensionnement tool (DSES).
// ************************************************************************ // ************************************************************************
// _tr1->SetLe(10); // _tr1->setLe(10);
// _tr1->SetWe(11); // _tr1->setWe(11);
/* (3) */ /* (3) */
IF_DEBUG_HUR_ANALOG IF_DEBUG_HUR_ANALOG
@ -243,29 +243,29 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
unsigned count = 0; unsigned count = 0;
Transistor::MaskV1Info * masqueinfo = new Transistor::MaskV1Info(l_finger, w_finger); Transistor::MaskV1Info * masqueinfo = new Transistor::MaskV1Info(l_finger, w_finger);
masqueinfo->SetNbSourceColumn(nbsourcecolumn); masqueinfo->setNbSourceColumn(nbsourcecolumn);
masqueinfo->SetNbDrainColumn(nbdraincolumn); masqueinfo->setNbDrainColumn(nbdraincolumn);
list<Transistor*>::iterator i = _transistorList.begin() list<Transistor*>::iterator i = _transistorList.begin()
, j = _transistorList.end(); , j = _transistorList.end();
if(_m == 1){ if(_m == 1){
masqueinfo->SetType(Transistor::Type::SINGLE); masqueinfo->setType(Transistor::Type::SINGLE);
(*(_transistorList.begin()))->SetMaskInfo(masqueinfo); (*(_transistorList.begin()))->setMaskInfo(masqueinfo);
} }
else if(_m%2==0) { // if m is pair, create two left fingers if is source first. else if(_m%2==0) { // if m is pair, create two left fingers if is source first.
// and create two right fingers if is drain first. // and create two right fingers if is drain first.
while(i!=j) { while(i!=j) {
if(++count>2) if(++count>2)
masqueinfo->SetType(Transistor::Type::INTERNAL); masqueinfo->setType(Transistor::Type::INTERNAL);
else { else {
if ( _sourceIsFirst ) if ( _sourceIsFirst )
masqueinfo->SetType(Transistor::Type::LEFT); masqueinfo->setType(Transistor::Type::LEFT);
else else
masqueinfo->SetType(Transistor::Type::RIGHT); masqueinfo->setType(Transistor::Type::RIGHT);
} }
(*i)->SetMaskInfo(masqueinfo); (*i)->setMaskInfo(masqueinfo);
i++; i++;
} }
} }
@ -273,13 +273,13 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
while(i!=j){ while(i!=j){
++ count ; ++ count ;
if (count == 1) if (count == 1)
masqueinfo-> SetType(Transistor::Type::LEFT); masqueinfo-> setType(Transistor::Type::LEFT);
else if (count == 2) else if (count == 2)
masqueinfo-> SetType(Transistor::Type::RIGHT); masqueinfo-> setType(Transistor::Type::RIGHT);
else else
masqueinfo-> SetType(Transistor::Type::INTERNAL); masqueinfo-> setType(Transistor::Type::INTERNAL);
(*i)->SetMaskInfo(masqueinfo); (*i)->setMaskInfo(masqueinfo);
i++; i++;
} }
} }
@ -330,7 +330,7 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
cout << " Place And Route " <<endl; cout << " Place And Route " <<endl;
for_each_instance(instance, getInstances()) for_each_instance(instance, getInstances())
//instance->SetTransformation(instance->getTransformation()); //instance->setTransformation(instance->getTransformation());
instance->unmaterialize(); instance->unmaterialize();
instance->materialize(); instance->materialize();
@ -360,7 +360,7 @@ END_IF
} }
void TrMos::SetLowPinOrder(const PinName pin1, const PinName pin2) void TrMos::setLowPinOrder(const PinName pin1, const PinName pin2)
// *************************************************************** // ***************************************************************
{ {
_lowPinOrder[0]=pin1; _lowPinOrder[0]=pin1;
@ -378,7 +378,7 @@ void TrMos::SetLowPinOrder(const PinName pin1, const PinName pin2)
} }
void TrMos::SetHighPinOrder(const PinName pin1, const PinName pin2) void TrMos::setHighPinOrder(const PinName pin1, const PinName pin2)
// ***************************************************************** // *****************************************************************
{ {
_highPinOrder[0]=pin1; _highPinOrder[0]=pin1;

View File

@ -95,13 +95,13 @@ class TrMos : public Device {
// Operations // Operations
// ********** // **********
public : virtual void Dses() { /* to do */}; public : virtual void dses() { /* to do */};
public : virtual void Shape() { /* to do */}; public : virtual void shape() { /* to do */};
#endif #endif
public : void create(const char type, const bool isbsconnected); public : void create(const char type, const bool isbsconnected);
public : void Generate(const unsigned m, const bool sourceisfirst, const bool hasring, public : void generate(const unsigned m, const bool sourceisfirst, const bool hasring,
const unsigned nbsourcecolumn, const unsigned nbdraincolumn); const unsigned nbsourcecolumn, const unsigned nbdraincolumn);
// Accessors // Accessors
@ -115,18 +115,18 @@ class TrMos : public Device {
// Updators // Updators
// ******** // ********
public : void SetMosLength(const double length) { if(_tr1) _tr1->SetLe(length); } public : void setMosLength(const double length) { if(_tr1) _tr1->setLe(length); }
public : void SetMosWidth(const double width) { if(_tr1) _tr1->SetWe(width); } public : void setMosWidth(const double width) { if(_tr1) _tr1->setWe(width); }
public : void SetWidthOfSourceWire(const double width) { _widthOfSourceWire = width; }; public : void setWidthOfSourceWire(const double width) { _widthOfSourceWire = width; };
public : void SetWidthOfDrainWire(const double width) { _widthOfDrainWire=width; }; public : void setWidthOfDrainWire(const double width) { _widthOfDrainWire=width; };
public : void SetLowPinOrder(const PinName, const PinName) ; public : void setLowPinOrder(const PinName, const PinName) ;
public : void SetHighPinOrder(const PinName, const PinName) ; public : void setHighPinOrder(const PinName, const PinName) ;
// Predicats // Predicats
// ********* // *********
public : bool IsBsConnected() const { return _isBsConnected; }; public : bool isBsConnected() const { return _isBsConnected; };
public : bool SourceIsFirst() const { return _sourceIsFirst; }; public : bool sourceIsFirst() const { return _sourceIsFirst; };
public : bool HasRing() const { return _hasRing; }; public : bool hasRing() const { return _hasRing; };
# if !defined(__DOXYGEN_PROCESSOR__) # if !defined(__DOXYGEN_PROCESSOR__)

View File

@ -115,19 +115,19 @@ void TrMos::_PlaceAndRoute()
Transistor * trans = dynamic_cast<Transistor*>(instance->getMasterCell()); Transistor * trans = dynamic_cast<Transistor*>(instance->getMasterCell());
if ( _sourceIsFirst ) { if ( _sourceIsFirst ) {
if(trans->IsLeft() && !leftins) if(trans->isLeft() && !leftins)
leftins = instance; leftins = instance;
else if ( trans->IsLeft() && leftins) else if ( trans->isLeft() && leftins)
rightins = instance; rightins = instance;
else if ( trans->IsRight()) else if ( trans->isRight())
rightins = instance; rightins = instance;
} }
else { else {
if(trans->IsRight() && !leftins) if(trans->isRight() && !leftins)
leftins = instance; leftins = instance;
else if (trans->IsRight() && leftins ) else if (trans->isRight() && leftins )
rightins = instance; rightins = instance;
else if (trans->IsLeft()) else if (trans->isLeft())
rightins = instance; rightins = instance;
} }
end_for end_for
@ -172,7 +172,7 @@ void TrMos::_PlaceAndRoute()
// ********************** // **********************
Transistor * trans = dynamic_cast<Transistor*>(rightins->getMasterCell()); Transistor * trans = dynamic_cast<Transistor*>(rightins->getMasterCell());
if( trans->IsRight()) if( trans->isRight())
_PlaceRight( rightins, Transformation::Orientation::ID); _PlaceRight( rightins, Transformation::Orientation::ID);
else else
_PlaceRight( rightins, Transformation::Orientation::MX); _PlaceRight( rightins, Transformation::Orientation::MX);

View File

@ -1,6 +1,7 @@
#include <iostream> #include <iostream>
#include "DataBase.h" #include "DataBase.h"
#include "Technology.h"
#include "Library.h" #include "Library.h"
#include "Warning.h" #include "Warning.h"
using namespace Hurricane; using namespace Hurricane;
@ -12,7 +13,7 @@ int main() {
try { try {
cout << "simple analogic test" << endl; cout << "simple analogic test" << endl;
DataBase* db = DataBase::create(); DataBase* db = DataBase::create();
//Technology* technology = Technology::create(db); Technology* technology = Technology::create(db, Name("MyTechnology"));
Library* rootLibrary = Library::create(db, Name("RootLibrary")); Library* rootLibrary = Library::create(db, Name("RootLibrary"));
Library* workLibrary = Library::create(rootLibrary, Name("WorkLibrary")); Library* workLibrary = Library::create(rootLibrary, Name("WorkLibrary"));
TrMos* trmos = TrMos::create(workLibrary, Name("MosTr")); TrMos* trmos = TrMos::create(workLibrary, Name("MosTr"));