* nero/src/ :

- Bug : the size of the non-default width VIA was not correctly computed.
       The result was bigger obstacles cluttering the routing grid and
       forcing unneeded detours.
This commit is contained in:
Jean-Paul Chaput 2005-04-07 14:56:18 +00:00
parent 883eda0309
commit be25914da2
7 changed files with 90 additions and 22 deletions

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: AAstar.cpp,v 1.9 2004/12/14 19:02:07 jpc Exp $ // $Id: AAstar.cpp,v 1.10 2005/04/07 14:56:18 jpc Exp $
// //
// /----------------------------------------------------------------\ // /----------------------------------------------------------------\
// | | // | |
@ -322,7 +322,10 @@ void CAStar::CNodeAS::successors (CNodeASSet &NS, CNet *net, CNodeAS *(*success
} }
// Check if the node is an obstacle. // Check if the node is an obstacle.
if (neighbor.node().data.obstacle) continue; if (neighbor.node().data.obstacle) {
cdebug << "+ neighbour is an obstacle." << "\n";
continue;
}
// Check the tag map (already reached if tagged.) // Check the tag map (already reached if tagged.)
if (pNodeAS->tagged) continue; if (pNodeAS->tagged) continue;

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: MMBK.cpp,v 1.4 2002/10/24 07:51:33 hcl Exp $ // $Id: MMBK.cpp,v 1.5 2005/04/07 14:56:18 jpc Exp $
// //
// /-----------------------------------------------------------------\ // /-----------------------------------------------------------------\
// | | // | |
@ -770,7 +770,7 @@ CFig::~CFig (void)
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Method : "CFig::addphseg()". // Method : "CFig::addphseg()".
void CFig::addphseg (phseg_list &seg) void CFig::addphseg (phseg_list &seg, bool isTerm )
{ {
MBK::addphseg ( phfig.fig MBK::addphseg ( phfig.fig
, seg.LAYER , seg.LAYER
@ -781,6 +781,18 @@ void CFig::addphseg (phseg_list &seg)
, seg.Y2 , seg.Y2
, seg.NAME , seg.NAME
); );
if ( !isTerm ) {
MBK::addphseg ( phfig.fig
, layer2TALU(seg.LAYER)
, seg.WIDTH
, seg.X1
, seg.Y1
, seg.X2
, seg.Y2
, "obs"
);
}
} }
@ -928,6 +940,48 @@ bool isCALU (char layer)
// -------------------------------------------------------------------
// Function : "layer2TALU()".
char layer2TALU (char layer)
{
switch (layer) {
case ALU1:
case TALU1:
return (TALU1);
case ALU2:
case TALU2:
return (TALU2);
case ALU3:
case TALU3:
return (TALU3);
case ALU4:
case TALU4:
return (TALU4);
case ALU5:
case TALU5:
return (TALU5);
case ALU6:
case TALU6:
return (TALU6);
case TALU7:
case ALU7:
return (TALU7);
case TALU8:
case ALU8:
return (TALU8);
case TALU9:
case ALU9:
return (TALU9);
}
return (TALU1);
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Function : "layer2CALU()". // Function : "layer2CALU()".

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: MMBK.h,v 1.2 2002/10/17 21:57:27 jpc Exp $ // $Id: MMBK.h,v 1.3 2005/04/07 14:56:18 jpc Exp $
// //
// /-----------------------------------------------------------------\ // /-----------------------------------------------------------------\
// | | // | |
@ -93,6 +93,7 @@ namespace MBK {
extern bool isCALU (char layer); extern bool isCALU (char layer);
extern char layer2ALU (char layer); extern char layer2ALU (char layer);
extern char layer2CALU (char layer); extern char layer2CALU (char layer);
extern char layer2TALU (char layer);
extern long cmpALU (char layer1, char layer2); extern long cmpALU (char layer1, char layer2);
extern char topVIALayer (char type); extern char topVIALayer (char type);
extern char bottomVIALayer (char type); extern char bottomVIALayer (char type);
@ -267,7 +268,7 @@ namespace MBK {
losig_list *LOSIG (void) { return (lofig.fig->LOSIG); } losig_list *LOSIG (void) { return (lofig.fig->LOSIG); }
// Modifiers. // Modifiers.
void addphseg (phseg_list &seg); void addphseg (phseg_list &seg, bool isTerm=false );
void addphvia (phvia_list &VIA); void addphvia (phvia_list &VIA);
void addphcon (phcon_list &con); void addphcon (phcon_list &con);

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: MNodes.cpp,v 1.2 2002/10/13 14:22:47 jpc Exp $ // $Id: MNodes.cpp,v 1.3 2005/04/07 14:56:18 jpc Exp $
// //
// /----------------------------------------------------------------\ // /----------------------------------------------------------------\
// | | // | |
@ -121,8 +121,10 @@ void CMatrixNodes::obstacle (CRect &rect, int z)
for (x = rect.x1; x <= X; x++) { for (x = rect.x1; x <= X; x++) {
for (y = rect.y1; y <= Y; y++) { for (y = rect.y1; 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";
(*this)[ coord ].data.obstacle = true; (*this)[ coord ].data.obstacle = true;
} }
} }
}
} }

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: MPower.cpp,v 1.2 2002/10/13 14:22:47 jpc Exp $ // $Id: MPower.cpp,v 1.3 2005/04/07 14:56:18 jpc Exp $
// //
// /-----------------------------------------------------------------\ // /-----------------------------------------------------------------\
// | | // | |
@ -325,7 +325,7 @@ void CPowers::dump (CFig *fig)
} }
} }
fig->addphseg (seg); fig->addphseg (seg,true);
if (con1.ORIENT != (char)0) fig->addphcon (con1); if (con1.ORIENT != (char)0) fig->addphcon (con1);
if (con2.ORIENT != (char)0) fig->addphcon (con2); if (con2.ORIENT != (char)0) fig->addphcon (con2);

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: RMBK.cpp,v 1.7 2004/12/14 19:02:07 jpc Exp $ // $Id: RMBK.cpp,v 1.8 2005/04/07 14:56:18 jpc Exp $
// //
// /----------------------------------------------------------------\ // /----------------------------------------------------------------\
// | | // | |
@ -173,6 +173,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
if (pSeg->LAYER != MBK::CALU1) { if (pSeg->LAYER != MBK::CALU1) {
rect->setSeg (*pSeg); rect->setSeg (*pSeg);
//cerr << "+ Top power obstacle" << endl;
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER));
} }
@ -227,14 +228,17 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
if (flatSeg.LAYER == MBK::CALU1) continue; if (flatSeg.LAYER == MBK::CALU1) continue;
flatSeg.X1 = pVIA->XVIA - pVIA->DX / 2; long xVIAshrink = 0;
flatSeg.X2 = pVIA->XVIA - pVIA->DX / 2; 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.Y1 = pVIA->YVIA;
flatSeg.Y2 = pVIA->YVIA; flatSeg.Y2 = pVIA->YVIA;
flatSeg.WIDTH = pVIA->DY; flatSeg.WIDTH = pVIA->DY;
rect->setSeg (flatSeg); rect->setSeg (flatSeg);
//cerr << "+ Top VIA obstacle (" << pVIA->XVIA << "," << pVIA->YVIA << ")" << endl;
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (flatSeg.LAYER)); drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (flatSeg.LAYER));
} }
@ -261,7 +265,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
itIns->second->flatseg (flatSeg, *pSeg); itIns->second->flatseg (flatSeg, *pSeg);
rect->setSeg (flatSeg); rect->setSeg (flatSeg);
//cerr << "+ Instance obstacle (" << flatSeg.X1 << "," << flatSeg.Y1 << ")" << endl;
drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER)); drgrid->nodes->obstacle (rect->grid, MBK::env.layer2z (pSeg->LAYER));
if ( !MBK::ISVDD (pSeg->NAME) && !MBK::ISVSS (pSeg->NAME) )
fig->addphseg ( flatSeg, true );
} }
} }
} }
@ -463,7 +471,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// Dump the current one. // Dump the current one.
if (seg.X1 < seg.X2) { if (seg.X1 < seg.X2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
// Force segment restarting. // Force segment restarting.
@ -494,7 +502,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// Dump the current one. // Dump the current one.
if (seg.X1 < seg.X2) { if (seg.X1 < seg.X2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
} }
@ -507,7 +515,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// This segment touch the AB. // This segment touch the AB.
if (seg.X1 < seg.X2) { if (seg.X1 < seg.X2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
} }
@ -528,7 +536,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// Dump the current one. // Dump the current one.
if (seg.Y1 < seg.Y2) { if (seg.Y1 < seg.Y2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
// Force segment restarting. // Force segment restarting.
@ -560,7 +568,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// Dump the current one. // Dump the current one.
if (seg.Y1 < seg.Y2) { if (seg.Y1 < seg.Y2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
} }
@ -573,7 +581,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
// This segment touch the AB. // This segment touch the AB.
if (seg.Y1 < seg.Y2) { if (seg.Y1 < seg.Y2) {
// This is not a "dot" segment (i.e a VIA). // This is not a "dot" segment (i.e a VIA).
fig->addphseg (seg); fig->addphseg (seg,pNet->external);
} }
} }
@ -703,7 +711,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
seg.WIDTH = MBK::env.z2width (0); seg.WIDTH = MBK::env.z2width (0);
seg.LAYER = MBK::env.z2calu (0); seg.LAYER = MBK::env.z2calu (0);
fig->addphseg (seg); fig->addphseg (seg,itNet->second->external);
} }

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// $Id: nero.cpp,v 1.7 2005/02/07 05:54:41 hcl Exp $ // $Id: nero.cpp,v 1.8 2005/04/07 14:56:18 jpc Exp $
// //
// /----------------------------------------------------------------\ // /----------------------------------------------------------------\
// | | // | |
@ -94,7 +94,7 @@ static void help (void)
static void serial (void) static void serial (void)
{ {
cout << " S/N 20021117.1\n"; cout << " S/N 20050406.1\n";
} }