diff --git a/alliance/src/loon/configure.in b/alliance/src/loon/configure.in index 55ba8a70..e68410bd 100644 --- a/alliance/src/loon/configure.in +++ b/alliance/src/loon/configure.in @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(src/lon_main.c) LOON_MAJOR_VERSION=1 -LOON_MINOR_VERSION=6 +LOON_MINOR_VERSION=7 LOON_VERSION=$LOON_MAJOR_VERSION.$LOON_MINOR_VERSION AC_SUBST(LOON_MAJOR_VERSION) diff --git a/alliance/src/loon/src/lon_lib_format.c b/alliance/src/loon/src/lon_lib_format.c index ad15fc84..cefb7110 100644 --- a/alliance/src/loon/src/lon_lib_format.c +++ b/alliance/src/loon/src/lon_lib_format.c @@ -212,6 +212,7 @@ static void format_subst_befig( befig_list *befig, beaux_list *BeauxSubst ) extern int format_cell(befig_list* befig) { beaux_list *beaux; + biabl_list *biabl; /*internal signal forbidden*/ for ( beaux = befig->BEAUX; beaux; beaux = beaux->NEXT ) @@ -223,8 +224,10 @@ extern int format_cell(befig_list* befig) if (befig->BEREG) { /*only one register*/ if (befig->BEREG->NEXT || befig->BEBUS || befig->BEBUX) return 0; +#if 0 /*to accept multiple condition block*/ /*only one condition*/ if (!befig->BEREG->BIABL || befig->BEREG->BIABL->NEXT) return 0; +#endif /*one ouput*/ if (!befig->BEOUT || befig->BEOUT->NEXT) return 0; /* forbid logic on output */ @@ -237,8 +240,9 @@ extern int format_cell(befig_list* befig) /* output <= not reg; -> move not to register value*/ freeablexpr(befig->BEOUT->ABL); befig->BEOUT->ABL=createablatom(befig->BEREG->NAME); - befig->BEREG->BIABL->VALABL=simpablexpr( - createablnotexpr(befig->BEREG->BIABL->VALABL)); + for (biabl=befig->BEREG->BIABL; biabl; biabl=biabl->NEXT) { + biabl->VALABL=simpablexpr(createablnotexpr(biabl->VALABL)); + } } } diff --git a/alliance/src/loon/src/lon_lib_matching.c b/alliance/src/loon/src/lon_lib_matching.c index 0aae2f2f..fb148805 100644 --- a/alliance/src/loon/src/lon_lib_matching.c +++ b/alliance/src/loon/src/lon_lib_matching.c @@ -148,6 +148,9 @@ extern int pattern_matching(chain_list* expr, chain_list* pattern) /****************************************************************************/ extern int compare_befig(befig_list* befig1, befig_list* befig2) { + biabl_list *biabl1; + biabl_list *biabl2; + if (befig1->BEBUS) { if (!befig2->BEBUS) return 0; return isablequalexpr(befig1->BEBUS->BIABL->VALABL,befig2->BEBUS->BIABL->VALABL) && isablequalexpr(befig1->BEBUS->BIABL->CNDABL,befig2->BEBUS->BIABL->CNDABL); @@ -155,8 +158,27 @@ extern int compare_befig(befig_list* befig1, befig_list* befig2) else if (befig1->BEREG) { if (!befig2->BEREG) return 0; /*flip-flop or latch*/ - if (getptype(befig1->BEREG->BIABL->USER,ABL_STABLE)!=getptype(befig2->BEREG->BIABL->USER,ABL_STABLE)) return 0; - return isablequalexpr(befig1->BEREG->BIABL->VALABL,befig2->BEREG->BIABL->VALABL) && isablequalexpr(befig1->BEREG->BIABL->CNDABL,befig2->BEREG->BIABL->CNDABL); + for ( biabl1 = befig1->BEREG->BIABL; biabl1; biabl1 = biabl1->NEXT ) + { + for ( biabl2 = befig2->BEREG->BIABL; biabl2; biabl2 = biabl2->NEXT ) + { + if ( getptype(biabl1->USER,ABL_STABLE)!=getptype(biabl2->USER,ABL_STABLE) ) continue; + if ( isablequalexpr(biabl1->VALABL,biabl2->VALABL) && isablequalexpr(biabl1->CNDABL,biabl2->CNDABL) ) break; + } + /*equivalence not found*/ + if ( !biabl2 ) return 0; + } + for ( biabl2 = befig2->BEREG->BIABL; biabl2; biabl2 = biabl2->NEXT ) + { + for ( biabl1 = befig1->BEREG->BIABL; biabl1; biabl1 = biabl1->NEXT ) + { + if ( getptype(biabl1->USER,ABL_STABLE)!=getptype(biabl2->USER,ABL_STABLE) ) continue; + if ( isablequalexpr(biabl1->VALABL,biabl2->VALABL) && isablequalexpr(biabl1->CNDABL,biabl2->CNDABL) ) break; + } + /*equivalence not found*/ + if ( !biabl1 ) return 0; + } + return 1; } else if (befig1->BEOUT) { if (!befig2->BEOUT) return 0; diff --git a/alliance/src/loon/src/lon_main.c b/alliance/src/loon/src/lon_main.c index ecb854ca..4f41130d 100644 --- a/alliance/src/loon/src/lon_main.c +++ b/alliance/src/loon/src/lon_main.c @@ -253,7 +253,7 @@ extern int main (int argc, char* argv[]) bddenv(); /*for vhdlloadbefig() in library reader*/ - alliancebanner_with_authors("LooN", VERSION " [2002/11/08]", "Local optimization on Nets", + alliancebanner_with_authors("LooN", VERSION " [2003/10/27]", "Local optimization on Nets", "2000", ALLIANCE_VERSION, "François Donnet"); /*set options*/ diff --git a/alliance/src/loon/src/lon_normalize_register.c b/alliance/src/loon/src/lon_normalize_register.c index 322ceece..24a46304 100644 --- a/alliance/src/loon/src/lon_normalize_register.c +++ b/alliance/src/loon/src/lon_normalize_register.c @@ -111,12 +111,14 @@ static int loc_format_register(bereg_list* bereg) exit(1); } +#if 0 /*to accept multiple condition block*/ /*only one condition authorized*/ if (bereg->BIABL->NEXT) { fprintf(stderr,"BEH: several conditions aren't accepted on register %s\n", bereg->NAME); return 0; } +#endif /*anyway control all condition block*/ for (biabl=bereg->BIABL; biabl; biabl=biabl->NEXT) {