diff --git a/alliance/src/nero/src/AAstar.cpp b/alliance/src/nero/src/AAstar.cpp index a8154d20..72d312fc 100644 --- a/alliance/src/nero/src/AAstar.cpp +++ b/alliance/src/nero/src/AAstar.cpp @@ -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; diff --git a/alliance/src/nero/src/MMBK.cpp b/alliance/src/nero/src/MMBK.cpp index 359eaabf..4dbad707 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.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()". diff --git a/alliance/src/nero/src/MMBK.h b/alliance/src/nero/src/MMBK.h index 512f9fff..275aef0f 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.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); diff --git a/alliance/src/nero/src/MNodes.cpp b/alliance/src/nero/src/MNodes.cpp index 3976fd9d..41471909 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.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; + } } } } diff --git a/alliance/src/nero/src/MPower.cpp b/alliance/src/nero/src/MPower.cpp index dbc82318..ed9d965e 100644 --- a/alliance/src/nero/src/MPower.cpp +++ b/alliance/src/nero/src/MPower.cpp @@ -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); diff --git a/alliance/src/nero/src/RMBK.cpp b/alliance/src/nero/src/RMBK.cpp index 94435273..2a091e82 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.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); } diff --git a/alliance/src/nero/src/nero.cpp b/alliance/src/nero/src/nero.cpp index d491f904..4ad449c8 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.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"; }