What a lot of bugs corrected. That's amazing.

Don't say more.
This commit is contained in:
Jean-Paul Chaput 2005-10-17 23:11:06 +00:00
parent a2c50f2196
commit c62a2afedc
5 changed files with 94 additions and 35 deletions

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- 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.X1 << ", "
<< rect->seg.Y1 << "), (" << rect->seg.Y1 << "), ("
<< rect->seg.X2 << ", " << 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::rect(" << &(rect->rect) << ")\n";
o << "+ CXRect::grid(" << &(rect->grid) << ")\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
);
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- 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 addphseg (phseg_list &seg, bool isTerm=false, bool isChip=false );
void addphvia (phvia_list &VIA); void addphvia (phvia_list &VIA);
void addphcon (phcon_list &con); void addphcon (phcon_list &con);
void addphref (phref_list &ref);
}; };

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- 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) void CMatrixNodes::obstacle (CRect &rect, int z)
{ {
CDRGrid::iterator coord; 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; coord = _drgrid->origin;
X = (_drgrid->X == rect.x2) ? rect.x2 - 1 : rect.x2; X = (_drgrid->X <= rect.x2) ? _drgrid->X - 1 : rect.x2;
Y = (_drgrid->Y == rect.y2) ? rect.y2 - 1 : rect.y2; Y = (_drgrid->Y <= rect.y2) ? _drgrid->Y - 1 : rect.y2;
for (x = rect.x1; x <= X; x++) { x = (rect.x1>0) ? rect.x1 : 0;
for (y = rect.y1; y <= Y; y++) { for ( ; x <= X; x++) {
y = (rect.y1>0) ? rect.y1 : 0;
for ( ; y <= Y; y++) {
if ( ! (*this)[ coord.set (x, y, z) ].terminal () ) { 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; (*this)[ coord ].data.obstacle = true;
} }
} }

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- 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; ischip = true;
if ( eastPad == 0 ) { if ( eastPad == 0 ) {
cmess2 << " o East pad found.\n"; cmess2 << " o East pad found.\n";
eastPad = pModel->XAB2 - pModel->XAB1 - MBK::SCALE(15); eastPad = pModel->YAB2 - pModel->YAB1 - MBK::SCALE(15);
} }
break; break;
case SY_RP: case SY_RP:
ischip = true; ischip = true;
if ( westPad == 0 ) { if ( westPad == 0 ) {
cmess2 << " o West pad found.\n"; cmess2 << " o West pad found.\n";
westPad = pModel->XAB2 - pModel->XAB1 - MBK::SCALE(15); westPad = pModel->YAB2 - pModel->YAB1 - MBK::SCALE(15);
} }
break; break;
default: default:
@ -224,6 +224,18 @@ void CRBox::mbkload (MBK::CFig *mbkfig
cmess2 << " o Allocating grid size [" cmess2 << " o Allocating grid size ["
<< mX << "," << mY << "," << mZ << "].\n"; << 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. // Allocating the routing grid.
drgrid = new CDRGrid (xoffsetgrid, yoffsetgrid, mX, mY, mZ, zup); drgrid = new CDRGrid (xoffsetgrid, yoffsetgrid, mX, mY, mZ, zup);
@ -297,8 +309,10 @@ void CRBox::mbkload (MBK::CFig *mbkfig
if (pSeg->LAYER != MBK::CALU1) { if (pSeg->LAYER != MBK::CALU1) {
rect->setSeg (*pSeg); rect->setSeg (*pSeg);
//cerr << "+ Top power obstacle" << endl; //cerr << "+ Top power obstacle\n" << rect;
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER));
if ( rect->isInGrid() )
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER));
} }
continue; continue;
@ -339,6 +353,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig
// , rect->grid // , rect->grid
// , MBK::env.layer2z (pSeg->LAYER) // , MBK::env.layer2z (pSeg->LAYER)
// ); // );
//cerr << "+ Net obstacle\n" << rect;
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER));
} else { } else {
cerr << hwarn ("") cerr << hwarn ("")
@ -366,22 +381,28 @@ void CRBox::mbkload (MBK::CFig *mbkfig
case 0: flatSeg.LAYER = MBK::topVIALayer (pVIA->TYPE); break; case 0: flatSeg.LAYER = MBK::topVIALayer (pVIA->TYPE); break;
case 1: flatSeg.LAYER = MBK::bottomVIALayer (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); itIns->second->flatseg (flatSeg, *pSeg);
rect->setSeg (flatSeg); rect->setSeg (flatSeg);
//cerr << "+ Instance obstacle (" << flatSeg.X1 << "," << flatSeg.Y1 << ")" << endl; //cerr << "+ Instance obstacle (" << flatSeg.X1 << "," << flatSeg.Y1 << ")"
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); // << 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) ) if ( !MBK::ISVDD (pSeg->NAME) && !MBK::ISVSS (pSeg->NAME) )
fig->addphseg ( flatSeg, true, ischip ); fig->addphseg ( flatSeg, true, ischip );
@ -636,6 +660,22 @@ void CRBox::mbkload (MBK::CFig *mbkfig
mY = drgrid->Y; mY = drgrid->Y;
mZ = drgrid->Z; mZ = drgrid->Z;
coord = drgrid->origin; 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. // Horizontal planes loop in both directions.

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- 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) static void serial (void)
{ {
cout << " S/N 20051006.1\n"; cout << " S/N 20051017.1\n";
} }