From fad67c54e002ccc1c9673168c03fdc687dd98e59 Mon Sep 17 00:00:00 2001 From: Ludovic Jacomme Date: Sun, 23 May 2004 09:50:43 +0000 Subject: [PATCH] - Bug fix: Segmentation fault when the input netlist has unconnected signals Those unused nets are now removed from the input lofig after the flatten. --- alliance/src/ocr/src/rout/ocrRouter.c | 54 ++++++++++++++++++--- alliance/src/ocr/src/util/ocrInitDataBase.c | 14 +++--- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/alliance/src/ocr/src/rout/ocrRouter.c b/alliance/src/ocr/src/rout/ocrRouter.c index c524920e..31c18fac 100644 --- a/alliance/src/ocr/src/rout/ocrRouter.c +++ b/alliance/src/ocr/src/rout/ocrRouter.c @@ -1,8 +1,12 @@ /* ### -------------------------------------------------- ### - $Author: hcl $ - $Date: 2002/06/27 09:09:01 $ + $Author: ludo $ + $Date: 2004/05/23 09:50:42 $ $Log: ocrRouter.c,v $ + Revision 1.8 2004/05/23 09:50:42 ludo + - Bug fix: Segmentation fault when the input netlist has unconnected signals + Those unused nets are now removed from the input lofig after the flatten. + Revision 1.7 2002/06/27 09:09:01 hcl Code d'erreur si tous les signaux ne sont pas routés. @@ -179,6 +183,43 @@ phfig_list *readPhFig(char *i_sPhFigName) return l_pPhFig; } +lofig_list *readLoFig(char *i_sLoFigName) +{ + lofig_list *ScanLoFig; + losig_list *ScanLoSig; + losig_list *DelLoSig; + ptype_list *ScanPType; + chain_list *ScanChain; + + ScanLoFig = getlofig(i_sLoFigName, 'A'); + rflattenlofig( ScanLoFig, YES, YES); + + display(LEVEL, DEBUG, "%s\n", "o Dual connectique ..."); + // Création d'une vue duale de la connectique + lofigchain( ScanLoFig ); + + ScanLoSig = ScanLoFig->LOSIG; + + while ( ScanLoSig != (losig_list *)0 ) + { + ScanPType = getptype( ScanLoSig->USER, (long)LOFIGCHAIN); + DelLoSig = ScanLoSig; + ScanLoSig = ScanLoSig->NEXT; + + if ( ScanPType != (ptype_list *)0 ) + { + ScanChain = (chain_list *)ScanPType->DATA; + + if ( ScanChain == (chain_list *)0 ) + { + dellosig( ScanLoFig, DelLoSig->INDEX ); + } + } + } + + return( ScanLoFig ); +} + ocrSignal *findSignal(ocrRoutingDataBase * i_pDataBase, ocrNaturalInt i_uIndex) { @@ -1259,14 +1300,11 @@ int main(int argc, char **argv) // Lecture de la vue physique l_pPhFig = readPhFig(l_sPhFigName); - // Lecture de la vue logique - l_pLoFig = getlofig(l_sLoFigName, 'A'); - -//FIXME::pas de reentrance - rflattenlofig(l_pLoFig, YES, YES); - display(LEVEL, VERBOSE, "%s\n", "o Read .vst ..."); + // Lecture de la vue logique + l_pLoFig = readLoFig(l_sLoFigName ); + // l_pDataBase = initDataBase(l_pPhFig, l_pLoFig); // un peu de ménage. diff --git a/alliance/src/ocr/src/util/ocrInitDataBase.c b/alliance/src/ocr/src/util/ocrInitDataBase.c index 5cdb20c2..a4c563e8 100644 --- a/alliance/src/ocr/src/util/ocrInitDataBase.c +++ b/alliance/src/ocr/src/util/ocrInitDataBase.c @@ -1,8 +1,12 @@ /* ### -------------------------------------------------- ### - $Author: hcl $ - $Date: 2002/03/15 14:37:27 $ + $Author: ludo $ + $Date: 2004/05/23 09:50:43 $ $Log: ocrInitDataBase.c,v $ + Revision 1.2 2004/05/23 09:50:43 ludo + - Bug fix: Segmentation fault when the input netlist has unconnected signals + Those unused nets are now removed from the input lofig after the flatten. + Revision 1.1 2002/03/15 14:37:27 hcl Ca roule. @@ -43,7 +47,7 @@ #include "ocrInitDataBase.h" static char *res_id = - "$Id: ocrInitDataBase.c,v 1.1 2002/03/15 14:37:27 hcl Exp $"; + "$Id: ocrInitDataBase.c,v 1.2 2004/05/23 09:50:43 ludo Exp $"; extern ocrOption *g_pOption; #define LEVEL (g_pOption->LEVEL) @@ -59,10 +63,6 @@ ocrRoutingDataBase *initDataBase(phfig_list * i_pPhFig, // Création de la base de donnée l_pDataBase = createDataBase(i_pPhFig); - // Création d'une vue duale de la connectique - lofigchain(i_pLoFig); - display(LEVEL, DEBUG, "%s\n", "o Dual connectique ..."); - // paramtères physiques de la grille 5*5 viacost=2 Layer paires = HORZ l_pDataBase->PARAM = setParameters(5, 5, 2, ocrHorizontal);