* 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:
parent
883eda0309
commit
be25914da2
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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.
|
||||
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.)
|
||||
if (pNodeAS->tagged) continue;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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()".
|
||||
|
||||
void CFig::addphseg (phseg_list &seg)
|
||||
void CFig::addphseg (phseg_list &seg, bool isTerm )
|
||||
{
|
||||
MBK::addphseg ( phfig.fig
|
||||
, seg.LAYER
|
||||
|
@ -781,6 +781,18 @@ void CFig::addphseg (phseg_list &seg)
|
|||
, seg.Y2
|
||||
, 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()".
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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 char layer2ALU (char layer);
|
||||
extern char layer2CALU (char layer);
|
||||
extern char layer2TALU (char layer);
|
||||
extern long cmpALU (char layer1, char layer2);
|
||||
extern char topVIALayer (char type);
|
||||
extern char bottomVIALayer (char type);
|
||||
|
@ -267,7 +268,7 @@ namespace MBK {
|
|||
losig_list *LOSIG (void) { return (lofig.fig->LOSIG); }
|
||||
|
||||
// Modifiers.
|
||||
void addphseg (phseg_list &seg);
|
||||
void addphseg (phseg_list &seg, bool isTerm=false );
|
||||
void addphvia (phvia_list &VIA);
|
||||
void addphcon (phcon_list &con);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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 (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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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 (con2.ORIENT != (char)0) fig->addphcon (con2);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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) {
|
||||
rect->setSeg (*pSeg);
|
||||
|
||||
//cerr << "+ Top power obstacle" << endl;
|
||||
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;
|
||||
|
||||
flatSeg.X1 = pVIA->XVIA - pVIA->DX / 2;
|
||||
flatSeg.X2 = pVIA->XVIA - pVIA->DX / 2;
|
||||
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));
|
||||
}
|
||||
|
||||
|
@ -261,7 +265,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
|
|||
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));
|
||||
|
||||
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.
|
||||
if (seg.X1 < seg.X2) {
|
||||
// This is not a "dot" segment (i.e a VIA).
|
||||
fig->addphseg (seg);
|
||||
fig->addphseg (seg,pNet->external);
|
||||
}
|
||||
|
||||
// Force segment restarting.
|
||||
|
@ -494,7 +502,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
|
|||
// Dump the current one.
|
||||
if (seg.X1 < seg.X2) {
|
||||
// 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.
|
||||
if (seg.X1 < seg.X2) {
|
||||
// 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.
|
||||
if (seg.Y1 < seg.Y2) {
|
||||
// This is not a "dot" segment (i.e a VIA).
|
||||
fig->addphseg (seg);
|
||||
fig->addphseg (seg,pNet->external);
|
||||
}
|
||||
|
||||
// Force segment restarting.
|
||||
|
@ -560,7 +568,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype)
|
|||
// Dump the current one.
|
||||
if (seg.Y1 < seg.Y2) {
|
||||
// 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.
|
||||
if (seg.Y1 < seg.Y2) {
|
||||
// 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.LAYER = MBK::env.z2calu (0);
|
||||
|
||||
fig->addphseg (seg);
|
||||
fig->addphseg (seg,itNet->second->external);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- 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)
|
||||
{
|
||||
cout << " S/N 20021117.1\n";
|
||||
cout << " S/N 20050406.1\n";
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue