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)
|
AC_INIT(src/lon_main.c)
|
||||||
|
|
||||||
LOON_MAJOR_VERSION=1
|
LOON_MAJOR_VERSION=1
|
||||||
LOON_MINOR_VERSION=6
|
LOON_MINOR_VERSION=7
|
||||||
LOON_VERSION=$LOON_MAJOR_VERSION.$LOON_MINOR_VERSION
|
LOON_VERSION=$LOON_MAJOR_VERSION.$LOON_MINOR_VERSION
|
||||||
|
|
||||||
AC_SUBST(LOON_MAJOR_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)
|
extern int format_cell(befig_list* befig)
|
||||||
{
|
{
|
||||||
beaux_list *beaux;
|
beaux_list *beaux;
|
||||||
|
biabl_list *biabl;
|
||||||
|
|
||||||
/*internal signal forbidden*/
|
/*internal signal forbidden*/
|
||||||
for ( beaux = befig->BEAUX; beaux; beaux = beaux->NEXT )
|
for ( beaux = befig->BEAUX; beaux; beaux = beaux->NEXT )
|
||||||
|
@ -223,8 +224,10 @@ extern int format_cell(befig_list* befig)
|
||||||
if (befig->BEREG) {
|
if (befig->BEREG) {
|
||||||
/*only one register*/
|
/*only one register*/
|
||||||
if (befig->BEREG->NEXT || befig->BEBUS || befig->BEBUX) return 0;
|
if (befig->BEREG->NEXT || befig->BEBUS || befig->BEBUX) return 0;
|
||||||
|
#if 0 /*to accept multiple condition block*/
|
||||||
/*only one condition*/
|
/*only one condition*/
|
||||||
if (!befig->BEREG->BIABL || befig->BEREG->BIABL->NEXT) return 0;
|
if (!befig->BEREG->BIABL || befig->BEREG->BIABL->NEXT) return 0;
|
||||||
|
#endif
|
||||||
/*one ouput*/
|
/*one ouput*/
|
||||||
if (!befig->BEOUT || befig->BEOUT->NEXT) return 0;
|
if (!befig->BEOUT || befig->BEOUT->NEXT) return 0;
|
||||||
/* forbid logic on output */
|
/* forbid logic on output */
|
||||||
|
@ -237,8 +240,9 @@ extern int format_cell(befig_list* befig)
|
||||||
/* output <= not reg; -> move not to register value*/
|
/* output <= not reg; -> move not to register value*/
|
||||||
freeablexpr(befig->BEOUT->ABL);
|
freeablexpr(befig->BEOUT->ABL);
|
||||||
befig->BEOUT->ABL=createablatom(befig->BEREG->NAME);
|
befig->BEOUT->ABL=createablatom(befig->BEREG->NAME);
|
||||||
befig->BEREG->BIABL->VALABL=simpablexpr(
|
for (biabl=befig->BEREG->BIABL; biabl; biabl=biabl->NEXT) {
|
||||||
createablnotexpr(befig->BEREG->BIABL->VALABL));
|
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)
|
extern int compare_befig(befig_list* befig1, befig_list* befig2)
|
||||||
{
|
{
|
||||||
|
biabl_list *biabl1;
|
||||||
|
biabl_list *biabl2;
|
||||||
|
|
||||||
if (befig1->BEBUS) {
|
if (befig1->BEBUS) {
|
||||||
if (!befig2->BEBUS) return 0;
|
if (!befig2->BEBUS) return 0;
|
||||||
return isablequalexpr(befig1->BEBUS->BIABL->VALABL,befig2->BEBUS->BIABL->VALABL) && isablequalexpr(befig1->BEBUS->BIABL->CNDABL,befig2->BEBUS->BIABL->CNDABL);
|
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) {
|
else if (befig1->BEREG) {
|
||||||
if (!befig2->BEREG) return 0;
|
if (!befig2->BEREG) return 0;
|
||||||
/*flip-flop or latch*/
|
/*flip-flop or latch*/
|
||||||
if (getptype(befig1->BEREG->BIABL->USER,ABL_STABLE)!=getptype(befig2->BEREG->BIABL->USER,ABL_STABLE)) return 0;
|
for ( biabl1 = befig1->BEREG->BIABL; biabl1; biabl1 = biabl1->NEXT )
|
||||||
return isablequalexpr(befig1->BEREG->BIABL->VALABL,befig2->BEREG->BIABL->VALABL) && isablequalexpr(befig1->BEREG->BIABL->CNDABL,befig2->BEREG->BIABL->CNDABL);
|
{
|
||||||
|
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) {
|
else if (befig1->BEOUT) {
|
||||||
if (!befig2->BEOUT) return 0;
|
if (!befig2->BEOUT) return 0;
|
||||||
|
|
|
@ -253,7 +253,7 @@ extern int main (int argc, char* argv[])
|
||||||
bddenv(); /*for vhdlloadbefig() in library reader*/
|
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");
|
"2000", ALLIANCE_VERSION, "François Donnet");
|
||||||
|
|
||||||
/*set options*/
|
/*set options*/
|
||||||
|
|
|
@ -111,12 +111,14 @@ static int loc_format_register(bereg_list* bereg)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0 /*to accept multiple condition block*/
|
||||||
/*only one condition authorized*/
|
/*only one condition authorized*/
|
||||||
if (bereg->BIABL->NEXT) {
|
if (bereg->BIABL->NEXT) {
|
||||||
fprintf(stderr,"BEH: several conditions aren't accepted on register %s\n",
|
fprintf(stderr,"BEH: several conditions aren't accepted on register %s\n",
|
||||||
bereg->NAME);
|
bereg->NAME);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*anyway control all condition block*/
|
/*anyway control all condition block*/
|
||||||
for (biabl=bereg->BIABL; biabl; biabl=biabl->NEXT) {
|
for (biabl=bereg->BIABL; biabl; biabl=biabl->NEXT) {
|
||||||
|
|
Loading…
Reference in New Issue