From ac16c95706af0121fe61ce9d24d4c0b4291733b4 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Thu, 1 Oct 2015 13:52:08 -0700 Subject: Bug fix in propagating required times in &nf (another issue). --- src/aig/gia/giaNf.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/aig/gia') diff --git a/src/aig/gia/giaNf.c b/src/aig/gia/giaNf.c index 7f9b83aa..441c32b5 100644 --- a/src/aig/gia/giaNf.c +++ b/src/aig/gia/giaNf.c @@ -1399,7 +1399,7 @@ void Nf_ManComputeMapping( Nf_Man_t * p ) void Nf_ManSetOutputRequireds( Nf_Man_t * p, int fPropCompl ) { Gia_Obj_t * pObj; - word Required = 0; + word Required = 0, WordMapDelayOld = p->pPars->WordMapDelay; int fUseConMan = Scl_ConIsRunning() && Scl_ConHasOutReqs(); int i, iObj, fCompl, nLits = 2*Gia_ManObjNum(p->pGia); Vec_WrdFill( &p->vRequired, nLits, NF_INFINITY ); @@ -1410,6 +1410,9 @@ void Nf_ManSetOutputRequireds( Nf_Man_t * p, int fPropCompl ) Required = Nf_ObjMatchD( p, Gia_ObjFaninId0p(p->pGia, pObj), Gia_ObjFaninC0(pObj) )->D; p->pPars->WordMapDelay = Abc_MaxWord( p->pPars->WordMapDelay, Required ); } + if ( p->Iter && WordMapDelayOld < p->pPars->WordMapDelay && p->pGia->vOutReqs == NULL ) + printf( "******** Critical delay violation %.2f -> %.2f ********\n", Nf_Wrd2Flt(WordMapDelayOld), Nf_Wrd2Flt(p->pPars->WordMapDelay) ); + p->pPars->WordMapDelay = Abc_MaxWord( p->pPars->WordMapDelay, WordMapDelayOld ); // check delay target if ( p->pPars->WordMapDelayTarget == 0 && p->pPars->nRelaxRatio ) p->pPars->WordMapDelayTarget = p->pPars->WordMapDelay * (100 + p->pPars->nRelaxRatio) / 100; @@ -2076,13 +2079,6 @@ void Nf_ManUpdateStats( Nf_Man_t * p ) Gia_Obj_t * pObj; Mio_Cell2_t * pCell; int i, c, Id, * pCut; - word WordMapDelayOld = p->pPars->WordMapDelay; - p->pPars->WordMapDelay = 0; - Gia_ManForEachCo( p->pGia, pObj, i ) - { - word Delay = Nf_ObjMatchD( p, Gia_ObjFaninId0p(p->pGia, pObj), Gia_ObjFaninC0(pObj) )->D; - p->pPars->WordMapDelay = Abc_MaxWord( p->pPars->WordMapDelay, Delay ); - } p->pPars->WordMapArea = 0; p->nInvs = 0; p->pPars->Area = p->pPars->Edge = 0; Gia_ManForEachAndReverse( p->pGia, pObj, i ) @@ -2127,8 +2123,6 @@ void Nf_ManUpdateStats( Nf_Man_t * p ) p->pPars->Area++; p->nInvs++; } - if ( p->Iter && WordMapDelayOld < p->pPars->WordMapDelay && p->pGia->vOutReqs == NULL ) - printf( "******** Critical delay violation %.2f -> %.2f ********\n", Nf_Wrd2Flt(WordMapDelayOld), Nf_Wrd2Flt(p->pPars->WordMapDelay) ); } /**Function************************************************************* -- cgit v1.2.3