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++ -*-
//
// $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
);
}
// -------------------------------------------------------------------

View File

@ -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);
};

View File

@ -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;
}
}

View File

@ -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.

View File

@ -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";
}