1 /**CFile****************************************************************
2
3 FileName [nwk.h]
4
5 SystemName [ABC: Logic synthesis and verification system.]
6
7 PackageName [Logic network representation.]
8
9 Synopsis [External declarations.]
10
11 Author [Alan Mishchenko]
12
13 Affiliation [UC Berkeley]
14
15 Date [Ver. 1.0. Started - June 20, 2005.]
16
17 Revision [$Id: nwk.h,v 1.1 2008/05/14 22:13:09 wudenni Exp $]
18
19 ***********************************************************************/
20
21 #ifndef __NWK_abc_opt_nwk_h
22 #define __NWK_abc_opt_nwk_h
23
24
25 ////////////////////////////////////////////////////////////////////////
26 /// INCLUDES ///
27 ////////////////////////////////////////////////////////////////////////
28
29 #include "aig/aig/aig.h"
30 #include "aig/hop/hop.h"
31 #include "misc/tim/tim.h"
32 #include "map/if/if.h"
33 #include "bool/bdc/bdc.h"
34
35 #include "proof/fra/fra.h"
36 #include "proof/ssw/ssw.h"
37 #include "ntlnwk.h"
38
39 ////////////////////////////////////////////////////////////////////////
40 /// PARAMETERS ///
41 ////////////////////////////////////////////////////////////////////////
42
43 ABC_NAMESPACE_HEADER_START
44
45 ////////////////////////////////////////////////////////////////////////
46 /// BASIC TYPES ///
47 ////////////////////////////////////////////////////////////////////////
48
49 typedef struct Nwk_Obj_t_ Nwk_Obj_t;
50
51 // object types
52 typedef enum {
53 NWK_OBJ_NONE, // 0: non-existant object
54 NWK_OBJ_CI, // 1: combinational input
55 NWK_OBJ_CO, // 2: combinational output
56 NWK_OBJ_NODE, // 3: logic node
57 NWK_OBJ_LATCH, // 4: register
58 NWK_OBJ_VOID // 5: unused object
59 } Nwk_Type_t;
60
61 struct Nwk_Man_t_
62 {
63 // models of this design
64 char * pName; // the name of this design
65 char * pSpec; // the name of input file
66 // node representation
67 Vec_Ptr_t * vCis; // the primary inputs of the extracted part
68 Vec_Ptr_t * vCos; // the primary outputs of the extracted part
69 Vec_Ptr_t * vObjs; // the objects in the topological order
70 int nObjs[NWK_OBJ_VOID]; // counter of objects of each type
71 int nFanioPlus; // the number of extra fanins/fanouts alloc by default
72 // functionality, timing, memory, etc
73 Hop_Man_t * pManHop; // the functionality representation
74 Tim_Man_t * pManTime; // the timing manager
75 If_LibLut_t * pLutLib; // the LUT library
76 Aig_MmFlex_t * pMemObjs; // memory for objects
77 Vec_Ptr_t * vTemp; // array used for incremental updates
78 int nTravIds; // the counter of traversal IDs
79 int nRealloced; // the number of realloced nodes
80 // sequential information
81 int nLatches; // the total number of latches
82 int nTruePis; // the number of true primary inputs
83 int nTruePos; // the number of true primary outputs
84 };
85
86 struct Nwk_Obj_t_
87 {
88 Nwk_Man_t * pMan; // the manager
89 Hop_Obj_t * pFunc; // functionality
90 void * pCopy; // temporary pointer
91 union {
92 void * pNext; // temporary pointer
93 int iTemp; // temporary number
94 };
95 // node information
96 unsigned Type : 3; // object type
97 unsigned fInvert : 1; // complemented attribute
98 unsigned MarkA : 1; // temporary mark
99 unsigned MarkB : 1; // temporary mark
100 unsigned MarkC : 1; // temporary mark
101 unsigned PioId : 25; // number of this node in the PI/PO list
102 int Id; // unique ID
103 int TravId; // traversal ID
104 // timing information
105 int Level; // the topological level
106 float tArrival; // the arrival time
107 float tRequired; // the required time
108 float tSlack; // the slack
109 // fanin/fanout representation
110 int nFanins; // the number of fanins
111 int nFanouts; // the number of fanouts
112 int nFanioAlloc; // the number of allocated fanins/fanouts
113 Nwk_Obj_t ** pFanio; // fanins/fanouts
114 };
115
116 ////////////////////////////////////////////////////////////////////////
117 /// MACRO DEFINITIONS ///
118 ////////////////////////////////////////////////////////////////////////
119
120
121 ////////////////////////////////////////////////////////////////////////
122 /// INLINED FUNCTIONS ///
123 ////////////////////////////////////////////////////////////////////////
124
Nwk_ManCiNum(Nwk_Man_t * p)125 static inline int Nwk_ManCiNum( Nwk_Man_t * p ) { return p->nObjs[NWK_OBJ_CI]; }
Nwk_ManCoNum(Nwk_Man_t * p)126 static inline int Nwk_ManCoNum( Nwk_Man_t * p ) { return p->nObjs[NWK_OBJ_CO]; }
Nwk_ManNodeNum(Nwk_Man_t * p)127 static inline int Nwk_ManNodeNum( Nwk_Man_t * p ) { return p->nObjs[NWK_OBJ_NODE]; }
Nwk_ManLatchNum(Nwk_Man_t * p)128 static inline int Nwk_ManLatchNum( Nwk_Man_t * p ) { return p->nObjs[NWK_OBJ_LATCH]; }
Nwk_ManObjNumMax(Nwk_Man_t * p)129 static inline int Nwk_ManObjNumMax( Nwk_Man_t * p ) { return Vec_PtrSize(p->vObjs); }
130
Nwk_ManCi(Nwk_Man_t * p,int i)131 static inline Nwk_Obj_t * Nwk_ManCi( Nwk_Man_t * p, int i ) { return (Nwk_Obj_t *)Vec_PtrEntry( p->vCis, i ); }
Nwk_ManCo(Nwk_Man_t * p,int i)132 static inline Nwk_Obj_t * Nwk_ManCo( Nwk_Man_t * p, int i ) { return (Nwk_Obj_t *)Vec_PtrEntry( p->vCos, i ); }
Nwk_ManObj(Nwk_Man_t * p,int i)133 static inline Nwk_Obj_t * Nwk_ManObj( Nwk_Man_t * p, int i ) { return (Nwk_Obj_t *)Vec_PtrEntry( p->vObjs, i ); }
134
Nwk_ObjId(Nwk_Obj_t * p)135 static inline int Nwk_ObjId( Nwk_Obj_t * p ) { return p->Id; }
Nwk_ObjPioNum(Nwk_Obj_t * p)136 static inline int Nwk_ObjPioNum( Nwk_Obj_t * p ) { return p->PioId; }
Nwk_ObjFaninNum(Nwk_Obj_t * p)137 static inline int Nwk_ObjFaninNum( Nwk_Obj_t * p ) { return p->nFanins; }
Nwk_ObjFanoutNum(Nwk_Obj_t * p)138 static inline int Nwk_ObjFanoutNum( Nwk_Obj_t * p ) { return p->nFanouts; }
139
Nwk_ObjFanin0(Nwk_Obj_t * p)140 static inline Nwk_Obj_t * Nwk_ObjFanin0( Nwk_Obj_t * p ) { return p->pFanio[0]; }
Nwk_ObjFanout0(Nwk_Obj_t * p)141 static inline Nwk_Obj_t * Nwk_ObjFanout0( Nwk_Obj_t * p ) { return p->pFanio[p->nFanins]; }
Nwk_ObjFanin(Nwk_Obj_t * p,int i)142 static inline Nwk_Obj_t * Nwk_ObjFanin( Nwk_Obj_t * p, int i ) { return p->pFanio[i]; }
Nwk_ObjFanout(Nwk_Obj_t * p,int i)143 static inline Nwk_Obj_t * Nwk_ObjFanout( Nwk_Obj_t * p, int i ) { return p->pFanio[p->nFanins+1]; }
144
Nwk_ObjIsNone(Nwk_Obj_t * p)145 static inline int Nwk_ObjIsNone( Nwk_Obj_t * p ) { return p->Type == NWK_OBJ_NONE; }
Nwk_ObjIsCi(Nwk_Obj_t * p)146 static inline int Nwk_ObjIsCi( Nwk_Obj_t * p ) { return p->Type == NWK_OBJ_CI; }
Nwk_ObjIsCo(Nwk_Obj_t * p)147 static inline int Nwk_ObjIsCo( Nwk_Obj_t * p ) { return p->Type == NWK_OBJ_CO; }
Nwk_ObjIsNode(Nwk_Obj_t * p)148 static inline int Nwk_ObjIsNode( Nwk_Obj_t * p ) { return p->Type == NWK_OBJ_NODE; }
Nwk_ObjIsLatch(Nwk_Obj_t * p)149 static inline int Nwk_ObjIsLatch( Nwk_Obj_t * p ) { return p->Type == NWK_OBJ_LATCH; }
Nwk_ObjIsPi(Nwk_Obj_t * p)150 static inline int Nwk_ObjIsPi( Nwk_Obj_t * p ) { return Nwk_ObjIsCi(p) && (p->pMan->pManTime == NULL || Tim_ManBoxForCi(p->pMan->pManTime, p->PioId) == -1); }
Nwk_ObjIsPo(Nwk_Obj_t * p)151 static inline int Nwk_ObjIsPo( Nwk_Obj_t * p ) { return Nwk_ObjIsCo(p) && (p->pMan->pManTime == NULL || Tim_ManBoxForCo(p->pMan->pManTime, p->PioId) == -1); }
Nwk_ObjIsLi(Nwk_Obj_t * p)152 static inline int Nwk_ObjIsLi( Nwk_Obj_t * p ) { return p->pMan->nTruePos && Nwk_ObjIsCo(p) && (int)p->PioId >= p->pMan->nTruePos; }
Nwk_ObjIsLo(Nwk_Obj_t * p)153 static inline int Nwk_ObjIsLo( Nwk_Obj_t * p ) { return p->pMan->nTruePis && Nwk_ObjIsCi(p) && (int)p->PioId >= p->pMan->nTruePis; }
154
Nwk_ObjArrival(Nwk_Obj_t * pObj)155 static inline float Nwk_ObjArrival( Nwk_Obj_t * pObj ) { return pObj->tArrival; }
Nwk_ObjRequired(Nwk_Obj_t * pObj)156 static inline float Nwk_ObjRequired( Nwk_Obj_t * pObj ) { return pObj->tRequired; }
Nwk_ObjSlack(Nwk_Obj_t * pObj)157 static inline float Nwk_ObjSlack( Nwk_Obj_t * pObj ) { return pObj->tSlack; }
Nwk_ObjSetArrival(Nwk_Obj_t * pObj,float Time)158 static inline void Nwk_ObjSetArrival( Nwk_Obj_t * pObj, float Time ) { pObj->tArrival = Time; }
Nwk_ObjSetRequired(Nwk_Obj_t * pObj,float Time)159 static inline void Nwk_ObjSetRequired( Nwk_Obj_t * pObj, float Time ) { pObj->tRequired = Time; }
Nwk_ObjSetSlack(Nwk_Obj_t * pObj,float Time)160 static inline void Nwk_ObjSetSlack( Nwk_Obj_t * pObj, float Time ) { pObj->tSlack = Time; }
161
Nwk_ObjLevel(Nwk_Obj_t * pObj)162 static inline int Nwk_ObjLevel( Nwk_Obj_t * pObj ) { return pObj->Level; }
Nwk_ObjSetLevel(Nwk_Obj_t * pObj,int Level)163 static inline void Nwk_ObjSetLevel( Nwk_Obj_t * pObj, int Level ) { pObj->Level = Level; }
164
Nwk_ObjSetTravId(Nwk_Obj_t * pObj,int TravId)165 static inline void Nwk_ObjSetTravId( Nwk_Obj_t * pObj, int TravId ) { pObj->TravId = TravId; }
Nwk_ObjSetTravIdCurrent(Nwk_Obj_t * pObj)166 static inline void Nwk_ObjSetTravIdCurrent( Nwk_Obj_t * pObj ) { pObj->TravId = pObj->pMan->nTravIds; }
Nwk_ObjSetTravIdPrevious(Nwk_Obj_t * pObj)167 static inline void Nwk_ObjSetTravIdPrevious( Nwk_Obj_t * pObj ) { pObj->TravId = pObj->pMan->nTravIds - 1; }
Nwk_ObjIsTravIdCurrent(Nwk_Obj_t * pObj)168 static inline int Nwk_ObjIsTravIdCurrent( Nwk_Obj_t * pObj ) { return pObj->TravId == pObj->pMan->nTravIds; }
Nwk_ObjIsTravIdPrevious(Nwk_Obj_t * pObj)169 static inline int Nwk_ObjIsTravIdPrevious( Nwk_Obj_t * pObj ) { return pObj->TravId == pObj->pMan->nTravIds - 1; }
170
Nwk_ManTimeEqual(float f1,float f2,float Eps)171 static inline int Nwk_ManTimeEqual( float f1, float f2, float Eps ) { return (f1 < f2 + Eps) && (f2 < f1 + Eps); }
Nwk_ManTimeLess(float f1,float f2,float Eps)172 static inline int Nwk_ManTimeLess( float f1, float f2, float Eps ) { return (f1 < f2 + Eps); }
Nwk_ManTimeMore(float f1,float f2,float Eps)173 static inline int Nwk_ManTimeMore( float f1, float f2, float Eps ) { return (f1 + Eps > f2); }
174
175 ////////////////////////////////////////////////////////////////////////
176 /// ITERATORS ///
177 ////////////////////////////////////////////////////////////////////////
178
179 #define Nwk_ManForEachCi( p, pObj, i ) \
180 Vec_PtrForEachEntry( Nwk_Obj_t *, p->vCis, pObj, i )
181 #define Nwk_ManForEachCo( p, pObj, i ) \
182 Vec_PtrForEachEntry( Nwk_Obj_t *, p->vCos, pObj, i )
183 #define Nwk_ManForEachPi( p, pObj, i ) \
184 Vec_PtrForEachEntry( Nwk_Obj_t *, p->vCis, pObj, i ) \
185 if ( !Nwk_ObjIsPi(pObj) ) {} else
186 #define Nwk_ManForEachPo( p, pObj, i ) \
187 Vec_PtrForEachEntry( Nwk_Obj_t *, p->vCos, pObj, i ) \
188 if ( !Nwk_ObjIsPo(pObj) ) {} else
189 #define Nwk_ManForEachObj( p, pObj, i ) \
190 for ( i = 0; (i < Vec_PtrSize(p->vObjs)) && (((pObj) = (Nwk_Obj_t *)Vec_PtrEntry(p->vObjs, i)), 1); i++ ) \
191 if ( pObj == NULL ) {} else
192 #define Nwk_ManForEachNode( p, pObj, i ) \
193 for ( i = 0; (i < Vec_PtrSize(p->vObjs)) && (((pObj) = (Nwk_Obj_t *)Vec_PtrEntry(p->vObjs, i)), 1); i++ ) \
194 if ( (pObj) == NULL || !Nwk_ObjIsNode(pObj) ) {} else
195 #define Nwk_ManForEachLatch( p, pObj, i ) \
196 for ( i = 0; (i < Vec_PtrSize(p->vObjs)) && (((pObj) = (Nwk_Obj_t *)Vec_PtrEntry(p->vObjs, i)), 1); i++ ) \
197 if ( (pObj) == NULL || !Nwk_ObjIsLatch(pObj) ) {} else
198
199 #define Nwk_ObjForEachFanin( pObj, pFanin, i ) \
200 for ( i = 0; (i < (int)(pObj)->nFanins) && ((pFanin) = (pObj)->pFanio[i]); i++ )
201 #define Nwk_ObjForEachFanout( pObj, pFanout, i ) \
202 for ( i = 0; (i < (int)(pObj)->nFanouts) && ((pFanout) = (pObj)->pFanio[(pObj)->nFanins+i]); i++ )
203
204 // sequential iterators
205 #define Nwk_ManForEachPiSeq( p, pObj, i ) \
206 Vec_PtrForEachEntryStop( Nwk_Obj_t *, p->vCis, pObj, i, (p)->nTruePis )
207 #define Nwk_ManForEachPoSeq( p, pObj, i ) \
208 Vec_PtrForEachEntryStop( Nwk_Obj_t *, p->vCos, pObj, i, (p)->nTruePos )
209 #define Nwk_ManForEachLoSeq( p, pObj, i ) \
210 for ( i = 0; (i < (p)->nLatches) && (((pObj) = (Nwk_Obj_t *)Vec_PtrEntry(p->vCis, i+(p)->nTruePis)), 1); i++ )
211 #define Nwk_ManForEachLiSeq( p, pObj, i ) \
212 for ( i = 0; (i < (p)->nLatches) && (((pObj) = (Nwk_Obj_t *)Vec_PtrEntry(p->vCos, i+(p)->nTruePos)), 1); i++ )
213 #define Nwk_ManForEachLiLoSeq( p, pObjLi, pObjLo, i ) \
214 for ( i = 0; (i < (p)->nLatches) && (((pObjLi) = Nwk_ManCo(p, i+(p)->nTruePos)), 1) \
215 && (((pObjLo) = Nwk_ManCi(p, i+(p)->nTruePis)), 1); i++ )
216
217
218 ////////////////////////////////////////////////////////////////////////
219 /// FUNCTION DECLARATIONS ///
220 ////////////////////////////////////////////////////////////////////////
221
222 /*=== nwkAig.c ==========================================================*/
223 extern ABC_DLL Vec_Ptr_t * Nwk_ManDeriveRetimingCut( Aig_Man_t * p, int fForward, int fVerbose );
224 /*=== nwkBidec.c ==========================================================*/
225 extern ABC_DLL void Nwk_ManBidecResyn( Nwk_Man_t * pNtk, int fVerbose );
226 extern ABC_DLL Hop_Obj_t * Nwk_NodeIfNodeResyn( Bdc_Man_t * p, Hop_Man_t * pHop, Hop_Obj_t * pRoot, int nVars, Vec_Int_t * vTruth, unsigned * puCare, float dProb );
227 /*=== nwkCheck.c ==========================================================*/
228 extern ABC_DLL int Nwk_ManCheck( Nwk_Man_t * p );
229 /*=== nwkDfs.c ==========================================================*/
230 extern ABC_DLL int Nwk_ManVerifyTopoOrder( Nwk_Man_t * pNtk );
231 extern ABC_DLL int Nwk_ManLevelBackup( Nwk_Man_t * pNtk );
232 extern ABC_DLL int Nwk_ManLevel( Nwk_Man_t * pNtk );
233 extern ABC_DLL int Nwk_ManLevelMax( Nwk_Man_t * pNtk );
234 extern ABC_DLL Vec_Vec_t * Nwk_ManLevelize( Nwk_Man_t * pNtk );
235 extern ABC_DLL Vec_Ptr_t * Nwk_ManDfs( Nwk_Man_t * pNtk );
236 extern ABC_DLL Vec_Ptr_t * Nwk_ManDfsNodes( Nwk_Man_t * pNtk, Nwk_Obj_t ** ppNodes, int nNodes );
237 extern ABC_DLL Vec_Ptr_t * Nwk_ManDfsReverse( Nwk_Man_t * pNtk );
238 extern ABC_DLL Vec_Ptr_t * Nwk_ManSupportNodes( Nwk_Man_t * pNtk, Nwk_Obj_t ** ppNodes, int nNodes );
239 extern ABC_DLL void Nwk_ManSupportSum( Nwk_Man_t * pNtk );
240 extern ABC_DLL int Nwk_ObjMffcLabel( Nwk_Obj_t * pNode );
241 /*=== nwkFanio.c ==========================================================*/
242 extern ABC_DLL void Nwk_ObjCollectFanins( Nwk_Obj_t * pNode, Vec_Ptr_t * vNodes );
243 extern ABC_DLL void Nwk_ObjCollectFanouts( Nwk_Obj_t * pNode, Vec_Ptr_t * vNodes );
244 extern ABC_DLL int Nwk_ObjFindFanin( Nwk_Obj_t * pObj, Nwk_Obj_t * pFanin );
245 extern ABC_DLL int Nwk_ObjFindFanout( Nwk_Obj_t * pObj, Nwk_Obj_t * pFanout );
246 extern ABC_DLL void Nwk_ObjAddFanin( Nwk_Obj_t * pObj, Nwk_Obj_t * pFanin );
247 extern ABC_DLL void Nwk_ObjDeleteFanin( Nwk_Obj_t * pObj, Nwk_Obj_t * pFanin );
248 extern ABC_DLL void Nwk_ObjPatchFanin( Nwk_Obj_t * pObj, Nwk_Obj_t * pFaninOld, Nwk_Obj_t * pFaninNew );
249 extern ABC_DLL void Nwk_ObjTransferFanout( Nwk_Obj_t * pNodeFrom, Nwk_Obj_t * pNodeTo );
250 extern ABC_DLL void Nwk_ObjReplace( Nwk_Obj_t * pNodeOld, Nwk_Obj_t * pNodeNew );
251 /*=== nwkFlow.c ============================================================*/
252 extern ABC_DLL Vec_Ptr_t * Nwk_ManRetimeCutForward( Nwk_Man_t * pMan, int nLatches, int fVerbose );
253 extern ABC_DLL Vec_Ptr_t * Nwk_ManRetimeCutBackward( Nwk_Man_t * pMan, int nLatches, int fVerbose );
254 /*=== nwkMan.c ============================================================*/
255 extern ABC_DLL Nwk_Man_t * Nwk_ManAlloc();
256 extern ABC_DLL void Nwk_ManFree( Nwk_Man_t * p );
257 extern ABC_DLL float Nwl_ManComputeTotalSwitching( Nwk_Man_t * pNtk );
258 extern ABC_DLL void Nwk_ManPrintStats( Nwk_Man_t * p, If_LibLut_t * pLutLib, int fSaveBest, int fDumpResult, int fPower, Ntl_Man_t * pNtl );
259 /*=== nwkMap.c ============================================================*/
260 extern ABC_DLL Nwk_Man_t * Nwk_MappingIf( Aig_Man_t * p, Tim_Man_t * pManTime, If_Par_t * pPars );
261 /*=== nwkObj.c ============================================================*/
262 extern ABC_DLL Nwk_Obj_t * Nwk_ManCreateCi( Nwk_Man_t * pMan, int nFanouts );
263 extern ABC_DLL Nwk_Obj_t * Nwk_ManCreateCo( Nwk_Man_t * pMan );
264 extern ABC_DLL Nwk_Obj_t * Nwk_ManCreateNode( Nwk_Man_t * pMan, int nFanins, int nFanouts );
265 extern ABC_DLL Nwk_Obj_t * Nwk_ManCreateBox( Nwk_Man_t * pMan, int nFanins, int nFanouts );
266 extern ABC_DLL Nwk_Obj_t * Nwk_ManCreateLatch( Nwk_Man_t * pMan );
267 extern ABC_DLL void Nwk_ManDeleteNode( Nwk_Obj_t * pObj );
268 extern ABC_DLL void Nwk_ManDeleteNode_rec( Nwk_Obj_t * pObj );
269 /*=== nwkSpeedup.c ============================================================*/
270 extern ABC_DLL Aig_Man_t * Nwk_ManSpeedup( Nwk_Man_t * pNtk, int fUseLutLib, int Percentage, int Degree, int fVerbose, int fVeryVerbose );
271 /*=== nwkStrash.c ============================================================*/
272 extern ABC_DLL Aig_Man_t * Nwk_ManStrash( Nwk_Man_t * pNtk );
273 /*=== nwkTiming.c ============================================================*/
274 extern ABC_DLL int Nwk_ManVerifyTiming( Nwk_Man_t * pNtk );
275 extern ABC_DLL void Nwk_ManDelayTraceSortPins( Nwk_Obj_t * pNode, int * pPinPerm, float * pPinDelays );
276 extern ABC_DLL float Nwk_ManDelayTraceLut( Nwk_Man_t * pNtk );
277 extern ABC_DLL void Nwk_ManDelayTracePrint( Nwk_Man_t * pNtk );
278 extern ABC_DLL void Nwk_ManUpdate( Nwk_Obj_t * pObj, Nwk_Obj_t * pObjNew, Vec_Vec_t * vLevels );
279 extern ABC_DLL int Nwk_ManVerifyLevel( Nwk_Man_t * pNtk );
280 /*=== nwkUtil.c ============================================================*/
281 extern ABC_DLL void Nwk_ManIncrementTravId( Nwk_Man_t * pNtk );
282 extern ABC_DLL int Nwk_ManGetFaninMax( Nwk_Man_t * pNtk );
283 extern ABC_DLL int Nwk_ManGetTotalFanins( Nwk_Man_t * pNtk );
284 extern ABC_DLL int Nwk_ManPiNum( Nwk_Man_t * pNtk );
285 extern ABC_DLL int Nwk_ManPoNum( Nwk_Man_t * pNtk );
286 extern ABC_DLL int Nwk_ManGetAigNodeNum( Nwk_Man_t * pNtk );
287 extern ABC_DLL int Nwk_NodeCompareLevelsIncrease( Nwk_Obj_t ** pp1, Nwk_Obj_t ** pp2 );
288 extern ABC_DLL int Nwk_NodeCompareLevelsDecrease( Nwk_Obj_t ** pp1, Nwk_Obj_t ** pp2 );
289 extern ABC_DLL void Nwk_ObjPrint( Nwk_Obj_t * pObj );
290 extern ABC_DLL void Nwk_ManDumpBlif( Nwk_Man_t * pNtk, char * pFileName, Vec_Ptr_t * vCiNames, Vec_Ptr_t * vCoNames );
291 extern ABC_DLL void Nwk_ManPrintFanioNew( Nwk_Man_t * pNtk );
292 extern ABC_DLL void Nwk_ManCleanMarks( Nwk_Man_t * pNtk );
293 extern ABC_DLL void Nwk_ManMinimumBase( Nwk_Man_t * pNtk, int fVerbose );
294 extern ABC_DLL void Nwk_ManRemoveDupFanins( Nwk_Man_t * pNtk, int fVerbose );
295
296
297
298 ABC_NAMESPACE_HEADER_END
299
300
301
302 #endif
303
304 ////////////////////////////////////////////////////////////////////////
305 /// END OF FILE ///
306 ////////////////////////////////////////////////////////////////////////
307
308