61 pNtk->
vObjs = Vec_PtrAlloc( 100 );
62 pNtk->
vPios = Vec_PtrAlloc( 100 );
63 pNtk->
vPis = Vec_PtrAlloc( 100 );
64 pNtk->
vPos = Vec_PtrAlloc( 100 );
65 pNtk->
vCis = Vec_PtrAlloc( 100 );
66 pNtk->
vCos = Vec_PtrAlloc( 100 );
67 pNtk->
vBoxes = Vec_PtrAlloc( 100 );
75 if ( !Abc_NtkIsStrash(pNtk) )
76 Vec_PtrPush( pNtk->
vObjs, NULL );
77 if ( Abc_NtkIsStrash(pNtk) )
79 else if ( Abc_NtkHasSop(pNtk) || Abc_NtkHasBlifMv(pNtk) )
82 else if ( Abc_NtkHasBdd(pNtk) )
83 pNtk->
pManFunc = Cudd_Init( 20, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
85 else if ( Abc_NtkHasAig(pNtk) )
87 else if ( Abc_NtkHasMapping(pNtk) )
89 else if ( !Abc_NtkHasBlackbox(pNtk) )
107 pNtk->
vObjs = Vec_PtrAlloc( 100 );
108 pNtk->
vPios = Vec_PtrAlloc( 100 );
109 pNtk->
vPis = Vec_PtrAlloc( 100 );
110 pNtk->
vPos = Vec_PtrAlloc( 100 );
111 pNtk->
vCis = Vec_PtrAlloc( 100 );
112 pNtk->
vCos = Vec_PtrAlloc( 100 );
113 pNtk->
vBoxes = Vec_PtrAlloc( 100 );
121 if ( !Abc_NtkIsStrash(pNtk) )
122 Vec_PtrPush( pNtk->
vObjs, NULL );
123 if ( Abc_NtkIsStrash(pNtk) )
125 else if ( Abc_NtkHasSop(pNtk) || Abc_NtkHasBlifMv(pNtk) )
128 else if ( Abc_NtkHasBdd(pNtk) )
129 pNtk->
pManFunc = Cudd_Init( nVars, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
131 else if ( Abc_NtkHasAig(pNtk) )
133 else if ( Abc_NtkHasMapping(pNtk) )
135 else if ( !Abc_NtkHasBlackbox(pNtk) )
176 if ( Abc_NtkIsStrash(pNtk) && Abc_NtkIsStrash(pNtkNew) )
207 assert( Abc_NtkCiNum(pNtk) == Abc_NtkCiNum(pNtkNew) );
208 assert( Abc_NtkCoNum(pNtk) == Abc_NtkCoNum(pNtkNew) );
209 assert( Abc_NtkLatchNum(pNtk) == Abc_NtkLatchNum(pNtkNew) );
231 assert( Abc_NtkLatchNum(pNtk) == 0 );
244 if ( Abc_NtkIsStrash(pNtk) && Abc_NtkIsStrash(pNtkNew) )
247 for ( i = 0; i < Abc_NtkPiNum(pNtk)-nLatches; i++ )
249 for ( i = 0; i < Abc_NtkPoNum(pNtk)-nLatches; i++ )
251 for ( i = 0; i < nLatches; i++ )
253 pObj = Abc_NtkCreateLatch(pNtkNew);
254 Abc_LatchSetInit0( pObj );
255 pNode0 = Abc_NtkCreateBi(pNtkNew);
256 Abc_NtkPo(pNtk, Abc_NtkPoNum(pNtk)-nLatches+i)->pCopy = pNode0;
257 pNode1 = Abc_NtkCreateBo(pNtkNew);
258 Abc_NtkPi(pNtk, Abc_NtkPiNum(pNtk)-nLatches+i)->pCopy = pNode1;
284 assert( Abc_NtkCiNum(pNtk) == Abc_NtkCiNum(pNtkNew) );
285 assert( Abc_NtkCoNum(pNtk) == Abc_NtkCoNum(pNtkNew) );
286 assert( nLatches == Abc_NtkLatchNum(pNtkNew) );
319 if ( Abc_NtkIsStrash(pNtk) && Abc_NtkIsStrash(pNtkNew) )
328 if ( Abc_ObjIsLatch(pObj) )
339 assert( Abc_NtkPiNum(pNtk) == Abc_NtkPiNum(pNtkNew) );
340 assert( Abc_NtkPoNum(pNtk) == Abc_NtkPoNum(pNtkNew) );
357 Abc_Obj_t * pObj, * pDriver, * pDriverNew;
362 pDriver = Abc_ObjFanin0Ntk( Abc_ObjFanin0(pObj) );
363 pDriverNew = Abc_ObjNotCond(pDriver->
pCopy, Abc_ObjFaninC0(pObj));
415 Abc_Obj_t * pBox, * pObj, * pTerm, * pNet;
417 if ( Abc_NtkHasBlackbox(pNtk) && Abc_NtkBoxNum(pNtk) == 0 )
419 pBox = Abc_NtkCreateBlackbox(pNtk);
422 pTerm = Abc_NtkCreateBi(pNtk);
428 pTerm = Abc_NtkCreateBo(pNtk);
434 assert( Abc_NtkIsNetlist(pNtk) );
440 if ( Abc_ObjFanoutNum(pNet) == 0 )
442 else if ( Abc_ObjFaninNum(pNet) == 0 )
449 if ( Abc_ObjFanoutNum(pNet) == 0 )
451 else if ( Abc_ObjFaninNum(pNet) == 0 )
482 if ( Abc_NtkIsStrash(pNtk) )
495 if ( Abc_NtkNodeNum(pNtk) != Abc_NtkNodeNum(pNtkNew) )
496 printf(
"Warning: Structural hashing during duplication reduced %d nodes (this is a minor bug).\n",
497 Abc_NtkNodeNum(pNtk) - Abc_NtkNodeNum(pNtkNew) );
503 if ( pObj->
pCopy == NULL )
504 Abc_NtkDupObj(pNtkNew, pObj, Abc_NtkHasBlackbox(pNtk) && Abc_ObjIsNet(pObj));
507 if ( !Abc_ObjIsBox(pObj) && !Abc_ObjIsBo(pObj) )
513 pNtkNew->
vOrigNodeIds = Vec_IntStartFull( Abc_NtkObjNumMax(pNtkNew) );
534 fprintf( stdout,
"Abc_NtkDup(): Network check has failed.\n" );
535 pNtk->
pCopy = pNtkNew;
546 assert( !Abc_NtkIsStrash(pNtk) && !Abc_NtkIsNetlist(pNtk) );
553 Vec_PtrFree( vNodes );
556 if ( !Abc_ObjIsBox(pObj) && !Abc_ObjIsBo(pObj) )
574 fprintf( stdout,
"Abc_NtkDup(): Network check has failed.\n" );
575 pNtk->
pCopy = pNtkNew;
586 assert( Abc_NtkIsLogic(pNtk) );
593 if ( Abc_ObjIsBarBuf(pObj) )
597 Vec_PtrFree( vNodes );
600 if ( !Abc_ObjIsBox(pObj) && !Abc_ObjIsBo(pObj) && !Abc_ObjIsBarBuf(pObj) )
618 fprintf( stdout,
"Abc_NtkDup(): Network check has failed.\n" );
619 pNtk->
pCopy = pNtkNew;
639 assert( Abc_NtkIsStrash(pNtk) );
650 printf(
"Abc_NtkStrash: The network check has failed.\n" );
674 assert( Abc_NtkIsStrash(pNtk) );
699 pObj2 = Abc_NtkPo( pNtk, ++i );
708 assert( Abc_NtkPiNum(pNtk) == Abc_NtkPiNum(pNtkNew) );
709 assert( Abc_NtkPoNum(pNtk) == 2*Abc_NtkPoNum(pNtkNew) );
710 assert( Abc_NtkLatchNum(pNtk) == Abc_NtkLatchNum(pNtkNew) );
731 assert( Abc_NtkIsLogic(pNtk) );
750 if ( pObj->
pCopy == NULL )
754 if ( !Abc_ObjIsBox(pObj) && !Abc_ObjIsBo(pObj) )
770 if ( pObj->
pCopy == NULL )
774 if ( !Abc_ObjIsBox(pObj) && !Abc_ObjIsBo(pObj) )
793 fprintf( stdout,
"Abc_NtkDup(): Network check has failed.\n" );
814 assert( Abc_NtkIsLogic(pNtk) );
815 assert( Abc_NtkLatchNum(pNtk) == 0 );
831 if ( pObj->
pCopy == NULL && Abc_ObjIsNode(pObj) && Abc_ObjLevel(pObj) <= Level )
842 if ( !pObj->
pCopy && pFanin->
pCopy && Abc_ObjIsNode(pFanin) )
844 Abc_Obj_t * pNodeNew = Abc_NtkCreatePo(pNtkNew);
851 fprintf( stdout,
"Abc_NtkBottom(): Network check has failed.\n" );
871 assert( pNtkBottom != NULL );
872 if ( pNtkTop == NULL )
875 assert( Abc_NtkPiNum(pNtkTop) == Abc_NtkCiNum(pNtkTop) );
876 assert( Abc_NtkPiNum(pNtkBottom) == Abc_NtkCiNum(pNtkBottom) );
878 assert( Abc_NtkPoNum(pNtkBottom) == Abc_NtkPiNum(pNtkTop) );
879 assert( Abc_NtkPiNum(pNtkBottom) < Abc_NtkPiNum(pNtkTop) );
885 Abc_NtkPo(pNtkBottom, i)->pCopy = pBuffer;
888 for ( i = Abc_NtkPiNum(pNtkTop) - 1; i >= Abc_NtkPiNum(pNtkBottom); i-- )
890 assert( Abc_NtkPiNum(pNtkBottom) == Abc_NtkPiNum(pNtkTop) );
893 Abc_NtkPi(pNtkBottom, i)->pCopy = Abc_NtkPi(pNtkTop, i);
902 Vec_PtrFree( vNodes );
910 fprintf( stdout,
"Abc_NtkAttachBottom(): Network check has failed.\n" );
929 Abc_Obj_t * pObj, * pFanin, * pNodeCoNew;
933 assert( Abc_NtkIsLogic(pNtk) || Abc_NtkIsStrash(pNtk) );
934 assert( Abc_ObjIsNode(pNode) || (Abc_NtkIsStrash(pNtk) && (Abc_AigNodeIsConst(pNode) || Abc_ObjIsCi(pNode))) );
943 if ( Abc_NtkIsStrash(pNtk) )
951 if ( fUseAllCis || Abc_NodeIsTravIdCurrent(pObj) )
953 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
958 pNodeCoNew = Abc_NtkCreatePo( pNtkNew );
964 if ( Abc_NtkIsStrash(pNtk) )
977 Vec_PtrFree( vNodes );
980 fprintf( stdout,
"Abc_NtkCreateCone(): Network check has failed.\n" );
999 Abc_Obj_t * pObj, * pFanin, * pNodeCoNew;
1003 assert( Abc_NtkIsLogic(pNtk) || Abc_NtkIsStrash(pNtk) );
1012 if ( Abc_NtkIsStrash(pNtk) )
1021 if ( fUseAllCis || Abc_NodeIsTravIdCurrent(pObj) )
1023 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
1032 if ( Abc_NtkIsStrash(pNtk) )
1043 Vec_PtrFree( vNodes );
1049 pNodeCoNew = Abc_NtkCreatePo( pNtkNew );
1051 if ( Abc_ObjIsCo(pObj) )
1060 fprintf( stdout,
"Abc_NtkCreateConeArray(): Network check has failed.\n" );
1081 assert( Abc_NtkIsStrash(pNtkNew) );
1082 assert( Abc_NtkIsStrash(pNtk) );
1094 if ( !Abc_NodeIsTravIdCurrent(pObj) )
1098 if ( iNodeId == -1 )
1100 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
1104 pObj->
pCopy = Abc_NtkObj( pNtkNew, iNodeId );
1110 Vec_PtrFree( vNodes );
1114 fprintf( stdout,
"Abc_NtkAppendToCone(): Network check has failed.\n" );
1131 Abc_Obj_t * pObj, * pFanin, * pNodeCoNew;
1136 assert( Abc_NtkIsLogic(pNtk) || Abc_NtkIsStrash(pNtk) );
1137 assert( Abc_ObjIsNode(pNode) );
1146 if ( Abc_NtkIsStrash(pNtk) )
1150 vCone = Vec_PtrAlloc( 100 );
1151 vSupp = Vec_PtrAlloc( 100 );
1158 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
1162 pNodeCoNew = Abc_NtkCreatePo( pNtkNew );
1168 if ( Abc_NtkIsStrash(pNtk) )
1181 Vec_PtrFree( vCone );
1182 Vec_PtrFree( vSupp );
1185 fprintf( stdout,
"Abc_NtkCreateMffc(): Network check has failed.\n" );
1204 Abc_Obj_t * pObj, * pFinal, * pOther, * pNodePo;
1207 assert( Abc_NtkIsLogic(pNtk) );
1219 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
1225 Vec_PtrFree( vNodes );
1231 if ( Abc_ObjIsCo(pObj) )
1232 pOther = Abc_ObjFanin0(pObj)->
pCopy;
1234 pOther = pObj->
pCopy;
1235 if ( Vec_IntEntry(vValues, i) == 0 )
1236 pOther = Abc_ObjNot(pOther);
1241 pNodePo = Abc_NtkCreatePo( pNtkNew );
1245 fprintf( stdout,
"Abc_NtkCreateTarget(): Network check has failed.\n" );
1271 pFanin->
pCopy = Abc_NtkCreatePi( pNtkNew );
1279 pNodePo = Abc_NtkCreatePo( pNtkNew );
1283 fprintf( stdout,
"Abc_NtkCreateFromNode(): Network check has failed.\n" );
1301 Abc_Obj_t * pObj, * pNodeNew, * pNodePo;
1311 Vec_StrFree( vStr );
1314 pNodePo = Abc_NtkCreatePo( pNtkNew );
1318 fprintf( stdout,
"Abc_NtkCreateFromNode(): Network check has failed.\n" );
1343 Vec_PtrPush( pNtkNew->
vObjs, NULL );
1346 for ( i = 0; i < nVars; i++ )
1347 Abc_ObjAssignName( Abc_NtkCreatePi(pNtkNew), (
char *)Vec_PtrEntry(vNames, i), NULL );
1350 pNode = Abc_NtkCreateNode( pNtkNew );
1355 pNodePo = Abc_NtkCreatePo(pNtkNew);
1359 fprintf( stdout,
"Abc_NtkCreateWithNode(): Network check has failed.\n" );
1379 int i, k, nVars;
char Buffer[100];
1380 char * pSop = (
char *)Vec_PtrEntry(vSop, 0);
1385 Vec_PtrPush( pNtkNew->
vObjs, NULL );
1388 for ( i = 0; i < nVars; i++ )
1389 Abc_ObjAssignName( Abc_NtkCreatePi(pNtkNew), (
char *)Vec_PtrEntry(vNames, i), NULL );
1394 pNode = Abc_NtkCreateNode( pNtkNew );
1400 pNodePo = Abc_NtkCreatePo(pNtkNew);
1406 fprintf( stdout,
"Abc_NtkCreateWithNode(): Network check has failed.\n" );
1436 if ( Abc_NtkHasBdd(pNtk) )
1440 Cudd_RecursiveDeref( (DdManager *)pNtk->
pManFunc, (DdNode *)pObj->
pData );
1455 { printf(
"Flags A, B, or C are not zero.\n" ), fWarning = 1; }
1466 if ( pNtk->
pMmObj == NULL )
1473 Vec_PtrFree( pNtk->
vPios );
1474 Vec_PtrFree( pNtk->
vPis );
1475 Vec_PtrFree( pNtk->
vPos );
1476 Vec_PtrFree( pNtk->
vCis );
1477 Vec_PtrFree( pNtk->
vCos );
1478 Vec_PtrFree( pNtk->
vObjs );
1479 Vec_PtrFree( pNtk->
vBoxes );
1500 Vec_IntFreeP( &pNtk->
vPhases );
1502 if ( Abc_NtkIsStrash(pNtk) )
1504 else if ( Abc_NtkHasSop(pNtk) || Abc_NtkHasBlifMv(pNtk) )
1507 else if ( Abc_NtkHasBdd(pNtk) )
1510 else if ( Abc_NtkHasAig(pNtk) )
1512 else if ( Abc_NtkHasMapping(pNtk) )
1514 else if ( !Abc_NtkHasBlackbox(pNtk) )
1527 Vec_AttFree( (
Vec_Att_t *)pAttrMan, 1 );
1529 Vec_IntFreeP( &pNtk->
vGates );
1530 Vec_PtrFree( pNtk->
vAttrs );
1540 Vec_IntFreeP( &pNtk->
vTopo );
1541 Vec_IntFreeP( &pNtk->
vFins );
1563 if ( Abc_NtkNodeNum(pNtk) == 0 && Abc_NtkBoxNum(pNtk) == 0 )
1593 vNets = Vec_PtrAlloc( 100 );
1596 if ( Abc_ObjFaninNum(pNet) > 0 )
1603 Vec_PtrPush( vNets, pNet );
1607 if ( vNets->nSize > 0 )
1609 printf(
"Warning: Constant-0 drivers added to %d non-driven nets in network \"%s\":\n", Vec_PtrSize(vNets), pNtk->
pName );
1612 printf(
"%s%s", (i?
", ":
""),
Abc_ObjName(pNet) );
1615 if ( Vec_PtrSize(vNets) > 3 )
1622 Vec_PtrFree( vNets );
1642 if ( Abc_NtkIsComb(pNtk) )
1645 assert( !Abc_NtkIsNetlist(pNtk) );
1646 assert( Abc_NtkHasOnlyLatchBoxes(pNtk) );
1652 assert( Abc_NtkLatchNum(pNtk) == 0 );
1653 assert( Abc_NtkBoxNum(pNtk) == 0 );
1656 Vec_PtrClear( pNtk->
vPis );
1659 if ( Abc_ObjIsBo(pObj) )
1665 Vec_PtrPush( pNtk->
vPis, pObj );
1667 assert( Abc_NtkBoNum(pNtk) == 0 );
1669 if ( fRemoveLatches )
1673 vBos = Vec_PtrAlloc( 100 );
1674 Vec_PtrClear( pNtk->
vPos );
1676 if ( Abc_ObjIsBi(pObj) )
1677 Vec_PtrPush( vBos, pObj );
1679 Vec_PtrPush( pNtk->
vPos, pObj );
1681 Vec_PtrFree( pNtk->
vCos );
1686 Vec_PtrFree( vBos );
1688 pNtk->
vCos = Vec_PtrDup( pNtk->
vPos );
1690 if ( Abc_NtkIsLogic(pNtk) )
1692 else if ( Abc_NtkIsStrash(pNtk) )
1700 Vec_PtrClear( pNtk->
vPos );
1703 if ( Abc_ObjIsBi(pObj) )
1709 Vec_PtrPush( pNtk->
vPos, pObj );
1712 assert( Abc_NtkBiNum(pNtk) == 0 );
1715 fprintf( stdout,
"Abc_NtkMakeComb(): Network check has failed.\n" );
1733 assert( Abc_NtkBoxNum(pNtk) == 0 );
1734 if ( !Abc_NtkIsComb(pNtk) )
1736 printf(
"The network is a not a combinational one.\n" );
1739 if ( nLatchesToAdd >= Abc_NtkPiNum(pNtk) )
1741 printf(
"The number of latches is more or equal than the number of PIs.\n" );
1744 if ( nLatchesToAdd >= Abc_NtkPoNum(pNtk) )
1746 printf(
"The number of latches is more or equal than the number of POs.\n" );
1751 Vec_PtrClear( pNtk->
vPis );
1754 if ( i < Abc_NtkCiNum(pNtk) - nLatchesToAdd )
1756 Vec_PtrPush( pNtk->
vPis, pObj );
1765 Vec_PtrClear( pNtk->
vPos );
1768 if ( i < Abc_NtkCoNum(pNtk) - nLatchesToAdd )
1770 Vec_PtrPush( pNtk->
vPos, pObj );
1779 for ( i = 0; i < nLatchesToAdd; i++ )
1781 pObjLo = Abc_NtkCi( pNtk, Abc_NtkCiNum(pNtk) - nLatchesToAdd + i );
1782 pObjLi = Abc_NtkCo( pNtk, Abc_NtkCoNum(pNtk) - nLatchesToAdd + i );
1783 pObj = Abc_NtkCreateLatch( pNtk );
1786 Abc_LatchSetInit0( pObj );
1790 fprintf( stdout,
"Abc_NtkMakeSeq(): Network check has failed.\n" );
1812 assert( !Abc_NtkIsNetlist(pNtkInit) );
1813 assert( Abc_NtkHasOnlyLatchBoxes(pNtkInit) );
1815 if ( Abc_NtkPoNum(pNtk) == 1 )
1817 vPosLeft = Vec_PtrAlloc( Vec_IntSize(vPoIds) );
1819 Vec_PtrPush( vPosLeft, Abc_NtkPo(pNtk, Index) );
1820 Vec_PtrWriteEntry( pNtk->
vPos, Index, NULL );
1823 vCosLeft = Vec_PtrDup( vPosLeft );
1824 for ( i = Abc_NtkPoNum(pNtk); i < Abc_NtkCoNum(pNtk); i++ )
1825 Vec_PtrPush( vCosLeft, Abc_NtkCo(pNtk, i) );
1831 Vec_PtrFree( pNtk->
vPos ); pNtk->
vPos = vPosLeft;
1832 Vec_PtrFree( pNtk->
vCos ); pNtk->
vCos = vCosLeft;
1834 if ( Abc_NtkIsStrash(pNtk) ) {
1836 if ( Abc_NtkLatchNum(pNtk) ) printf(
"Run sequential cleanup (\"scl\") to get rid of dangling logic.\n" );
1839 if ( Abc_NtkLatchNum(pNtk) ) printf(
"Run sequential cleanup (\"st; scl\") to get rid of dangling logic.\n" );
1842 fprintf( stdout,
"Abc_NtkMakeComb(): Network check has failed.\n" );
1864 assert( !Abc_NtkIsNetlist(pNtkInit) );
1865 assert( Abc_NtkHasOnlyLatchBoxes(pNtkInit) );
1866 if ( Output < 0 || Output >= Abc_NtkPoNum(pNtkInit) )
1868 printf(
"PO index is incorrect.\n" );
1873 if ( Abc_NtkPoNum(pNtk) == 1 )
1880 vPosLeft = Vec_PtrAlloc( nRange );
1882 if ( i < Output || i >= Output + nRange )
1885 Vec_PtrPush( vPosLeft, pNodePo );
1887 vCosLeft = Vec_PtrDup( vPosLeft );
1888 for ( i = Abc_NtkPoNum(pNtk); i < Abc_NtkCoNum(pNtk); i++ )
1889 Vec_PtrPush( vCosLeft, Abc_NtkCo(pNtk, i) );
1891 Vec_PtrFree( pNtk->
vPos ); pNtk->
vPos = vPosLeft;
1892 Vec_PtrFree( pNtk->
vCos ); pNtk->
vCos = vCosLeft;
1895 if ( Abc_NtkIsStrash(pNtk) )
1898 if ( Abc_NtkLatchNum(pNtk) ) printf(
"Run sequential cleanup (\"scl\") to get rid of dangling logic.\n" );
1902 if ( Abc_NtkLatchNum(pNtk) ) printf(
"Run sequential cleanup (\"st; scl\") to get rid of dangling logic.\n" );
1906 fprintf( stdout,
"Abc_NtkMakeComb(): Network check has failed.\n" );
1930 if ( Abc_ObjIsPo(pObj) )
1933 if ( Abc_ObjFaninNum(Abc_ObjFanin0(pObj)) == 0 )
1936 if ( Abc_ObjFanoutNum(Abc_ObjFanin0(pObj)) == 0 && !Abc_ObjIsPi(Abc_ObjFanin0(pObj)) )
1938 pNtk->
vObjs->pArray[pObj->
Id] = NULL;
1939 pObj->
Id = (1<<26)-1;
1946 if ( Abc_ObjFaninNum(Abc_ObjFanin0(pObj)) == 1 )
1948 if ( Abc_ObjIsPi(Abc_ObjFanin0(Abc_ObjFanin0(pObj))) )
1951 if ( Abc_ObjFanoutNum(Abc_ObjFanin0(pObj)) == 0 )
1953 pNtk->
vObjs->pArray[pObj->
Id] = NULL;
1954 pObj->
Id = (1<<26)-1;
1961 Vec_PtrWriteEntry( pNtk->
vPos, m++, pObj );
1963 Vec_PtrWriteEntry( pNtk->
vCos, k++, pObj );
1965 Vec_PtrShrink( pNtk->
vPos, m );
1966 Vec_PtrShrink( pNtk->
vCos, k );
1972 if ( Abc_ObjIsPi(pObj) )
1974 if ( Abc_ObjFanoutNum(pObj) == 0 )
1976 pNtk->
vObjs->pArray[pObj->
Id] = NULL;
1977 pObj->
Id = (1<<26)-1;
1983 Vec_PtrWriteEntry( pNtk->
vPis, m++, pObj );
1985 Vec_PtrWriteEntry( pNtk->
vCis, k++, pObj );
1987 Vec_PtrShrink( pNtk->
vPis, m );
1988 Vec_PtrShrink( pNtk->
vCis, k );
2006 Abc_Obj_t * pObj, * pConst0, * pFaninNew;
2008 assert( Vec_PtrSize(vCexes) == Abc_NtkPoNum(pNtk) );
2012 if ( Vec_PtrEntry( vCexes, i ) == NULL )
2015 pFaninNew = Abc_ObjNotCond( pConst0, Abc_ObjFaninC0(pObj) );
2017 assert( Abc_ObjChild0(pObj) == pConst0 );
2023 printf(
"Logic cones of %d POs have been replaced by constant 0.\n", Counter );
2041 Abc_Obj_t * pObj, * pConst0, * pFaninNew;
2042 pObj = Abc_NtkPo( pNtk, iOutput );
2045 if ( !Abc_ObjFaninC0(pObj) ^ fUseConst1 )
2046 Abc_ObjXorFaninC( pObj, 0 );
2049 pConst0 = Abc_ObjNotCond(
Abc_AigConst1(pNtk), !fUseConst1 );
2050 pFaninNew = Abc_ObjNotCond( pConst0, Abc_ObjFaninC0(pObj) );
2052 assert( Abc_ObjChild0(pObj) == pConst0 );
2076 pObj1 = Abc_NtkPo( pNtk, 0 );
2077 pObj2 = Abc_NtkPo( pNtk, iOutput );
2078 if ( Abc_ObjFanin0(pObj1) == Abc_ObjFanin0(pObj2) )
2080 if ( Abc_ObjFaninC0(pObj1) ^ Abc_ObjFaninC0(pObj2) )
2082 Abc_ObjXorFaninC( pObj1, 0 );
2083 Abc_ObjXorFaninC( pObj2, 0 );
2087 pChild1Old = Abc_ObjChild0( pObj1 );
2088 pChild2Old = Abc_ObjChild0( pObj2 );
2089 pChild1 = Abc_ObjNotCond( pChild1Old, Abc_ObjFaninC0(pObj2) );
2090 pChild2 = Abc_ObjNotCond( pChild2Old, Abc_ObjFaninC0(pObj1) );
2093 assert( Abc_ObjChild0(pObj1) == pChild2Old );
2094 assert( Abc_ObjChild0(pObj2) == pChild1Old );
2110 Abc_Obj_t * pObj = Abc_NtkPo(pNtk, iOutput);
2111 if ( Abc_ObjFanin0(pObj) ==
Abc_AigConst1(pNtk) && Abc_ObjFaninC0(pObj) == fRemoveConst0 )
2132 pFile = fopen( pFileName,
"rb" );
2133 if ( pFile == NULL )
2135 printf(
"Cannot open input file \"%s\".\n", pFileName );
2138 vSignals = Vec_IntAlloc( nSignals );
2139 while ( fgets( Buffer, 1000, pFile ) != NULL )
2141 if ( Buffer[0] ==
' ' || Buffer[0] ==
'\r' || Buffer[0] ==
'\n' )
2143 iFlop = atoi( Buffer );
2144 if ( iFlop < 0 || iFlop >= nSignals )
2146 printf(
"The zero-based signal ID (%d) is out of range.\n", iFlop );
2148 Vec_IntFree( vSignals );
2151 Vec_IntPush( vSignals, iFlop );
2154 if ( Vec_IntSize(vSignals) != nSignals )
2156 printf(
"The number of indexes read in from file (%d) is different from the number of signals in the circuit (%d).\n", Vec_IntSize(vSignals), nSignals );
2157 Vec_IntFree( vSignals );
2167 FILE * pFile = fopen( pFileName,
"rb" );
2168 if ( pFile == NULL )
2170 printf(
"Cannot open input file \"%s\".\n", pFileName );
2173 vSignals = Vec_IntAlloc( nSignals );
2174 while ( fscanf( pFile,
"%d", &Num ) == 1 )
2176 if ( Num <= 0 || Num > nSignals )
2178 printf(
"The one-based signal ID (%d) is out of range (%d).\n", Num, nSignals );
2180 Vec_IntFree( vSignals );
2183 Vec_IntPush( vSignals, Num-1 );
2186 if ( Vec_IntSize(vSignals) != nSignals )
2188 printf(
"The number of indexes read in from file (%d) is different from the number of signals in the circuit (%d).\n", Vec_IntSize(vSignals), nSignals );
2189 Vec_IntFree( vSignals );
2206void Abc_NtkPermute(
Abc_Ntk_t * pNtk,
int fInputs,
int fOutputs,
int fFlops,
char * pInPermFile,
char * pOutPermFile,
char * pFlopPermFile )
2209 Vec_Int_t * vInputs, * vOutputs, * vFlops, * vTemp;
2215 if ( vInputs == NULL )
2220 vInputs = Vec_IntStartNatural( Abc_NtkPiNum(pNtk) );
2224 if ( vOutputs == NULL )
2229 vOutputs = Vec_IntStartNatural( Abc_NtkPoNum(pNtk) );
2230 if ( pFlopPermFile )
2233 if ( vFlops == NULL )
2238 vFlops = Vec_IntStartNatural( Abc_NtkLatchNum(pNtk) );
2244 for ( i = 0; i < Abc_NtkPiNum(pNtk); i++ )
2248 k = Vec_IntEntry( vInputs, i );
2249 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( vCis, k );
2250 Vec_PtrWriteEntry( pNtk->
vPis, i, pTemp );
2251 Vec_PtrWriteEntry( pNtk->
vCis, i, pTemp );
2255 k = rand() % Abc_NtkPiNum(pNtk);
2257 Entry = Vec_IntEntry( vInputs, i );
2258 Vec_IntWriteEntry( vInputs, i, Vec_IntEntry(vInputs, k) );
2259 Vec_IntWriteEntry( vInputs, k, Entry );
2262 Vec_PtrWriteEntry( pNtk->
vPis, i, Vec_PtrEntry(pNtk->
vPis, k) );
2263 Vec_PtrWriteEntry( pNtk->
vPis, k, pTemp );
2266 Vec_PtrWriteEntry( pNtk->
vCis, i, Vec_PtrEntry(pNtk->
vCis, k) );
2267 Vec_PtrWriteEntry( pNtk->
vCis, k, pTemp );
2273 for ( i = 0; i < Abc_NtkPoNum(pNtk); i++ )
2277 k = Vec_IntEntry( vOutputs, i );
2278 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( vCos, k );
2279 Vec_PtrWriteEntry( pNtk->
vPos, i, pTemp );
2280 Vec_PtrWriteEntry( pNtk->
vCos, i, pTemp );
2284 k = rand() % Abc_NtkPoNum(pNtk);
2286 Entry = Vec_IntEntry( vOutputs, i );
2287 Vec_IntWriteEntry( vOutputs, i, Vec_IntEntry(vOutputs, k) );
2288 Vec_IntWriteEntry( vOutputs, k, Entry );
2291 Vec_PtrWriteEntry( pNtk->
vPos, i, Vec_PtrEntry(pNtk->
vPos, k) );
2292 Vec_PtrWriteEntry( pNtk->
vPos, k, pTemp );
2295 Vec_PtrWriteEntry( pNtk->
vCos, i, Vec_PtrEntry(pNtk->
vCos, k) );
2296 Vec_PtrWriteEntry( pNtk->
vCos, k, pTemp );
2301 assert( Abc_NtkBoxNum(pNtk) == Abc_NtkLatchNum(pNtk) );
2303 for ( i = 0; i < Abc_NtkLatchNum(pNtk); i++ )
2305 if ( pFlopPermFile )
2307 k = Vec_IntEntry( vFlops, i );
2308 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( vFfs, k );
2309 Vec_PtrWriteEntry( pNtk->
vBoxes, i, pTemp );
2310 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( vCis, Abc_NtkPiNum(pNtk)+k );
2311 Vec_PtrWriteEntry( pNtk->
vCis, Abc_NtkPiNum(pNtk)+i, pTemp );
2312 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( vCos, Abc_NtkPoNum(pNtk)+k );
2313 Vec_PtrWriteEntry( pNtk->
vCos, Abc_NtkPoNum(pNtk)+i, pTemp );
2317 k = rand() % Abc_NtkLatchNum(pNtk);
2319 Entry = Vec_IntEntry( vFlops, i );
2320 Vec_IntWriteEntry( vFlops, i, Vec_IntEntry(vFlops, k) );
2321 Vec_IntWriteEntry( vFlops, k, Entry );
2324 Vec_PtrWriteEntry( pNtk->
vBoxes, i, Vec_PtrEntry(pNtk->
vBoxes, k) );
2325 Vec_PtrWriteEntry( pNtk->
vBoxes, k, pTemp );
2327 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( pNtk->
vCis, Abc_NtkPiNum(pNtk)+i );
2328 Vec_PtrWriteEntry( pNtk->
vCis, Abc_NtkPiNum(pNtk)+i, Vec_PtrEntry(pNtk->
vCis, Abc_NtkPiNum(pNtk)+k) );
2329 Vec_PtrWriteEntry( pNtk->
vCis, Abc_NtkPiNum(pNtk)+k, pTemp );
2331 pTemp = (
Abc_Obj_t *)Vec_PtrEntry( pNtk->
vCos, Abc_NtkPoNum(pNtk)+i );
2332 Vec_PtrWriteEntry( pNtk->
vCos, Abc_NtkPoNum(pNtk)+i, Vec_PtrEntry(pNtk->
vCos, Abc_NtkPoNum(pNtk)+k) );
2333 Vec_PtrWriteEntry( pNtk->
vCos, Abc_NtkPoNum(pNtk)+k, pTemp );
2342 vInputs = Vec_IntInvert( vTemp = vInputs, -1 );
2343 Vec_IntFree( vTemp );
2344 vOutputs = Vec_IntInvert( vTemp = vOutputs, -1 );
2345 Vec_IntFree( vTemp );
2346 vFlops = Vec_IntInvert( vTemp = vFlops, -1 );
2347 Vec_IntFree( vTemp );
2350 pNtk->
vObjPerm = Vec_IntAlloc( Abc_NtkPiNum(pNtk) + Abc_NtkPoNum(pNtk) + Abc_NtkLatchNum(pNtk) );
2352 Vec_IntPush( pNtk->
vObjPerm, Entry );
2354 Vec_IntPush( pNtk->
vObjPerm, Entry );
2356 Vec_IntPush( pNtk->
vObjPerm, Entry );
2358 Vec_IntFree( vInputs );
2359 Vec_IntFree( vOutputs );
2360 Vec_IntFree( vFlops );
2376 int Diff = Abc_ObjFanoutNum(*pp2) - Abc_ObjFanoutNum(*pp1);
2391 qsort( (
void *)Vec_PtrArray(pNtk->
vPis), (
size_t)Vec_PtrSize(pNtk->
vPis),
sizeof(
Abc_Obj_t *),
2393 Vec_PtrClear( pNtk->
vCis );
2395 Vec_PtrPush( pNtk->
vCis, pNode );
2412 int i, * pInputs, * pOutputs, * pFlops;
2415 printf(
"Abc_NtkUnpermute(): Initial permutation is not available.\n" );
2418 assert( Abc_NtkBoxNum(pNtk) == Abc_NtkLatchNum(pNtk) );
2420 pInputs = Vec_IntArray( pNtk->
vObjPerm );
2421 pOutputs = pInputs + Abc_NtkPiNum(pNtk);
2422 pFlops = pOutputs + Abc_NtkPoNum(pNtk);
2424 vTemp = Vec_PtrAlloc( Abc_NtkPiNum(pNtk) );
2425 for ( i = 0; i < Abc_NtkPiNum(pNtk); i++ )
2426 Vec_PtrPush( vTemp, Abc_NtkPi(pNtk, pInputs[i]) );
2427 Vec_PtrFreeP( &pNtk->
vPis );
2430 vTemp = Vec_PtrAlloc( Abc_NtkPoNum(pNtk) );
2431 for ( i = 0; i < Abc_NtkPoNum(pNtk); i++ )
2432 Vec_PtrPush( vTemp, Abc_NtkPo(pNtk, pOutputs[i]) );
2433 Vec_PtrFreeP( &pNtk->
vPos );
2436 vTemp = Vec_PtrDup( pNtk->
vPis );
2437 vTemp2 = Vec_PtrDup( pNtk->
vPos );
2438 vLatch = Vec_PtrAlloc( Abc_NtkLatchNum(pNtk) );
2439 for ( i = 0; i < Abc_NtkLatchNum(pNtk); i++ )
2442 Vec_PtrPush( vTemp, Abc_NtkCi(pNtk, Abc_NtkPiNum(pNtk) + pFlops[i]) );
2443 Vec_PtrPush( vTemp2, Abc_NtkCo(pNtk, Abc_NtkPoNum(pNtk) + pFlops[i]) );
2444 Vec_PtrPush( vLatch, Abc_NtkBox(pNtk, pFlops[i]) );
2446 Vec_PtrFreeP( &pNtk->
vCis );
2447 Vec_PtrFreeP( &pNtk->
vCos );
2448 Vec_PtrFreeP( &pNtk->
vBoxes );
2450 pNtk->
vCos = vTemp2;
2471 Abc_Obj_t * pObj, * pObjNew, * pFanin, * pFanout;
2474 vNodes = Vec_PtrAlloc( 100 );
2475 vFanouts = Vec_PtrAlloc( 100 );
2478 Vec_PtrClear( vNodes );
2480 if ( Abc_ObjFanoutNum(pObj) >= nLimit )
2481 Vec_PtrPush( vNodes, pObj );
2488 Vec_PtrShrink( vFanouts, nLimit / 2 );
2493 printf(
"Duplicated %d nodes.\n", Vec_PtrSize(vNodes) );
2495 while ( Vec_PtrSize(vNodes) > 0 );
2496 Vec_PtrFree( vFanouts );
2497 Vec_PtrFree( vNodes );
2515 char * pSop = (
char *)Vec_PtrEntry(vSops, 0);
2518 for ( k = 0; pSop[k] !=
' '; k++ )
2519 Abc_NtkCreatePi( pNtk );
2520 nObjBeg = Abc_NtkObjNumMax(pNtk);
2523 Abc_Obj_t * pObj = Abc_NtkCreateNode( pNtk );
2525 for ( k = 0; pSop[k] !=
' '; k++ )
2528 for ( i = 0; i < Vec_PtrSize(vSops); i++ )
2530 Abc_Obj_t * pObj = Abc_NtkObj( pNtk, nObjBeg + i );
2531 Abc_Obj_t * pObjPo = Abc_NtkCreatePo( pNtk );
2557 for ( k = 0; k < Gia_ManCiNum(pGia); k++ )
2558 Abc_NtkCreatePi( pNtk );
2563 pObj->
Value = Abc_ObjId( Abc_NtkCi(pNtk, k) );
2566 Abc_Obj_t * pAbcObj0 = Abc_NtkObj( pNtk, Gia_ObjFanin0(pObj)->Value );
2567 Abc_Obj_t * pAbcObj1 = Abc_NtkObj( pNtk, Gia_ObjFanin1(pObj)->Value );
2568 pAbcObj0 = Abc_ObjNotCond( pAbcObj0, Gia_ObjFaninC0(pObj) );
2569 pAbcObj1 = Abc_ObjNotCond( pAbcObj1, Gia_ObjFaninC1(pObj) );
2571 pObj->
Value = Abc_ObjId( pAbcObj );
2576 if ( Gia_ObjFaninId0p(pGia, pObj) == 0 )
2579 pAbcObj = Abc_NtkObj( pNtk, Gia_ObjFanin0(pObj)->Value );
2580 pAbcObj = Abc_ObjNotCond( pAbcObj, Gia_ObjFaninC0(pObj) );
2581 pAbcObjPo = Abc_NtkCreatePo( pNtk );
2589 assert( Gia_ManCoNum(pGia) == 1 );
2592 pObj->
Value = Abc_ObjId( Abc_NtkCi(pNtk, k) );
2595 Abc_Obj_t * pAbcObj0 = Abc_NtkObj( pNtk, Gia_ObjFanin0(pObj)->Value );
2596 Abc_Obj_t * pAbcObj1 = Abc_NtkObj( pNtk, Gia_ObjFanin1(pObj)->Value );
2597 pAbcObj0 = Abc_ObjNotCond( pAbcObj0, Gia_ObjFaninC0(pObj) );
2598 pAbcObj1 = Abc_ObjNotCond( pAbcObj1, Gia_ObjFaninC1(pObj) );
2600 pObj->
Value = Abc_ObjId( pAbcObj );
2602 pObj = Gia_ManCo(pGia, 0);
2603 if ( Gia_ObjFaninId0p(pGia, pObj) == 0 )
2606 pAbcObj = Abc_NtkObj( pNtk, Gia_ObjFanin0(pObj)->Value );
2607 pAbcObj = Abc_ObjNotCond( pAbcObj, Gia_ObjFaninC0(pObj) );
2608 pAbcObjPo = Abc_NtkCreatePo( pNtk );
#define ABC_NUM_STEPS
INCLUDES ///.
void Abc_NtkRemovePo(Abc_Ntk_t *pNtk, int iOutput, int fRemoveConst0)
Abc_Ntk_t * Abc_NtkDupDfsNoBarBufs(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkDupTransformMiter(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkStartFromWithLatches(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func, int nLatches)
Abc_Ntk_t * Abc_NtkNodeDup(Abc_Ntk_t *pNtkInit, int nLimit, int fVerbose)
Vec_Int_t * Abc_NtkReadSignalPerm(char *pFileName, int nSignals)
Abc_Ntk_t * Abc_NtkCreateFromSops(char *pName, Vec_Ptr_t *vSops)
Abc_Ntk_t * Abc_NtkCreateFromNode(Abc_Ntk_t *pNtk, Abc_Obj_t *pNode)
void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkCreateWithNodes(Vec_Ptr_t *vSop)
Abc_Ntk_t * Abc_NtkCreateFromRange(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkCreateConeArray(Abc_Ntk_t *pNtk, Vec_Ptr_t *vRoots, int fUseAllCis)
void Abc_NtkPermutePiUsingFanout(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkDouble(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkTrim(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkCreateCone(Abc_Ntk_t *pNtk, Abc_Obj_t *pNode, char *pNodeName, int fUseAllCis)
ABC_NAMESPACE_IMPL_START Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
Abc_Ntk_t * Abc_NtkSelectPos(Abc_Ntk_t *pNtkInit, Vec_Int_t *vPoIds)
void Abc_NtkAppendToCone(Abc_Ntk_t *pNtkNew, Abc_Ntk_t *pNtk, Vec_Ptr_t *vRoots)
Abc_Ntk_t * Abc_NtkStartRead(char *pName)
Abc_Ntk_t * Abc_NtkRestrashWithLatches(Abc_Ntk_t *pNtk, int nLatches)
void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
int Abc_NodeCompareByFanoutCount(Abc_Obj_t **pp1, Abc_Obj_t **pp2)
Abc_Ntk_t * Abc_NtkCreateMffc(Abc_Ntk_t *pNtk, Abc_Obj_t *pNode, char *pNodeName)
Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
void Abc_NtkFixNonDrivenNets(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkBottom(Abc_Ntk_t *pNtk, int Level)
Abc_Ntk_t * Abc_NtkMakeOnePo(Abc_Ntk_t *pNtkInit, int Output, int nRange)
void Abc_NtkMakeSeq(Abc_Ntk_t *pNtk, int nLatchesToAdd)
void Abc_NtkUnpermute(Abc_Ntk_t *pNtk)
Vec_Int_t * Abc_NtkReadSignalPerm2(char *pFileName, int nSignals)
Abc_Ntk_t * Abc_NtkAttachBottom(Abc_Ntk_t *pNtkTop, Abc_Ntk_t *pNtkBottom)
void Abc_NtkPermute(Abc_Ntk_t *pNtk, int fInputs, int fOutputs, int fFlops, char *pInPermFile, char *pOutPermFile, char *pFlopPermFile)
void Abc_NtkFinalizeRead(Abc_Ntk_t *pNtk)
void Abc_NtkSwapOneOutput(Abc_Ntk_t *pNtk, int iOutput)
Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
void Abc_NtkDropOneOutput(Abc_Ntk_t *pNtk, int iOutput, int fSkipSweep, int fUseConst1)
Abc_Ntk_t * Abc_NtkDupDfs(Abc_Ntk_t *pNtk)
void Abc_NtkMakeComb(Abc_Ntk_t *pNtk, int fRemoveLatches)
void Abc_NtkDropSatOutputs(Abc_Ntk_t *pNtk, Vec_Ptr_t *vCexes, int fVerbose)
Abc_Ntk_t * Abc_NtkCreateTarget(Abc_Ntk_t *pNtk, Vec_Ptr_t *vRoots, Vec_Int_t *vValues)
Abc_Ntk_t * Abc_NtkAllocBdd(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan, int nVars)
Abc_Ntk_t * Abc_NtkCreateWithNode(char *pSop)
Abc_Ntk_t * Abc_NtkCreateFromGias(char *pName, Vec_Ptr_t *vGias, Gia_Man_t *pMulti)
Abc_Ntk_t * Abc_NtkStartFromNoLatches(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
#define Abc_NtkForEachNet(pNtk, pNet, i)
ABC_DLL Abc_Obj_t * Abc_NodeStrash(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pNode, int fRecord)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL Abc_Obj_t * Abc_AigXor(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst1(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Ptr_t * Abc_NtkDfs2(Abc_Ntk_t *pNtk)
#define Abc_AigForEachAnd(pNtk, pNode, i)
#define Abc_NtkForEachPo(pNtk, pPo, i)
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeBuf(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
ABC_DLL int Abc_NtkCleanup(Abc_Ntk_t *pNtk, int fVerbose)
ABC_DLL void Abc_DesFree(Abc_Des_t *p, Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkTransferPhases(Abc_Ntk_t *pNtkNew, Abc_Ntk_t *pNtk)
ABC_DLL void Abc_ObjRecycle(Abc_Obj_t *pObj)
ABC_DLL Gia_Man_t * Abc_NtkClpGia(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_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst0(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NodeFreeNames(Vec_Ptr_t *vNames)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
ABC_DLL void Abc_ManTimeDup(Abc_Ntk_t *pNtkOld, Abc_Ntk_t *pNtkNew)
struct Abc_Aig_t_ Abc_Aig_t
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
ABC_DLL void Abc_NtkDeleteObj_rec(Abc_Obj_t *pObj, int fOnlyNodes)
ABC_DLL void Abc_NodeCollectFanouts(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
ABC_DLL Abc_Aig_t * Abc_AigAlloc(Abc_Ntk_t *pNtk)
FUNCTION DECLARATIONS ///.
Abc_NtkType_t
INCLUDES ///.
ABC_DLL void Abc_ObjTransferFanout(Abc_Obj_t *pObjOld, Abc_Obj_t *pObjNew)
ABC_DLL void Abc_NtkAddDummyPoNames(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkTimeInitialize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkOld)
ABC_DLL void Abc_ObjDeleteFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL int Abc_AigCleanup(Abc_Aig_t *pMan)
ABC_DLL Abc_Obj_t * Abc_AigAnd(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
#define Abc_NtkForEachLatchInput(pNtk, pObj, i)
#define Abc_NtkForEachPi(pNtk, pPi, i)
ABC_DLL void Abc_NtkDeleteObjPo(Abc_Obj_t *pObj)
ABC_DLL int Abc_SopGetVarNum(char *pSop)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL Abc_Obj_t * Abc_NtkCreateObj(Abc_Ntk_t *pNtk, Abc_ObjType_t Type)
ABC_DLL Vec_Ptr_t * Abc_NtkDfsNodes(Abc_Ntk_t *pNtk, Abc_Obj_t **ppNodes, int nNodes)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
ABC_DLL Vec_Ptr_t * Abc_NodeGetFakeNames(int nNames)
ABC_DLL void Abc_AigFree(Abc_Aig_t *pMan)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, const char *pName)
DECLARATIONS ///.
#define Abc_NtkForEachBox(pNtk, pObj, i)
ABC_DLL void Abc_ManTimeStop(Abc_ManTime_t *p)
ABC_DLL void Abc_NtkOrderCisCos(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NodeRef_rec(Abc_Obj_t *pNode)
ABC_DLL int Abc_NodeDeref_rec(Abc_Obj_t *pNode)
ABC_DLL float Abc_NodeReadArrivalWorst(Abc_Obj_t *pNode)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_NtkFindNet(Abc_Ntk_t *pNtk, char *pName)
ABC_DLL void Abc_NtkAddDummyPiNames(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
ABC_DLL void Abc_NodeMffcConeSupp(Abc_Obj_t *pNode, Vec_Ptr_t *vCone, Vec_Ptr_t *vSupp)
ABC_DLL Abc_Obj_t * Abc_NtkDupBox(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pBox, int fCopyName)
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL void * Abc_FrameReadLibGen()
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachAnd(p, pObj, i)
Vec_Str_t * Gia_ManComputeRange(Gia_Man_t *p)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
void Gia_ManCleanValue(Gia_Man_t *p)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
void Hop_ManStop(Hop_Man_t *p)
Hop_Man_t * Hop_ManStart()
DECLARATIONS ///.
int Mem_FixedReadMemUsage(Mem_Fixed_t *p)
void Mem_FixedStop(Mem_Fixed_t *p, int fVerbose)
Mem_Flex_t * Mem_FlexStart()
void Mem_StepStop(Mem_Step_t *p, int fVerbose)
Mem_Step_t * Mem_StepStart(int nSteps)
Mem_Fixed_t * Mem_FixedStart(int nEntrySize)
FUNCTION DEFINITIONS ///.
void Mem_FlexStop(Mem_Flex_t *p, int fVerbose)
int Mem_StepReadMemUsage(Mem_Step_t *p)
struct Mio_LibraryStruct_t_ Mio_Library_t
float Mio_LibraryReadDelayAigNode(Mio_Library_t *pLib)
struct Mem_Flex_t_ Mem_Flex_t
void Nm_ManFree(Nm_Man_t *p)
int Nm_ManFindIdByNameTwoTypes(Nm_Man_t *p, char *pName, int Type1, int Type2)
Nm_Man_t * Nm_ManCreate(int nSize)
MACRO DEFINITIONS ///.
int nObjCounts[ABC_OBJ_NUMBER]
Vec_Ptr_t * vLtlProperties
Abc_Cex_t * Abc_CexDup(Abc_Cex_t *p, int nRegsNew)
struct Vec_Att_t_ Vec_Att_t
BASIC TYPES ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.