Commit 1f0e5533 by Alan Mishchenko

Several small bug fixes in the mapper.

parent 60a84f73
...@@ -2243,8 +2243,8 @@ int If_CutDelayRecCost(If_Man_t* p, If_Cut_t* pCut) ...@@ -2243,8 +2243,8 @@ int If_CutDelayRecCost(If_Man_t* p, If_Cut_t* pCut)
if ( !Kit_TruthIsEqualWithPhase( pTruthRec, pInOut, nLeaves ) ) if ( !Kit_TruthIsEqualWithPhase( pTruthRec, pInOut, nLeaves ) )
{ {
assert( 0 ); assert( 0 );
return -1;
s_pMan->nIfMapError++; s_pMan->nIfMapError++;
return -1;
} }
// mark as user cut. // mark as user cut.
pCut->fUser = 1; pCut->fUser = 1;
......
...@@ -51,7 +51,7 @@ ABC_NAMESPACE_HEADER_START ...@@ -51,7 +51,7 @@ ABC_NAMESPACE_HEADER_START
// a very large number // a very large number
#define IF_INFINITY 100000000 #define IF_INFINITY 100000000
// the largest possible user cut cost // the largest possible user cut cost
#define IF_COST_MAX ((1<<14)-1) #define IF_COST_MAX 8191 // ((1<<13)-1)
// object types // object types
typedef enum { typedef enum {
...@@ -216,7 +216,7 @@ struct If_Cut_t_ ...@@ -216,7 +216,7 @@ struct If_Cut_t_
float Power; // the power flow float Power; // the power flow
float Delay; // delay of the cut float Delay; // delay of the cut
unsigned uSign; // cut signature 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 fCompl : 1; // the complemented attribute
unsigned fUser : 1; // using the user's area and delay unsigned fUser : 1; // using the user's area and delay
unsigned fUseless: 1; // using the user's area and delay unsigned fUseless: 1; // using the user's area and delay
......
...@@ -180,6 +180,7 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep ...@@ -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->pFanin0, pCut0, i )
If_ObjForEachCut( pObj->pFanin1, pCut1, k ) If_ObjForEachCut( pObj->pFanin1, pCut1, k )
{ {
// get the next free cut // get the next free cut
assert( pCutSet->nCuts <= pCutSet->nCutsMax ); assert( pCutSet->nCuts <= pCutSet->nCutsMax );
pCut = pCutSet->ppCuts[pCutSet->nCuts]; pCut = pCutSet->ppCuts[pCutSet->nCuts];
...@@ -227,11 +228,13 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep ...@@ -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 ); /// pCut->Delay = If_CutDelayLutStruct( p, pCut, p->pPars->pLutStruct, p->pPars->WireDelay );
// else if ( p->pPars->fDelayOpt ) // else if ( p->pPars->fDelayOpt )
if ( p->pPars->fUserRecLib ) if ( p->pPars->fUserRecLib )
pCut->Delay = If_CutDelayRecCost(p, pCut); pCut->Delay = If_CutDelayRecCost(p, pCut);
else if (p->pPars->fDelayOpt) else if (p->pPars->fDelayOpt)
pCut->Delay = If_CutDelaySopCost(p, pCut); pCut->Delay = If_CutDelaySopCost(p, pCut);
else else
pCut->Delay = If_CutDelay( p, pObj, pCut ); pCut->Delay = If_CutDelay( p, pObj, pCut );
if ( pCut->Cost == IF_COST_MAX )
continue;
// Abc_Print( 1, "%.2f ", pCut->Delay ); // Abc_Print( 1, "%.2f ", pCut->Delay );
if ( Mode && pCut->Delay > pObj->Required + p->fEpsilon ) if ( Mode && pCut->Delay > pObj->Required + p->fEpsilon )
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment