Duplicate external compoenents in CRL::GdsDriver to please "Vendor" StreamIn.

* Change: In CRL::GdsStream::operator<<(Cell*),  external components needs
    to be exported twice. First as "METALx.pin" to signal an external
    component (and give it's name). And second as a "normal" component
    in "METALx". If the METALx part is forgotten, the "Vendor" StreamIn
    will not see the METALx.pin as something physical so f***g gaps appears
    in the wiring. And furthermore, if the TEXT label is above it, the
    name of the net goes away...
This commit is contained in:
Jean-Paul Chaput 2021-03-31 01:46:21 +02:00
parent a81f6b27f5
commit b9c6b5dd80
1 changed files with 12 additions and 6 deletions

View File

@ -806,6 +806,13 @@ namespace {
Box bb = component->getBoundingBox(layer);
if ((bb.getWidth() == 0) or (bb.getHeight() == 0))
continue;
(*this) << BOUNDARY;
(*this) << LAYER(layer->getGds2Layer());
(*this) << DATATYPE(layer->getGds2Datatype());
(*this) << bb;
(*this) << ENDEL;
isOnGrid( component, bb );
const BasicLayer* exportLayer = layer;
if (NetExternalComponents::isExternal(component)) {
string layerName = getString( layer->getName() );
@ -813,13 +820,12 @@ namespace {
exportLayer = tech->getBasicLayer( layerName+".pin" );
if (not exportLayer) exportLayer = layer;
}
(*this) << BOUNDARY;
(*this) << LAYER(exportLayer->getGds2Layer());
(*this) << DATATYPE(exportLayer->getGds2Datatype());
(*this) << bb;
(*this) << ENDEL;
}
(*this) << BOUNDARY;
(*this) << LAYER(exportLayer->getGds2Layer());
(*this) << DATATYPE(exportLayer->getGds2Datatype());
(*this) << bb;
(*this) << ENDEL;
isOnGrid( component, bb );
if (NetExternalComponents::isExternal(component) or dynamic_cast<Pin*>(component)) {
string name = getString( component->getNet()->getName() );