50 Vec_IntGrow( &
p->vCis, 111 );
51 Vec_IntGrow( &
p->vCos, 111 );
52 Vec_IntGrow( &
p->vFfs, 111 );
53 Vec_IntGrow( &
p->vTypes, nObjsMax+1 );
54 Vec_StrGrow( &
p->vSigns, nObjsMax+1 );
55 Vec_IntGrow( &
p->vRanges, nObjsMax+1 );
56 Vec_IntPush( &
p->vTypes, -1 );
57 Vec_StrPush( &
p->vSigns, -1 );
58 Vec_IntPush( &
p->vRanges, -1 );
60 p->pRanges = Hash_IntManStart( 1000 );
61 for ( i = 0; i < 65; i++ )
62 Hash_Int2ManInsert(
p->pRanges, i, i, 0 );
63 for ( i = 1; i < 64; i++ )
64 Hash_Int2ManInsert(
p->pRanges, i, 0, 0 );
65 assert( Hash_IntManEntryNum(
p->pRanges) == 128 );
71 for ( i = 0; i < Wln_NtkObjNum(
p); i++ )
72 if ( Wln_ObjFaninNum(
p, i) > 2 )
76 if (
p->pRanges ) Hash_IntManStop(
p->pRanges );
104 Mem += 4 *
p->vCis.nCap;
105 Mem += 4 *
p->vCos.nCap;
106 Mem += 4 *
p->vFfs.nCap;
107 Mem += 1 *
p->vTypes.nCap;
108 Mem += 4 *
p->vRanges.nCap;
109 Mem += 4 *
p->vNameIds.nCap;
110 Mem += 4 *
p->vInstIds.nCap;
111 Mem += 4 *
p->vTravIds.nCap;
112 Mem += 4 *
p->vCopies.nCap;
113 Mem += 4 *
p->vBits.nCap;
114 Mem += 4 *
p->vLevels.nCap;
115 Mem += 4 *
p->vRefs.nCap;
116 Mem += 4 *
p->vFanout.nCap;
117 Mem += 4 *
p->vFaninAttrs.nCap;
118 Mem += 4 *
p->vFaninLists.nCap;
119 Mem += 20 * Hash_IntManEntryNum(
p->pRanges);
126 printf(
"Printing %d objects of network \"%s\":\n", Wln_NtkObjNum(
p),
p->pName );
157 if ( Wln_ObjIsTravIdPrevious(
p, iObj) )
160 if ( Wln_ObjIsTravIdCurrent(
p, iObj) )
162 fprintf( stdout,
"Network contains combinational loop!\n" );
163 fprintf( stdout,
"Node %16s is encountered twice on the following path:\n",
Wln_ObjName(
p, iObj) );
164 fprintf( stdout,
"Node %16s (ID %6d) of type %5s (type ID %2d) ->\n",
165 Wln_ObjName(
p, iObj), iObj, Abc_OperName(Wln_ObjType(
p, iObj)), Wln_ObjType(
p, iObj) );
169 Wln_ObjSetTravIdCurrent(
p, iObj );
171 if ( Wln_ObjIsCi(
p, iObj) || Wln_ObjIsFf(
p, iObj) || Wln_ObjFaninNum(
p, iObj) == 0 )
174 Wln_ObjSetTravIdPrevious(
p, iObj );
183 fprintf( stdout,
"Node %16s (ID %6d) of type %5s (type ID %2d) ->\n",
184 Wln_ObjName(
p, iObj), iObj, Abc_OperName(Wln_ObjType(
p, iObj)), Wln_ObjType(
p, iObj) );
189 Wln_ObjSetTravIdPrevious(
p, iObj );
194 int fAcyclic, i, iObj, nUnvisited = 0 ;
196 Wln_NtkIncrementTravId(
p );
197 Wln_NtkIncrementTravId(
p );
209 fprintf( stdout,
"Primary output %16s (ID %6d)\n",
Wln_ObjName(
p, iObj), iObj );
218 fprintf( stdout,
"Flip-flop %16s (ID %6d)\n",
Wln_ObjName(
p, iObj), iObj );
222 nUnvisited += !Wln_ObjIsTravIdPrevious(
p, iObj) && !Wln_ObjIsCi(
p, iObj);
227 printf(
"The network has %d objects and %d (%6.2f %%) of them are not connected to the outputs.\n",
228 Wln_NtkObjNum(
p), nUnvisited, 100.0*nUnvisited/Wln_NtkObjNum(
p) );
230 if ( !Wln_ObjRefs(
p, iObj) && !Wln_ObjIsCi(
p, iObj) && !Wln_ObjIsCo(
p, iObj) && !Wln_ObjIsFf(
p, iObj) )
235 printf(
"These unconnected objects feed into %d sink objects without fanout:\n", nSinks );
237 if ( !Wln_ObjRefs(
p, iObj) && !Wln_ObjIsCi(
p, iObj) && !Wln_ObjIsCo(
p, iObj) && !Wln_ObjIsFf(
p, iObj) )
239 fprintf( stdout,
"Node %16s (ID %6d) of type %5s (type ID %2d)\n",
240 Wln_ObjName(
p, iObj), iObj, Abc_OperName(Wln_ObjType(
p, iObj)), Wln_ObjType(
p, iObj) );
241 if ( ++nPrinted == 5 )
244 if ( nPrinted < nSinks )
248 if ( !Wln_ObjIsTravIdPrevious(
p, iObj) && !Wln_ObjIsCi(
p, iObj) )
254 fprintf( stdout,
"Unconnected object %s\n",
Wln_ObjName(
p, iObj) );
278 assert( !Wln_NtkHasCopy(pNew) && Wln_NtkHasCopy(
p) );
279 if ( Wln_NtkHasNameId(
p) )
282 assert( !Wln_NtkHasNameId(pNew) && Wln_NtkHasNameId(
p) );
283 Wln_NtkCleanNameId( pNew );
285 if ( Wln_ObjCopy(
p, i) && i < Vec_IntSize(&
p->vNameIds) && Wln_ObjNameId(
p, i) )
286 Wln_ObjSetNameId( pNew, Wln_ObjCopy(
p, i), Wln_ObjNameId(
p, i) );
287 Vec_IntErase( &
p->vNameIds );
289 if ( Wln_NtkHasInstId(
p) )
292 assert( !Wln_NtkHasInstId(pNew) && Wln_NtkHasInstId(
p) );
293 Wln_NtkCleanInstId( pNew );
295 if ( Wln_ObjCopy(
p, i) && i < Vec_IntSize(&
p->vInstIds) && Wln_ObjInstId(
p, i) )
296 Wln_ObjSetInstId( pNew, Wln_ObjCopy(
p, i), Wln_ObjInstId(
p, i) );
297 Vec_IntErase( &
p->vInstIds );
305 if ( Wln_ObjIsConst(
p, iObj) )
307 else if ( Wln_ObjIsSlice(
p, iObj) || Wln_ObjIsRotate(
p, iObj) || Wln_ObjIsTable(
p, iObj) )
308 Wln_ObjSetFanin( pNew, iObjNew, 1, Wln_ObjFanin1(
p, iObj) );
309 Wln_ObjSetCopy(
p, iObj, iObjNew );
317 if ( Wln_ObjCopy(
p, iObj) )
318 return Wln_ObjCopy(
p, iObj);
320 assert( !Wln_ObjIsFf(
p, iObj) );
327 int i, k, iObj, iFanin;
330 if (
p->pSpec ) pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
331 Wln_NtkCleanCopy(
p );
341 if ( Wln_NtkHasNameId(
p) )
360 Wln_NtkCleanRefs(
p );
363 Wln_ObjRefsInc(
p, iFanin );
367 int iObj, nEdges = 0;
369 nEdges += Wln_ObjFaninNum(
p, iObj);
374 int iObj, iOffset = Wln_NtkObjNum(
p);
378 Vec_IntWriteEntry( vFaninMap, iObj, iOffset );
379 iOffset += nMulti * Wln_ObjFaninNum(
p, iObj);
381 assert( iOffset == Vec_IntSize(vFaninMap) );
385 int iObj, iOffset = Wln_NtkObjNum(
p);
386 Vec_IntFill( vFanoutMap, iOffset + nMulti * Vec_IntSum(vFanoutNums), 0 );
389 Vec_IntWriteEntry( vFanoutMap, iObj, iOffset );
390 iOffset += nMulti * Wln_ObjRefs(
p, iObj);
392 assert( iOffset == Vec_IntSize(vFanoutMap) );
414 Wln_NtkCleanRefs(
p );
417 Wln_ObjSetFanout(
p, iFanin, Wln_ObjRefsInc(
p, iFanin), iObj );
420 assert( Wln_ObjRefs(
p, iObj) == Vec_IntEntry(vRefsCopy, iObj) );
421 Vec_IntFree( vRefsCopy );
425 Vec_IntErase( &
p->vRefs );
426 Vec_IntErase( &
p->vFanout );
430 int k, iObj, iFanout;
431 printf(
"Printing fanouts of %d objects of network \"%s\":\n", Wln_NtkObjNum(
p),
p->pName );
436 printf(
" Fanouts : " );
438 printf(
"%5d ", iFanout );
#define ABC_SWAP(Type, a, b)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int Abc_NamMemUsed(Abc_Nam_t *p)
void Abc_NamStop(Abc_Nam_t *p)
void Wln_NtkStaticFanoutTest(Wln_Ntk_t *p)
void Wln_NtkStaticFanoutStop(Wln_Ntk_t *p)
int Wln_NtkIsAcyclic(Wln_Ntk_t *p)
Wln_Ntk_t * Wln_NtkDupDfs(Wln_Ntk_t *p)
void Wln_NtkStartFaninMap(Wln_Ntk_t *p, Vec_Int_t *vFaninMap, int nMulti)
void Wln_NtkFree(Wln_Ntk_t *p)
void Wln_NtkStartFanoutMap(Wln_Ntk_t *p, Vec_Int_t *vFanoutMap, Vec_Int_t *vFanoutNums, int nMulti)
void Wln_NtkTransferNames(Wln_Ntk_t *pNew, Wln_Ntk_t *p)
void Wln_NtkCreateRefs(Wln_Ntk_t *p)
void Wln_NtkStaticFanoutStart(Wln_Ntk_t *p)
int Wln_NtkMemUsage(Wln_Ntk_t *p)
ABC_NAMESPACE_IMPL_START Wln_Ntk_t * Wln_NtkAlloc(char *pName, int nObjsMax)
DECLARATIONS ///.
int Wln_NtkFaninNum(Wln_Ntk_t *p)
int Wln_NtkDupDfs_rec(Wln_Ntk_t *pNew, Wln_Ntk_t *p, int iObj)
int Wln_ObjDup(Wln_Ntk_t *pNew, Wln_Ntk_t *p, int iObj)
void Wln_NtkPrint(Wln_Ntk_t *p)
int Wln_NtkIsAcyclic_rec(Wln_Ntk_t *p, int iObj)
#define Wln_NtkForEachFf(p, iFf, i)
#define Wln_NtkForEachCo(p, iCo, i)
#define Wln_ObjForEachFanoutStatic(p, iObj, iFanout, i)
void Wln_ObjPrint(Wln_Ntk_t *p, int iObj)
typedefABC_NAMESPACE_HEADER_START struct Wln_Vec_t_ Wln_Vec_t
INCLUDES ///.
#define Wln_ObjForEachFanin(p, iObj, iFanin, i)
void Wln_ObjAddFanin(Wln_Ntk_t *p, int iObj, int i)
#define Wln_NtkForEachCi(p, iCi, i)
char * Wln_ObjName(Wln_Ntk_t *p, int iObj)
DECLARATIONS ///.
int Wln_ObjClone(Wln_Ntk_t *pNew, Wln_Ntk_t *p, int iObj)
struct Wln_Ntk_t_ Wln_Ntk_t
void Wln_ObjSetConst(Wln_Ntk_t *p, int iObj, int NameId)
#define Wln_NtkForEachObj(p, i)
MACRO DEFINITIONS ///.