From c62a2afedc7861bd9e2256948b15ca482b0591be Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 17 Oct 2005 23:11:06 +0000 Subject: [PATCH] What a lot of bugs corrected. That's amazing. Don't say more. --- alliance/src/nero/src/MMBK.cpp | 20 +++++++- alliance/src/nero/src/MMBK.h | 3 +- alliance/src/nero/src/MNodes.cpp | 18 ++++--- alliance/src/nero/src/RMBK.cpp | 84 +++++++++++++++++++++++--------- alliance/src/nero/src/nero.cpp | 4 +- 5 files changed, 94 insertions(+), 35 deletions(-) diff --git a/alliance/src/nero/src/MMBK.cpp b/alliance/src/nero/src/MMBK.cpp index d05eb110..efc48425 100644 --- a/alliance/src/nero/src/MMBK.cpp +++ b/alliance/src/nero/src/MMBK.cpp @@ -1,7 +1,7 @@ // -*- C++ -*- // -// $Id: MMBK.cpp,v 1.7 2005/10/13 12:44:39 jpc Exp $ +// $Id: MMBK.cpp,v 1.8 2005/10/17 23:11:05 jpc Exp $ // // /-----------------------------------------------------------------\ // | | @@ -174,7 +174,9 @@ ostream &operator<< (ostream &o, const CXRect *rect) << rect->seg.X1 << ", " << rect->seg.Y1 << "), (" << rect->seg.X2 << ", " - << rect->seg.Y2 << ")\n"; + << rect->seg.Y2 << ") " + << rect->seg.WIDTH << " " + << layer2a(rect->seg.LAYER) << "\n"; o << "+ CXRect::rect(" << &(rect->rect) << ")\n"; o << "+ CXRect::grid(" << &(rect->grid) << ")\n"; @@ -909,6 +911,20 @@ void CFig::addphcon (phcon_list &con) } +// ------------------------------------------------------------------- +// Method : "CFig::addphref()". + +void CFig::addphref (phref_list &ref) +{ + MBK::addphref ( phfig.fig + , ref.FIGNAME + , ref.NAME + , ref.XREF + , ref.YREF + ); +} + + // ------------------------------------------------------------------- diff --git a/alliance/src/nero/src/MMBK.h b/alliance/src/nero/src/MMBK.h index c906319b..3f3537bd 100644 --- a/alliance/src/nero/src/MMBK.h +++ b/alliance/src/nero/src/MMBK.h @@ -1,7 +1,7 @@ // -*- C++ -*- // -// $Id: MMBK.h,v 1.5 2005/10/13 12:44:39 jpc Exp $ +// $Id: MMBK.h,v 1.6 2005/10/17 23:11:06 jpc Exp $ // // /-----------------------------------------------------------------\ // | | @@ -278,6 +278,7 @@ namespace MBK { void addphseg (phseg_list &seg, bool isTerm=false, bool isChip=false ); void addphvia (phvia_list &VIA); void addphcon (phcon_list &con); + void addphref (phref_list &ref); }; diff --git a/alliance/src/nero/src/MNodes.cpp b/alliance/src/nero/src/MNodes.cpp index 41471909..3ff5d729 100644 --- a/alliance/src/nero/src/MNodes.cpp +++ b/alliance/src/nero/src/MNodes.cpp @@ -1,7 +1,7 @@ // -*- C++ -*- // -// $Id: MNodes.cpp,v 1.3 2005/04/07 14:56:18 jpc Exp $ +// $Id: MNodes.cpp,v 1.4 2005/10/17 23:11:06 jpc Exp $ // // /----------------------------------------------------------------\ // | | @@ -109,20 +109,22 @@ void CNode::ungrab (void) void CMatrixNodes::obstacle (CRect &rect, int z) { CDRGrid::iterator coord; - int x, y, X, Y; + long x, y, X, Y; - if (!z) return; + if ( !z || (z >= _drgrid->Z) ) return; coord = _drgrid->origin; - X = (_drgrid->X == rect.x2) ? rect.x2 - 1 : rect.x2; - Y = (_drgrid->Y == rect.y2) ? rect.y2 - 1 : rect.y2; + X = (_drgrid->X <= rect.x2) ? _drgrid->X - 1 : rect.x2; + Y = (_drgrid->Y <= rect.y2) ? _drgrid->Y - 1 : rect.y2; - for (x = rect.x1; x <= X; x++) { - for (y = rect.y1; y <= Y; y++) { + x = (rect.x1>0) ? rect.x1 : 0; + for ( ; x <= X; x++) { + y = (rect.y1>0) ? rect.y1 : 0; + for ( ; y <= Y; y++) { if ( ! (*this)[ coord.set (x, y, z) ].terminal () ) { - cdebug << "+ Obstacle at (" << x << "," << y << "," << z << ")" << "\n"; + //cdebug << "+ Obstacle at (" << x << "," << y << "," << z << ")" << "\n"; (*this)[ coord ].data.obstacle = true; } } diff --git a/alliance/src/nero/src/RMBK.cpp b/alliance/src/nero/src/RMBK.cpp index 391aeed1..c7f51341 100644 --- a/alliance/src/nero/src/RMBK.cpp +++ b/alliance/src/nero/src/RMBK.cpp @@ -1,7 +1,7 @@ // -*- C++ -*- // -// $Id: RMBK.cpp,v 1.12 2005/10/13 12:44:40 jpc Exp $ +// $Id: RMBK.cpp,v 1.13 2005/10/17 23:11:06 jpc Exp $ // // /----------------------------------------------------------------\ // | | @@ -109,14 +109,14 @@ void CRBox::mbkload (MBK::CFig *mbkfig ischip = true; if ( eastPad == 0 ) { cmess2 << " o East pad found.\n"; - eastPad = pModel->XAB2 - pModel->XAB1 - MBK::SCALE(15); + eastPad = pModel->YAB2 - pModel->YAB1 - MBK::SCALE(15); } break; case SY_RP: ischip = true; if ( westPad == 0 ) { cmess2 << " o West pad found.\n"; - westPad = pModel->XAB2 - pModel->XAB1 - MBK::SCALE(15); + westPad = pModel->YAB2 - pModel->YAB1 - MBK::SCALE(15); } break; default: @@ -224,6 +224,18 @@ void CRBox::mbkload (MBK::CFig *mbkfig cmess2 << " o Allocating grid size [" << mX << "," << mY << "," << mZ << "].\n"; + float mXf = mX; + float mYf = mY; + float mZf = mZ; + float overflow = INT_MAX; + + if ( mXf * mYf * mZf >= overflow ) { + cerr << herr("") + << " Internal routing grid capacity exceeded :\n" + << " More than " << INT_MAX << "nodes (INT_MAX).\n"; + throw except_done(); + } + // Allocating the routing grid. drgrid = new CDRGrid (xoffsetgrid, yoffsetgrid, mX, mY, mZ, zup); @@ -297,8 +309,10 @@ void CRBox::mbkload (MBK::CFig *mbkfig if (pSeg->LAYER != MBK::CALU1) { rect->setSeg (*pSeg); - //cerr << "+ Top power obstacle" << endl; - drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); + //cerr << "+ Top power obstacle\n" << rect; + + if ( rect->isInGrid() ) + drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); } continue; @@ -339,6 +353,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig // , rect->grid // , MBK::env.layer2z (pSeg->LAYER) // ); + //cerr << "+ Net obstacle\n" << rect; drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); } else { cerr << hwarn ("") @@ -366,22 +381,28 @@ void CRBox::mbkload (MBK::CFig *mbkfig case 0: flatSeg.LAYER = MBK::topVIALayer (pVIA->TYPE); break; case 1: flatSeg.LAYER = MBK::bottomVIALayer (pVIA->TYPE); break; } + + if (flatSeg.LAYER == MBK::CALU1) continue; + + long xVIAshrink = 0; + if (pVIA->DX) { xVIAshrink = (pVIA->DX - MBK::SCALE(3)) / 2; } + flatSeg.X1 = pVIA->XVIA - xVIAshrink; + flatSeg.X2 = pVIA->XVIA + xVIAshrink; + flatSeg.Y1 = pVIA->YVIA; + flatSeg.Y2 = pVIA->YVIA; + flatSeg.WIDTH = pVIA->DY; + + rect->setSeg (flatSeg); + + //cerr << "+ Top VIA obstacle (" + // << MBK::UNSCALE(pVIA->XVIA) << "," + // << MBK::UNSCALE(pVIA->YVIA) << ") " + // << MBK::layer2a(flatSeg.LAYER) << endl; + //cerr << rect; + + if ( rect->isInGrid() ) + drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (flatSeg.LAYER)); } - - if (flatSeg.LAYER == MBK::CALU1) continue; - - long xVIAshrink = 0; - if (pVIA->DX) { xVIAshrink = (pVIA->DX - MBK::SCALE(3)) / 2; } - flatSeg.X1 = pVIA->XVIA - xVIAshrink; - flatSeg.X2 = pVIA->XVIA + xVIAshrink; - flatSeg.Y1 = pVIA->YVIA; - flatSeg.Y2 = pVIA->YVIA; - flatSeg.WIDTH = pVIA->DY; - - rect->setSeg (flatSeg); - - //cerr << "+ Top VIA obstacle (" << pVIA->XVIA << "," << pVIA->YVIA << ")" << endl; - drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (flatSeg.LAYER)); } @@ -407,8 +428,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig itIns->second->flatseg (flatSeg, *pSeg); rect->setSeg (flatSeg); - //cerr << "+ Instance obstacle (" << flatSeg.X1 << "," << flatSeg.Y1 << ")" << endl; - drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); + //cerr << "+ Instance obstacle (" << flatSeg.X1 << "," << flatSeg.Y1 << ")" + // << MBK::layer2a(flatSeg.LAYER) << endl; + + if ( rect->isInGrid() ) + drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); if ( !MBK::ISVDD (pSeg->NAME) && !MBK::ISVSS (pSeg->NAME) ) fig->addphseg ( flatSeg, true, ischip ); @@ -636,6 +660,22 @@ void CRBox::mbkload (MBK::CFig *mbkfig mY = drgrid->Y; mZ = drgrid->Z; coord = drgrid->origin; + + + // A reference to show the grid real origin. + MBK::phref_list ref; + ref.FIGNAME = MBK::namealloc("ref_ref"); + ref.NAME = MBK::namealloc("nero.grid.origin"); + ref.XREF = xoffsetgrid; + ref.YREF = yoffsetgrid; + ref.USER = NULL; + ref.NEXT = NULL; + fig->addphref ( ref ); + + ref.NAME = MBK::namealloc("nero.grid.limit"); + ref.XREF += D::X_GRID * (mX-1); + ref.YREF += D::Y_GRID * (mY-1); + fig->addphref ( ref ); // Horizontal planes loop in both directions. diff --git a/alliance/src/nero/src/nero.cpp b/alliance/src/nero/src/nero.cpp index 294a2641..9fd72f61 100644 --- a/alliance/src/nero/src/nero.cpp +++ b/alliance/src/nero/src/nero.cpp @@ -1,7 +1,7 @@ // -*- C++ -*- // -// $Id: nero.cpp,v 1.9 2005/10/10 15:34:06 jpc Exp $ +// $Id: nero.cpp,v 1.10 2005/10/17 23:11:06 jpc Exp $ // // /----------------------------------------------------------------\ // | | @@ -96,7 +96,7 @@ static void help (void) static void serial (void) { - cout << " S/N 20051006.1\n"; + cout << " S/N 20051017.1\n"; }