pour que loon accepte les registres avec multiples conditions

i.e plusieurs blocks dont des reset asynchrones.
This commit is contained in:
Francois Donnet 2003-10-27 15:27:45 +00:00
parent 5e7e9bfeb7
commit a4bf03dd8f
5 changed files with 34 additions and 6 deletions

View File

@ -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)

View File

@ -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));
}
}
}

View File

@ -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;

View File

@ -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*/

View File

@ -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) {