From 6ea06dbf322018b5b164127b30027ddf014c87dc Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 8 Apr 2005 10:15:45 +0000 Subject: [PATCH] * nero/src/ : - New Feature : to allow routing reuse, NeRo is now able to build the abstract of a mega-cell. That is, adds the relevant CALUx and TALUx describing the interface at top-level. - Bug : in the abstract generation, the intermediates TALUx metals of a stacked VIA where forgotten. For example, when there is a VIA34 on top of a VIA23 you must have obstacles in TALU4 and TALU2 but also a "dot" obstacle in TALU3. "Dot" obstacle are added only when we process a layer in the preferred routing direction, otherwise we would create a dot at each routing grid point... --- alliance/src/nero/src/RMBK.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/alliance/src/nero/src/RMBK.cpp b/alliance/src/nero/src/RMBK.cpp index 2a091e82..eb61ed63 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.8 2005/04/07 14:56:18 jpc Exp $ +// $Id: RMBK.cpp,v 1.9 2005/04/08 10:15:45 jpc Exp $ // // /----------------------------------------------------------------\ // | | @@ -472,6 +472,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.X1 < seg.X2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (z % 2) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } // Force segment restarting. @@ -503,6 +508,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.X1 < seg.X2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (z % 2) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } } @@ -516,6 +526,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.X1 < seg.X2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (z % 2 ) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } } @@ -537,6 +552,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.Y1 < seg.Y2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (! (z % 2)) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } // Force segment restarting. @@ -569,6 +589,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.Y1 < seg.Y2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (! (z % 2)) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } } @@ -582,6 +607,11 @@ void CRBox::mbkload (MBK::CFig *mbkfig, int z, int zup, int rtype) if (seg.Y1 < seg.Y2) { // This is not a "dot" segment (i.e a VIA). fig->addphseg (seg,pNet->external); + } else if (! (z % 2)) { + char layer = seg.LAYER; + seg.LAYER = MBK::layer2TALU (seg.LAYER); + fig->addphseg (seg,false); + seg.LAYER = layer; } }