summaryrefslogtreecommitdiffstats
path: root/src/map
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-01-15 09:15:10 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-01-15 09:15:10 -0800
commit1f0e5533dc32c8c3543dece554a148815c7d49c2 (patch)
tree2bc16805e6f2c2b3fc8fc53aca215c5b19caa76d /src/map
parent60a84f7350f6a4a07342c99fa28821574700a6bf (diff)
downloadabc-1f0e5533dc32c8c3543dece554a148815c7d49c2.tar.gz
abc-1f0e5533dc32c8c3543dece554a148815c7d49c2.tar.bz2
abc-1f0e5533dc32c8c3543dece554a148815c7d49c2.zip
Several small bug fixes in the mapper.
Diffstat (limited to 'src/map')
-rw-r--r--src/map/if/if.h4
-rw-r--r--src/map/if/ifMap.c5
2 files changed, 6 insertions, 3 deletions
diff --git a/src/map/if/if.h b/src/map/if/if.h
index 85de7026..ea830065 100644
--- a/src/map/if/if.h
+++ b/src/map/if/if.h
@@ -51,7 +51,7 @@ ABC_NAMESPACE_HEADER_START
// a very large number
#define IF_INFINITY 100000000
// the largest possible user cut cost
-#define IF_COST_MAX ((1<<14)-1)
+#define IF_COST_MAX 8191 // ((1<<13)-1)
// object types
typedef enum {
@@ -216,7 +216,7 @@ struct If_Cut_t_
float Power; // the power flow
float Delay; // delay of the cut
unsigned uSign; // cut signature
- unsigned Cost : 13; // the user's cost of the cut
+ unsigned Cost : 13; // the user's cost of the cut (related to IF_COST_MAX)
unsigned fCompl : 1; // the complemented attribute
unsigned fUser : 1; // using the user's area and delay
unsigned fUseless: 1; // using the user's area and delay
diff --git a/src/map/if/ifMap.c b/src/map/if/ifMap.c
index a845f177..c6547fce 100644
--- a/src/map/if/ifMap.c
+++ b/src/map/if/ifMap.c
@@ -180,6 +180,7 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
If_ObjForEachCut( pObj->pFanin0, pCut0, i )
If_ObjForEachCut( pObj->pFanin1, pCut1, k )
{
+
// get the next free cut
assert( pCutSet->nCuts <= pCutSet->nCutsMax );
pCut = pCutSet->ppCuts[pCutSet->nCuts];
@@ -227,11 +228,13 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
/// pCut->Delay = If_CutDelayLutStruct( p, pCut, p->pPars->pLutStruct, p->pPars->WireDelay );
// else if ( p->pPars->fDelayOpt )
if ( p->pPars->fUserRecLib )
- pCut->Delay = If_CutDelayRecCost(p, pCut);
+ pCut->Delay = If_CutDelayRecCost(p, pCut);
else if (p->pPars->fDelayOpt)
pCut->Delay = If_CutDelaySopCost(p, pCut);
else
pCut->Delay = If_CutDelay( p, pObj, pCut );
+ if ( pCut->Cost == IF_COST_MAX )
+ continue;
// Abc_Print( 1, "%.2f ", pCut->Delay );
if ( Mode && pCut->Delay > pObj->Required + p->fEpsilon )
continue;