pour que loon accepte les registres avec multiples conditions
i.e plusieurs blocks dont des reset asynchrones.
This commit is contained in:
parent
5e7e9bfeb7
commit
a4bf03dd8f
|
@ -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)
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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*/
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue