* ./alliance/src/nero :
- New feature : explicit selection of nets to route. - Patch for gcc 4.3 (from Thibault North). - Bug correction from G. Petley on "yoffset" in mbksave.
This commit is contained in:
parent
2c032796cc
commit
0118f02c3f
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: ADefs.h,v 1.3 2002/10/29 18:46:03 jpc Exp $
|
// $Id: ADefs.h,v 1.4 2008/06/11 09:20:34 jpc Exp $
|
||||||
//
|
//
|
||||||
// /-----------------------------------------------------------------\
|
// /-----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -138,7 +138,7 @@
|
||||||
|
|
||||||
// Allocators.
|
// Allocators.
|
||||||
private: static void *operator new (size_t size);
|
private: static void *operator new (size_t size);
|
||||||
private: static void operator delete (void *zone);
|
public: static void operator delete (void *zone);
|
||||||
public: static void *operator new (size_t size, CNodeASSet &NS);
|
public: static void *operator new (size_t size, CNodeASSet &NS);
|
||||||
|
|
||||||
// Modifiers.
|
// Modifiers.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: MDefs.h,v 1.8 2005/10/10 15:34:05 jpc Exp $
|
// $Id: MDefs.h,v 1.9 2008/06/11 09:20:34 jpc Exp $
|
||||||
//
|
//
|
||||||
// /-----------------------------------------------------------------\
|
// /-----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -25,6 +25,8 @@
|
||||||
|
|
||||||
|
|
||||||
# include "UDefs.h"
|
# include "UDefs.h"
|
||||||
|
# include <limits.h>
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: MMBK.cpp,v 1.8 2005/10/17 23:11:05 jpc Exp $
|
// $Id: MMBK.cpp,v 1.9 2008/06/11 09:20:34 jpc Exp $
|
||||||
//
|
//
|
||||||
// /-----------------------------------------------------------------\
|
// /-----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -468,7 +468,6 @@ ostream &operator<< (ostream &o, const CEnv &self)
|
||||||
CLofig::CLofig (string &name)
|
CLofig::CLofig (string &name)
|
||||||
{
|
{
|
||||||
loins_list *pLoins;
|
loins_list *pLoins;
|
||||||
losig_list *pLosig;
|
|
||||||
|
|
||||||
|
|
||||||
cmess1 << " o Loading netlist \"" << name << "\"...\n";
|
cmess1 << " o Loading netlist \"" << name << "\"...\n";
|
||||||
|
@ -478,11 +477,6 @@ CLofig::CLofig (string &name)
|
||||||
for (pLoins = fig->LOINS; pLoins != NULL; pLoins = pLoins->NEXT) {
|
for (pLoins = fig->LOINS; pLoins != NULL; pLoins = pLoins->NEXT) {
|
||||||
instances[pLoins->INSNAME] = pLoins;
|
instances[pLoins->INSNAME] = pLoins;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the signal dictionnary.
|
|
||||||
for (pLosig = fig->LOSIG; pLosig != NULL; pLosig = pLosig->NEXT) {
|
|
||||||
signals[getsigname(pLosig)] = pLosig;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -505,6 +499,8 @@ CLofig::~CLofig (void)
|
||||||
void CLofig::rflatten (char concat, char catal)
|
void CLofig::rflatten (char concat, char catal)
|
||||||
{
|
{
|
||||||
loins_list *pLoins;
|
loins_list *pLoins;
|
||||||
|
losig_list *pLosig;
|
||||||
|
chain_list *pChain;
|
||||||
|
|
||||||
|
|
||||||
cmess2 << " o Flattening netlist...\n";
|
cmess2 << " o Flattening netlist...\n";
|
||||||
|
@ -515,6 +511,15 @@ void CLofig::rflatten (char concat, char catal)
|
||||||
for (pLoins = fig->LOINS; pLoins != NULL; pLoins = pLoins->NEXT) {
|
for (pLoins = fig->LOINS; pLoins != NULL; pLoins = pLoins->NEXT) {
|
||||||
instances[pLoins->INSNAME] = pLoins;
|
instances[pLoins->INSNAME] = pLoins;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Build the signal dictionnary.
|
||||||
|
// Load all name aliases.
|
||||||
|
for (pLosig = fig->LOSIG; pLosig != NULL; pLosig = pLosig->NEXT) {
|
||||||
|
//signals[getsigname(pLosig)] = pLosig;
|
||||||
|
for (pChain = pLosig->NAMECHAIN ; pChain !=NULL; pChain = pChain->NEXT) {
|
||||||
|
signals[(char*)pChain->DATA] = pLosig;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: RDefs.h,v 1.4 2005/10/10 15:34:06 jpc Exp $
|
// $Id: RDefs.h,v 1.5 2008/06/11 09:20:34 jpc Exp $
|
||||||
//
|
//
|
||||||
// /-----------------------------------------------------------------\
|
// /-----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -70,7 +70,8 @@
|
||||||
, int zup
|
, int zup
|
||||||
, int rtype
|
, int rtype
|
||||||
, bool halfpitch
|
, bool halfpitch
|
||||||
, bool rotate );
|
, bool rotate
|
||||||
|
, set<string>* subNetList=NULL );
|
||||||
public: void mbksave (string &name) throw (except_done);
|
public: void mbksave (string &name) throw (except_done);
|
||||||
public: void route (void);
|
public: void route (void);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: RMBK.cpp,v 1.16 2006/04/12 16:33:00 jpc Exp $
|
// $Id: RMBK.cpp,v 1.17 2008/06/11 09:20:34 jpc Exp $
|
||||||
//
|
//
|
||||||
// /----------------------------------------------------------------\
|
// /----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -38,10 +38,12 @@ void CRBox::mbkload (MBK::CFig *mbkfig
|
||||||
, int zup
|
, int zup
|
||||||
, int rtype
|
, int rtype
|
||||||
, bool halfpitch
|
, bool halfpitch
|
||||||
, bool rotate )
|
, bool rotate
|
||||||
|
, set<string>* subNetList )
|
||||||
{
|
{
|
||||||
MBK::MIns::iterator itIns, endInstances, endOrphans;
|
MBK::MIns::iterator itIns, endInstances, endOrphans;
|
||||||
MBK::MLosig::iterator endSig;
|
MBK::MLosig::iterator endSig;
|
||||||
|
MBK::MLosig::iterator sig;
|
||||||
long mX, mY, mZ, x, y, zz, xadjust, yadjust, yoffsetslice;
|
long mX, mY, mZ, x, y, zz, xadjust, yadjust, yoffsetslice;
|
||||||
long XRW1, YRW1, XRW2, YRW2;
|
long XRW1, YRW1, XRW2, YRW2;
|
||||||
bool use_global;
|
bool use_global;
|
||||||
|
@ -327,7 +329,8 @@ void CRBox::mbkload (MBK::CFig *mbkfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// Partially routed signals.
|
// Partially routed signals.
|
||||||
if (fig->lofig.signals.find(pSeg->NAME) == endSig) {
|
sig = fig->lofig.signals.find(pSeg->NAME);
|
||||||
|
if ( sig == endSig) {
|
||||||
cerr << hwarn ("")
|
cerr << hwarn ("")
|
||||||
<< " The segment \"" << pSeg->NAME << "\" at ("
|
<< " The segment \"" << pSeg->NAME << "\" at ("
|
||||||
<< MBK::UNSCALE (pSeg->X1) << ","
|
<< MBK::UNSCALE (pSeg->X1) << ","
|
||||||
|
@ -340,7 +343,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pNet = getnet (pSeg->NAME);
|
pNet = getnet (getsigname(sig->second));
|
||||||
if ( !pNet->fixed ) {
|
if ( !pNet->fixed ) {
|
||||||
cmess2 << " o Signal " << pNet->name << " is assumed to be routed.\n";
|
cmess2 << " o Signal " << pNet->name << " is assumed to be routed.\n";
|
||||||
pNet->fixed = true;
|
pNet->fixed = true;
|
||||||
|
@ -542,6 +545,17 @@ void CRBox::mbkload (MBK::CFig *mbkfig
|
||||||
cdebug << "+ " << pNet->bb << ".\n";
|
cdebug << "+ " << pNet->bb << ".\n";
|
||||||
} // End of "pSig" (signal) loop.
|
} // End of "pSig" (signal) loop.
|
||||||
|
|
||||||
|
// Restrict routed nets to the subNetList.
|
||||||
|
if ( subNetList ) {
|
||||||
|
for ( MNet::iterator it=nets.begin() ; it != nets.end() ; it++ ) {
|
||||||
|
if ( subNetList->find(it->first) != subNetList->end() ) {
|
||||||
|
cmess2 << " o Restricting nets to route.\n";
|
||||||
|
cmess2 << " - \"" << it->first << "\".\n";
|
||||||
|
} else
|
||||||
|
it->second->fixed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Allocate the net scheduler.
|
// Allocate the net scheduler.
|
||||||
cmess2 << " o Allocating the net scheduler.\n";
|
cmess2 << " o Allocating the net scheduler.\n";
|
||||||
|
@ -579,7 +593,7 @@ void CRBox::mbkload (MBK::CFig *mbkfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bottom & top horizontal edges.
|
// Bottom & top horizontal edges.
|
||||||
if ( xadjust == 0 ) {
|
if ( yadjust == 0 ) {
|
||||||
for (y = 0; y < mY; y += mY - 1) {
|
for (y = 0; y < mY; y += mY - 1) {
|
||||||
for (x = 0; x < mX; x++) {
|
for (x = 0; x < mX; x++) {
|
||||||
for (zz = 1; zz < mZ; zz++) {
|
for (zz = 1; zz < mZ; zz++) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// $Id: nero.cpp,v 1.11 2006/04/12 16:33:00 jpc Exp $
|
// $Id: nero.cpp,v 1.12 2008/06/11 09:20:35 jpc Exp $
|
||||||
//
|
//
|
||||||
// /----------------------------------------------------------------\
|
// /----------------------------------------------------------------\
|
||||||
// | |
|
// | |
|
||||||
|
@ -79,6 +79,8 @@ static void help (void)
|
||||||
<< " [-6|--layers-6] := Use only 6 routing layers.\n"
|
<< " [-6|--layers-6] := Use only 6 routing layers.\n"
|
||||||
<< " [-G|--global] := Force use of global routing.\n"
|
<< " [-G|--global] := Force use of global routing.\n"
|
||||||
<< " [-L|--local] := Disable use of global routing.\n"
|
<< " [-L|--local] := Disable use of global routing.\n"
|
||||||
|
<< " [-N]--netset <netset>] :=\n"
|
||||||
|
<< " Route only this subset of nets.\n"
|
||||||
<< " [-p|--place <placement>] :=\n"
|
<< " [-p|--place <placement>] :=\n"
|
||||||
<< " Name of the layout file holding the placement, without\n"
|
<< " Name of the layout file holding the placement, without\n"
|
||||||
<< " extention. If ommited the layout file is assumed to have\n"
|
<< " extention. If ommited the layout file is assumed to have\n"
|
||||||
|
@ -96,7 +98,7 @@ static void help (void)
|
||||||
|
|
||||||
static void serial (void)
|
static void serial (void)
|
||||||
{
|
{
|
||||||
cout << " S/N 20051017.1\n";
|
cout << " S/N 20080611.1\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,10 +138,11 @@ void emergency (void)
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
COpts options;
|
COpts options;
|
||||||
MBK::CFig *fig;
|
MBK::CFig *fig;
|
||||||
string name_lofig, name_placed, name_routed;
|
string name_lofig, name_placed, name_routed;
|
||||||
int layers, global;
|
int layers, global;
|
||||||
|
set<string>* netSet = NULL;
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -157,6 +160,7 @@ int main (int argc, char *argv[])
|
||||||
options.add ("G", "global");
|
options.add ("G", "global");
|
||||||
options.add ("L", "local");
|
options.add ("L", "local");
|
||||||
options.add ("p", "place", true);
|
options.add ("p", "place", true);
|
||||||
|
options.add ("N", "netset", true);
|
||||||
options.getopts (argc, argv);
|
options.getopts (argc, argv);
|
||||||
|
|
||||||
if (options["c"]->parsed) interrupt.coredump = true;
|
if (options["c"]->parsed) interrupt.coredump = true;
|
||||||
|
@ -200,6 +204,25 @@ int main (int argc, char *argv[])
|
||||||
name_placed = name_lofig;
|
name_placed = name_lofig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options["N"]->parsed) {
|
||||||
|
string fileNetSet = options["N"]->value;
|
||||||
|
cout << "File: " << fileNetSet << endl;
|
||||||
|
FILE* file = fopen ( fileNetSet.c_str(), "r" );
|
||||||
|
if ( file ) {
|
||||||
|
cout << "File Sucessfully opened." << endl;
|
||||||
|
netSet = new set<string>();
|
||||||
|
char buffer[2048];
|
||||||
|
while ( !feof(file) ) {
|
||||||
|
fgets ( buffer, 2048, file );
|
||||||
|
size_t length = strlen(buffer);
|
||||||
|
if ( buffer[length-1] == '\n' )
|
||||||
|
buffer[length-1] = '\0';
|
||||||
|
netSet->insert ( buffer );
|
||||||
|
}
|
||||||
|
fclose ( file );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
layers = 3;
|
layers = 3;
|
||||||
if (options["2"]->parsed) layers = 3;
|
if (options["2"]->parsed) layers = 3;
|
||||||
if (options["3"]->parsed) layers = 4;
|
if (options["3"]->parsed) layers = 4;
|
||||||
|
@ -226,10 +249,13 @@ int main (int argc, char *argv[])
|
||||||
, 4
|
, 4
|
||||||
, global
|
, global
|
||||||
, options["H"]->parsed
|
, options["H"]->parsed
|
||||||
, options["R"]->parsed );
|
, options["R"]->parsed
|
||||||
|
, netSet );
|
||||||
//cdebug.off ();
|
//cdebug.off ();
|
||||||
crbox->route ();
|
crbox->route ();
|
||||||
crbox->mbksave (name_routed);
|
crbox->mbksave (name_routed);
|
||||||
|
|
||||||
|
if ( netSet ) delete netSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue