mirror of https://github.com/YosysHQ/abc.git
Several small bug fixes in the mapper.
This commit is contained in:
parent
60a84f7350
commit
1f0e5533dc
|
|
@ -2243,8 +2243,8 @@ int If_CutDelayRecCost(If_Man_t* p, If_Cut_t* pCut)
|
|||
if ( !Kit_TruthIsEqualWithPhase( pTruthRec, pInOut, nLeaves ) )
|
||||
{
|
||||
assert( 0 );
|
||||
return -1;
|
||||
s_pMan->nIfMapError++;
|
||||
return -1;
|
||||
}
|
||||
// mark as user cut.
|
||||
pCut->fUser = 1;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue