towards a first functionnal run

This commit is contained in:
The Coriolis Project 2008-03-10 18:07:35 +00:00
parent be5efacffd
commit 751425c2d1
12 changed files with 107 additions and 117 deletions

View File

@ -6,7 +6,8 @@ SET(CMAKE_MODULE_PATH "$ENV{HURRICANE_TOP}/share/cmake_modules/")
FIND_PACKAGE(BISON REQUIRED) FIND_PACKAGE(BISON REQUIRED)
FIND_PACKAGE(FLEX REQUIRED) FIND_PACKAGE(FLEX REQUIRED)
find_package(HURRICANE REQUIRED) FIND_PACKAGE(HURRICANE REQUIRED)
FIND_PACKAGE(CORIOLIS REQUIRED)
#FIND_PACKAGE(Doxygen) #FIND_PACKAGE(Doxygen)
ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(src)

View File

@ -147,16 +147,14 @@ static char* GetPattern(const string& str, const char* pattern)
*/ */
static void CalculateRdsUnit() static void CalculateRdsUnit() {
// ***************************
{
using Hurricane::Error; using Hurricane::Error;
const char * rdsfilename = getenv("RDS_TECHNO_NAME"); const char * rdsfilename = getenv("RDS_TECHNO_NAME");
FILE * rdstechnofile; FILE * rdstechnofile;
if(!rdsfilename) { if(!rdsfilename) {
throw Error("Can't not find macro RDS_TECHNO_FILE"); throw Error("Cannot find macro RDS_TECHNO_NAME");
} }
if( !(rdstechnofile = fopen(rdsfilename, "r")) ) { if( !(rdstechnofile = fopen(rdsfilename, "r")) ) {

View File

@ -4,3 +4,5 @@ ${CHAMSIN_SOURCE_DIR}/src/analogic)
ADD_LIBRARY(device SHARED Device.cpp TrMos.cpp TrMos_PlaceRoute.cpp) ADD_LIBRARY(device SHARED Device.cpp TrMos.cpp TrMos_PlaceRoute.cpp)
TARGET_LINK_LIBRARIES(device analogic dtr hurricane) TARGET_LINK_LIBRARIES(device analogic dtr hurricane)
INSTALL(TARGETS device DESTINATION /lib)

View File

@ -75,9 +75,7 @@ void Device::_PreDelete()
} }
void Device::_PostCreate() void Device::_PostCreate() {
// *******************************
{
Inherit::_PostCreate(); Inherit::_PostCreate();
//CDataBase* database = GetCDataBase(); //CDataBase* database = GetCDataBase();
@ -91,7 +89,6 @@ void Device::_PostCreate()
// Create GenericDtrAccess and DtrAccess // Create GenericDtrAccess and DtrAccess
// ************************************* // *************************************
GenericDtrAccess::Instance(DtrAccess::Instance()); GenericDtrAccess::Instance(DtrAccess::Instance());
} }

View File

@ -21,7 +21,6 @@ namespace Hurricane {
class Record; class Record;
class Point; class Point;
class Transformation; class Transformation;
// class Transformation::Orientation;
class Instance; class Instance;
} }
@ -34,11 +33,9 @@ using Hurricane::Name;
using Hurricane::Record; using Hurricane::Record;
using Hurricane::Point; using Hurricane::Point;
using Hurricane::Transformation; using Hurricane::Transformation;
//using Hurricane::Transformation::Orientation;
using Hurricane::Instance; using Hurricane::Instance;
class Device : public Cell { class Device : public Cell {
// *************************
# if !defined(__DOXYGEN_PROCESSOR__) # if !defined(__DOXYGEN_PROCESSOR__)
// Types // Types
@ -46,7 +43,7 @@ class Device : public Cell {
public : typedef Cell Inherit; public : typedef Cell Inherit;
// Attributes // Attributes
// ******************* // **********
// Constructors // Constructors

View File

@ -25,27 +25,23 @@ namespace DEVICE{
// TrMos implementation // TrMos implementation
// **************************************************************************************************** // ****************************************************************************************************
TrMos::TrMos(Library* library, const Name& name) TrMos::TrMos(Library* library, const Name& name):
// ************************************************************************** Inherit(library, name),
: Inherit(library, name), _type('N'),
_type('N'), _isBsConnected(false),
_isBsConnected(false), _m(1),
_m(1), _sourceIsFirst(true),
_sourceIsFirst(true), _hasDummy(false),
_hasDummy(false), _hasRing(true),
_hasRing(true), _tr1(NULL),
_tr1(NULL), _capaRouting(0)
_capaRouting(0) {}
{
}
TrMos* TrMos::Create(Library* library, const Name & name) TrMos* TrMos::Create(Library* library, const Name & name) {
// ************************************************************************** TrMos* trmos= new TrMos(library, name);
{ trmos->_PostCreate();
TrMos* trmos= new TrMos(library, name); return trmos;
trmos->_PostCreate();
return trmos;
} }
@ -67,9 +63,7 @@ void TrMos::_PreDelete()
} }
void TrMos::_PostCreate() void TrMos::_PostCreate() {
// *******************************
{
Inherit::_PostCreate(); Inherit::_PostCreate();
// do something. // do something.
@ -95,9 +89,7 @@ void TrMos::_PostCreate()
} }
Transistors TrMos::GetTransistors() const Transistors TrMos::GetTransistors() const {
// **************************************
{
return GetCollection(_transistorList); return GetCollection(_transistorList);
} }
@ -106,8 +98,8 @@ void TrMos::Create(const char type, const bool isbsconnected)
// ********************************************************** // **********************************************************
{ {
if( _tr1 ) { if( _tr1 ) {
throw Error("Can't Create Logical View of TrMos " + GetString(GetName()) + " : " throw Error("Can't Create Logical View of TrMos " + GetString(GetName()) +
+ "it has already been created"); " : " + "it has already been created");
} }
if( (type!=TRANSN) && (type!=TRANSP)) { if( (type!=TRANSN) && (type!=TRANSP)) {
@ -142,10 +134,9 @@ void TrMos::Create(const char type, const bool isbsconnected)
// **************************************************** // ****************************************************
_tr1 = MetaTransistor::Create(library, Name( GetString(GetName())+"_Mos1" ), _type); _tr1 = MetaTransistor::Create(library, Name( GetString(GetName())+"_Mos1" ), _type);
Instance * instance = Instance::Create(this Instance * instance = Instance::Create(this,
, Name("Ins_" + GetString(_tr1->GetName())) Name("Ins_" + GetString(_tr1->GetName())),
, _tr1 _tr1);
);
instance->GetPlug(_tr1->GetNet(Name("DRAIN")))->SetNet(drain); instance->GetPlug(_tr1->GetNet(Name("DRAIN")))->SetNet(drain);
instance->GetPlug(_tr1->GetNet(Name("SOURCE")))->SetNet(source); instance->GetPlug(_tr1->GetNet(Name("SOURCE")))->SetNet(source);
@ -165,8 +156,8 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
// ********************************************************************************* // *********************************************************************************
{ {
if( !_tr1 ) { if( !_tr1 ) {
throw Error("Can't Create Physical View for " + GetString(this) throw Error("Can't Create Physical View for " + GetString(this) +
+ " : " + "Logical view has't been created yet."); " : " + "Logical view has't been created yet.");
} }
// if( !(_transistorList.empty()) ) { // if( !(_transistorList.empty()) ) {
@ -177,16 +168,16 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
// Check out param of realization. // Check out param of realization.
// ******************************* // *******************************
if( m <= 0 ) if( m <= 0 )
throw Error("Can't generate for " + GetString(this) + " : m " + GetString(m) throw Error("Can't generate for " + GetString(this) + " : m "
+ " is invalid."); + GetString(m) + " is invalid.");
if(nbsourcecolumn<1) if(nbsourcecolumn<1)
throw Error("Can't generate for " + GetString(this) + " : nbsourcecolumn " throw Error("Can't generate for " + GetString(this)
+ GetString(nbsourcecolumn) + " is invalid."); + " : nbsourcecolumn " + GetString(nbsourcecolumn) + " is invalid.");
if(nbdraincolumn<1) if(nbdraincolumn<1)
throw Error("Can't generate for" + GetString(this) + " : nbdraincolumn " throw Error("Can't generate for" + GetString(this) + " : nbdraincolumn "
+ GetString(nbdraincolumn) + " is invalid."); + GetString(nbdraincolumn) + " is invalid.");
if(!(_transistorList.empty())) { if(!(_transistorList.empty())) {
@ -201,10 +192,9 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
// ***************************************** // *****************************************
Library * library = GetLibrary(); Library * library = GetLibrary();
cout << ts << "################################################################" <<endl cout << ts << "################################################################" << endl <<
<< ts << "#### BEGIN AUTOGENERATON FOR " + _GetTypeName() + " " + GetString(GetName()) + " #####" <<endl ts << "#### BEGIN AUTOGENERATON FOR " + _GetTypeName() + " " + GetString(GetName()) + " #####" << endl <<
<< ts << "################################################################" <<endl ts << "################################################################" << endl << endl;
<< endl;
// OpenUpdateSession(); // OpenUpdateSession();
@ -222,10 +212,9 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
_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,
, GetString(_tr1->GetName()) + "_Finger_" + GetString(i) GetString(_tr1->GetName()) + "_Finger_" + GetString(i),
, _type _type);
);
_transistorList.push_back(finger); _transistorList.push_back(finger);
Instance::Create(_tr1, Name("Ins_" + GetString(finger->GetName())), finger); Instance::Create(_tr1, Name("Ins_" + GetString(finger->GetName())), finger);
@ -235,8 +224,7 @@ void TrMos::Generate(const unsigned m, const bool sourceisfirst, const bool hasr
cout << "*** Stage 1 : CreateLayout of " + GetString(this) + " finish ***" <<endl; cout << "*** Stage 1 : CreateLayout of " + GetString(this) + " finish ***" <<endl;
cout << ts << GetString(_tr1) + " 's M is " + GetString(_tr1->GetM()) + ".\n" cout << ts << GetString(_tr1) + " 's M is " + GetString(_tr1->GetM()) + ".\n"
<< ts << GetString(_m) + " Transistors are created.\n" << ts << GetString(_m) + " Transistors are created.\n" <<endl;
<<endl;
END_IF END_IF

View File

@ -32,3 +32,5 @@ ADD_LIBRARY(dtr SHARED
${DST_SRCS} ${DST_SRCS}
DtrAccess.cpp DtrAccess.cpp
GenericDtrAccess.cpp) GenericDtrAccess.cpp)
INSTALL(TARGETS dtr DESTINATION /lib)

View File

@ -34,9 +34,7 @@ DtrAccess::DtrAccess()
} }
DtrAccess * DtrAccess::Create() DtrAccess * DtrAccess::Create() {
// *****************************
{
DtrAccess * dtraccess = new DtrAccess(); DtrAccess * dtraccess = new DtrAccess();
dtraccess->_PostCreate(); dtraccess->_PostCreate();
@ -45,43 +43,43 @@ DtrAccess * DtrAccess::Create()
} }
void DtrAccess::_PostCreate() void DtrAccess::_PostCreate() {
// ************************** const char* dtrFileName = getenv("DTR_FILE");
{ if(!dtrFileName) {
const char * dtrfilename = getenv("DTR_FILE");
if(!dtrfilename) {
throw Error("Can't not get Macro DTR_FILE."); throw Error("Can't not get Macro DTR_FILE.");
} }
// Use API of DtrParser for get technology informations // Use API of DtrParser for get technology informations
// **************************************************** // ****************************************************
ParseDtr(dtrfilename, this); ParseDtr(dtrFileName, this);
// Traduit Micro to RdsUnit // Traduit Micro to RdsUnit
// ************************ // ************************
map<string, list<double> >::iterator it_rulemap = _label2ruleMap.begin(), for (Label2RuleMap::iterator lrmit = _label2ruleMap.begin();
it_end_rulemap = _label2ruleMap.end(); lrmit != _label2ruleMap.end();
++lrmit) {
while(it_rulemap!=it_end_rulemap) { for (list<double>::iterator ldit = lrmit->second.begin();
ldit != lrmit->second.end();
list<double>::iterator m = ((*it_rulemap).second).begin() ++ldit) {
, n = ((*it_rulemap).second).end(); _label2RdsRuleMap[lrmit->first].push_back(ConvertRealToRdsUnit(*ldit));
}
while(m!=n) {
_label2RdsRuleMap[(*it_rulemap).first].push_back(ConvertRealToRdsUnit(*m));
m++;
}
it_rulemap++;
} }
// Get Objet Layer from Technology with its name. // Get Objet Layer from Technology with its name.
// ********************************************** // **********************************************
DataBase * db = GetDataBase(); DataBase* db = GetDataBase();
if(!db) throw Error("In GetV1Trans::Generate : can't find DataBase."); if(!db) {
throw Error("In GetV1Trans::Generate : can't find DataBase.");
}
Technology* tech = db->GetTechnology();
if (!tech) {
throw Error("In GetV1Trans::Generate : can't find Technology.");
}
Technology * tech = db->GetTechnology();
map<string, list<string> >::iterator it_layermap = _label2layerNameMap.begin(), map<string, list<string> >::iterator it_layermap = _label2layerNameMap.begin(),
it_end_layermap = _label2layerNameMap.end(); it_end_layermap = _label2layerNameMap.end();
@ -109,9 +107,7 @@ void DtrAccess::_PostCreate()
} }
DtrAccess * DtrAccess::Instance() DtrAccess * DtrAccess::Instance() {
// *****************************
{
// User or environnement supplies this at startup // User or environnement supplies this at startup
// ********************************************** // **********************************************
const char * singleton_name = getenv("DTRACCESS_SINGLETON"); const char * singleton_name = getenv("DTRACCESS_SINGLETON");
@ -120,14 +116,12 @@ DtrAccess * DtrAccess::Instance()
if(!_instance) { if(!_instance) {
_instance = DtrAccess::Create(); _instance = DtrAccess::Create();
} }
} } else {
else {
if(!_instance){ if(!_instance){
if( !(_instance=LookUp(string(singleton_name))) ) // if singleton hasn't been registered if( !(_instance=LookUp(string(singleton_name))) ) // if singleton hasn't been registered
_instance = DtrAccess::Create(); _instance = DtrAccess::Create();
} }
} }
return _instance; return _instance;
} }

View File

@ -16,24 +16,21 @@
namespace Hurricane { namespace Hurricane {
class DtrAccess { class DtrAccess {
// **************
// Types
// *****
# if !defined(__DOXYGEN_PROCESSOR__) # if !defined(__DOXYGEN_PROCESSOR__)
// Attributes // Attributes
// ********** // **********
private : static DtrAccess * _instance; private: typedef map<string, list<double> > Label2RuleMap;
private: static DtrAccess * _instance;
private : map<string, list<double> > _label2ruleMap; private: Label2RuleMap _label2ruleMap;
private : map<string, list<string> > _label2layerNameMap; private: map<string, list<string> > _label2layerNameMap;
private : map<string, list<double> > _label2electricalMap; private: map<string, list<double> > _label2electricalMap;
private : map<string, int> _label2modellingMap; private: map<string, int> _label2modellingMap;
private : map<string, double> _label2simplecapamimMap; private: map<string, double> _label2simplecapamimMap;
private : map<string, list<long> > _label2RdsRuleMap; private: map<string, list<long> > _label2RdsRuleMap;
private : map<string, list<Layer*> > _label2layerMap; private: map<string, list<Layer*> > _label2layerMap;
// For reusability of software // For reusability of software

View File

@ -6,7 +6,6 @@
#include "DtrAccess.h" #include "DtrAccess.h"
#include "GenericDtrAccess.h" #include "GenericDtrAccess.h"
//#include "DtrAccess.h"
BEGIN_NAMESPACE_HURRICANE BEGIN_NAMESPACE_HURRICANE

View File

@ -1,17 +1,29 @@
#include <iostream> #include <iostream>
#include "DataBase.h"
#include "Library.h" #include "Library.h"
USING_NAMESPACE_HURRICANE #include "Warning.h"
using namespace H;
#include "crlcore/CDataBase.h"
using namespace CRL;
#include "TrMos.h" #include "TrMos.h"
using namespace DEVICE; using namespace DEVICE;
int main() { int main() {
cout << "simple analogic test" << endl; try {
DataBase* db = DataBase::Create(); cout << "simple analogic test" << endl;
Library* rootLibrary = Library::Create(db, Name("RootLibrary")); CDataBase* db = CDataBase::Create();
Library* workLibrary = Library::Create(rootLibrary, Name("WorkLibrary")); Library* workLibrary = Library::Create(db->GetRootLibrary(), Name("WorkLibrary"));
TrMos* trmos = TrMos::Create(workLibrary, Name("MosTr")); TrMos* trmos = TrMos::Create(workLibrary, Name("MosTr"));
return 1; exit(0);
} catch (Hurricane::Warning& w) {
cerr << w.What() << endl;
} catch (Hurricane::Error& e) {
cerr << e.What() << endl;
exit (1);
} catch (...) {
cout << "Abnormal termination\n" << endl;
exit(2);
}
} }

View File

@ -1,6 +1,9 @@
INCLUDE_DIRECTORIES(${HURRICANE_INCLUDE_DIR} INCLUDE_DIRECTORIES(${HURRICANE_INCLUDE_DIR} ${CORIOLIS_INCLUDE_DIR}
${CHAMSIN_SOURCE_DIR}/src/analogic ${CHAMSIN_SOURCE_DIR}/src/device) ${CHAMSIN_SOURCE_DIR}/src/analogic ${CHAMSIN_SOURCE_DIR}/src/device)
ADD_EXECUTABLE(atest AnalogicTest.cpp) ADD_EXECUTABLE(atest AnalogicTest.cpp)
TARGET_LINK_LIBRARIES(atest analogic device ${HURRICANE_LIBRARIES}) TARGET_LINK_LIBRARIES(atest analogic device ${HURRICANE_LIBRARIES}
${CORIOLIS_LIBRARIES})
INSTALL(TARGETS atest DESTINATION /bin)