From b9c6b5dd80fa5b4fcbf537bf58fdb271ea427209 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 31 Mar 2021 01:46:21 +0200 Subject: [PATCH] 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... --- crlcore/src/ccore/gds/GdsDriver.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/crlcore/src/ccore/gds/GdsDriver.cpp b/crlcore/src/ccore/gds/GdsDriver.cpp index 985be9ee..d25ce0d3 100644 --- a/crlcore/src/ccore/gds/GdsDriver.cpp +++ b/crlcore/src/ccore/gds/GdsDriver.cpp @@ -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(component)) { string name = getString( component->getNet()->getName() );