39static int Abc_NtkFraigTrustCheck(
Abc_Ntk_t * pNtk );
64 if ( fExdc && pNtk->
pExdc == NULL )
65 fExdc = 0, printf(
"Warning: Networks has no EXDC.\n" );
76 pNtkNew = Abc_NtkFromFraig2( pMan, pNtk );
85 printf(
"Abc_NtkFraig: The network check has failed.\n" );
112 assert( Abc_NtkIsStrash(pNtk) );
130 if ( Abc_ObjFaninNum(pNode) == 0 )
133 Extra_ProgressBarUpdate( pProgress, i, NULL );
135 Fraig_NotCond( Abc_ObjFanin0(pNode)->pCopy, (
int)Abc_ObjFaninC0(pNode) ),
136 Fraig_NotCond( Abc_ObjFanin1(pNode)->pCopy, (
int)Abc_ObjFaninC1(pNode) ) );
140 Vec_PtrFree( vNodes );
144 Abc_NtkFraigRemapUsingExdc( pMan, pNtk );
179 for ( k = 0; k < Abc_NtkCiNum(pNtkMain); k++ )
191 Fraig_NotCond( Abc_ObjFanin0(pObj)->pCopy, (
int)Abc_ObjFaninC0(pObj) ),
192 Fraig_NotCond( Abc_ObjFanin1(pObj)->pCopy, (
int)Abc_ObjFaninC1(pObj) ) );
194 pObj = Abc_NtkPo( pNtkStrash, 0 );
195 gResult =
Fraig_NotCond( Abc_ObjFanin0(pObj)->pCopy, (
int)Abc_ObjFaninC0(pObj) );
227 vNexts = Vec_PtrStart( Abc_NtkObjNumMax(pNtk) );
229 Vec_PtrWriteEntry( vNexts, pNode->
Id, pNode->
pNext );
240 pNode->
pNext = *ppSlot;
248 if ( pClass->pNext == NULL )
252 for ( pNode = pClass->pNext; pNode; pNode = pNode->
pNext )
256 for ( pNode = pClass; pNode; pNode = pNode->
pNext )
265 Vec_PtrFree( vNexts );
296 Extra_ProgressBarUpdate( pProgress, i, NULL );
318 Abc_Obj_t * pRes, * pRes0, * pRes1, * pResMin, * pResCur;
339 pResCur = Abc_NodeFromFraig_rec( pNtkNew, pNodeTemp );
344 ppTail = &pResMin->
pData;
345 if ( pRes != pResMin )
348 ppTail = &pRes->
pData;
354 if ( pResMin == pResCur )
357 ppTail = &pResCur->
pData;
359 assert( *ppTail == NULL );
362 pRes = Abc_ObjNotCond( pResMin, (pRes->
fPhase ^ pResMin->
fPhase) );
401 else if ( (*ppSlot)->Level > pNode->
Level )
405 vNodeReprs = Vec_PtrStart( Abc_NtkObjNumMax(pNtk) );
411 if ( pNode != pRepr )
412 Vec_PtrWriteEntry( vNodeReprs, pNode->
Id, pRepr );
421 Abc_NtkIncrementTravId( pNtk );
425 Extra_ProgressBarUpdate( pProgress, i, NULL );
426 Abc_NtkFromFraig2_rec( pNtkNew, Abc_ObjFanin0(pNode), vNodeReprs );
429 Vec_PtrFree( vNodeReprs );
452 if ( Abc_ObjFaninNum(pNode) < 2 )
455 if ( Abc_NodeIsTravIdCurrent( pNode ) )
458 Abc_NodeSetTravIdCurrent( pNode );
459 assert( Abc_ObjIsNode( pNode ) );
461 if ( (pRepr = (
Abc_Obj_t *)Vec_PtrEntry(vNodeReprs, pNode->
Id)) )
463 Abc_NtkFromFraig2_rec( pNtkNew, pRepr, vNodeReprs );
467 Abc_NtkFromFraig2_rec( pNtkNew, Abc_ObjFanin0(pNode), vNodeReprs );
468 Abc_NtkFromFraig2_rec( pNtkNew, Abc_ObjFanin1(pNode), vNodeReprs );
489 if ( !Abc_NtkIsSopLogic(pNtk) )
491 printf(
"Abc_NtkFraigTrust: Trust mode works for netlists and logic SOP networks.\n" );
495 if ( !Abc_NtkFraigTrustCheck(pNtk) )
497 printf(
"Abc_NtkFraigTrust: The network does not look like an AIG with choice nodes.\n" );
503 Abc_NtkFraigTrustOne( pNtk, pNtkNew );
508 printf(
"Warning: The resulting AIG contains %d choice nodes.\n",
Abc_NtkGetChoiceNum( pNtkNew ) );
513 printf(
"Abc_NtkFraigTrust: The network check has failed.\n" );
531int Abc_NtkFraigTrustCheck(
Abc_Ntk_t * pNtk )
537 nFanins = Abc_ObjFaninNum(pNode);
571 Extra_ProgressBarUpdate( pProgress, i, NULL );
573 assert( Abc_ObjIsNode(pNode) );
575 pNodeNew = Abc_NodeFraigTrust( pNtkNew, pNode );
577 if ( Abc_NtkIsNetlist(pNtk) )
578 pObj = Abc_ObjFanout0( pNode );
584 pObj->
pCopy = pNodeNew;
586 Vec_PtrFree( vNodes );
605 int i, nFanins, fCompl;
607 assert( Abc_ObjIsNode(pNode) );
609 nFanins = Abc_ObjFaninNum( pNode );
615 return Abc_ObjNotCond( Abc_ObjFanin0(pNode)->pCopy,
Abc_SopIsInv((
char *)pNode->
pData) );
623 pSum = Abc_ObjFanin0(pNode)->
pCopy;
625 ppTail = &pSum->
pData;
630 *ppTail = pFanin->
pCopy;
636 assert( *ppTail == NULL );
662 printf(
"Abc_NtkFraigStore: Initial strashing has failed.\n" );
667 if ( Vec_PtrSize(vStore) > 0 )
676 printf(
"Trying to store the network with different primary inputs.\n" );
677 printf(
"The previously stored networks are deleted and this one is added.\n" );
682 Vec_PtrPush( vStore, pNtk );
704 int nWords1, nWords2, nWordsMin;
709 if ( Vec_PtrSize(vStore) == 0 )
711 printf(
"There are no network currently in storage.\n" );
715 pNtk = (
Abc_Ntk_t *)Vec_PtrEntry( vStore, 0 );
719 if ( Vec_PtrSize(vStore) > 1 )
721 pNtk = (
Abc_Ntk_t *)Vec_PtrPop( vStore );
722 Vec_PtrPush( vStore, Vec_PtrEntry(vStore,0) );
723 Vec_PtrWriteEntry( vStore, 0, pNtk );
731 nWords2 = (1<<27) / (Abc_NtkNodeNum(pNtk) + Abc_NtkCiNum(pNtk));
732 nWordsMin = Abc_MinInt( nWords1, nWords2 );
736 Params.
nPatsRand = nPatsRand ? nPatsRand : nWordsMin * 32;
737 Params.
nPatsDyna = nPatsDyna ? nPatsDyna : nWordsMin * 32;
774 Vec_PtrClear( vStore );
791 int nPoOrig, nPoFinal, nStored;
794 nPoFinal = Abc_NtkPoNum(pFraig);
796 assert( nPoFinal % nStored == 0 );
797 nPoOrig = nPoFinal / nStored;
798 for ( i = 0; i < nPoOrig; i++ )
800 pNode0 = Abc_ObjFanin0( Abc_NtkPo(pFraig, i) );
801 for ( k = 1; k < nStored; k++ )
803 pNode1 = Abc_ObjFanin0( Abc_NtkPo(pFraig, k*nPoOrig+i) );
804 if ( pNode0 != pNode1 )
805 printf(
"Verification for PO #%d of network #%d has failed. The PO function is not used.\n", i+1, k+1 );
Abc_Ntk_t * Abc_NtkFraigRestore(int nPatsRand, int nPatsDyna, int nBTLimit)
ABC_NAMESPACE_IMPL_START Abc_Ntk_t * Abc_NtkFromFraig(Fraig_Man_t *pMan, Abc_Ntk_t *pNtk)
DECLARATIONS ///.
Abc_Ntk_t * Abc_NtkFraigTrust(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkFraig(Abc_Ntk_t *pNtk, void *pParams, int fAllNodes, int fExdc)
FUNCTION DEFINITIONS ///.
int Abc_NtkFraigStore(Abc_Ntk_t *pNtkAdd)
void Abc_NtkFraigStoreCheck(Abc_Ntk_t *pFraig)
Fraig_Node_t * Abc_NtkToFraigExdc(Fraig_Man_t *pMan, Abc_Ntk_t *pNtkMain, Abc_Ntk_t *pNtkExdc)
void * Abc_NtkToFraig(Abc_Ntk_t *pNtk, void *pParams, int fAllNodes, int fExdc)
void Abc_NtkFraigStoreClean()
int Abc_NodeCompareCiCo(Abc_Ntk_t *pNtkOld, Abc_Ntk_t *pNtkNew)
Abc_Ntk_t * Abc_NtkFraigPartitioned(Vec_Ptr_t *vStore, void *pParams)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL Vec_Ptr_t * Abc_AigDfs(Abc_Ntk_t *pNtk, int fCollectAll, int fCollectCos)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL int Abc_SopIsConst0(char *pSop)
#define Abc_AigForEachAnd(pNtk, pNode, i)
ABC_DLL int Abc_NtkGetChoiceNum(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Ptr_t * Abc_NtkDfs(Abc_Ntk_t *pNtk, int fCollectAll)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
#define Abc_ObjForEachFanin(pObj, pFanin, i)
struct Abc_Aig_t_ Abc_Aig_t
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
ABC_DLL void Abc_NtkCleanNext(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigAnd(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
ABC_DLL int Abc_SopGetIthCareLit(char *pSop, int i)
ABC_DLL int Abc_SopIsInv(char *pSop)
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
ABC_DLL int Abc_SopGetVarNum(char *pSop)
ABC_DLL char ** Abc_NtkCollectCioNames(Abc_Ntk_t *pNtk, int fCollectCos)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_AigSetNodePhases(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_SopIsAndType(char *pSop)
ABC_DLL int Abc_NtkCompareSignals(Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2, int fOnlyPis, int fComb)
ABC_DLL void Abc_NtkReassignIds(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_SopIsOrType(char *pSop)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL int Abc_FrameReadStoreSize()
ABC_DLL Vec_Ptr_t * Abc_FrameReadStore()
FUNCTION DEFINITIONS ///.
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
#define Fraig_IsComplement(p)
GLOBAL VARIABLES ///.
void Fraig_ManProveMiter(Fraig_Man_t *p)
void Fraig_ManSetPo(Fraig_Man_t *p, Fraig_Node_t *pNode)
void Fraig_ManFree(Fraig_Man_t *pMan)
Fraig_Man_t * Fraig_ManCreate(Fraig_Params_t *pParams)
Fraig_Node_t * Fraig_NodeReadRepr(Fraig_Node_t *p)
void Fraig_ParamsSetDefault(Fraig_Params_t *pParams)
#define Fraig_NotCond(p, c)
Fraig_Node_t * Fraig_NodeReadOne(Fraig_Node_t *p)
Fraig_Node_t * Fraig_ManReadConst1(Fraig_Man_t *p)
int Fraig_NodeReadSimInv(Fraig_Node_t *p)
void Fraig_NodeSetData1(Fraig_Node_t *p, Fraig_Node_t *pData)
typedefABC_NAMESPACE_HEADER_START struct Fraig_ManStruct_t_ Fraig_Man_t
INCLUDES ///.
Fraig_Node_t * Fraig_ManReadIthVar(Fraig_Man_t *p, int i)
struct Fraig_NodeStruct_t_ Fraig_Node_t
Fraig_Node_t * Fraig_NodeReadNextE(Fraig_Node_t *p)
Fraig_Node_t * Fraig_NodeReadData1(Fraig_Node_t *p)
Fraig_Node_t * Fraig_NodeReadTwo(Fraig_Node_t *p)
struct Fraig_ParamsStruct_t_ Fraig_Params_t
Fraig_Node_t * Fraig_NodeAnd(Fraig_Man_t *p, Fraig_Node_t *p1, Fraig_Node_t *p2)
Fraig_Node_t ** Fraig_ManReadOutputs(Fraig_Man_t *p)
int stmm_ptrhash(const char *x, int size)
int stmm_find_or_add(stmm_table *table, char *key, char ***slot)
int stmm_ptrcmp(const char *x, const char *y)
void stmm_free_table(stmm_table *table)
stmm_table * stmm_init_table(stmm_compare_func_type compare, stmm_hash_func_type hash)
int stmm_lookup(stmm_table *table, char *key, char **value)
#define stmm_foreach_item(table, gen, key, value)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.