50 pPars->nWinTfoLevs = 2;
51 pPars->nFanoutsMax = 30;
52 pPars->nDepthMax = 20;
54 pPars->nGrowthLevel = 0;
55 pPars->nBTLimit = 5000;
59 pPars->fMoreEffort = 0;
61 pPars->fOneHotness = 0;
63 pPars->fVeryVerbose = 0;
100 if (
p->pPars->nWinMax && Vec_PtrSize(
p->vNodes) >
p->pPars->nWinMax )
104 p->nTotalDivs += Vec_PtrSize(
p->vDivs) - Abc_ObjFaninNum(pNode);
111 if (
p->pSat == NULL )
163 if (
p->pPars->nDepthMax && (
int)pNode->
Level >
p->pPars->nDepthMax )
165 if ( Abc_ObjFaninNum(pNode) < 2 || Abc_ObjFaninNum(pNode) > nFaninMax )
180 if (
p->pPars->nDepthMax && (
int)pNode->
Level >
p->pPars->nDepthMax )
182 if ( Abc_ObjFaninNum(pNode) < 2 || Abc_ObjFaninNum(pNode) > nFaninMax )
197 if (
p->pPars->nDepthMax && (
int)pNode->
Level >
p->pPars->nDepthMax )
199 if ( Abc_ObjFaninNum(pNode) < 2 || Abc_ObjFaninNum(pNode) > nFaninMax )
247p->timeWin += Abc_Clock() - clk;
248 if (
p->pPars->nWinMax && Vec_PtrSize(
p->vNodes) >
p->pPars->nWinMax )
256 p->nTotalDivs += Vec_PtrSize(
p->vDivs) - Abc_ObjFaninNum(pNode);
257p->timeDiv += Abc_Clock() - clk;
261p->timeAig += Abc_Clock() - clk;
265p->timeCnf += Abc_Clock() - clk;
269 if (
p->pSat == NULL )
279 if (
p->pPars->fPower )
281 else if (
p->pPars->fSwapEdge )
286 if (
p->pPars->fMoreEffort )
289p->timeSat += Abc_Clock() - clk;
323p->timeWin += Abc_Clock() - clk;
329p->timeAig += Abc_Clock() - clk;
333p->timeCnf += Abc_Clock() - clk;
337 if (
p->pSat &&
p->pPars->fOneHotness )
339 if (
p->pSat == NULL )
343 p->nTotConfLevel +=
p->pSat->stats.conflicts;
344p->timeSat += Abc_Clock() - clk;
352 assert(
p->nFanins == Abc_ObjFaninNum(pNode) );
353 dProb =
p->pPars->fPower? ((
float *)
p->vProbs->pArray)[pNode->
Id] : -1.0;
359 p->nNodesGained += nGain;
360 p->nNodesGainedLevel += nGain;
381 Bdc_Par_t Pars = {0}, * pDecPars = &Pars;
387 int i, k, nNodes, nFaninMax;
388 abctime clk = Abc_Clock(), clk2;
389 int nTotalNodesBeg = Abc_NtkNodeNum(pNtk);
392 assert( Abc_NtkIsLogic(pNtk) );
398 printf(
"Nodes with more than %d fanins will not be processed.\n", 8 );
406 printf(
"Nodes with more than %d fanins will not be processed.\n",
MFS_FANIN_MAX );
415 fprintf( stdout,
"Converting to AIGs has failed.\n" );
418 assert( Abc_NtkHasAig(pNtk) );
423 p->nFaninMax = nFaninMax;
444 printf(
"The PI count of careset (%d) and logic network (%d) differ. Careset is not used.\n",
454 if (
p->pCare != NULL )
455 printf(
"Performing optimization with %d external care clauses.\n", Aig_ManCoNum(
p->pCare) );
457 if ( !pPars->fResub )
459 pDecPars->nVarsMax = (nFaninMax < 3) ? 3 : nFaninMax;
460 pDecPars->fVerbose = pPars->fVerbose;
461 p->vTruth = Vec_IntAlloc( 0 );
469 pObj->
pData = (
void *)(ABC_PTRUINT_T)i;
478 p->nTotalNodesBeg = nTotalNodesBeg;
479 p->nTotalEdgesBeg = nTotalEdgesBeg;
493 if (
p->pPars->nDepthMax && (
int)pObj->
Level >
p->pPars->nDepthMax )
495 if ( Abc_ObjFaninNum(pObj) < 2 || Abc_ObjFaninNum(pObj) > nFaninMax )
497 if ( !
p->pPars->fVeryVerbose )
498 Extra_ProgressBarUpdate( pProgress, i, NULL );
518 if ( !
p->pPars->fVeryVerbose )
519 Extra_ProgressBarUpdate( pProgress, nNodes, NULL );
520 p->nNodesGainedLevel = 0;
521 p->nTotConfLevel = 0;
522 p->nTimeOutsLevel = 0;
526 if (
p->pPars->nDepthMax && (
int)pObj->
Level >
p->pPars->nDepthMax )
528 if ( Abc_ObjFaninNum(pObj) < 2 || Abc_ObjFaninNum(pObj) > nFaninMax )
535 nNodes += Vec_PtrSize(vNodes);
536 if ( pPars->fVerbose )
549 Vec_VecFree( vLevels );
557 if ( !pPars->fResub )
564 p->nTotalNodesEnd = Abc_NtkNodeNum(pNtk);
585 p->timeTotal = Abc_Clock() - clk;
void Abc_NtkBidecResyn(Abc_Ntk_t *pNtk, int fVerbose)
Hop_Obj_t * Abc_NodeIfNodeResyn(Bdc_Man_t *p, Hop_Man_t *pHop, Hop_Obj_t *pRoot, int nVars, Vec_Int_t *vTruth, unsigned *puCare, float dProb)
FUNCTION DEFINITIONS ///.
Vec_Int_t * Abc_NtkPowerEstimate(Abc_Ntk_t *pNtk, int fProbOne)
struct Abc_Obj_t_ Abc_Obj_t
ABC_DLL float Abc_NtkMfsTotalSwitching(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Vec_t * Abc_NtkLevelize(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkGetFaninMax(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_ObjRequiredLevel(Abc_Obj_t *pObj)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL Vec_Ptr_t * Abc_NtkNodeSupport(Abc_Ntk_t *pNtk, Abc_Obj_t **ppNodes, int nNodes)
ABC_DLL void Abc_NtkStopReverseLevels(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkStartReverseLevels(Abc_Ntk_t *pNtk, int nMaxLevelIncrease)
ABC_DLL int Abc_NtkToAig(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Ptr_t * Abc_NtkDfsNodes(Abc_Ntk_t *pNtk, Abc_Obj_t **ppNodes, int nNodes)
ABC_DLL int Abc_NtkGetTotalFanins(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Vec_Ptr_t * Aig_ManSupportsInverse(Aig_Man_t *p)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
struct Bdc_Par_t_ Bdc_Par_t
struct Bdc_Man_t_ Bdc_Man_t
Bdc_Man_t * Bdc_ManAlloc(Bdc_Par_t *pPars)
MACRO DEFINITIONS ///.
Cnf_Dat_t * Cnf_DeriveSimple(Aig_Man_t *p, int nOutputs)
Aig_Man_t * Abc_NtkToDar(Abc_Ntk_t *pNtk, int fExors, int fRegisters)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
int Hop_DagSize(Hop_Obj_t *pObj)
struct Hop_Obj_t_ Hop_Obj_t
void Abc_NtkMfsParsDefault(Mfs_Par_t *pPars)
FUNCTION DEFINITIONS ///.
ABC_NAMESPACE_IMPL_START int Abc_NtkMfsSolveSatResub(Mfs_Man_t *p, Abc_Obj_t *pNode, int iFanin, int fOnlyRemove, int fSkipUpdate)
DECLARATIONS ///.
int Abc_WinNode(Mfs_Man_t *p, Abc_Obj_t *pNode)
int Abc_NtkMfsNode(Mfs_Man_t *p, Abc_Obj_t *pNode)
int Abc_NtkMfs(Abc_Ntk_t *pNtk, Mfs_Par_t *pPars)
int Abc_NtkMfsResub(Mfs_Man_t *p, Abc_Obj_t *pNode)
void Abc_NtkMfsPowerResub(Mfs_Man_t *p, Mfs_Par_t *pPars)
Vec_Ptr_t * Abc_MfsComputeDivisors(Mfs_Man_t *p, Abc_Obj_t *pNode, int nLevDivMax)
BASIC TYPES ///.
int Abc_NtkMfsResubNode(Mfs_Man_t *p, Abc_Obj_t *pNode)
Vec_Ptr_t * Abc_MfsComputeRoots(Abc_Obj_t *pNode, int nWinTfoMax, int nFanoutLimit)
void Mfs_ManClean(Mfs_Man_t *p)
Mfs_Man_t * Mfs_ManAlloc(Mfs_Par_t *pPars)
DECLARATIONS ///.
sat_solver * Abc_MfsCreateSolverResub(Mfs_Man_t *p, int *pCands, int nCands, int fInvert)
int Abc_NtkMfsEdgePower(Mfs_Man_t *p, Abc_Obj_t *pNode)
int Abc_NtkMfsSolveSat(Mfs_Man_t *p, Abc_Obj_t *pNode)
Aig_Man_t * Abc_NtkConstructAig(Mfs_Man_t *p, Abc_Obj_t *pNode)
struct Mfs_Man_t_ Mfs_Man_t
int Abc_NtkMfsEdgeSwapEval(Mfs_Man_t *p, Abc_Obj_t *pNode)
#define MFS_FANIN_MAX
INCLUDES ///.
int Abc_NtkMfsResubNode2(Mfs_Man_t *p, Abc_Obj_t *pNode)
void Mfs_ManStop(Mfs_Man_t *p)
int Abc_NtkAddOneHotness(Mfs_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Mfs_Par_t_ Mfs_Par_t
INCLUDES ///.
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_VecForEachLevelStart(vGlob, vVec, i, LevelStart)
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.