* 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...
This commit is contained in:
Jean-Paul Chaput 2005-04-08 10:15:45 +00:00
parent be25914da2
commit 6ea06dbf32
1 changed files with 31 additions and 1 deletions

View File

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