From 9fa827aacf2d081d9762753929545507b7a6be89 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Tue, 22 Jul 2014 10:13:40 -0700 Subject: Small improvement to SOP balancing. --- src/map/if/ifMap.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/map/if/ifMap.c') diff --git a/src/map/if/ifMap.c b/src/map/if/ifMap.c index 9f709411..5fa95fc1 100644 --- a/src/map/if/ifMap.c +++ b/src/map/if/ifMap.c @@ -122,12 +122,12 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep // recompute the parameters of the best cut if ( p->pPars->fDelayOpt ) pCut->Delay = If_CutSopBalanceEval( p, pCut, NULL ); - else if ( p->pPars->fDelayOptLut ) - pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if ( p->pPars->fDsdBalance ) pCut->Delay = If_CutDsdBalanceEval( p, pCut, NULL ); else if ( p->pPars->fUserRecLib ) pCut->Delay = If_CutDelayRecCost3( p, pCut, pObj ); + else if ( p->pPars->fDelayOptLut ) + pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if( p->pPars->nGateSize > 0 ) pCut->Delay = If_CutDelaySop( p, pCut ); else @@ -271,13 +271,25 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep continue; // check if the cut satisfies the required times if ( p->pPars->fDelayOpt ) + { pCut->Delay = If_CutSopBalanceEval( p, pCut, NULL ); - else if ( p->pPars->fDelayOptLut ) - pCut->Delay = If_CutLutBalanceEval( p, pCut ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } else if ( p->pPars->fDsdBalance ) + { pCut->Delay = If_CutDsdBalanceEval( p, pCut, NULL ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } else if ( p->pPars->fUserRecLib ) + { pCut->Delay = If_CutDelayRecCost3( p, pCut, pObj ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } + else if ( p->pPars->fDelayOptLut ) + pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if( p->pPars->nGateSize > 0 ) pCut->Delay = If_CutDelaySop( p, pCut ); else -- cgit v1.2.3