From bddf1ceef5498ff4da76333d3aa94a159edade47 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 2 Mar 2015 23:29:08 +0100 Subject: [PATCH] Ispd05 bookshelf parser bad scaling bug correction. * Bug: In CRL Core, in Ispd05Bookshelf, as the pitch is already expressed in DbU, do not apply DbU::toLambda() in any expression where it is used. * Change: In Etesian, In AddFeeds, do not try insert feeds if there is no cell feed avalaible. --- crlcore/src/ccore/ispd05/Ispd05Bookshelf.cpp | 22 ++++++++------------ etesian/src/AddFeeds.cpp | 5 +++++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/crlcore/src/ccore/ispd05/Ispd05Bookshelf.cpp b/crlcore/src/ccore/ispd05/Ispd05Bookshelf.cpp index 62f126f5..2a2eb8d5 100644 --- a/crlcore/src/ccore/ispd05/Ispd05Bookshelf.cpp +++ b/crlcore/src/ccore/ispd05/Ispd05Bookshelf.cpp @@ -73,8 +73,8 @@ namespace { Cell* master = af->createCell( node->getName() ); Box abutmentBox( DbU::fromLambda( 0.0 ) , DbU::fromLambda( 0.0 ) - , DbU::fromLambda( node->getWidth ()*pitch ) - , DbU::fromLambda( node->getHeight()*pitch ) + , node->getWidth ()*pitch + , node->getHeight()*pitch ); master->setAbutmentBox( abutmentBox ); Point cellCenter = abutmentBox.getCenter(); @@ -83,8 +83,8 @@ namespace { for ( auto ipin : node->getPins() ) { Bookshelf::Pin* pin = ipin.second; - Point pinCenter ( cellCenter.getX() + DbU::fromLambda(pin->getX()*pitch) - , cellCenter.getY() + DbU::fromLambda(pin->getY()*pitch) ); + Point pinCenter ( cellCenter.getX() + pin->getX()*pitch + , cellCenter.getY() + pin->getY()*pitch ); if (not abutmentBox.contains(pinCenter)) cerr << Error( "Ispd05::load(): Pin <%s> of node <%s> is outside abutment box.\n" " (AB:[%dx%d], pin:(%d,%d))" @@ -114,10 +114,10 @@ namespace { Transformation toTransformation ( Bookshelf::Node* node ) { - DbU::Unit x = DbU::fromLambda( node->getX ()*pitch ); - DbU::Unit y = DbU::fromLambda( node->getY ()*pitch ); - DbU::Unit width = DbU::fromLambda( node->getWidth ()*pitch ); - DbU::Unit height = DbU::fromLambda( node->getHeight()*pitch ); + DbU::Unit x = node->getX ()*pitch; + DbU::Unit y = node->getY ()*pitch; + DbU::Unit width = node->getWidth ()*pitch; + DbU::Unit height = node->getHeight()*pitch; switch (node->getOrientation()) { @@ -211,11 +211,7 @@ namespace CRL { double x2 = (irow->getSitewidth()*irow->getNumsites())*pitch + x1; double y2 = (irow->getHeight() )*pitch + y1; - Box rowBox = Box( DbU::fromLambda(x1) - , DbU::fromLambda(y1) - , DbU::fromLambda(x2) - , DbU::fromLambda(y2) - ); + Box rowBox = Box( x1, y1, x2, y2 ); abutmentBox.merge( rowBox ); } cell->setAbutmentBox( abutmentBox ); diff --git a/etesian/src/AddFeeds.cpp b/etesian/src/AddFeeds.cpp index b998a7af..56b1223b 100644 --- a/etesian/src/AddFeeds.cpp +++ b/etesian/src/AddFeeds.cpp @@ -359,6 +359,11 @@ namespace Etesian { void EtesianEngine::addFeeds () { + if (not getFeedCells().feedNumbers()) { + cerr << Warning( "No feed cells available, skipping." ) << endl; + return; + } + UpdateSession::open(); SliceHoles sliceHoles ( this );