Prefix all Cell from a GDS file with "gds_" to avoid cell overload.
* Bug: In CRL::GdsParser, the PLL was using copies of the standard cell with the same name. And unfortunately, they where found *before* the FlexLib one when using DataBase::getCell(). As their I/O where wrong it was leading to a massive netlist connexion corruption in blif2vst. To avoid that, any Cell created by the GDS parser is now prefixed by "gds_". * Change: In CRL::GdsStream CTOR, report when the file cannot be opened instead of saying that the GDS file is corrupted (misleading).
This commit is contained in:
parent
3eb3f52bc8
commit
3276950ec4
|
@ -745,6 +745,13 @@ namespace {
|
||||||
if (_gdsLayerTable.empty()) _staticInit();
|
if (_gdsLayerTable.empty()) _staticInit();
|
||||||
|
|
||||||
_stream.open( gdsPath, ios_base::in|ios_base::binary );
|
_stream.open( gdsPath, ios_base::in|ios_base::binary );
|
||||||
|
if (not _stream.is_open()) {
|
||||||
|
cerr << Error( "GdsStream::GdsStream(): Unable to open stream, check path.\n"
|
||||||
|
" \"%s\""
|
||||||
|
, _gdsPath.c_str() ) << endl;
|
||||||
|
_validSyntax = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_stream >> _record;
|
_stream >> _record;
|
||||||
if (not _record.isHEADER()) {
|
if (not _record.isHEADER()) {
|
||||||
|
@ -857,13 +864,14 @@ namespace {
|
||||||
|
|
||||||
if (_record.isSTRNAME()) {
|
if (_record.isSTRNAME()) {
|
||||||
if (_library) {
|
if (_library) {
|
||||||
_cell = _library->getCell( _record.getName() );
|
string cellName = "gds_" + _record.getName();
|
||||||
|
_cell = _library->getCell( cellName );
|
||||||
if (not _cell) {
|
if (not _cell) {
|
||||||
cerr << Warning( "GdsStream::readStructure(): No Cell named \"%s\" in Library \"%s\" (created)."
|
cerr << Warning( "GdsStream::readStructure(): No Cell named \"gds_%s\" in Library \"%s\" (created)."
|
||||||
, _record.getName().c_str()
|
, _record.getName().c_str()
|
||||||
, getString(_library).c_str()
|
, getString(_library).c_str()
|
||||||
) << endl;
|
) << endl;
|
||||||
_cell = Cell::create( _library, _record.getName() );
|
_cell = Cell::create( _library, cellName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_stream >> _record;
|
_stream >> _record;
|
||||||
|
@ -1192,7 +1200,7 @@ namespace {
|
||||||
// << " " << Transformation(xpos,ypos,orient)
|
// << " " << Transformation(xpos,ypos,orient)
|
||||||
// << " in " << _cell << endl;
|
// << " in " << _cell << endl;
|
||||||
_delayedInstances.push_back( DelayedInstance( _cell
|
_delayedInstances.push_back( DelayedInstance( _cell
|
||||||
, masterName
|
, "gds_" + masterName
|
||||||
, Transformation(xpos,ypos,orient)) );
|
, Transformation(xpos,ypos,orient)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue