30#define ABC_OBJ_VOID ((Abc_Obj_t *)(ABC_PTRINT_T)1)
51 int i, k, RetValue = 1;
62 if ( Abc_NtkLatchNum(pModel) > 0 )
64 printf(
"Network \"%s\" contains %d flops.\n",
65 Abc_NtkName(pNtk), Abc_NtkLatchNum(pModel) );
70 printf(
"Network \"%s\" contains box \"%s\" whose model \"%s\" is instantiated more than once.\n",
71 Abc_NtkName(pNtk),
Abc_ObjName(pBox), Abc_NtkName(pModel) );
97 assert( Abc_ObjIsNet(pNet) );
98 if ( Abc_NodeIsTravIdCurrent( pNet ) )
100 Abc_NodeSetTravIdCurrent( pNet );
101 pObj = Abc_ObjFanin0(pNet);
102 if ( Abc_ObjIsNode(pObj) )
105 if ( Abc_ObjIsNode(pObj) )
107 if ( Abc_ObjIsBo(pObj) )
108 pObj = Abc_ObjFanin0(pObj);
109 assert( Abc_ObjIsBox(pObj) );
111 Abc_NodeSetTravIdCurrent( Abc_ObjFanout0(pFanin) );
122 Abc_NtkIncrementTravId( pNtk );
124 Abc_NodeSetTravIdCurrent( Abc_ObjFanout0(pObj) );
129 Vec_PtrPush( vLiMaps, pObj );
131 Vec_PtrPush( vLoMaps, pObj );
140 Vec_PtrPush( vLiMaps, pObj );
142 Vec_PtrPush( vLoMaps, pObj );
149 assert( Abc_NtkIsNetlist(pNtk) );
150 *pvLiMaps = Vec_PtrAlloc( 1000 );
151 *pvLoMaps = Vec_PtrAlloc( 1000 );
170 assert( Abc_ObjIsNet(pNet) );
173 pObj = Abc_ObjFanin0(pNet);
174 assert( Abc_ObjIsNode(pObj) );
188 assert( Abc_NtkIsNetlist(pNtk) );
199 Abc_ObjFanout0(pObj)->pCopy =
Abc_NtkDupObj( pNtkNew, pObj, 1 );
206 pObjLi = Abc_NtkCreateBi(pNtkNew);
207 pLatch = Abc_NtkCreateLatch(pNtkNew);
208 pObjLo = Abc_NtkCreateBo(pNtkNew);
213 if ( Abc_ObjFanin0(pLiMap)->pNtk != pNtk )
214 pTemp = Abc_ObjFanin0(pLiMap)->pNtk;
215 else if ( Abc_ObjFanout0(pLoMap)->pNtk != pNtk )
216 pTemp = Abc_ObjFanout0(pLoMap)->pNtk;
218 sprintf( Buffer,
"_%s_in", Abc_NtkName(pTemp) );
220 sprintf( Buffer,
"_%s_out", Abc_NtkName(pTemp) );
222 pLiMap->
pCopy = pObjLi;
223 Abc_ObjFanout0(pLoMap)->
pCopy = pObjLo;
224 assert( Abc_ObjIsNet(Abc_ObjFanout0(pLoMap)) );
226 Vec_PtrFree( vLiMaps );
227 Vec_PtrFree( vLoMaps );
232 pNtkNew->
nBarBufs = Abc_NtkLatchNum(pNtkNew);
233 printf(
"Hierarchy reader flattened %d instances of logic boxes and introduced %d barbufs.\n", nBoxes, pNtkNew->
nBarBufs );
270 assert( Abc_NtkIsNetlist(pNtk) );
271 assert( Abc_NtkIsNetlist(pNtkBase) );
272 assert( Abc_NtkLatchNum(pNtkBase) == 0 );
274 assert( Abc_NtkWhiteboxNum(pNtk) == 0 );
275 assert( Abc_NtkBlackboxNum(pNtk) == 0 );
276 assert( Abc_NtkPiNum(pNtk) == Abc_NtkPiNum(pNtkBase) );
277 assert( Abc_NtkPoNum(pNtk) == Abc_NtkPoNum(pNtkBase) );
287 if ( Abc_ObjIsWhitebox(pObj) || Abc_ObjIsBlackbox(pObj) )
288 pObj->
pCopy->
pData = Abc_ObjModel(pObj)->pCopy;
290 pNtkNew = pNtkBase->
pCopy;
300 pObj->
pCopy = Abc_NtkPi(pNtkNew, i);
302 pObj->
pCopy = Abc_NtkPo(pNtkNew, i);
304 assert( Vec_PtrSize(vLiMaps) == Abc_NtkLatchNum(pNtk) );
305 assert( Vec_PtrSize(vLoMaps) == Abc_NtkLatchNum(pNtk) );
308 pObj = Abc_NtkBox( pNtk, i );
309 Abc_ObjFanin0(pObj)->pCopy = pLiMap->
pCopy;
312 Vec_PtrFree( vLiMaps );
313 Vec_PtrFree( vLoMaps );
320 if ( Abc_ObjFanoutNum(pObj->
pCopy) == 0 )
344 if ( Abc_NodeIsTravIdCurrent( pObj ) )
346 Abc_NodeSetTravIdCurrent( pObj );
347 assert( Abc_ObjIsNode(pObj) );
350 Vec_PtrPush( vNodes, pObj );
357 assert( Abc_NtkIsLogic(pNtk) );
360 vNodes = Vec_PtrAlloc( Abc_NtkObjNum(pNtk) );
361 Abc_NtkIncrementTravId( pNtk );
364 if ( i >= Abc_NtkCiNum(pNtk) - pNtk->
nBarBufs )
366 Vec_PtrPush( vNodes, pObj );
367 Abc_NodeSetTravIdCurrent( pObj );
371 if ( i < Abc_NtkCoNum(pNtk) - pNtk->
nBarBufs )
374 Vec_PtrPush( vNodes, pObj );
375 Vec_PtrPush( vNodes, Abc_ObjFanout0(pObj) );
376 Vec_PtrPush( vNodes, Abc_ObjFanout0(Abc_ObjFanout0(pObj)) );
377 Abc_NodeSetTravIdCurrent( pObj );
378 Abc_NodeSetTravIdCurrent( Abc_ObjFanout0(pObj) );
379 Abc_NodeSetTravIdCurrent( Abc_ObjFanout0(Abc_ObjFanout0(pObj)) );
383 if ( i >= Abc_NtkCoNum(pNtk) - pNtk->
nBarBufs )
386 Vec_PtrPush( vNodes, pObj );
387 Abc_NodeSetTravIdCurrent( pObj );
389 assert( Vec_PtrSize(vNodes) == Abc_NtkObjNum(pNtk) );
409 Counter += Abc_ObjIsBarBuf( pObj );
430 assert( Abc_NtkIsLogic(pNtk) );
443 if ( Abc_ObjIsPi(pObj) )
445 else if ( Abc_ObjIsPo( pObj) )
447 else if ( Abc_ObjIsBi(pObj) || Abc_ObjIsBo(pObj) )
449 else if ( Abc_ObjIsLatch(pObj) )
451 else if ( Abc_ObjIsNode(pObj) )
459 Vec_PtrFree( vNodes );
467 assert( Abc_NtkIsLogic(pNtkBase) );
468 assert( Abc_NtkIsLogic(pNtk) );
474 pObj->
pCopy = Abc_NtkPi(pNtkNew, i);
479 if ( Abc_ObjIsBarBuf(pObj) )
481 pLatch = Abc_NtkBox(pNtkNew, nBarBufs++);
483 pObj->
pCopy = Abc_ObjFanout0(pLatch);
int Abc_NtkCollectPiPos_rec(Abc_Obj_t *pNet, Vec_Ptr_t *vLiMaps, Vec_Ptr_t *vLoMaps)
Abc_Obj_t * Abc_NtkFromBarBufs_rec(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj)
int Abc_NtkCheckSingleInstance(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Abc_Ntk_t * Abc_NtkBarBufsOnOffTest(Abc_Ntk_t *pNtk)
int Abc_NtkCollectPiPos_int(Abc_Obj_t *pBox, Abc_Ntk_t *pNtk, Vec_Ptr_t *vLiMaps, Vec_Ptr_t *vLoMaps)
Abc_Ntk_t * Abc_NtkFromBarBufs(Abc_Ntk_t *pNtkBase, Abc_Ntk_t *pNtk)
int Abc_NtkCollectPiPos(Abc_Ntk_t *pNtk, Vec_Ptr_t **pvLiMaps, Vec_Ptr_t **pvLoMaps)
Abc_Ntk_t * Abc_NtkBarBufsFromBuffers(Abc_Ntk_t *pNtkBase, Abc_Ntk_t *pNtk)
Abc_Obj_t * Abc_NtkToBarBufs_rec(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pNet)
Vec_Ptr_t * Abc_NtkToBarBufsCollect(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkToBarBufs(Abc_Ntk_t *pNtk)
int Abc_NtkCountBarBufs(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkBarBufsToBuffers(Abc_Ntk_t *pNtk)
void Abc_NtkToBarBufsCollect_rec(Abc_Obj_t *pObj, Vec_Ptr_t *vNodes)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkCleanCopy_rec(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachPo(pNtk, pPo, i)
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
ABC_DLL Abc_Des_t * Abc_DesCreate(char *pName)
DECLARATIONS ///.
#define Abc_NtkForEachPi(pNtk, pPi, i)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_DesAddModel(Abc_Des_t *p, Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachBox(pNtk, pObj, i)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
char * Nm_ManStoreIdName(Nm_Man_t *p, int ObjId, int Type, char *pName, char *pSuffix)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntryTwo(Type1, vVec1, Type2, vVec2, pEntry1, pEntry2, i)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.