diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2006-12-09 08:01:00 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2006-12-09 08:01:00 -0800 |
commit | b9abf9c00c02feb52a2c796199343acebe20d8ef (patch) | |
tree | de4ad845520c09f876309d89a60e13831360ad70 /src/map/if/ifUtil.c | |
parent | 4cf99cae95c629b31d6d89c5dcea2eeb17654c85 (diff) | |
download | abc-b9abf9c00c02feb52a2c796199343acebe20d8ef.tar.gz abc-b9abf9c00c02feb52a2c796199343acebe20d8ef.tar.bz2 abc-b9abf9c00c02feb52a2c796199343acebe20d8ef.zip |
Version abc61209
Diffstat (limited to 'src/map/if/ifUtil.c')
-rw-r--r-- | src/map/if/ifUtil.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/map/if/ifUtil.c b/src/map/if/ifUtil.c index 1144fa3f..bb8e3dee 100644 --- a/src/map/if/ifUtil.c +++ b/src/map/if/ifUtil.c @@ -44,10 +44,24 @@ float If_ManDelayMax( If_Man_t * p ) If_Obj_t * pObj; float DelayBest; int i; + if ( p->pPars->fLatchPaths && p->pPars->nLatches == 0 ) + { + printf( "Delay optimization of latch path is not performed because there is no latches.\n" ); + p->pPars->fLatchPaths = 0; + } DelayBest = -IF_FLOAT_LARGE; - If_ManForEachPo( p, pObj, i ) - if ( DelayBest < If_ObjCutBest( If_ObjFanin0(pObj) )->Delay ) - DelayBest = If_ObjCutBest( If_ObjFanin0(pObj) )->Delay; + if ( p->pPars->fLatchPaths ) + { + If_ManForEachLatch( p, pObj, i ) + if ( DelayBest < If_ObjCutBest( If_ObjFanin0(pObj) )->Delay ) + DelayBest = If_ObjCutBest( If_ObjFanin0(pObj) )->Delay; + } + else + { + If_ManForEachPo( p, pObj, i ) + if ( DelayBest < If_ObjCutBest( If_ObjFanin0(pObj) )->Delay ) + DelayBest = If_ObjCutBest( If_ObjFanin0(pObj) )->Delay; + } return DelayBest; } @@ -174,10 +188,8 @@ float If_ManScanMapping( If_Man_t * p ) ***********************************************************************/ void If_ManComputeRequired( If_Man_t * p, int fFirstTime ) { - If_Obj_t * pObj, * pLeaf; - If_Cut_t * pCutBest; - float Required; - int i, k; + If_Obj_t * pObj; + int i; // compute area, clean required times, collect nodes used in the mapping p->AreaGlo = If_ManScanMapping( p ); // get the global required times @@ -209,16 +221,8 @@ void If_ManComputeRequired( If_Man_t * p, int fFirstTime ) If_ObjFanin0(pObj)->Required = p->RequiredGlo; } // go through the nodes in the reverse topological order - Vec_PtrForEachEntry( p->vMapped, pObj, k ) - { - // get the best cut of the node - pCutBest = If_ObjCutBest(pObj); - // get the required times for the leaves of the cut - Required = pObj->Required - If_CutLutDelay( p, pCutBest ); - // update the required time of the leaves - If_CutForEachLeaf( p, pCutBest, pLeaf, i ) - pLeaf->Required = IF_MIN( pLeaf->Required, Required ); - } + Vec_PtrForEachEntry( p->vMapped, pObj, i ) + If_CutPropagateRequired( p, If_ObjCutBest(pObj), pObj->Required ); } |