51 if ( pCube->
nLits == 0 )
58 vLits = Vec_IntAlloc( 10 );
59 Min_CubeGetLits( pCube, vLits );
62 if ( pCube->
nLits == 1 )
64 iFanin = Vec_IntEntry(vLits,0);
65 pFanin = Abc_NtkObj( pObj->
pNtk, Vec_IntEntry(vSupp, iFanin) );
66 Lit = Min_CubeGetVar(pCube, iFanin);
67 assert( Lit == 1 || Lit == 2 );
69 if ( (Lit == 1) ^ fCompl )
75 pNodeNew = Abc_NtkCreateNode( pNtkNew );
76 for ( i = 0; i < vLits->nSize; i++ )
78 iFanin = Vec_IntEntry(vLits,i);
79 pFanin = Abc_NtkObj( pObj->
pNtk, Vec_IntEntry(vSupp, iFanin) );
80 Lit = Min_CubeGetVar(pCube, iFanin);
81 assert( Lit == 1 || Lit == 2 );
82 Vec_IntWriteEntry( vLits, i, Lit==1 );
106 Abc_Obj_t * pFaninNew, * pNodeNew, * pFanin;
108 int Entry, nCubes, i;
110 if ( Abc_ObjIsCi(pObj) )
112 assert( Abc_ObjIsNode(pObj) );
118 vSupp = Abc_ObjGetSupp( pObj );
119 pCover = Abc_ObjGetCover2( pObj );
138 pFanin = Abc_NtkObj(pObj->
pNtk, Entry);
143 nCubes = Min_CoverCountCubes( pCover );
146 else if ( nCubes == 1 )
150 pNodeNew = Abc_NtkCreateNode( pNtkNew );
168 pObj->
pCopy = pNodeNew;
188 assert( Abc_NtkIsStrash(pNtk) );
203 printf(
"Abc_NtkCovDerive: The network check has failed.\n" );
251 if ( pCube->
nLits == 0 )
254 vLits = Vec_IntAlloc( 10 );
255 Min_CubeGetLits( pCube, vLits );
258 if ( pCube->
nLits == 1 )
260 iFanin = Vec_IntEntry(vLits,0);
261 pFanin = Abc_NtkObj( pObj->
pNtk, Vec_IntEntry(vSupp, iFanin) );
262 Lit = Min_CubeGetVar(pCube, iFanin);
263 assert( Lit == 1 || Lit == 2 );
264 Vec_IntFree( vLits );
272 pNodeNew = Abc_NtkCreateNode( pNtkNew );
273 for ( i = 0; i < vLits->nSize; i++ )
275 iFanin = Vec_IntEntry(vLits,i);
276 pFanin = Abc_NtkObj( pObj->
pNtk, Vec_IntEntry(vSupp, iFanin) );
277 Lit = Min_CubeGetVar(pCube, iFanin);
278 assert( Lit == 1 || Lit == 2 );
279 Vec_IntWriteEntry( vLits, i, Lit==1 );
285 Vec_IntFree( vLits );
303 Abc_Obj_t * pFaninNew, * pNodeNew, * pFanin;
305 int Entry, nCubes, i;
310 assert( Abc_ObjIsNode(pObj) );
313 vSupp = Abc_ObjGetSupp( pObj );
314 pCover = Abc_ObjGetCover2( pObj );
320 pFanin = Abc_NtkObj(pObj->
pNtk, Entry);
325 nCubes = Min_CoverCountCubes( pCover );
328 else if ( nCubes == 1 )
332 pNodeNew = Abc_NtkCreateNode( pNtkNew );
341 pObj->
pCopy = pNodeNew;
362 assert( Abc_NtkIsStrash(pNtk) );
376 printf(
"Abc_NtkCovDeriveInv: The network check has failed.\n" );
403 int i, Entry, nCubes, Type = 0;
407 assert( Abc_ObjIsNode(pObj) );
409 vSupp = Abc_ObjGetSupp( pObj );
412 pCovers[0] = Abc_ObjGetCover( pObj, 0 );
413 pCovers[1] = Abc_ObjGetCover( pObj, 1 );
414 pCovers[2] = Abc_ObjGetCover2( pObj );
417 && (!pCovers[1] || Min_CoverCountCubes(pCovers[0]) <= Min_CoverCountCubes(pCovers[1]))
418 && (!pCovers[2] || Min_CoverCountCubes(pCovers[0]) <= Min_CoverCountCubes(pCovers[2])) )
426 && (!pCovers[0] || Min_CoverCountCubes(pCovers[1]) <= Min_CoverCountCubes(pCovers[0]))
427 && (!pCovers[2] || Min_CoverCountCubes(pCovers[1]) <= Min_CoverCountCubes(pCovers[2])) )
435 && (!pCovers[0] || Min_CoverCountCubes(pCovers[2]) < Min_CoverCountCubes(pCovers[0]))
436 && (!pCovers[1] || Min_CoverCountCubes(pCovers[2]) < Min_CoverCountCubes(pCovers[1])) )
448 printf(
"%d ", Entry );
449 printf(
"} cubes = %d\n", Min_CoverCountCubes( pCover ) );
454 pFanin = Abc_NtkObj(pObj->
pNtk, Entry);
458 nCubes = Min_CoverCountCubes( pCover );
461 else if ( nCubes == 1 )
466 pNodeNew = Abc_NtkCreateNode( pNtkNew );
469 pFanin = Abc_NtkObj(pObj->
pNtk, Entry);
473 vCover = Vec_StrAlloc( 100 );
476 Vec_StrFree( vCover );
489 return pObj->
pCopy = pNodeNew;
508 assert( Abc_NtkIsStrash(pNtk) );
517 if ( Abc_ObjFaninC0(pObj) )
519 if ( pNodeNew->
pData && Abc_ObjFanoutNum(Abc_ObjFanin0(pObj)) == 1 )
531 printf(
"Abc_NtkCovDerive: The network check has failed.\n" );
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL char * Abc_SopCreateXorSpecial(Mem_Flex_t *pMan, int nVars)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst1(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst0(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_SopComplement(char *pSop)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
ABC_DLL char * Abc_SopCreateAnd(Mem_Flex_t *pMan, int nVars, int *pfCompl)
ABC_DLL int Abc_NtkLogicMakeSimpleCos(Abc_Ntk_t *pNtk, int fDuplicate)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeInv(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, const char *pName)
DECLARATIONS ///.
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
Abc_Obj_t * Abc_NtkCovDeriveNodeInv_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCompl)
Abc_Ntk_t * Abc_NtkCovDeriveClean(Cov_Man_t *p, Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkCovDerive(Cov_Man_t *p, Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Abc_Obj_t * Abc_NtkCovDerive_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj)
Abc_Ntk_t * Abc_NtkCovDeriveRegular(Cov_Man_t *p, Abc_Ntk_t *pNtk)
Abc_Obj_t * Abc_NtkCovDeriveCubeInv(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, Min_Cube_t *pCube, Vec_Int_t *vSupp)
Abc_Obj_t * Abc_NtkCovDeriveInv(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCompl)
Abc_Obj_t * Abc_NtkCovDeriveNode_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int Level)
ABC_NAMESPACE_IMPL_START Abc_Obj_t * Abc_NtkCovDeriveCube(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, Min_Cube_t *pCube, Vec_Int_t *vSupp, int fCompl)
DECLARATIONS ///.
struct Min_Cube_t_ Min_Cube_t
#define Min_CoverForEachCube(pCover, pCube)
void Min_CoverCreate(Vec_Str_t *vCover, Min_Cube_t *pCover, char Type)
typedefABC_NAMESPACE_HEADER_START struct Cov_Man_t_ Cov_Man_t
DECLARATIONS ///.
struct Mem_Flex_t_ Mem_Flex_t
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.