* 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++ -*-
|
// -*- 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;
|
||||||
|
|
|
@ -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()".
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue