Fix bug in LefImport that was preventing loading the GDS file (FOREIGN).
This commit is contained in:
parent
c55654eb5f
commit
48bf2846e1
|
@ -85,7 +85,7 @@ namespace {
|
||||||
inline bool isVH () const;
|
inline bool isVH () const;
|
||||||
bool isUnmatchedLayer ( string );
|
bool isUnmatchedLayer ( string );
|
||||||
Library* createLibrary ();
|
Library* createLibrary ();
|
||||||
Cell* earlyGetCell ( string name="" );
|
Cell* earlyGetCell ( bool& created, string name="" );
|
||||||
Net* earlyGetNet ( string name );
|
Net* earlyGetNet ( string name );
|
||||||
inline string getLibraryName () const;
|
inline string getLibraryName () const;
|
||||||
inline Library* getLibrary ( bool create=false );
|
inline Library* getLibrary ( bool create=false );
|
||||||
|
@ -352,14 +352,16 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Cell* LefParser::earlyGetCell ( string name )
|
Cell* LefParser::earlyGetCell ( bool& created, string name )
|
||||||
{
|
{
|
||||||
if (not _cell) {
|
if (not _cell) {
|
||||||
if (name.empty())
|
if (name.empty())
|
||||||
name = "EarlyLEFCell";
|
name = "EarlyLEFCell";
|
||||||
_cell = getLibrary(true)->getCell( name );
|
_cell = getLibrary(true)->getCell( name );
|
||||||
if (not _cell)
|
if (not _cell) {
|
||||||
|
created = true;
|
||||||
_cell = Cell::create( getLibrary(true), name );
|
_cell = Cell::create( getLibrary(true), name );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _cell;
|
return _cell;
|
||||||
}
|
}
|
||||||
|
@ -367,7 +369,8 @@ namespace {
|
||||||
|
|
||||||
Net* LefParser::earlyGetNet ( string name )
|
Net* LefParser::earlyGetNet ( string name )
|
||||||
{
|
{
|
||||||
if (not _cell) earlyGetCell();
|
bool created = false;
|
||||||
|
if (not _cell) earlyGetCell( created );
|
||||||
Net* net = _cell->getNet( name );
|
Net* net = _cell->getNet( name );
|
||||||
if (not net)
|
if (not net)
|
||||||
net = Net::create( _cell, name );
|
net = Net::create( _cell, name );
|
||||||
|
@ -535,9 +538,10 @@ namespace {
|
||||||
{
|
{
|
||||||
LefParser* parser = (LefParser*)ud;
|
LefParser* parser = (LefParser*)ud;
|
||||||
|
|
||||||
Cell* cell = parser->earlyGetCell( foreign->cellName() );
|
bool created = false;
|
||||||
|
Cell* cell = parser->earlyGetCell( created, foreign->cellName() );
|
||||||
|
|
||||||
if (cell->getName() == "EarlyLEFCell") {
|
if (created) {
|
||||||
if (_gdsForeignDirectory.empty()) {
|
if (_gdsForeignDirectory.empty()) {
|
||||||
cerr << Warning( "LefParser::_macroForeignCbk(): GDS directory *not* set, ignoring FOREIGN statement." ) << endl;
|
cerr << Warning( "LefParser::_macroForeignCbk(): GDS directory *not* set, ignoring FOREIGN statement." ) << endl;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -648,13 +652,13 @@ namespace {
|
||||||
|
|
||||||
parser->setCellGauge( nullptr );
|
parser->setCellGauge( nullptr );
|
||||||
|
|
||||||
|
bool created = false;
|
||||||
string cellName = macro->name();
|
string cellName = macro->name();
|
||||||
DbU::Unit width = 0;
|
DbU::Unit width = 0;
|
||||||
DbU::Unit height = 0;
|
DbU::Unit height = 0;
|
||||||
Cell* cell = parser->earlyGetCell();
|
Cell* cell = parser->earlyGetCell( created );
|
||||||
|
|
||||||
if (cell->getName() != Name(cellName)) {
|
if (cell->getName() != Name(cellName)) {
|
||||||
cerr << cell << " -> " << cellName << endl;
|
|
||||||
cell->setName( cellName );
|
cell->setName( cellName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -720,7 +724,8 @@ namespace {
|
||||||
|
|
||||||
//cerr << " @ _pinCbk: " << pin->name() << endl;
|
//cerr << " @ _pinCbk: " << pin->name() << endl;
|
||||||
|
|
||||||
parser->earlyGetCell();
|
bool created = false;
|
||||||
|
parser->earlyGetCell( created );
|
||||||
|
|
||||||
Net* net = nullptr;
|
Net* net = nullptr;
|
||||||
Net::Type netType = Net::Type::UNDEFINED;
|
Net::Type netType = Net::Type::UNDEFINED;
|
||||||
|
|
Loading…
Reference in New Issue