* nero/src/AAstar.cpp :
- Bug : quant on route deux connecteurs dont les terminaux physiques sont en ALU1 et contigue (separe par exactement 1 pitch de routage) la fonction "CAStar::CNodeAS::successors()" va trouver le terminal voisin au premier coup et ne passera jamais en ALU2 (routage en pure ALU1, ce qui est interdit). Du coup l'arbre de routage en cours de construction se trouve vide et se comporte, pour le connecteur suivant, comme en cas d'echec de routage (pile de voisinage vide). Solution : dans le cas de l'ALU1 (z==0), on n'examine que le voisin "au dessus" (le "top()").
This commit is contained in:
parent
cdc1adcf9d
commit
3bf490a308
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// $Id: AAstar.cpp,v 1.7 2002/10/31 09:30:00 hcl Exp $
|
||||
// $Id: AAstar.cpp,v 1.8 2002/11/17 16:40:13 jpc Exp $
|
||||
//
|
||||
// /----------------------------------------------------------------\
|
||||
// | |
|
||||
|
@ -311,6 +311,10 @@ void CAStar::CNodeAS::successors (CNodeASSet &NS, CNet *net, CNodeAS *(*success
|
|||
|
||||
if (neighbor.inside() && !neighbor.isnodehole()) {
|
||||
|
||||
// For z==0 (ALU1), the only allowed neighbor is the "top",
|
||||
// as we must never use z==0 layer to route even contiguous pins.
|
||||
if ((point.z() == 0) && edge < 5) continue;
|
||||
|
||||
pNodeAS = AS (neighbor);
|
||||
if (!pNodeAS) {
|
||||
pNodeAS = new (NS) CNodeAS (neighbor);
|
||||
|
@ -556,9 +560,9 @@ void CAStar::load (CNet *pNet, int delta, int expand)
|
|||
net->unroute ();
|
||||
_tree.addterm (*(net->terms[0]));
|
||||
|
||||
//cerr << " Starting term := \""
|
||||
// << net->terms[0]->name
|
||||
// << "\"\n";
|
||||
cdebug << " Starting term := \""
|
||||
<< net->terms[0]->name
|
||||
<< "\"\n";
|
||||
}
|
||||
|
||||
|
||||
|
@ -650,10 +654,10 @@ bool CAStar::nexttarget (void)
|
|||
for (i = 0; i < net->size; i++) {
|
||||
if (_tree.reached.find (i) == endSet) {
|
||||
_tree.settarget ( net->terms[i]->lowest() );
|
||||
//cerr << " Next target := \""
|
||||
// << net->terms[i]->name
|
||||
// << " (index := " << i << ")"
|
||||
// << endl;
|
||||
cdebug << " Next target := \""
|
||||
<< net->terms[i]->name
|
||||
<< " (index := " << i << ")"
|
||||
<< "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -816,7 +820,7 @@ void CAStar::dump (void)
|
|||
iterations_reroute = 0;
|
||||
iterations_kind = &iterations_route;
|
||||
|
||||
//if (pNet->name == "ram_banc1_nadr2x") cdebug.on ();
|
||||
//if (pNet->name == "cmdy_ts6") cdebug.on ();
|
||||
|
||||
do {
|
||||
if (hysteresis) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// $Id: nero.cpp,v 1.4 2002/11/04 14:43:08 jpc Exp $
|
||||
// $Id: nero.cpp,v 1.5 2002/11/17 16:40:14 jpc Exp $
|
||||
//
|
||||
// /----------------------------------------------------------------\
|
||||
// | |
|
||||
|
@ -94,7 +94,7 @@ static void help (void)
|
|||
|
||||
static void serial (void)
|
||||
{
|
||||
cout << " S/N 20021104.1\n";
|
||||
cout << " S/N 20021117.1\n";
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue