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.
This commit is contained in:
Jean-Paul Chaput 2015-03-02 23:29:08 +01:00
parent 58c78c5d78
commit bddf1ceef5
2 changed files with 14 additions and 13 deletions

View File

@ -73,8 +73,8 @@ namespace {
Cell* master = af->createCell( node->getName() ); Cell* master = af->createCell( node->getName() );
Box abutmentBox( DbU::fromLambda( 0.0 ) Box abutmentBox( DbU::fromLambda( 0.0 )
, DbU::fromLambda( 0.0 ) , DbU::fromLambda( 0.0 )
, DbU::fromLambda( node->getWidth ()*pitch ) , node->getWidth ()*pitch
, DbU::fromLambda( node->getHeight()*pitch ) , node->getHeight()*pitch
); );
master->setAbutmentBox( abutmentBox ); master->setAbutmentBox( abutmentBox );
Point cellCenter = abutmentBox.getCenter(); Point cellCenter = abutmentBox.getCenter();
@ -83,8 +83,8 @@ namespace {
for ( auto ipin : node->getPins() ) { for ( auto ipin : node->getPins() ) {
Bookshelf::Pin* pin = ipin.second; Bookshelf::Pin* pin = ipin.second;
Point pinCenter ( cellCenter.getX() + DbU::fromLambda(pin->getX()*pitch) Point pinCenter ( cellCenter.getX() + pin->getX()*pitch
, cellCenter.getY() + DbU::fromLambda(pin->getY()*pitch) ); , cellCenter.getY() + pin->getY()*pitch );
if (not abutmentBox.contains(pinCenter)) if (not abutmentBox.contains(pinCenter))
cerr << Error( "Ispd05::load(): Pin <%s> of node <%s> is outside abutment box.\n" cerr << Error( "Ispd05::load(): Pin <%s> of node <%s> is outside abutment box.\n"
" (AB:[%dx%d], pin:(%d,%d))" " (AB:[%dx%d], pin:(%d,%d))"
@ -114,10 +114,10 @@ namespace {
Transformation toTransformation ( Bookshelf::Node* node ) Transformation toTransformation ( Bookshelf::Node* node )
{ {
DbU::Unit x = DbU::fromLambda( node->getX ()*pitch ); DbU::Unit x = node->getX ()*pitch;
DbU::Unit y = DbU::fromLambda( node->getY ()*pitch ); DbU::Unit y = node->getY ()*pitch;
DbU::Unit width = DbU::fromLambda( node->getWidth ()*pitch ); DbU::Unit width = node->getWidth ()*pitch;
DbU::Unit height = DbU::fromLambda( node->getHeight()*pitch ); DbU::Unit height = node->getHeight()*pitch;
switch (node->getOrientation()) { switch (node->getOrientation()) {
@ -211,11 +211,7 @@ namespace CRL {
double x2 = (irow->getSitewidth()*irow->getNumsites())*pitch + x1; double x2 = (irow->getSitewidth()*irow->getNumsites())*pitch + x1;
double y2 = (irow->getHeight() )*pitch + y1; double y2 = (irow->getHeight() )*pitch + y1;
Box rowBox = Box( DbU::fromLambda(x1) Box rowBox = Box( x1, y1, x2, y2 );
, DbU::fromLambda(y1)
, DbU::fromLambda(x2)
, DbU::fromLambda(y2)
);
abutmentBox.merge( rowBox ); abutmentBox.merge( rowBox );
} }
cell->setAbutmentBox( abutmentBox ); cell->setAbutmentBox( abutmentBox );

View File

@ -359,6 +359,11 @@ namespace Etesian {
void EtesianEngine::addFeeds () void EtesianEngine::addFeeds ()
{ {
if (not getFeedCells().feedNumbers()) {
cerr << Warning( "No feed cells available, skipping." ) << endl;
return;
}
UpdateSession::open(); UpdateSession::open();
SliceHoles sliceHoles ( this ); SliceHoles sliceHoles ( this );