1 /**CFile****************************************************************
2 
3   FileName    [abc.h]
4 
5   SystemName  [ABC: Logic synthesis and verification system.]
6 
7   PackageName [Network and node package.]
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: abc.h,v 1.1 2008/05/14 22:13:11 wudenni Exp $]
18 
19 ***********************************************************************/
20 
21 #ifndef ABC__base__abc__abc_h
22 #define ABC__base__abc__abc_h
23 
24 
25 ////////////////////////////////////////////////////////////////////////
26 ///                          INCLUDES                                ///
27 ////////////////////////////////////////////////////////////////////////
28 
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <assert.h>
33 
34 #include "misc/vec/vec.h"
35 #include "aig/hop/hop.h"
36 #include "aig/gia/gia.h"
37 #include "misc/st/st.h"
38 #include "misc/st/stmm.h"
39 #include "misc/nm/nm.h"
40 #include "misc/mem/mem.h"
41 #include "misc/util/utilCex.h"
42 #include "misc/extra/extra.h"
43 
44 ////////////////////////////////////////////////////////////////////////
45 ///                         PARAMETERS                               ///
46 ////////////////////////////////////////////////////////////////////////
47 
48 
49 
50 ABC_NAMESPACE_HEADER_START
51 
52 
53 // network types
54 typedef enum {
55     ABC_NTK_NONE = 0,   // 0:  unknown
56     ABC_NTK_NETLIST,    // 1:  network with PIs/POs, latches, nodes, and nets
57     ABC_NTK_LOGIC,      // 2:  network with PIs/POs, latches, and nodes
58     ABC_NTK_STRASH,     // 3:  structurally hashed AIG (two input AND gates with c-attributes on edges)
59     ABC_NTK_OTHER       // 4:  unused
60 } Abc_NtkType_t;
61 
62 // network functionality
63 typedef enum {
64     ABC_FUNC_NONE = 0,  // 0:  unknown
65     ABC_FUNC_SOP,       // 1:  sum-of-products
66     ABC_FUNC_BDD,       // 2:  binary decision diagrams
67     ABC_FUNC_AIG,       // 3:  and-inverter graphs
68     ABC_FUNC_MAP,       // 4:  standard cell library
69     ABC_FUNC_BLIFMV,    // 5:  BLIF-MV node functions
70     ABC_FUNC_BLACKBOX,  // 6:  black box about which nothing is known
71     ABC_FUNC_OTHER      // 7:  unused
72 } Abc_NtkFunc_t;
73 
74 // Supported type/functionality combinations:
75 /*------------------------------------------|
76 |           |  SOP  |  BDD  |  AIG  |  Map  |
77 |-----------|-------|-------|-------|-------|
78 |  Netlist  |   x   |       |   x   |   x   |
79 |-----------|-------|-------|-------|-------|
80 |  Logic    |   x   |   x   |   x   |   x   |
81 |-----------|-------|-------|-------|-------|
82 |  Strash   |       |       |   x   |       |
83 --------------------------------------------|*/
84 
85 // object types
86 typedef enum {
87     ABC_OBJ_NONE = 0,   //  0:  unknown
88     ABC_OBJ_CONST1,     //  1:  constant 1 node (AIG only)
89     ABC_OBJ_PI,         //  2:  primary input terminal
90     ABC_OBJ_PO,         //  3:  primary output terminal
91     ABC_OBJ_BI,         //  4:  box input terminal
92     ABC_OBJ_BO,         //  5:  box output terminal
93     ABC_OBJ_NET,        //  6:  net
94     ABC_OBJ_NODE,       //  7:  node
95     ABC_OBJ_LATCH,      //  8:  latch
96     ABC_OBJ_WHITEBOX,   //  9:  box with known contents
97     ABC_OBJ_BLACKBOX,   // 10:  box with unknown contents
98     ABC_OBJ_NUMBER      // 11:  unused
99 } Abc_ObjType_t;
100 
101 // latch initial values
102 typedef enum {
103     ABC_INIT_NONE = 0,  // 0:  unknown
104     ABC_INIT_ZERO,      // 1:  zero
105     ABC_INIT_ONE,       // 2:  one
106     ABC_INIT_DC,        // 3:  don't-care
107     ABC_INIT_OTHER      // 4:  unused
108 } Abc_InitType_t;
109 
110 ////////////////////////////////////////////////////////////////////////
111 ///                         BASIC TYPES                              ///
112 ////////////////////////////////////////////////////////////////////////
113 
114 typedef struct Abc_Des_t_       Abc_Des_t;
115 typedef struct Abc_Ntk_t_       Abc_Ntk_t;
116 typedef struct Abc_Obj_t_       Abc_Obj_t;
117 typedef struct Abc_Aig_t_       Abc_Aig_t;
118 typedef struct Abc_ManTime_t_   Abc_ManTime_t;
119 typedef struct Abc_ManCut_t_    Abc_ManCut_t;
120 typedef struct Abc_Time_t_      Abc_Time_t;
121 
122 struct Abc_Time_t_
123 {
124     float             Rise;
125     float             Fall;
126 };
127 
128 struct Abc_Obj_t_     // 48/72 bytes (32-bits/64-bits)
129 {
130     Abc_Ntk_t *       pNtk;          // the host network
131     Abc_Obj_t *       pNext;         // the next pointer in the hash table
132     int               Id;            // the object ID
133     unsigned          Type    :  4;  // the object type
134     unsigned          fMarkA  :  1;  // the multipurpose mark
135     unsigned          fMarkB  :  1;  // the multipurpose mark
136     unsigned          fMarkC  :  1;  // the multipurpose mark
137     unsigned          fPhase  :  1;  // the flag to mark the phase of equivalent node
138     unsigned          fExor   :  1;  // marks AIG node that is a root of EXOR
139     unsigned          fPersist:  1;  // marks the persistant AIG node
140     unsigned          fCompl0 :  1;  // complemented attribute of the first fanin in the AIG
141     unsigned          fCompl1 :  1;  // complemented attribute of the second fanin in the AIG
142     unsigned          Level   : 20;  // the level of the node
143     Vec_Int_t         vFanins;       // the array of fanins
144     Vec_Int_t         vFanouts;      // the array of fanouts
145     union { void *    pData;         // the network specific data
146       int             iData; };      // (SOP, BDD, gate, equiv class, etc)
147     union { void *    pTemp;         // temporary store for user's data
148       Abc_Obj_t *     pCopy;         // the copy of this object
149       int             iTemp;
150       float           dTemp; };
151 };
152 
153 struct Abc_Ntk_t_
154 {
155     // general information
156     Abc_NtkType_t     ntkType;       // type of the network
157     Abc_NtkFunc_t     ntkFunc;       // functionality of the network
158     char *            pName;         // the network name
159     char *            pSpec;         // the name of the spec file if present
160     Nm_Man_t *        pManName;      // name manager (stores names of objects)
161     // components of the network
162     Vec_Ptr_t *       vObjs;         // the array of all objects (net, nodes, latches, etc)
163     Vec_Ptr_t *       vPis;          // the array of primary inputs
164     Vec_Ptr_t *       vPos;          // the array of primary outputs
165     Vec_Ptr_t *       vCis;          // the array of combinational inputs  (PIs, latches)
166     Vec_Ptr_t *       vCos;          // the array of combinational outputs (POs, asserts, latches)
167     Vec_Ptr_t *       vPios;         // the array of PIOs
168     Vec_Ptr_t *       vBoxes;        // the array of boxes
169     Vec_Ptr_t *       vLtlProperties;
170     // the number of living objects
171     int nObjCounts[ABC_OBJ_NUMBER];  // the number of objects by type
172     int               nObjs;         // the number of live objs
173     int               nConstrs;      // the number of constraints
174     int               nBarBufs;      // the number of barrier buffers
175     int               nBarBufs2;     // the number of barrier buffers
176     // the backup network and the step number
177     Abc_Ntk_t *       pNetBackup;    // the pointer to the previous backup network
178     int               iStep;         // the generation number for the given network
179     // hierarchy
180     Abc_Des_t *       pDesign;       // design (hierarchical networks only)
181     Abc_Ntk_t *       pAltView;      // alternative structural view of the network
182     int               fHieVisited;   // flag to mark the visited network
183     int               fHiePath;      // flag to mark the network on the path
184     int               Id;            // model ID
185     double            dTemp;         // temporary value
186     // miscellaneous data members
187     int               nTravIds;      // the unique traversal IDs of nodes
188     Vec_Int_t         vTravIds;      // trav IDs of the objects
189     Mem_Fixed_t *     pMmObj;        // memory manager for objects
190     Mem_Step_t *      pMmStep;       // memory manager for arrays
191     void *            pManFunc;      // functionality manager (AIG manager, BDD manager, or memory manager for SOPs)
192     Abc_ManTime_t *   pManTime;      // the timing manager (for mapped networks) stores arrival/required times for all nodes
193     void *            pManCut;       // the cut manager (for AIGs) stores information about the cuts computed for the nodes
194     float             AndGateDelay;  // an average estimated delay of one AND gate
195     int               LevelMax;      // maximum number of levels
196     Vec_Int_t *       vLevelsR;      // level in the reverse topological order (for AIGs)
197     Vec_Ptr_t *       vSupps;        // CO support information
198     int *             pModel;        // counter-example (for miters)
199     Abc_Cex_t *       pSeqModel;     // counter-example (for sequential miters)
200     Vec_Ptr_t *       vSeqModelVec;  // vector of counter-examples (for sequential miters)
201     Abc_Ntk_t *       pExdc;         // the EXDC network (if given)
202     void *            pExcare;       // the EXDC network (if given)
203     void *            pData;         // misc
204     Abc_Ntk_t *       pCopy;         // copy of this network
205     void *            pBSMan;        // application manager
206     void *            pSCLib;        // SC library
207     Vec_Int_t *       vGates;        // SC library gates
208     Vec_Int_t *       vPhases;       // fanins phases in the mapped netlist
209     char *            pWLoadUsed;    // wire load model used
210     float *           pLutTimes;     // arrivals/requireds/slacks using LUT-delay model
211     Vec_Ptr_t *       vOnehots;      // names of one-hot-encoded registers
212     Vec_Int_t *       vObjPerm;      // permutation saved
213     Vec_Int_t *       vTopo;
214     Vec_Ptr_t *       vAttrs;        // managers of various node attributes (node functionality, global BDDs, etc)
215     Vec_Int_t *       vNameIds;      // name IDs
216     Vec_Int_t *       vFins;         // obj/type info
217 };
218 
219 struct Abc_Des_t_
220 {
221     char *            pName;         // the name of the library
222     void *            pManFunc;      // functionality manager for the nodes
223     Vec_Ptr_t *       vTops;         // the array of top-level modules
224     Vec_Ptr_t *       vModules;      // the array of modules
225     st__table *        tModules;      // the table hashing module names into their networks
226     Abc_Des_t *       pLibrary;      // the library used to map this design
227     void *            pGenlib;       // the genlib library used to map this design
228 };
229 
230 ////////////////////////////////////////////////////////////////////////
231 ///                      MACRO DEFINITIONS                           ///
232 ////////////////////////////////////////////////////////////////////////
233 
234 // transforming floats into ints and back
Abc_InfoRandomWord()235 static inline unsigned    Abc_InfoRandomWord()                       { return ((((unsigned)rand()) << 24) ^ (((unsigned)rand()) << 12) ^ ((unsigned)rand())); } // #define RAND_MAX 0x7fff
Abc_InfoRandom(unsigned * p,int nWords)236 static inline void        Abc_InfoRandom( unsigned * p, int nWords ) { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i] = Abc_InfoRandomWord();   }
Abc_InfoClear(unsigned * p,int nWords)237 static inline void        Abc_InfoClear( unsigned * p, int nWords )  { memset( p, 0, sizeof(unsigned) * nWords );   }
Abc_InfoFill(unsigned * p,int nWords)238 static inline void        Abc_InfoFill( unsigned * p, int nWords )   { memset( p, 0xff, sizeof(unsigned) * nWords );}
Abc_InfoNot(unsigned * p,int nWords)239 static inline void        Abc_InfoNot( unsigned * p, int nWords )    { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i] = ~p[i];   }
Abc_InfoIsZero(unsigned * p,int nWords)240 static inline int         Abc_InfoIsZero( unsigned * p, int nWords ) { int i; for ( i = nWords - 1; i >= 0; i-- ) if ( p[i] )  return 0; return 1; }
Abc_InfoIsOne(unsigned * p,int nWords)241 static inline int         Abc_InfoIsOne( unsigned * p, int nWords )  { int i; for ( i = nWords - 1; i >= 0; i-- ) if ( ~p[i] ) return 0; return 1; }
Abc_InfoCopy(unsigned * p,unsigned * q,int nWords)242 static inline void        Abc_InfoCopy( unsigned * p, unsigned * q, int nWords )   { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i]  = q[i];  }
Abc_InfoAnd(unsigned * p,unsigned * q,int nWords)243 static inline void        Abc_InfoAnd( unsigned * p, unsigned * q, int nWords )    { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i] &= q[i];  }
Abc_InfoOr(unsigned * p,unsigned * q,int nWords)244 static inline void        Abc_InfoOr( unsigned * p, unsigned * q, int nWords )     { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i] |= q[i];  }
Abc_InfoXor(unsigned * p,unsigned * q,int nWords)245 static inline void        Abc_InfoXor( unsigned * p, unsigned * q, int nWords )    { int i; for ( i = nWords - 1; i >= 0; i-- ) p[i] ^= q[i];  }
Abc_InfoIsOrOne(unsigned * p,unsigned * q,int nWords)246 static inline int         Abc_InfoIsOrOne( unsigned * p, unsigned * q, int nWords ){ int i; for ( i = nWords - 1; i >= 0; i-- ) if ( ~(p[i] | q[i]) ) return 0; return 1; }
Abc_InfoIsOrOne3(unsigned * p,unsigned * q,unsigned * r,int nWords)247 static inline int         Abc_InfoIsOrOne3( unsigned * p, unsigned * q, unsigned * r, int nWords ){ int i; for ( i = nWords - 1; i >= 0; i-- ) if ( ~(p[i] | q[i] | r[i]) ) return 0; return 1; }
248 
249 // checking the network type
Abc_NtkIsNetlist(Abc_Ntk_t * pNtk)250 static inline int         Abc_NtkIsNetlist( Abc_Ntk_t * pNtk )       { return pNtk->ntkType == ABC_NTK_NETLIST;     }
Abc_NtkIsLogic(Abc_Ntk_t * pNtk)251 static inline int         Abc_NtkIsLogic( Abc_Ntk_t * pNtk )         { return pNtk->ntkType == ABC_NTK_LOGIC;       }
Abc_NtkIsStrash(Abc_Ntk_t * pNtk)252 static inline int         Abc_NtkIsStrash( Abc_Ntk_t * pNtk )        { return pNtk->ntkType == ABC_NTK_STRASH;      }
253 
Abc_NtkHasSop(Abc_Ntk_t * pNtk)254 static inline int         Abc_NtkHasSop( Abc_Ntk_t * pNtk )          { return pNtk->ntkFunc == ABC_FUNC_SOP;        }
Abc_NtkHasBdd(Abc_Ntk_t * pNtk)255 static inline int         Abc_NtkHasBdd( Abc_Ntk_t * pNtk )          { return pNtk->ntkFunc == ABC_FUNC_BDD;        }
Abc_NtkHasAig(Abc_Ntk_t * pNtk)256 static inline int         Abc_NtkHasAig( Abc_Ntk_t * pNtk )          { return pNtk->ntkFunc == ABC_FUNC_AIG;        }
Abc_NtkHasMapping(Abc_Ntk_t * pNtk)257 static inline int         Abc_NtkHasMapping( Abc_Ntk_t * pNtk )      { return pNtk->ntkFunc == ABC_FUNC_MAP;        }
Abc_NtkHasBlifMv(Abc_Ntk_t * pNtk)258 static inline int         Abc_NtkHasBlifMv( Abc_Ntk_t * pNtk )       { return pNtk->ntkFunc == ABC_FUNC_BLIFMV;     }
Abc_NtkHasBlackbox(Abc_Ntk_t * pNtk)259 static inline int         Abc_NtkHasBlackbox( Abc_Ntk_t * pNtk )     { return pNtk->ntkFunc == ABC_FUNC_BLACKBOX;   }
260 
Abc_NtkIsSopNetlist(Abc_Ntk_t * pNtk)261 static inline int         Abc_NtkIsSopNetlist( Abc_Ntk_t * pNtk )    { return pNtk->ntkFunc == ABC_FUNC_SOP && pNtk->ntkType == ABC_NTK_NETLIST;  }
Abc_NtkIsBddNetlist(Abc_Ntk_t * pNtk)262 static inline int         Abc_NtkIsBddNetlist( Abc_Ntk_t * pNtk )    { return pNtk->ntkFunc == ABC_FUNC_BDD && pNtk->ntkType == ABC_NTK_NETLIST;  }
Abc_NtkIsAigNetlist(Abc_Ntk_t * pNtk)263 static inline int         Abc_NtkIsAigNetlist( Abc_Ntk_t * pNtk )    { return pNtk->ntkFunc == ABC_FUNC_AIG && pNtk->ntkType == ABC_NTK_NETLIST;  }
Abc_NtkIsMappedNetlist(Abc_Ntk_t * pNtk)264 static inline int         Abc_NtkIsMappedNetlist( Abc_Ntk_t * pNtk ) { return pNtk->ntkFunc == ABC_FUNC_MAP && pNtk->ntkType == ABC_NTK_NETLIST;  }
Abc_NtkIsBlifMvNetlist(Abc_Ntk_t * pNtk)265 static inline int         Abc_NtkIsBlifMvNetlist( Abc_Ntk_t * pNtk ) { return pNtk->ntkFunc == ABC_FUNC_BLIFMV && pNtk->ntkType == ABC_NTK_NETLIST;  }
Abc_NtkIsSopLogic(Abc_Ntk_t * pNtk)266 static inline int         Abc_NtkIsSopLogic( Abc_Ntk_t * pNtk )      { return pNtk->ntkFunc == ABC_FUNC_SOP && pNtk->ntkType == ABC_NTK_LOGIC  ;  }
Abc_NtkIsBddLogic(Abc_Ntk_t * pNtk)267 static inline int         Abc_NtkIsBddLogic( Abc_Ntk_t * pNtk )      { return pNtk->ntkFunc == ABC_FUNC_BDD && pNtk->ntkType == ABC_NTK_LOGIC  ;  }
Abc_NtkIsAigLogic(Abc_Ntk_t * pNtk)268 static inline int         Abc_NtkIsAigLogic( Abc_Ntk_t * pNtk )      { return pNtk->ntkFunc == ABC_FUNC_AIG && pNtk->ntkType == ABC_NTK_LOGIC  ;  }
Abc_NtkIsMappedLogic(Abc_Ntk_t * pNtk)269 static inline int         Abc_NtkIsMappedLogic( Abc_Ntk_t * pNtk )   { return pNtk->ntkFunc == ABC_FUNC_MAP && pNtk->ntkType == ABC_NTK_LOGIC  ;  }
270 
271 // reading data members of the network
Abc_NtkName(Abc_Ntk_t * pNtk)272 static inline char *      Abc_NtkName( Abc_Ntk_t * pNtk )            { return pNtk->pName;            }
Abc_NtkSpec(Abc_Ntk_t * pNtk)273 static inline char *      Abc_NtkSpec( Abc_Ntk_t * pNtk )            { return pNtk->pSpec;            }
Abc_NtkExdc(Abc_Ntk_t * pNtk)274 static inline Abc_Ntk_t * Abc_NtkExdc( Abc_Ntk_t * pNtk )            { return pNtk->pExdc;            }
Abc_NtkBackup(Abc_Ntk_t * pNtk)275 static inline Abc_Ntk_t * Abc_NtkBackup( Abc_Ntk_t * pNtk )          { return pNtk->pNetBackup;       }
Abc_NtkStep(Abc_Ntk_t * pNtk)276 static inline int         Abc_NtkStep  ( Abc_Ntk_t * pNtk )          { return pNtk->iStep;            }
277 
278 // setting data members of the network
Abc_NtkSetName(Abc_Ntk_t * pNtk,char * pName)279 static inline void        Abc_NtkSetName  ( Abc_Ntk_t * pNtk, char * pName )           { pNtk->pName      = pName;      }
Abc_NtkSetSpec(Abc_Ntk_t * pNtk,char * pName)280 static inline void        Abc_NtkSetSpec  ( Abc_Ntk_t * pNtk, char * pName )           { pNtk->pSpec      = pName;      }
Abc_NtkSetBackup(Abc_Ntk_t * pNtk,Abc_Ntk_t * pNetBackup)281 static inline void        Abc_NtkSetBackup( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNetBackup ) { pNtk->pNetBackup = pNetBackup; }
Abc_NtkSetStep(Abc_Ntk_t * pNtk,int iStep)282 static inline void        Abc_NtkSetStep  ( Abc_Ntk_t * pNtk, int iStep )              { pNtk->iStep      = iStep;      }
283 
284 // getting the number of objects
Abc_NtkObjNum(Abc_Ntk_t * pNtk)285 static inline int         Abc_NtkObjNum( Abc_Ntk_t * pNtk )          { return pNtk->nObjs;                        }
Abc_NtkObjNumMax(Abc_Ntk_t * pNtk)286 static inline int         Abc_NtkObjNumMax( Abc_Ntk_t * pNtk )       { return Vec_PtrSize(pNtk->vObjs);           }
Abc_NtkPiNum(Abc_Ntk_t * pNtk)287 static inline int         Abc_NtkPiNum( Abc_Ntk_t * pNtk )           { return Vec_PtrSize(pNtk->vPis);            }
Abc_NtkPoNum(Abc_Ntk_t * pNtk)288 static inline int         Abc_NtkPoNum( Abc_Ntk_t * pNtk )           { return Vec_PtrSize(pNtk->vPos);            }
Abc_NtkCiNum(Abc_Ntk_t * pNtk)289 static inline int         Abc_NtkCiNum( Abc_Ntk_t * pNtk )           { return Vec_PtrSize(pNtk->vCis);            }
Abc_NtkCoNum(Abc_Ntk_t * pNtk)290 static inline int         Abc_NtkCoNum( Abc_Ntk_t * pNtk )           { return Vec_PtrSize(pNtk->vCos);            }
Abc_NtkBoxNum(Abc_Ntk_t * pNtk)291 static inline int         Abc_NtkBoxNum( Abc_Ntk_t * pNtk )          { return Vec_PtrSize(pNtk->vBoxes);          }
Abc_NtkBiNum(Abc_Ntk_t * pNtk)292 static inline int         Abc_NtkBiNum( Abc_Ntk_t * pNtk )           { return pNtk->nObjCounts[ABC_OBJ_BI];       }
Abc_NtkBoNum(Abc_Ntk_t * pNtk)293 static inline int         Abc_NtkBoNum( Abc_Ntk_t * pNtk )           { return pNtk->nObjCounts[ABC_OBJ_BO];       }
Abc_NtkNetNum(Abc_Ntk_t * pNtk)294 static inline int         Abc_NtkNetNum( Abc_Ntk_t * pNtk )          { return pNtk->nObjCounts[ABC_OBJ_NET];      }
Abc_NtkNodeNum(Abc_Ntk_t * pNtk)295 static inline int         Abc_NtkNodeNum( Abc_Ntk_t * pNtk )         { return pNtk->nObjCounts[ABC_OBJ_NODE];     }
Abc_NtkLatchNum(Abc_Ntk_t * pNtk)296 static inline int         Abc_NtkLatchNum( Abc_Ntk_t * pNtk )        { return pNtk->nObjCounts[ABC_OBJ_LATCH];    }
Abc_NtkWhiteboxNum(Abc_Ntk_t * pNtk)297 static inline int         Abc_NtkWhiteboxNum( Abc_Ntk_t * pNtk )     { return pNtk->nObjCounts[ABC_OBJ_WHITEBOX]; }
Abc_NtkBlackboxNum(Abc_Ntk_t * pNtk)298 static inline int         Abc_NtkBlackboxNum( Abc_Ntk_t * pNtk )     { return pNtk->nObjCounts[ABC_OBJ_BLACKBOX]; }
Abc_NtkIsComb(Abc_Ntk_t * pNtk)299 static inline int         Abc_NtkIsComb( Abc_Ntk_t * pNtk )          { return Abc_NtkLatchNum(pNtk) == 0;                   }
Abc_NtkHasOnlyLatchBoxes(Abc_Ntk_t * pNtk)300 static inline int         Abc_NtkHasOnlyLatchBoxes(Abc_Ntk_t * pNtk ){ return Abc_NtkLatchNum(pNtk) == Abc_NtkBoxNum(pNtk); }
Abc_NtkConstrNum(Abc_Ntk_t * pNtk)301 static inline int         Abc_NtkConstrNum( Abc_Ntk_t * pNtk )       { return pNtk->nConstrs;                     }
302 
303 // creating simple objects
304 extern ABC_DLL Abc_Obj_t * Abc_NtkCreateObj( Abc_Ntk_t * pNtk, Abc_ObjType_t Type );
Abc_NtkCreatePi(Abc_Ntk_t * pNtk)305 static inline Abc_Obj_t * Abc_NtkCreatePi( Abc_Ntk_t * pNtk )        { return Abc_NtkCreateObj( pNtk, ABC_OBJ_PI );         }
Abc_NtkCreatePo(Abc_Ntk_t * pNtk)306 static inline Abc_Obj_t * Abc_NtkCreatePo( Abc_Ntk_t * pNtk )        { return Abc_NtkCreateObj( pNtk, ABC_OBJ_PO );         }
Abc_NtkCreateBi(Abc_Ntk_t * pNtk)307 static inline Abc_Obj_t * Abc_NtkCreateBi( Abc_Ntk_t * pNtk )        { return Abc_NtkCreateObj( pNtk, ABC_OBJ_BI );         }
Abc_NtkCreateBo(Abc_Ntk_t * pNtk)308 static inline Abc_Obj_t * Abc_NtkCreateBo( Abc_Ntk_t * pNtk )        { return Abc_NtkCreateObj( pNtk, ABC_OBJ_BO );         }
Abc_NtkCreateNet(Abc_Ntk_t * pNtk)309 static inline Abc_Obj_t * Abc_NtkCreateNet( Abc_Ntk_t * pNtk )       { return Abc_NtkCreateObj( pNtk, ABC_OBJ_NET );        }
Abc_NtkCreateNode(Abc_Ntk_t * pNtk)310 static inline Abc_Obj_t * Abc_NtkCreateNode( Abc_Ntk_t * pNtk )      { return Abc_NtkCreateObj( pNtk, ABC_OBJ_NODE );       }
Abc_NtkCreateLatch(Abc_Ntk_t * pNtk)311 static inline Abc_Obj_t * Abc_NtkCreateLatch( Abc_Ntk_t * pNtk )     { return Abc_NtkCreateObj( pNtk, ABC_OBJ_LATCH );      }
Abc_NtkCreateWhitebox(Abc_Ntk_t * pNtk)312 static inline Abc_Obj_t * Abc_NtkCreateWhitebox( Abc_Ntk_t * pNtk )  { return Abc_NtkCreateObj( pNtk, ABC_OBJ_WHITEBOX );   }
Abc_NtkCreateBlackbox(Abc_Ntk_t * pNtk)313 static inline Abc_Obj_t * Abc_NtkCreateBlackbox( Abc_Ntk_t * pNtk )  { return Abc_NtkCreateObj( pNtk, ABC_OBJ_BLACKBOX );   }
314 
315 // reading objects
Abc_NtkObj(Abc_Ntk_t * pNtk,int i)316 static inline Abc_Obj_t * Abc_NtkObj( Abc_Ntk_t * pNtk, int i )      { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vObjs, i );   }
Abc_NtkPi(Abc_Ntk_t * pNtk,int i)317 static inline Abc_Obj_t * Abc_NtkPi( Abc_Ntk_t * pNtk, int i )       { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vPis, i );    }
Abc_NtkPo(Abc_Ntk_t * pNtk,int i)318 static inline Abc_Obj_t * Abc_NtkPo( Abc_Ntk_t * pNtk, int i )       { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vPos, i );    }
Abc_NtkCi(Abc_Ntk_t * pNtk,int i)319 static inline Abc_Obj_t * Abc_NtkCi( Abc_Ntk_t * pNtk, int i )       { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vCis, i );    }
Abc_NtkCo(Abc_Ntk_t * pNtk,int i)320 static inline Abc_Obj_t * Abc_NtkCo( Abc_Ntk_t * pNtk, int i )       { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vCos, i );    }
Abc_NtkBox(Abc_Ntk_t * pNtk,int i)321 static inline Abc_Obj_t * Abc_NtkBox( Abc_Ntk_t * pNtk, int i )      { return (Abc_Obj_t *)Vec_PtrEntry( pNtk->vBoxes, i );  }
322 
323 // working with complemented attributes of objects
Abc_ObjIsComplement(Abc_Obj_t * p)324 static inline int         Abc_ObjIsComplement( Abc_Obj_t * p )       { return (int )((ABC_PTRUINT_T)p & (ABC_PTRUINT_T)01);             }
Abc_ObjRegular(Abc_Obj_t * p)325 static inline Abc_Obj_t * Abc_ObjRegular( Abc_Obj_t * p )            { return (Abc_Obj_t *)((ABC_PTRUINT_T)p & ~(ABC_PTRUINT_T)01);     }
Abc_ObjNot(Abc_Obj_t * p)326 static inline Abc_Obj_t * Abc_ObjNot( Abc_Obj_t * p )                { return (Abc_Obj_t *)((ABC_PTRUINT_T)p ^  (ABC_PTRUINT_T)01);     }
Abc_ObjNotCond(Abc_Obj_t * p,int c)327 static inline Abc_Obj_t * Abc_ObjNotCond( Abc_Obj_t * p, int c )     { return (Abc_Obj_t *)((ABC_PTRUINT_T)p ^  (ABC_PTRUINT_T)(c!=0)); }
328 
329 // reading data members of the object
Abc_ObjType(Abc_Obj_t * pObj)330 static inline unsigned    Abc_ObjType( Abc_Obj_t * pObj )            { return pObj->Type;               }
Abc_ObjId(Abc_Obj_t * pObj)331 static inline unsigned    Abc_ObjId( Abc_Obj_t * pObj )              { return pObj->Id;                 }
Abc_ObjLevel(Abc_Obj_t * pObj)332 static inline int         Abc_ObjLevel( Abc_Obj_t * pObj )           { return pObj->Level;              }
Abc_ObjFaninVec(Abc_Obj_t * pObj)333 static inline Vec_Int_t * Abc_ObjFaninVec( Abc_Obj_t * pObj )        { return &pObj->vFanins;           }
Abc_ObjFanoutVec(Abc_Obj_t * pObj)334 static inline Vec_Int_t * Abc_ObjFanoutVec( Abc_Obj_t * pObj )       { return &pObj->vFanouts;          }
Abc_ObjCopy(Abc_Obj_t * pObj)335 static inline Abc_Obj_t * Abc_ObjCopy( Abc_Obj_t * pObj )            { return pObj->pCopy;              }
Abc_ObjNtk(Abc_Obj_t * pObj)336 static inline Abc_Ntk_t * Abc_ObjNtk( Abc_Obj_t * pObj )             { return pObj->pNtk;               }
Abc_ObjModel(Abc_Obj_t * pObj)337 static inline Abc_Ntk_t * Abc_ObjModel( Abc_Obj_t * pObj )           { assert( pObj->Type == ABC_OBJ_WHITEBOX ); return (Abc_Ntk_t *)pObj->pData;   }
Abc_ObjData(Abc_Obj_t * pObj)338 static inline void *      Abc_ObjData( Abc_Obj_t * pObj )            { return pObj->pData;              }
Abc_ObjEquiv(Abc_Obj_t * pObj)339 static inline Abc_Obj_t * Abc_ObjEquiv( Abc_Obj_t * pObj )           { return (Abc_Obj_t *)pObj->pData; }
Abc_ObjCopyCond(Abc_Obj_t * pObj)340 static inline Abc_Obj_t * Abc_ObjCopyCond( Abc_Obj_t * pObj )        { return Abc_ObjRegular(pObj)->pCopy? Abc_ObjNotCond(Abc_ObjRegular(pObj)->pCopy, Abc_ObjIsComplement(pObj)) : NULL;  }
341 
342 // setting data members of the network
Abc_ObjSetLevel(Abc_Obj_t * pObj,int Level)343 static inline void        Abc_ObjSetLevel( Abc_Obj_t * pObj, int Level )         { pObj->Level =  Level;    }
Abc_ObjSetCopy(Abc_Obj_t * pObj,Abc_Obj_t * pCopy)344 static inline void        Abc_ObjSetCopy( Abc_Obj_t * pObj, Abc_Obj_t * pCopy )  { pObj->pCopy =  pCopy;    }
Abc_ObjSetData(Abc_Obj_t * pObj,void * pData)345 static inline void        Abc_ObjSetData( Abc_Obj_t * pObj, void * pData )       { pObj->pData =  pData;    }
346 
347 // checking the object type
Abc_ObjIsNone(Abc_Obj_t * pObj)348 static inline int         Abc_ObjIsNone( Abc_Obj_t * pObj )          { return pObj->Type == ABC_OBJ_NONE;    }
Abc_ObjIsPi(Abc_Obj_t * pObj)349 static inline int         Abc_ObjIsPi( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_PI;      }
Abc_ObjIsPo(Abc_Obj_t * pObj)350 static inline int         Abc_ObjIsPo( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_PO;      }
Abc_ObjIsBi(Abc_Obj_t * pObj)351 static inline int         Abc_ObjIsBi( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_BI;      }
Abc_ObjIsBo(Abc_Obj_t * pObj)352 static inline int         Abc_ObjIsBo( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_BO;      }
Abc_ObjIsCi(Abc_Obj_t * pObj)353 static inline int         Abc_ObjIsCi( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_PI || pObj->Type == ABC_OBJ_BO; }
Abc_ObjIsCo(Abc_Obj_t * pObj)354 static inline int         Abc_ObjIsCo( Abc_Obj_t * pObj )            { return pObj->Type == ABC_OBJ_PO || pObj->Type == ABC_OBJ_BI; }
Abc_ObjIsTerm(Abc_Obj_t * pObj)355 static inline int         Abc_ObjIsTerm( Abc_Obj_t * pObj )          { return Abc_ObjIsCi(pObj) || Abc_ObjIsCo(pObj); }
Abc_ObjIsNet(Abc_Obj_t * pObj)356 static inline int         Abc_ObjIsNet( Abc_Obj_t * pObj )           { return pObj->Type == ABC_OBJ_NET;     }
Abc_ObjIsNode(Abc_Obj_t * pObj)357 static inline int         Abc_ObjIsNode( Abc_Obj_t * pObj )          { return pObj->Type == ABC_OBJ_NODE;    }
Abc_ObjIsLatch(Abc_Obj_t * pObj)358 static inline int         Abc_ObjIsLatch( Abc_Obj_t * pObj )         { return pObj->Type == ABC_OBJ_LATCH;   }
Abc_ObjIsBox(Abc_Obj_t * pObj)359 static inline int         Abc_ObjIsBox( Abc_Obj_t * pObj )           { return pObj->Type == ABC_OBJ_LATCH || pObj->Type == ABC_OBJ_WHITEBOX || pObj->Type == ABC_OBJ_BLACKBOX; }
Abc_ObjIsWhitebox(Abc_Obj_t * pObj)360 static inline int         Abc_ObjIsWhitebox( Abc_Obj_t * pObj )      { return pObj->Type == ABC_OBJ_WHITEBOX;}
Abc_ObjIsBlackbox(Abc_Obj_t * pObj)361 static inline int         Abc_ObjIsBlackbox( Abc_Obj_t * pObj )      { return pObj->Type == ABC_OBJ_BLACKBOX;}
Abc_ObjIsBarBuf(Abc_Obj_t * pObj)362 static inline int         Abc_ObjIsBarBuf( Abc_Obj_t * pObj )        { return Abc_NtkHasMapping(pObj->pNtk) && Abc_ObjIsNode(pObj) && Vec_IntSize(&pObj->vFanins) == 1 && pObj->pData == NULL;  }
Abc_ObjBlackboxToWhitebox(Abc_Obj_t * pObj)363 static inline void        Abc_ObjBlackboxToWhitebox( Abc_Obj_t * pObj ) { assert( Abc_ObjIsBlackbox(pObj) ); pObj->Type = ABC_OBJ_WHITEBOX; pObj->pNtk->nObjCounts[ABC_OBJ_BLACKBOX]--; pObj->pNtk->nObjCounts[ABC_OBJ_WHITEBOX]++; }
364 
365 // working with fanin/fanout edges
Abc_ObjFaninNum(Abc_Obj_t * pObj)366 static inline int         Abc_ObjFaninNum( Abc_Obj_t * pObj )        { return pObj->vFanins.nSize;     }
Abc_ObjFanoutNum(Abc_Obj_t * pObj)367 static inline int         Abc_ObjFanoutNum( Abc_Obj_t * pObj )       { return pObj->vFanouts.nSize;    }
Abc_ObjFaninId(Abc_Obj_t * pObj,int i)368 static inline int         Abc_ObjFaninId( Abc_Obj_t * pObj, int i)   { return pObj->vFanins.pArray[i]; }
Abc_ObjFaninId0(Abc_Obj_t * pObj)369 static inline int         Abc_ObjFaninId0( Abc_Obj_t * pObj )        { return pObj->vFanins.pArray[0]; }
Abc_ObjFaninId1(Abc_Obj_t * pObj)370 static inline int         Abc_ObjFaninId1( Abc_Obj_t * pObj )        { return pObj->vFanins.pArray[1]; }
Abc_ObjFanoutEdgeNum(Abc_Obj_t * pObj,Abc_Obj_t * pFanout)371 static inline int         Abc_ObjFanoutEdgeNum( Abc_Obj_t * pObj, Abc_Obj_t * pFanout )  { assert( Abc_NtkHasAig(pObj->pNtk) );  if ( Abc_ObjFaninId0(pFanout) == pObj->Id ) return 0; if ( Abc_ObjFaninId1(pFanout) == pObj->Id ) return 1; assert( 0 ); return -1;  }
Abc_ObjFanout(Abc_Obj_t * pObj,int i)372 static inline Abc_Obj_t * Abc_ObjFanout( Abc_Obj_t * pObj, int i )   { return (Abc_Obj_t *)pObj->pNtk->vObjs->pArray[ pObj->vFanouts.pArray[i] ];  }
Abc_ObjFanout0(Abc_Obj_t * pObj)373 static inline Abc_Obj_t * Abc_ObjFanout0( Abc_Obj_t * pObj )         { return (Abc_Obj_t *)pObj->pNtk->vObjs->pArray[ pObj->vFanouts.pArray[0] ];  }
Abc_ObjFanin(Abc_Obj_t * pObj,int i)374 static inline Abc_Obj_t * Abc_ObjFanin( Abc_Obj_t * pObj, int i )    { return (Abc_Obj_t *)pObj->pNtk->vObjs->pArray[ pObj->vFanins.pArray[i] ];   }
Abc_ObjFanin0(Abc_Obj_t * pObj)375 static inline Abc_Obj_t * Abc_ObjFanin0( Abc_Obj_t * pObj )          { return (Abc_Obj_t *)pObj->pNtk->vObjs->pArray[ pObj->vFanins.pArray[0] ];   }
Abc_ObjFanin1(Abc_Obj_t * pObj)376 static inline Abc_Obj_t * Abc_ObjFanin1( Abc_Obj_t * pObj )          { return (Abc_Obj_t *)pObj->pNtk->vObjs->pArray[ pObj->vFanins.pArray[1] ];   }
Abc_ObjFanin0Ntk(Abc_Obj_t * pObj)377 static inline Abc_Obj_t * Abc_ObjFanin0Ntk( Abc_Obj_t * pObj )       { return (Abc_NtkIsNetlist(pObj->pNtk)? Abc_ObjFanin0(pObj)  : pObj);  }
Abc_ObjFanout0Ntk(Abc_Obj_t * pObj)378 static inline Abc_Obj_t * Abc_ObjFanout0Ntk( Abc_Obj_t * pObj )      { return (Abc_NtkIsNetlist(pObj->pNtk)? Abc_ObjFanout0(pObj) : pObj);  }
Abc_ObjFaninC0(Abc_Obj_t * pObj)379 static inline int         Abc_ObjFaninC0( Abc_Obj_t * pObj )         { return pObj->fCompl0;                                                }
Abc_ObjFaninC1(Abc_Obj_t * pObj)380 static inline int         Abc_ObjFaninC1( Abc_Obj_t * pObj )         { return pObj->fCompl1;                                                }
Abc_ObjFaninC(Abc_Obj_t * pObj,int i)381 static inline int         Abc_ObjFaninC( Abc_Obj_t * pObj, int i )   { assert( i >=0 && i < 2 ); return i? pObj->fCompl1 : pObj->fCompl0;   }
Abc_ObjSetFaninC(Abc_Obj_t * pObj,int i)382 static inline void        Abc_ObjSetFaninC( Abc_Obj_t * pObj, int i ){ assert( i >=0 && i < 2 ); if ( i ) pObj->fCompl1 = 1; else pObj->fCompl0 = 1; }
Abc_ObjXorFaninC(Abc_Obj_t * pObj,int i)383 static inline void        Abc_ObjXorFaninC( Abc_Obj_t * pObj, int i ){ assert( i >=0 && i < 2 ); if ( i ) pObj->fCompl1^= 1; else pObj->fCompl0^= 1; }
Abc_ObjChild(Abc_Obj_t * pObj,int i)384 static inline Abc_Obj_t * Abc_ObjChild( Abc_Obj_t * pObj, int i )    { return Abc_ObjNotCond( Abc_ObjFanin(pObj,i), Abc_ObjFaninC(pObj,i) );}
Abc_ObjChild0(Abc_Obj_t * pObj)385 static inline Abc_Obj_t * Abc_ObjChild0( Abc_Obj_t * pObj )          { return Abc_ObjNotCond( Abc_ObjFanin0(pObj), Abc_ObjFaninC0(pObj) );  }
Abc_ObjChild1(Abc_Obj_t * pObj)386 static inline Abc_Obj_t * Abc_ObjChild1( Abc_Obj_t * pObj )          { return Abc_ObjNotCond( Abc_ObjFanin1(pObj), Abc_ObjFaninC1(pObj) );  }
Abc_ObjChildCopy(Abc_Obj_t * pObj,int i)387 static inline Abc_Obj_t * Abc_ObjChildCopy( Abc_Obj_t * pObj, int i ){ return Abc_ObjNotCond( Abc_ObjFanin(pObj,i)->pCopy, Abc_ObjFaninC(pObj,i) );  }
Abc_ObjChild0Copy(Abc_Obj_t * pObj)388 static inline Abc_Obj_t * Abc_ObjChild0Copy( Abc_Obj_t * pObj )      { return Abc_ObjNotCond( Abc_ObjFanin0(pObj)->pCopy, Abc_ObjFaninC0(pObj) );    }
Abc_ObjChild1Copy(Abc_Obj_t * pObj)389 static inline Abc_Obj_t * Abc_ObjChild1Copy( Abc_Obj_t * pObj )      { return Abc_ObjNotCond( Abc_ObjFanin1(pObj)->pCopy, Abc_ObjFaninC1(pObj) );    }
Abc_ObjChild0Data(Abc_Obj_t * pObj)390 static inline Abc_Obj_t * Abc_ObjChild0Data( Abc_Obj_t * pObj )      { return Abc_ObjNotCond( (Abc_Obj_t *)Abc_ObjFanin0(pObj)->pData, Abc_ObjFaninC0(pObj) );    }
Abc_ObjChild1Data(Abc_Obj_t * pObj)391 static inline Abc_Obj_t * Abc_ObjChild1Data( Abc_Obj_t * pObj )      { return Abc_ObjNotCond( (Abc_Obj_t *)Abc_ObjFanin1(pObj)->pData, Abc_ObjFaninC1(pObj) );    }
Abc_ObjFromLit(Abc_Ntk_t * p,int iLit)392 static inline Abc_Obj_t * Abc_ObjFromLit( Abc_Ntk_t * p, int iLit )  { return Abc_ObjNotCond( Abc_NtkObj(p, Abc_Lit2Var(iLit)), Abc_LitIsCompl(iLit) );           }
Abc_ObjToLit(Abc_Obj_t * p)393 static inline int         Abc_ObjToLit( Abc_Obj_t * p )              { return Abc_Var2Lit( Abc_ObjId(Abc_ObjRegular(p)), Abc_ObjIsComplement(p) );                }
Abc_ObjFaninPhase(Abc_Obj_t * p,int i)394 static inline int         Abc_ObjFaninPhase( Abc_Obj_t * p, int i )  { assert(p->pNtk->vPhases); assert( i >= 0 && i < Abc_ObjFaninNum(p) ); return (Vec_IntEntry(p->pNtk->vPhases, Abc_ObjId(p)) >> i) & 1;  }
Abc_ObjFaninFlipPhase(Abc_Obj_t * p,int i)395 static inline void        Abc_ObjFaninFlipPhase( Abc_Obj_t * p,int i){ assert(p->pNtk->vPhases); assert( i >= 0 && i < Abc_ObjFaninNum(p) ); *Vec_IntEntryP(p->pNtk->vPhases, Abc_ObjId(p)) ^= (1 << i);      }
396 
397 // checking the AIG node types
Abc_AigNodeIsConst(Abc_Obj_t * pNode)398 static inline int         Abc_AigNodeIsConst( Abc_Obj_t * pNode )    { assert(Abc_NtkIsStrash(Abc_ObjRegular(pNode)->pNtk));  return Abc_ObjRegular(pNode)->Type == ABC_OBJ_CONST1;       }
Abc_AigNodeIsAnd(Abc_Obj_t * pNode)399 static inline int         Abc_AigNodeIsAnd( Abc_Obj_t * pNode )      { assert(!Abc_ObjIsComplement(pNode)); assert(Abc_NtkIsStrash(pNode->pNtk)); return Abc_ObjFaninNum(pNode) == 2;                         }
Abc_AigNodeIsChoice(Abc_Obj_t * pNode)400 static inline int         Abc_AigNodeIsChoice( Abc_Obj_t * pNode )   { assert(!Abc_ObjIsComplement(pNode)); assert(Abc_NtkIsStrash(pNode->pNtk)); return pNode->pData != NULL && Abc_ObjFanoutNum(pNode) > 0; }
401 
402 // handling persistent nodes
Abc_NodeIsPersistant(Abc_Obj_t * pNode)403 static inline int         Abc_NodeIsPersistant( Abc_Obj_t * pNode )    { assert( Abc_AigNodeIsAnd(pNode) ); return pNode->fPersist; }
Abc_NodeSetPersistant(Abc_Obj_t * pNode)404 static inline void        Abc_NodeSetPersistant( Abc_Obj_t * pNode )   { assert( Abc_AigNodeIsAnd(pNode) ); pNode->fPersist = 1;    }
Abc_NodeClearPersistant(Abc_Obj_t * pNode)405 static inline void        Abc_NodeClearPersistant( Abc_Obj_t * pNode ) { assert( Abc_AigNodeIsAnd(pNode) ); pNode->fPersist = 0;    }
406 
407 // working with the traversal ID
Abc_NtkIncrementTravId(Abc_Ntk_t * p)408 static inline void        Abc_NtkIncrementTravId( Abc_Ntk_t * p )           { if (!p->vTravIds.pArray) Vec_IntFill(&p->vTravIds, Abc_NtkObjNumMax(p)+500, 0); p->nTravIds++; assert(p->nTravIds < (1<<30));  }
Abc_NodeTravId(Abc_Obj_t * p)409 static inline int         Abc_NodeTravId( Abc_Obj_t * p )                   { return Vec_IntGetEntry(&Abc_ObjNtk(p)->vTravIds, Abc_ObjId(p));                       }
Abc_NodeSetTravId(Abc_Obj_t * p,int TravId)410 static inline void        Abc_NodeSetTravId( Abc_Obj_t * p, int TravId )    { Vec_IntSetEntry(&Abc_ObjNtk(p)->vTravIds, Abc_ObjId(p), TravId );                     }
Abc_NodeSetTravIdCurrent(Abc_Obj_t * p)411 static inline void        Abc_NodeSetTravIdCurrent( Abc_Obj_t * p )         { Abc_NodeSetTravId( p, Abc_ObjNtk(p)->nTravIds );                                      }
Abc_NodeSetTravIdPrevious(Abc_Obj_t * p)412 static inline void        Abc_NodeSetTravIdPrevious( Abc_Obj_t * p )        { Abc_NodeSetTravId( p, Abc_ObjNtk(p)->nTravIds-1 );                                    }
Abc_NodeIsTravIdCurrent(Abc_Obj_t * p)413 static inline int         Abc_NodeIsTravIdCurrent( Abc_Obj_t * p )          { return (Abc_NodeTravId(p) == Abc_ObjNtk(p)->nTravIds);                                }
Abc_NodeIsTravIdPrevious(Abc_Obj_t * p)414 static inline int         Abc_NodeIsTravIdPrevious( Abc_Obj_t * p )         { return (Abc_NodeTravId(p) == Abc_ObjNtk(p)->nTravIds-1);                              }
Abc_NodeSetTravIdCurrentId(Abc_Ntk_t * p,int i)415 static inline void        Abc_NodeSetTravIdCurrentId( Abc_Ntk_t * p, int i) { Vec_IntSetEntry(&p->vTravIds, i, p->nTravIds );                                       }
Abc_NodeIsTravIdCurrentId(Abc_Ntk_t * p,int i)416 static inline int         Abc_NodeIsTravIdCurrentId( Abc_Ntk_t * p, int i)  { return (Vec_IntGetEntry(&p->vTravIds, i) == p->nTravIds);                             }
417 
418 // checking initial state of the latches
Abc_LatchSetInitNone(Abc_Obj_t * pLatch)419 static inline void        Abc_LatchSetInitNone( Abc_Obj_t * pLatch ) { assert(Abc_ObjIsLatch(pLatch)); pLatch->pData = (void *)ABC_INIT_NONE;                       }
Abc_LatchSetInit0(Abc_Obj_t * pLatch)420 static inline void        Abc_LatchSetInit0( Abc_Obj_t * pLatch )    { assert(Abc_ObjIsLatch(pLatch)); pLatch->pData = (void *)ABC_INIT_ZERO;                       }
Abc_LatchSetInit1(Abc_Obj_t * pLatch)421 static inline void        Abc_LatchSetInit1( Abc_Obj_t * pLatch )    { assert(Abc_ObjIsLatch(pLatch)); pLatch->pData = (void *)ABC_INIT_ONE;                        }
Abc_LatchSetInitDc(Abc_Obj_t * pLatch)422 static inline void        Abc_LatchSetInitDc( Abc_Obj_t * pLatch )   { assert(Abc_ObjIsLatch(pLatch)); pLatch->pData = (void *)ABC_INIT_DC;                         }
Abc_LatchIsInitNone(Abc_Obj_t * pLatch)423 static inline int         Abc_LatchIsInitNone( Abc_Obj_t * pLatch )  { assert(Abc_ObjIsLatch(pLatch)); return pLatch->pData == (void *)ABC_INIT_NONE;               }
Abc_LatchIsInit0(Abc_Obj_t * pLatch)424 static inline int         Abc_LatchIsInit0( Abc_Obj_t * pLatch )     { assert(Abc_ObjIsLatch(pLatch)); return pLatch->pData == (void *)ABC_INIT_ZERO;               }
Abc_LatchIsInit1(Abc_Obj_t * pLatch)425 static inline int         Abc_LatchIsInit1( Abc_Obj_t * pLatch )     { assert(Abc_ObjIsLatch(pLatch)); return pLatch->pData == (void *)ABC_INIT_ONE;                }
Abc_LatchIsInitDc(Abc_Obj_t * pLatch)426 static inline int         Abc_LatchIsInitDc( Abc_Obj_t * pLatch )    { assert(Abc_ObjIsLatch(pLatch)); return pLatch->pData == (void *)ABC_INIT_DC;                 }
Abc_LatchInit(Abc_Obj_t * pLatch)427 static inline int         Abc_LatchInit( Abc_Obj_t * pLatch )        { assert(Abc_ObjIsLatch(pLatch)); return (int)(ABC_PTRINT_T)pLatch->pData;                     }
428 
429 // global BDDs of the nodes
Abc_NtkGlobalBdd(Abc_Ntk_t * pNtk)430 static inline void *      Abc_NtkGlobalBdd( Abc_Ntk_t * pNtk )          { return Vec_PtrEntry(pNtk->vAttrs, VEC_ATTR_GLOBAL_BDD);                                   }
Abc_NtkGlobalBddMan(Abc_Ntk_t * pNtk)431 static inline void *      Abc_NtkGlobalBddMan( Abc_Ntk_t * pNtk )       { return Vec_AttMan( (Vec_Att_t *)Abc_NtkGlobalBdd(pNtk) );                                 }
Abc_NtkGlobalBddArray(Abc_Ntk_t * pNtk)432 static inline void **     Abc_NtkGlobalBddArray( Abc_Ntk_t * pNtk )     { return Vec_AttArray( (Vec_Att_t *)Abc_NtkGlobalBdd(pNtk) );                               }
Abc_ObjGlobalBdd(Abc_Obj_t * pObj)433 static inline void *      Abc_ObjGlobalBdd( Abc_Obj_t * pObj )          { return Vec_AttEntry( (Vec_Att_t *)Abc_NtkGlobalBdd(pObj->pNtk), pObj->Id );               }
Abc_ObjSetGlobalBdd(Abc_Obj_t * pObj,void * bF)434 static inline void        Abc_ObjSetGlobalBdd( Abc_Obj_t * pObj, void * bF )   { Vec_AttWriteEntry( (Vec_Att_t *)Abc_NtkGlobalBdd(pObj->pNtk), pObj->Id, bF );      }
435 
436 // MV variables of the nodes
Abc_NtkMvVar(Abc_Ntk_t * pNtk)437 static inline void *      Abc_NtkMvVar( Abc_Ntk_t * pNtk )              { return Vec_PtrEntry(pNtk->vAttrs, VEC_ATTR_MVVAR);                                        }
Abc_NtkMvVarMan(Abc_Ntk_t * pNtk)438 static inline void *      Abc_NtkMvVarMan( Abc_Ntk_t * pNtk )           { return Abc_NtkMvVar(pNtk)? Vec_AttMan( (Vec_Att_t *)Abc_NtkMvVar(pNtk) ) : NULL;          }
Abc_ObjMvVar(Abc_Obj_t * pObj)439 static inline void *      Abc_ObjMvVar( Abc_Obj_t * pObj )              { return Abc_NtkMvVar(pObj->pNtk)? Vec_AttEntry( (Vec_Att_t *)Abc_NtkMvVar(pObj->pNtk), pObj->Id ) : NULL; }
Abc_ObjMvVarNum(Abc_Obj_t * pObj)440 static inline int         Abc_ObjMvVarNum( Abc_Obj_t * pObj )           { return (Abc_NtkMvVar(pObj->pNtk) && Abc_ObjMvVar(pObj))? *((int*)Abc_ObjMvVar(pObj)) : 2; }
Abc_ObjSetMvVar(Abc_Obj_t * pObj,void * pV)441 static inline void        Abc_ObjSetMvVar( Abc_Obj_t * pObj, void * pV) { Vec_AttWriteEntry( (Vec_Att_t *)Abc_NtkMvVar(pObj->pNtk), pObj->Id, pV );                 }
442 
443 ////////////////////////////////////////////////////////////////////////
444 ///                        ITERATORS                                 ///
445 ////////////////////////////////////////////////////////////////////////
446 
447 // objects of the network
448 #define Abc_NtkForEachObj( pNtk, pObj, i )                                                         \
449     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pObj) = Abc_NtkObj(pNtk, i)), 1); i++ )    \
450         if ( (pObj) == NULL ) {} else
451 #define Abc_NtkForEachObjReverse( pNtk, pNode, i )                                                 \
452     for ( i = Vec_PtrSize((pNtk)->vObjs) - 1; (i >= 0) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i-- ) \
453         if ( (pNode) == NULL ) {} else
454 #define Abc_NtkForEachObjVec( vIds, pNtk, pObj, i )                                                \
455     for ( i = 0; i < Vec_IntSize(vIds) && (((pObj) = Abc_NtkObj(pNtk, Vec_IntEntry(vIds,i))), 1); i++ ) \
456         if ( (pObj) == NULL ) {} else
457 #define Abc_NtkForEachObjVecStart( vIds, pNtk, pObj, i, Start )                                    \
458     for ( i = Start; i < Vec_IntSize(vIds) && (((pObj) = Abc_NtkObj(pNtk, Vec_IntEntry(vIds,i))), 1); i++ ) \
459         if ( (pObj) == NULL ) {} else
460 #define Abc_NtkForEachNet( pNtk, pNet, i )                                                         \
461     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNet) = Abc_NtkObj(pNtk, i)), 1); i++ )    \
462         if ( (pNet) == NULL || !Abc_ObjIsNet(pNet) ) {} else
463 #define Abc_NtkForEachNode( pNtk, pNode, i )                                                       \
464     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
465         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) ) {} else
466 #define Abc_NtkForEachNodeNotBarBuf( pNtk, pNode, i )                                              \
467     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
468         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) || Abc_ObjIsBarBuf(pNode) ) {} else
469 #define Abc_NtkForEachNode1( pNtk, pNode, i )                                                      \
470     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
471         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) || !Abc_ObjFaninNum(pNode) ) {} else
472 #define Abc_NtkForEachNodeNotBarBuf1( pNtk, pNode, i )                                             \
473     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
474         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) || !Abc_ObjFaninNum(pNode) || Abc_ObjIsBarBuf(pNode) ) {} else
475 #define Abc_NtkForEachNodeReverse( pNtk, pNode, i )                                                \
476     for ( i = Vec_PtrSize((pNtk)->vObjs) - 1; (i >= 0) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i-- ) \
477         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) ) {} else
478 #define Abc_NtkForEachNodeReverse1( pNtk, pNode, i )                                               \
479     for ( i = Vec_PtrSize((pNtk)->vObjs) - 1; (i >= 0) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i-- ) \
480         if ( (pNode) == NULL || !Abc_ObjIsNode(pNode) || !Abc_ObjFaninNum(pNode) ) {} else
481 #define Abc_NtkForEachBarBuf( pNtk, pNode, i )                                                     \
482     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
483         if ( (pNode) == NULL || !Abc_ObjIsBarBuf(pNode) ) {} else
484 #define Abc_NtkForEachGate( pNtk, pNode, i )                                                       \
485     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
486         if ( (pNode) == NULL || !Abc_ObjIsGate(pNode) ) {} else
487 #define Abc_AigForEachAnd( pNtk, pNode, i )                                                        \
488     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
489         if ( (pNode) == NULL || !Abc_AigNodeIsAnd(pNode) ) {} else
490 #define Abc_NtkForEachNodeCi( pNtk, pNode, i )                                                       \
491     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
492         if ( (pNode) == NULL || (!Abc_ObjIsNode(pNode) && !Abc_ObjIsCi(pNode)) ) {} else
493 #define Abc_NtkForEachNodeCo( pNtk, pNode, i )                                                       \
494     for ( i = 0; (i < Vec_PtrSize((pNtk)->vObjs)) && (((pNode) = Abc_NtkObj(pNtk, i)), 1); i++ )   \
495         if ( (pNode) == NULL || (!Abc_ObjIsNode(pNode) && !Abc_ObjIsCo(pNode)) ) {} else
496 // various boxes
497 #define Abc_NtkForEachBox( pNtk, pObj, i )                                                         \
498     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ )
499 #define Abc_NtkForEachLatch( pNtk, pObj, i )                                                       \
500     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ )   \
501         if ( !Abc_ObjIsLatch(pObj) ) {} else
502 #define Abc_NtkForEachLatchInput( pNtk, pObj, i )                                                  \
503     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)); i++ )                                          \
504         if ( !(Abc_ObjIsLatch(Abc_NtkBox(pNtk, i)) && (((pObj) = Abc_ObjFanin0(Abc_NtkBox(pNtk, i))), 1)) ) {} else
505 #define Abc_NtkForEachLatchOutput( pNtk, pObj, i )                                                 \
506     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)); i++ )                                          \
507         if ( !(Abc_ObjIsLatch(Abc_NtkBox(pNtk, i)) && (((pObj) = Abc_ObjFanout0(Abc_NtkBox(pNtk, i))), 1)) ) {} else
508 #define Abc_NtkForEachWhitebox( pNtk, pObj, i )                                                    \
509     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ )   \
510         if ( !Abc_ObjIsWhitebox(pObj) ) {} else
511 #define Abc_NtkForEachBlackbox( pNtk, pObj, i )                                                    \
512     for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ )   \
513         if ( !Abc_ObjIsBlackbox(pObj) ) {} else
514 // inputs and outputs
515 #define Abc_NtkForEachPi( pNtk, pPi, i )                                                           \
516     for ( i = 0; (i < Abc_NtkPiNum(pNtk)) && (((pPi) = Abc_NtkPi(pNtk, i)), 1); i++ )
517 #define Abc_NtkForEachCi( pNtk, pCi, i )                                                           \
518     for ( i = 0; (i < Abc_NtkCiNum(pNtk)) && (((pCi) = Abc_NtkCi(pNtk, i)), 1); i++ )
519 #define Abc_NtkForEachPo( pNtk, pPo, i )                                                           \
520     for ( i = 0; (i < Abc_NtkPoNum(pNtk)) && (((pPo) = Abc_NtkPo(pNtk, i)), 1); i++ )
521 #define Abc_NtkForEachCo( pNtk, pCo, i )                                                           \
522     for ( i = 0; (i < Abc_NtkCoNum(pNtk)) && (((pCo) = Abc_NtkCo(pNtk, i)), 1); i++ )
523 #define Abc_NtkForEachLiPo( pNtk, pCo, i )                                                         \
524     for ( i = 0; (i < Abc_NtkCoNum(pNtk)) && (((pCo) = Abc_NtkCo(pNtk, i < pNtk->nBarBufs ? Abc_NtkCoNum(pNtk) - pNtk->nBarBufs + i : i - pNtk->nBarBufs)), 1); i++ )
525 // fanin and fanouts
526 #define Abc_ObjForEachFanin( pObj, pFanin, i )                                                     \
527     for ( i = 0; (i < Abc_ObjFaninNum(pObj)) && (((pFanin) = Abc_ObjFanin(pObj, i)), 1); i++ )
528 #define Abc_ObjForEachFanout( pObj, pFanout, i )                                                   \
529     for ( i = 0; (i < Abc_ObjFanoutNum(pObj)) && (((pFanout) = Abc_ObjFanout(pObj, i)), 1); i++ )
530 #define Abc_ObjForEachFaninId( pObj, iFanin, i )                                                   \
531     for ( i = 0; (i < Abc_ObjFaninNum(pObj)) && (((iFanin) = Abc_ObjFaninId(pObj, i)), 1); i++ )
532 #define Abc_ObjForEachFanoutId( pObj, iFanout, i )                                                 \
533     for ( i = 0; (i < Abc_ObjFanoutNum(pObj)) && (((iFanout) = Abc_ObjFanoutId(pObj, i)), 1); i++ )
534 // cubes and literals
535 #define Abc_CubeForEachVar( pCube, Value, i )                                                      \
536     for ( i = 0; (pCube[i] != ' ') && (Value = pCube[i]); i++ )
537 #define Abc_SopForEachCube( pSop, nFanins, pCube )                                                 \
538     for ( pCube = (pSop); *pCube; pCube += (nFanins) + 3 )
539 #define Abc_SopForEachCubePair( pSop, nFanins, pCube, pCube2 )                                     \
540     Abc_SopForEachCube( pSop, nFanins, pCube )                                                     \
541     Abc_SopForEachCube( pCube + (nFanins) + 3, nFanins, pCube2 )
542 
543 ////////////////////////////////////////////////////////////////////////
544 ///                    FUNCTION DECLARATIONS                         ///
545 ////////////////////////////////////////////////////////////////////////
546 
547 /*=== abcAig.c ==========================================================*/
548 extern ABC_DLL Abc_Aig_t *        Abc_AigAlloc( Abc_Ntk_t * pNtk );
549 extern ABC_DLL void               Abc_AigFree( Abc_Aig_t * pMan );
550 extern ABC_DLL int                Abc_AigCleanup( Abc_Aig_t * pMan );
551 extern ABC_DLL int                Abc_AigCheck( Abc_Aig_t * pMan );
552 extern ABC_DLL int                Abc_AigLevel( Abc_Ntk_t * pNtk );
553 extern ABC_DLL Abc_Obj_t *        Abc_AigConst1( Abc_Ntk_t * pNtk );
554 extern ABC_DLL Abc_Obj_t *        Abc_AigAnd( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );
555 extern ABC_DLL Abc_Obj_t *        Abc_AigAndLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );
556 extern ABC_DLL Abc_Obj_t *        Abc_AigXorLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1, int * pType );
557 extern ABC_DLL Abc_Obj_t *        Abc_AigMuxLookup( Abc_Aig_t * pMan, Abc_Obj_t * pC, Abc_Obj_t * pT, Abc_Obj_t * pE, int * pType );
558 extern ABC_DLL Abc_Obj_t *        Abc_AigOr( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );
559 extern ABC_DLL Abc_Obj_t *        Abc_AigXor( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );
560 extern ABC_DLL Abc_Obj_t *        Abc_AigMux( Abc_Aig_t * pMan, Abc_Obj_t * pC, Abc_Obj_t * p1, Abc_Obj_t * p0 );
561 extern ABC_DLL Abc_Obj_t *        Abc_AigMiter( Abc_Aig_t * pMan, Vec_Ptr_t * vPairs, int fImplic );
562 extern ABC_DLL void               Abc_AigReplace( Abc_Aig_t * pMan, Abc_Obj_t * pOld, Abc_Obj_t * pNew, int  fUpdateLevel );
563 extern ABC_DLL void               Abc_AigDeleteNode( Abc_Aig_t * pMan, Abc_Obj_t * pOld );
564 extern ABC_DLL void               Abc_AigRehash( Abc_Aig_t * pMan );
565 extern ABC_DLL int                Abc_AigNodeHasComplFanoutEdge( Abc_Obj_t * pNode );
566 extern ABC_DLL int                Abc_AigNodeHasComplFanoutEdgeTrav( Abc_Obj_t * pNode );
567 extern ABC_DLL void               Abc_AigPrintNode( Abc_Obj_t * pNode );
568 extern ABC_DLL int                Abc_AigNodeIsAcyclic( Abc_Obj_t * pNode, Abc_Obj_t * pRoot );
569 extern ABC_DLL void               Abc_AigCheckFaninOrder( Abc_Aig_t * pMan );
570 extern ABC_DLL void               Abc_AigSetNodePhases( Abc_Ntk_t * pNtk );
571 extern ABC_DLL Vec_Ptr_t *        Abc_AigUpdateStart( Abc_Aig_t * pMan, Vec_Ptr_t ** pvUpdatedNets );
572 extern ABC_DLL void               Abc_AigUpdateStop( Abc_Aig_t * pMan );
573 extern ABC_DLL void               Abc_AigUpdateReset( Abc_Aig_t * pMan );
574 /*=== abcAttach.c ==========================================================*/
575 extern ABC_DLL int                Abc_NtkAttach( Abc_Ntk_t * pNtk );
576 /*=== abcBarBuf.c ==========================================================*/
577 extern ABC_DLL Abc_Ntk_t *        Abc_NtkToBarBufs( Abc_Ntk_t * pNtk );
578 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFromBarBufs( Abc_Ntk_t * pNtkBase, Abc_Ntk_t * pNtk );
579 extern ABC_DLL Abc_Ntk_t *        Abc_NtkBarBufsToBuffers( Abc_Ntk_t * pNtk );
580 extern ABC_DLL Abc_Ntk_t *        Abc_NtkBarBufsFromBuffers( Abc_Ntk_t * pNtkBase, Abc_Ntk_t * pNtk );
581 /*=== abcBlifMv.c ==========================================================*/
582 extern ABC_DLL void               Abc_NtkStartMvVars( Abc_Ntk_t * pNtk );
583 extern ABC_DLL void               Abc_NtkFreeMvVars( Abc_Ntk_t * pNtk );
584 extern ABC_DLL void               Abc_NtkSetMvVarValues( Abc_Obj_t * pObj, int nValues );
585 extern ABC_DLL Abc_Ntk_t *        Abc_NtkStrashBlifMv( Abc_Ntk_t * pNtk );
586 extern ABC_DLL Abc_Ntk_t *        Abc_NtkInsertBlifMv( Abc_Ntk_t * pNtkBase, Abc_Ntk_t * pNtkLogic );
587 extern ABC_DLL int                Abc_NtkConvertToBlifMv( Abc_Ntk_t * pNtk );
588 extern ABC_DLL char *             Abc_NodeConvertSopToMvSop( int nVars, Vec_Int_t * vSop0, Vec_Int_t * vSop1 );
589 extern ABC_DLL int                Abc_NodeEvalMvCost( int nVars, Vec_Int_t * vSop0, Vec_Int_t * vSop1 );
590 /*=== abcBalance.c ==========================================================*/
591 extern ABC_DLL Abc_Ntk_t *        Abc_NtkBalance( Abc_Ntk_t * pNtk, int  fDuplicate, int  fSelective, int  fUpdateLevel );
592 /*=== abcCheck.c ==========================================================*/
593 extern ABC_DLL int                Abc_NtkCheck( Abc_Ntk_t * pNtk );
594 extern ABC_DLL int                Abc_NtkCheckRead( Abc_Ntk_t * pNtk );
595 extern ABC_DLL int                Abc_NtkDoCheck( Abc_Ntk_t * pNtk );
596 extern ABC_DLL int                Abc_NtkCheckObj( Abc_Ntk_t * pNtk, Abc_Obj_t * pObj );
597 extern ABC_DLL int                Abc_NtkCompareSignals( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fOnlyPis, int fComb );
598 extern ABC_DLL int                Abc_NtkIsAcyclicHierarchy( Abc_Ntk_t * pNtk );
599 extern ABC_DLL int                Abc_NtkCheckUniqueCiNames( Abc_Ntk_t * pNtk );
600 extern ABC_DLL int                Abc_NtkCheckUniqueCoNames( Abc_Ntk_t * pNtk );
601 extern ABC_DLL int                Abc_NtkCheckUniqueCioNames( Abc_Ntk_t * pNtk );
602 /*=== abcCollapse.c ==========================================================*/
603 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCollapse( Abc_Ntk_t * pNtk, int fBddSizeMax, int fDualRail, int fReorder, int fReverse, int fVerbose );
604 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCollapseSat( Abc_Ntk_t * pNtk, int nCubeLim, int nBTLimit, int nCostMax, int fCanon, int fReverse, int fCnfShared, int fVerbose );
605 extern ABC_DLL Gia_Man_t *        Abc_NtkClpGia( Abc_Ntk_t * pNtk );
606 /*=== abcCut.c ==========================================================*/
607 extern ABC_DLL void *             Abc_NodeGetCutsRecursive( void * p, Abc_Obj_t * pObj, int fDag, int fTree );
608 extern ABC_DLL void *             Abc_NodeGetCuts( void * p, Abc_Obj_t * pObj, int fDag, int fTree );
609 extern ABC_DLL void               Abc_NodeGetCutsSeq( void * p, Abc_Obj_t * pObj, int fFirst );
610 extern ABC_DLL void *             Abc_NodeReadCuts( void * p, Abc_Obj_t * pObj );
611 extern ABC_DLL void               Abc_NodeFreeCuts( void * p, Abc_Obj_t * pObj );
612 /*=== abcDar.c ============================================================*/
613 extern ABC_DLL int                Abc_NtkPhaseFrameNum( Abc_Ntk_t * pNtk );
614 extern ABC_DLL int                Abc_NtkDarPrintCone( Abc_Ntk_t * pNtk );
615 extern ABC_DLL Abc_Ntk_t *        Abc_NtkBalanceExor( Abc_Ntk_t * pNtk, int fUpdateLevel, int fVerbose );
616 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDarLatchSweep( Abc_Ntk_t * pNtk, int fLatchConst, int fLatchEqual, int fSaveNames, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose );
617 /*=== abcDelay.c ==========================================================*/
618 extern ABC_DLL float              Abc_NtkDelayTraceLut( Abc_Ntk_t * pNtk, int fUseLutLib );
619 /*=== abcDfs.c ==========================================================*/
620 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfs( Abc_Ntk_t * pNtk, int fCollectAll );
621 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfs2( Abc_Ntk_t * pNtk );
622 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes );
623 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsReverse( Abc_Ntk_t * pNtk );
624 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsReverseNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes );
625 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsReverseNodesContained( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes );
626 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsSeq( Abc_Ntk_t * pNtk );
627 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsSeqReverse( Abc_Ntk_t * pNtk );
628 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsIter( Abc_Ntk_t * pNtk, int fCollectAll );
629 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsIterNodes( Abc_Ntk_t * pNtk, Vec_Ptr_t * vRoots );
630 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsHie( Abc_Ntk_t * pNtk, int fCollectAll );
631 extern ABC_DLL int                Abc_NtkIsDfsOrdered( Abc_Ntk_t * pNtk );
632 extern ABC_DLL Vec_Ptr_t *        Abc_NtkDfsWithBoxes( Abc_Ntk_t * pNtk );
633 extern ABC_DLL Vec_Ptr_t *        Abc_NtkSupport( Abc_Ntk_t * pNtk );
634 extern ABC_DLL Vec_Ptr_t *        Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes );
635 extern ABC_DLL Vec_Int_t *        Abc_NtkNodeSupportInt( Abc_Ntk_t * pNtk, int iCo );
636 extern ABC_DLL int                Abc_NtkFunctionalIso( Abc_Ntk_t * pNtk, int iCo1, int iCo2, int fCommon );
637 extern ABC_DLL Vec_Ptr_t *        Abc_AigDfs( Abc_Ntk_t * pNtk, int fCollectAll, int fCollectCos );
638 extern ABC_DLL Vec_Ptr_t *        Abc_AigDfsMap( Abc_Ntk_t * pNtk );
639 extern ABC_DLL Vec_Vec_t *        Abc_DfsLevelized( Abc_Obj_t * pNode, int  fTfi );
640 extern ABC_DLL Vec_Vec_t *        Abc_NtkLevelize( Abc_Ntk_t * pNtk );
641 extern ABC_DLL int                Abc_NtkLevel( Abc_Ntk_t * pNtk );
642 extern ABC_DLL int                Abc_NtkLevelReverse( Abc_Ntk_t * pNtk );
643 extern ABC_DLL int                Abc_NtkIsAcyclic( Abc_Ntk_t * pNtk );
644 extern ABC_DLL int                Abc_NtkIsAcyclicWithBoxes( Abc_Ntk_t * pNtk );
645 extern ABC_DLL Vec_Ptr_t *        Abc_AigGetLevelizedOrder( Abc_Ntk_t * pNtk, int fCollectCis );
646 /*=== abcExact.c ==========================================================*/
647 extern ABC_DLL int                Abc_ExactInputNum();
648 extern ABC_DLL int                Abc_ExactIsRunning();
649 extern ABC_DLL Abc_Obj_t *        Abc_ExactBuildNode( word * pTruth, int nVars, int * pArrTimeProfile, Abc_Obj_t ** pFanins, Abc_Ntk_t * pNtk );
650 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFindExact( word * pTruth, int nVars, int nFunc, int nMaxDepth, int * pArrivalTimes, int nBTLimit, int nStartGates, int fVerbose );
651 /*=== abcFanio.c ==========================================================*/
652 extern ABC_DLL void               Abc_ObjAddFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin );
653 extern ABC_DLL void               Abc_ObjDeleteFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin );
654 extern ABC_DLL void               Abc_ObjRemoveFanins( Abc_Obj_t * pObj );
655 extern ABC_DLL void               Abc_ObjPatchFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFaninOld, Abc_Obj_t * pFaninNew );
656 extern ABC_DLL void               Abc_ObjPatchFanoutFanin( Abc_Obj_t * pObj, int iObjNew );
657 extern ABC_DLL Abc_Obj_t *        Abc_ObjInsertBetween( Abc_Obj_t * pNodeIn, Abc_Obj_t * pNodeOut, Abc_ObjType_t Type );
658 extern ABC_DLL void               Abc_ObjTransferFanout( Abc_Obj_t * pObjOld, Abc_Obj_t * pObjNew );
659 extern ABC_DLL void               Abc_ObjReplace( Abc_Obj_t * pObjOld, Abc_Obj_t * pObjNew );
660 extern ABC_DLL void               Abc_ObjReplaceByConstant( Abc_Obj_t * pNode, int fConst1 );
661 extern ABC_DLL int                Abc_ObjFanoutFaninNum( Abc_Obj_t * pFanout, Abc_Obj_t * pFanin );
662 /*=== abcFanOrder.c ==========================================================*/
663 extern ABC_DLL int                Abc_NtkMakeLegit( Abc_Ntk_t * pNtk );
664 extern ABC_DLL void               Abc_NtkSortSops( Abc_Ntk_t * pNtk );
665 /*=== abcFraig.c ==========================================================*/
666 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFraig( Abc_Ntk_t * pNtk, void * pParams, int fAllNodes, int fExdc );
667 extern ABC_DLL void *             Abc_NtkToFraig( Abc_Ntk_t * pNtk, void * pParams, int fAllNodes, int fExdc );
668 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFraigTrust( Abc_Ntk_t * pNtk );
669 extern ABC_DLL int                Abc_NtkFraigStore( Abc_Ntk_t * pNtk );
670 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFraigRestore( int nPatsRand, int nPatsDyna, int nBTLimit );
671 extern ABC_DLL void               Abc_NtkFraigStoreClean();
672 /*=== abcFunc.c ==========================================================*/
673 extern ABC_DLL int                Abc_NtkSopToBdd( Abc_Ntk_t * pNtk );
674 extern ABC_DLL int                Abc_NtkBddToSop( Abc_Ntk_t * pNtk, int fMode, int nCubeLimit );
675 extern ABC_DLL void               Abc_NodeBddToCnf( Abc_Obj_t * pNode, Mem_Flex_t * pMmMan, Vec_Str_t * vCube, int fAllPrimes, char ** ppSop0, char ** ppSop1 );
676 extern ABC_DLL void               Abc_NtkLogicMakeDirectSops( Abc_Ntk_t * pNtk );
677 extern ABC_DLL int                Abc_NtkSopToAig( Abc_Ntk_t * pNtk );
678 extern ABC_DLL int                Abc_NtkAigToBdd( Abc_Ntk_t * pNtk );
679 extern ABC_DLL Gia_Man_t *        Abc_NtkAigToGia( Abc_Ntk_t * p, int fGiaSimple );
680 extern ABC_DLL int                Abc_NtkMapToSop( Abc_Ntk_t * pNtk );
681 extern ABC_DLL int                Abc_NtkToSop( Abc_Ntk_t * pNtk, int fMode, int nCubeLimit );
682 extern ABC_DLL int                Abc_NtkToBdd( Abc_Ntk_t * pNtk );
683 extern ABC_DLL int                Abc_NtkToAig( Abc_Ntk_t * pNtk );
684 /*=== abcHaig.c ==========================================================*/
685 extern ABC_DLL int                Abc_NtkHaigStart( Abc_Ntk_t * pNtk );
686 extern ABC_DLL int                Abc_NtkHaigStop( Abc_Ntk_t * pNtk );
687 extern ABC_DLL Abc_Ntk_t *        Abc_NtkHaigUse( Abc_Ntk_t * pNtk );
688 /*=== abcHie.c ==========================================================*/
689 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFlattenLogicHierarchy( Abc_Ntk_t * pNtk );
690 extern ABC_DLL Abc_Ntk_t *        Abc_NtkConvertBlackboxes( Abc_Ntk_t * pNtk );
691 extern ABC_DLL Abc_Ntk_t *        Abc_NtkInsertNewLogic( Abc_Ntk_t * pNtkH, Abc_Ntk_t * pNtkL );
692 extern ABC_DLL void               Abc_NtkPrintBoxInfo( Abc_Ntk_t * pNtk );
693 /*=== abcHieGia.c ==========================================================*/
694 extern ABC_DLL Gia_Man_t *        Abc_NtkFlattenHierarchyGia( Abc_Ntk_t * pNtk, Vec_Ptr_t ** pvBuffers, int fVerbose );
695 extern ABC_DLL void               Abc_NtkInsertHierarchyGia( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNew, int fVerbose );
696 /*=== abcLatch.c ==========================================================*/
697 extern ABC_DLL int                Abc_NtkLatchIsSelfFeed( Abc_Obj_t * pLatch );
698 extern ABC_DLL int                Abc_NtkCountSelfFeedLatches( Abc_Ntk_t * pNtk );
699 extern ABC_DLL int                Abc_NtkRemoveSelfFeedLatches( Abc_Ntk_t * pNtk );
700 extern ABC_DLL Vec_Int_t *        Abc_NtkCollectLatchValues( Abc_Ntk_t * pNtk );
701 extern ABC_DLL char *             Abc_NtkCollectLatchValuesStr( Abc_Ntk_t * pNtk );
702 extern ABC_DLL void               Abc_NtkInsertLatchValues( Abc_Ntk_t * pNtk, Vec_Int_t * vValues );
703 extern ABC_DLL Abc_Obj_t *        Abc_NtkAddLatch( Abc_Ntk_t * pNtk, Abc_Obj_t * pDriver, Abc_InitType_t Init );
704 extern ABC_DLL void               Abc_NtkConvertDcLatches( Abc_Ntk_t * pNtk );
705 extern ABC_DLL Vec_Ptr_t *        Abc_NtkConverLatchNamesIntoNumbers( Abc_Ntk_t * pNtk );
706  /*=== abcLib.c ==========================================================*/
707 extern ABC_DLL Abc_Des_t *        Abc_DesCreate( char * pName );
708 extern ABC_DLL void               Abc_DesCleanManPointer( Abc_Des_t * p, void * pMan );
709 extern ABC_DLL void               Abc_DesFree( Abc_Des_t * p, Abc_Ntk_t * pNtk );
710 extern ABC_DLL Abc_Des_t *        Abc_DesDup( Abc_Des_t * p );
711 extern ABC_DLL void               Abc_DesPrint( Abc_Des_t * p );
712 extern ABC_DLL int                Abc_DesAddModel( Abc_Des_t * p, Abc_Ntk_t * pNtk );
713 extern ABC_DLL Abc_Ntk_t *        Abc_DesFindModelByName( Abc_Des_t * p, char * pName );
714 extern ABC_DLL int                Abc_DesFindTopLevelModels( Abc_Des_t * p );
715 extern ABC_DLL Abc_Ntk_t *        Abc_DesDeriveRoot( Abc_Des_t * p );
716 /*=== abcLog.c ==========================================================*/
717 extern ABC_DLL void               Abc_NtkWriteLogFile( char * pFileName, Abc_Cex_t * pSeqCex, int Status, int nFrames, char * pCommand );
718 /*=== abcMap.c ==========================================================*/
719 extern ABC_DLL Abc_Obj_t *        Abc_NtkFetchTwinNode( Abc_Obj_t * pNode );
720 /*=== abcMiter.c ==========================================================*/
721 extern ABC_DLL int                Abc_NtkMinimumBase( Abc_Ntk_t * pNtk );
722 extern ABC_DLL int                Abc_NodeMinimumBase( Abc_Obj_t * pNode );
723 extern ABC_DLL int                Abc_NtkRemoveDupFanins( Abc_Ntk_t * pNtk );
724 extern ABC_DLL int                Abc_NodeRemoveDupFanins( Abc_Obj_t * pNode );
725 /*=== abcMiter.c ==========================================================*/
726 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiter( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fComb, int nPartSize, int fImplic, int fMulti );
727 extern ABC_DLL void               Abc_NtkMiterAddCone( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkMiter, Abc_Obj_t * pNode );
728 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiterAnd( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fOr, int fCompl2 );
729 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiterCofactor( Abc_Ntk_t * pNtk, Vec_Int_t * vPiValues );
730 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiterForCofactors( Abc_Ntk_t * pNtk, int Out, int In1, int In2 );
731 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiterQuantify( Abc_Ntk_t * pNtk, int In, int fExist );
732 extern ABC_DLL Abc_Ntk_t *        Abc_NtkMiterQuantifyPis( Abc_Ntk_t * pNtk );
733 extern ABC_DLL int                Abc_NtkMiterIsConstant( Abc_Ntk_t * pMiter );
734 extern ABC_DLL void               Abc_NtkMiterReport( Abc_Ntk_t * pMiter );
735 extern ABC_DLL Abc_Ntk_t *        Abc_NtkFrames( Abc_Ntk_t * pNtk, int nFrames, int fInitial, int fVerbose );
736 extern ABC_DLL int                Abc_NtkCombinePos( Abc_Ntk_t * pNtk, int fAnd, int fXor );
737 /*=== abcNames.c ====================================================*/
738 extern ABC_DLL char *             Abc_ObjName( Abc_Obj_t * pNode );
739 extern ABC_DLL char *             Abc_ObjAssignName( Abc_Obj_t * pObj, char * pName, char * pSuffix );
740 extern ABC_DLL char *             Abc_ObjNamePrefix( Abc_Obj_t * pObj, char * pPrefix );
741 extern ABC_DLL char *             Abc_ObjNameSuffix( Abc_Obj_t * pObj, char * pSuffix );
742 extern ABC_DLL char *             Abc_ObjNameDummy( char * pPrefix, int Num, int nDigits );
743 extern ABC_DLL void               Abc_NtkTrasferNames( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew );
744 extern ABC_DLL void               Abc_NtkTrasferNamesNoLatches( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew );
745 extern ABC_DLL Vec_Ptr_t *        Abc_NodeGetFaninNames( Abc_Obj_t * pNode );
746 extern ABC_DLL Vec_Ptr_t *        Abc_NodeGetFakeNames( int nNames );
747 extern ABC_DLL void               Abc_NodeFreeNames( Vec_Ptr_t * vNames );
748 extern ABC_DLL char **            Abc_NtkCollectCioNames( Abc_Ntk_t * pNtk, int fCollectCos );
749 extern ABC_DLL int                Abc_NodeCompareNames( Abc_Obj_t ** pp1, Abc_Obj_t ** pp2 );
750 extern ABC_DLL void               Abc_NtkOrderObjsByName( Abc_Ntk_t * pNtk, int fComb );
751 extern ABC_DLL void               Abc_NtkAddDummyPiNames( Abc_Ntk_t * pNtk );
752 extern ABC_DLL void               Abc_NtkAddDummyPoNames( Abc_Ntk_t * pNtk );
753 extern ABC_DLL void               Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk );
754 extern ABC_DLL void               Abc_NtkShortNames( Abc_Ntk_t * pNtk );
755 extern ABC_DLL void               Abc_NtkStartNameIds( Abc_Ntk_t * p );
756 extern ABC_DLL void               Abc_NtkTransferNameIds( Abc_Ntk_t * p, Abc_Ntk_t * pNew );
757 extern ABC_DLL void               Abc_NtkUpdateNameIds( Abc_Ntk_t * p );
758 /*=== abcNetlist.c ==========================================================*/
759 extern ABC_DLL Abc_Ntk_t *        Abc_NtkToLogic( Abc_Ntk_t * pNtk );
760 extern ABC_DLL Abc_Ntk_t *        Abc_NtkToNetlist( Abc_Ntk_t * pNtk );
761 extern ABC_DLL Abc_Ntk_t *        Abc_NtkToNetlistBench( Abc_Ntk_t * pNtk );
762 /*=== abcNtbdd.c ==========================================================*/
763 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDeriveFromBdd( void * dd, void * bFunc, char * pNamePo, Vec_Ptr_t * vNamesPi );
764 extern ABC_DLL Abc_Ntk_t *        Abc_NtkBddToMuxes( Abc_Ntk_t * pNtk, int fGlobal, int Limit );
765 extern ABC_DLL void *             Abc_NtkBuildGlobalBdds( Abc_Ntk_t * pNtk, int fBddSizeMax, int fDropInternal, int fReorder, int fReverse, int fVerbose );
766 extern ABC_DLL void *             Abc_NtkFreeGlobalBdds( Abc_Ntk_t * pNtk, int fFreeMan );
767 extern ABC_DLL int                Abc_NtkSizeOfGlobalBdds( Abc_Ntk_t * pNtk );
768 /*=== abcNtk.c ==========================================================*/
769 extern ABC_DLL Abc_Ntk_t *        Abc_NtkAlloc( Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan );
770 extern ABC_DLL Abc_Ntk_t *        Abc_NtkStartFrom( Abc_Ntk_t * pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func );
771 extern ABC_DLL Abc_Ntk_t *        Abc_NtkStartFromNoLatches( Abc_Ntk_t * pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func );
772 extern ABC_DLL void               Abc_NtkFinalize( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew );
773 extern ABC_DLL Abc_Ntk_t *        Abc_NtkStartRead( char * pName );
774 extern ABC_DLL void               Abc_NtkFinalizeRead( Abc_Ntk_t * pNtk );
775 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDup( Abc_Ntk_t * pNtk );
776 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDupDfs( Abc_Ntk_t * pNtk );
777 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDupDfsNoBarBufs( Abc_Ntk_t * pNtk );
778 extern ABC_DLL Abc_Ntk_t *        Abc_NtkDupTransformMiter( Abc_Ntk_t * pNtk );
779 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateCone( Abc_Ntk_t * pNtk, Abc_Obj_t * pNode, char * pNodeName, int fUseAllCis );
780 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateConeArray( Abc_Ntk_t * pNtk, Vec_Ptr_t * vRoots, int fUseAllCis );
781 extern ABC_DLL void               Abc_NtkAppendToCone( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * pNtk, Vec_Ptr_t * vRoots );
782 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateMffc( Abc_Ntk_t * pNtk, Abc_Obj_t * pNode, char * pNodeName );
783 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateTarget( Abc_Ntk_t * pNtk, Vec_Ptr_t * vRoots, Vec_Int_t * vValues );
784 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateFromNode( Abc_Ntk_t * pNtk, Abc_Obj_t * pNode );
785 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateWithNode( char * pSop );
786 extern ABC_DLL void               Abc_NtkDelete( Abc_Ntk_t * pNtk );
787 extern ABC_DLL void               Abc_NtkFixNonDrivenNets( Abc_Ntk_t * pNtk );
788 extern ABC_DLL void               Abc_NtkMakeComb( Abc_Ntk_t * pNtk, int fRemoveLatches );
789 extern ABC_DLL void               Abc_NtkPermute( Abc_Ntk_t * pNtk, int fInputs, int fOutputs, int fFlops, char * pFlopPermFile );
790 extern ABC_DLL void               Abc_NtkUnpermute( Abc_Ntk_t * pNtk );
791 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateFromSops( char * pName, Vec_Ptr_t * vSops );
792 extern ABC_DLL Abc_Ntk_t *        Abc_NtkCreateFromGias( char * pName, Vec_Ptr_t * vGias, Gia_Man_t * pMulti );
793 /*=== abcObj.c ==========================================================*/
794 extern ABC_DLL Abc_Obj_t *        Abc_ObjAlloc( Abc_Ntk_t * pNtk, Abc_ObjType_t Type );
795 extern ABC_DLL void               Abc_ObjRecycle( Abc_Obj_t * pObj );
796 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateObj( Abc_Ntk_t * pNtk, Abc_ObjType_t Type );
797 extern ABC_DLL void               Abc_NtkDeleteObj( Abc_Obj_t * pObj );
798 extern ABC_DLL void               Abc_NtkDeleteObjPo( Abc_Obj_t * pObj );
799 extern ABC_DLL void               Abc_NtkDeleteObj_rec( Abc_Obj_t * pObj, int fOnlyNodes );
800 extern ABC_DLL void               Abc_NtkDeleteAll_rec( Abc_Obj_t * pObj );
801 extern ABC_DLL Abc_Obj_t *        Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName );
802 extern ABC_DLL Abc_Obj_t *        Abc_NtkDupBox( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pBox, int fCopyName );
803 extern ABC_DLL Abc_Obj_t *        Abc_NtkCloneObj( Abc_Obj_t * pNode );
804 extern ABC_DLL Abc_Obj_t *        Abc_NtkFindNode( Abc_Ntk_t * pNtk, char * pName );
805 extern ABC_DLL Abc_Obj_t *        Abc_NtkFindNet( Abc_Ntk_t * pNtk, char * pName );
806 extern ABC_DLL Abc_Obj_t *        Abc_NtkFindCi( Abc_Ntk_t * pNtk, char * pName );
807 extern ABC_DLL Abc_Obj_t *        Abc_NtkFindCo( Abc_Ntk_t * pNtk, char * pName );
808 extern ABC_DLL Abc_Obj_t *        Abc_NtkFindOrCreateNet( Abc_Ntk_t * pNtk, char * pName );
809 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeConst0( Abc_Ntk_t * pNtk );
810 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeConst1( Abc_Ntk_t * pNtk );
811 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeInv( Abc_Ntk_t * pNtk, Abc_Obj_t * pFanin );
812 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeBuf( Abc_Ntk_t * pNtk, Abc_Obj_t * pFanin );
813 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeAnd( Abc_Ntk_t * pNtk, Vec_Ptr_t * vFanins );
814 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeOr( Abc_Ntk_t * pNtk, Vec_Ptr_t * vFanins );
815 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeExor( Abc_Ntk_t * pNtk, Vec_Ptr_t * vFanins );
816 extern ABC_DLL Abc_Obj_t *        Abc_NtkCreateNodeMux( Abc_Ntk_t * pNtk, Abc_Obj_t * pNodeC, Abc_Obj_t * pNode1, Abc_Obj_t * pNode0 );
817 extern ABC_DLL int                Abc_NodeIsConst( Abc_Obj_t * pNode );
818 extern ABC_DLL int                Abc_NodeIsConst0( Abc_Obj_t * pNode );
819 extern ABC_DLL int                Abc_NodeIsConst1( Abc_Obj_t * pNode );
820 extern ABC_DLL int                Abc_NodeIsBuf( Abc_Obj_t * pNode );
821 extern ABC_DLL int                Abc_NodeIsInv( Abc_Obj_t * pNode );
822 extern ABC_DLL void               Abc_NodeComplement( Abc_Obj_t * pNode );
823 extern ABC_DLL void               Abc_NodeComplementInput( Abc_Obj_t * pNode, Abc_Obj_t * pFanin );
824 /*=== abcOdc.c ==========================================================*/
825 typedef struct Odc_Man_t_         Odc_Man_t;
826 extern ABC_DLL Odc_Man_t *        Abc_NtkDontCareAlloc( int nVarsMax, int nLevels, int fVerbose, int fVeryVerbose );
827 extern ABC_DLL void               Abc_NtkDontCareClear( Odc_Man_t * p );
828 extern ABC_DLL void               Abc_NtkDontCareFree( Odc_Man_t * p );
829 extern ABC_DLL int                Abc_NtkDontCareCompute( Odc_Man_t * p, Abc_Obj_t * pNode, Vec_Ptr_t * vLeaves, unsigned * puTruth );
830 /*=== abcPrint.c ==========================================================*/
831 extern ABC_DLL float              Abc_NtkMfsTotalSwitching( Abc_Ntk_t * pNtk );
832 extern ABC_DLL float              Abc_NtkMfsTotalGlitching( Abc_Ntk_t * pNtk, int nPats, int Prob, int fVerbose );
833 extern ABC_DLL void               Abc_NtkPrintStats( Abc_Ntk_t * pNtk, int fFactored, int fSaveBest, int fDumpResult, int fUseLutLib, int fPrintMuxes, int fPower, int fGlitch, int fSkipBuf, int fSkipSmall, int fPrintMem );
834 extern ABC_DLL void               Abc_NtkPrintIo( FILE * pFile, Abc_Ntk_t * pNtk, int fPrintFlops );
835 extern ABC_DLL void               Abc_NtkPrintLatch( FILE * pFile, Abc_Ntk_t * pNtk );
836 extern ABC_DLL void               Abc_NtkPrintFanio( FILE * pFile, Abc_Ntk_t * pNtk, int fUseFanio, int fUsePio, int fUseSupp, int fUseCone );
837 extern ABC_DLL void               Abc_NtkPrintFanioNew( FILE * pFile, Abc_Ntk_t * pNtk, int fMffc );
838 extern ABC_DLL void               Abc_NodePrintFanio( FILE * pFile, Abc_Obj_t * pNode );
839 extern ABC_DLL void               Abc_NtkPrintFactor( FILE * pFile, Abc_Ntk_t * pNtk, int fUseRealNames );
840 extern ABC_DLL void               Abc_NodePrintFactor( FILE * pFile, Abc_Obj_t * pNode, int fUseRealNames );
841 extern ABC_DLL void               Abc_NtkPrintLevel( FILE * pFile, Abc_Ntk_t * pNtk, int fProfile, int fListNodes, int fVerbose );
842 extern ABC_DLL void               Abc_NodePrintLevel( FILE * pFile, Abc_Obj_t * pNode );
843 extern ABC_DLL void               Abc_NtkPrintSkews( FILE * pFile, Abc_Ntk_t * pNtk, int fPrintAll );
844 extern ABC_DLL void               Abc_ObjPrint( FILE * pFile, Abc_Obj_t * pObj );
845 extern ABC_DLL void               Abc_NtkShow6VarFunc( char * pF0, char * pF1 );
846 /*=== abcProve.c ==========================================================*/
847 extern ABC_DLL int                Abc_NtkMiterProve( Abc_Ntk_t ** ppNtk, void * pParams );
848 extern ABC_DLL int                Abc_NtkIvyProve( Abc_Ntk_t ** ppNtk, void * pPars );
849 /*=== abcRec3.c ==========================================================*/
850 extern ABC_DLL void               Abc_NtkRecStart3( Gia_Man_t * p, int nVars, int nCuts, int fFuncOnly, int fVerbose );
851 extern ABC_DLL void               Abc_NtkRecStop3();
852 extern ABC_DLL void               Abc_NtkRecAdd3( Abc_Ntk_t * pNtk, int fUseSOPB );
853 extern ABC_DLL void               Abc_NtkRecPs3(int fPrintLib);
854 extern ABC_DLL Gia_Man_t *        Abc_NtkRecGetGia3();
855 extern ABC_DLL int                Abc_NtkRecIsRunning3();
856 extern ABC_DLL void               Abc_NtkRecLibMerge3(Gia_Man_t * pGia);
857 extern ABC_DLL int                Abc_NtkRecInputNum3();
858 //extern ABC_DLL void               Abc_NtkRecFilter3(int nLimit);
859 /*=== abcReconv.c ==========================================================*/
860 extern ABC_DLL Abc_ManCut_t *     Abc_NtkManCutStart( int nNodeSizeMax, int nConeSizeMax, int nNodeFanStop, int nConeFanStop );
861 extern ABC_DLL void               Abc_NtkManCutStop( Abc_ManCut_t * p );
862 extern ABC_DLL Vec_Ptr_t *        Abc_NtkManCutReadCutLarge( Abc_ManCut_t * p );
863 extern ABC_DLL Vec_Ptr_t *        Abc_NtkManCutReadCutSmall( Abc_ManCut_t * p );
864 extern ABC_DLL Vec_Ptr_t *        Abc_NtkManCutReadVisited( Abc_ManCut_t * p );
865 extern ABC_DLL Vec_Ptr_t *        Abc_NodeFindCut( Abc_ManCut_t * p, Abc_Obj_t * pRoot, int  fContain );
866 extern ABC_DLL void               Abc_NodeConeCollect( Abc_Obj_t ** ppRoots, int nRoots, Vec_Ptr_t * vFanins, Vec_Ptr_t * vVisited, int fIncludeFanins );
867 extern ABC_DLL Vec_Ptr_t *        Abc_NodeCollectTfoCands( Abc_ManCut_t * p, Abc_Obj_t * pRoot, Vec_Ptr_t * vFanins, int LevelMax );
868 /*=== abcRefs.c ==========================================================*/
869 extern ABC_DLL int                Abc_NodeMffcSize( Abc_Obj_t * pNode );
870 extern ABC_DLL int                Abc_NodeMffcSizeSupp( Abc_Obj_t * pNode );
871 extern ABC_DLL int                Abc_NodeMffcSizeStop( Abc_Obj_t * pNode );
872 extern ABC_DLL int                Abc_NodeMffcLabelAig( Abc_Obj_t * pNode );
873 extern ABC_DLL int                Abc_NodeMffcLabel( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes );
874 extern ABC_DLL void               Abc_NodeMffcConeSupp( Abc_Obj_t * pNode, Vec_Ptr_t * vCone, Vec_Ptr_t * vSupp );
875 extern ABC_DLL int                Abc_NodeDeref_rec( Abc_Obj_t * pNode );
876 extern ABC_DLL int                Abc_NodeRef_rec( Abc_Obj_t * pNode );
877 /*=== abcRefactor.c ==========================================================*/
878 extern ABC_DLL int                Abc_NtkRefactor( Abc_Ntk_t * pNtk, int nNodeSizeMax, int nConeSizeMax, int  fUpdateLevel, int  fUseZeros, int  fUseDcs, int  fVerbose );
879 /*=== abcRewrite.c ==========================================================*/
880 extern ABC_DLL int                Abc_NtkRewrite( Abc_Ntk_t * pNtk, int fUpdateLevel, int fUseZeros, int fVerbose, int fVeryVerbose, int fPlaceEnable );
881 /*=== abcSat.c ==========================================================*/
882 extern ABC_DLL int                Abc_NtkMiterSat( Abc_Ntk_t * pNtk, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, int fVerbose, ABC_INT64_T * pNumConfs, ABC_INT64_T * pNumInspects );
883 extern ABC_DLL void *             Abc_NtkMiterSatCreate( Abc_Ntk_t * pNtk, int fAllPrimes );
884 /*=== abcSop.c ==========================================================*/
885 extern ABC_DLL char *             Abc_SopRegister( Mem_Flex_t * pMan, const char * pName );
886 extern ABC_DLL char *             Abc_SopStart( Mem_Flex_t * pMan, int nCubes, int nVars );
887 extern ABC_DLL char *             Abc_SopCreateConst0( Mem_Flex_t * pMan );
888 extern ABC_DLL char *             Abc_SopCreateConst1( Mem_Flex_t * pMan );
889 extern ABC_DLL char *             Abc_SopCreateAnd2( Mem_Flex_t * pMan, int fCompl0, int fCompl1 );
890 extern ABC_DLL char *             Abc_SopCreateAnd( Mem_Flex_t * pMan, int nVars, int * pfCompl );
891 extern ABC_DLL char *             Abc_SopCreateNand( Mem_Flex_t * pMan, int nVars );
892 extern ABC_DLL char *             Abc_SopCreateOr( Mem_Flex_t * pMan, int nVars, int * pfCompl );
893 extern ABC_DLL char *             Abc_SopCreateOrMultiCube( Mem_Flex_t * pMan, int nVars, int * pfCompl );
894 extern ABC_DLL char *             Abc_SopCreateNor( Mem_Flex_t * pMan, int nVars );
895 extern ABC_DLL char *             Abc_SopCreateXor( Mem_Flex_t * pMan, int nVars );
896 extern ABC_DLL char *             Abc_SopCreateXorSpecial( Mem_Flex_t * pMan, int nVars );
897 extern ABC_DLL char *             Abc_SopCreateNxor( Mem_Flex_t * pMan, int nVars );
898 extern ABC_DLL char *             Abc_SopCreateMux( Mem_Flex_t * pMan );
899 extern ABC_DLL char *             Abc_SopCreateInv( Mem_Flex_t * pMan );
900 extern ABC_DLL char *             Abc_SopCreateBuf( Mem_Flex_t * pMan );
901 extern ABC_DLL char *             Abc_SopCreateFromTruth( Mem_Flex_t * pMan, int nVars, unsigned * pTruth );
902 extern ABC_DLL char *             Abc_SopCreateFromIsop( Mem_Flex_t * pMan, int nVars, Vec_Int_t * vCover );
903 extern ABC_DLL char *             Abc_SopCreateFromTruthIsop( Mem_Flex_t * pMan, int nVars, word * pTruth, Vec_Int_t * vCover );
904 extern ABC_DLL int                Abc_SopGetCubeNum( char * pSop );
905 extern ABC_DLL int                Abc_SopGetLitNum( char * pSop );
906 extern ABC_DLL int                Abc_SopGetVarNum( char * pSop );
907 extern ABC_DLL int                Abc_SopGetPhase( char * pSop );
908 extern ABC_DLL int                Abc_SopGetIthCareLit( char * pSop, int i );
909 extern ABC_DLL void               Abc_SopComplement( char * pSop );
910 extern ABC_DLL void               Abc_SopComplementVar( char * pSop, int iVar );
911 extern ABC_DLL int                Abc_SopIsComplement( char * pSop );
912 extern ABC_DLL int                Abc_SopIsConst0( char * pSop );
913 extern ABC_DLL int                Abc_SopIsConst1( char * pSop );
914 extern ABC_DLL int                Abc_SopIsBuf( char * pSop );
915 extern ABC_DLL int                Abc_SopIsInv( char * pSop );
916 extern ABC_DLL int                Abc_SopIsAndType( char * pSop );
917 extern ABC_DLL int                Abc_SopIsOrType( char * pSop );
918 extern ABC_DLL int                Abc_SopIsExorType( char * pSop );
919 extern ABC_DLL int                Abc_SopCheck( char * pSop, int nFanins );
920 extern ABC_DLL char *             Abc_SopFromTruthBin( char * pTruth );
921 extern ABC_DLL char *             Abc_SopFromTruthHex( char * pTruth );
922 extern ABC_DLL char *             Abc_SopEncoderPos( Mem_Flex_t * pMan, int iValue, int nValues );
923 extern ABC_DLL char *             Abc_SopEncoderLog( Mem_Flex_t * pMan, int iBit, int nValues );
924 extern ABC_DLL char *             Abc_SopDecoderPos( Mem_Flex_t * pMan, int nValues );
925 extern ABC_DLL char *             Abc_SopDecoderLog( Mem_Flex_t * pMan, int nValues );
926 extern ABC_DLL word               Abc_SopToTruth( char * pSop, int nInputs );
927 extern ABC_DLL void               Abc_SopToTruth7( char * pSop, int nInputs, word r[2] );
928 extern ABC_DLL void               Abc_SopToTruthBig( char * pSop, int nInputs, word ** pVars, word * pCube, word * pRes );
929 /*=== abcStrash.c ==========================================================*/
930 extern ABC_DLL Abc_Ntk_t *        Abc_NtkRestrash( Abc_Ntk_t * pNtk, int fCleanup );
931 extern ABC_DLL Abc_Ntk_t *        Abc_NtkRestrashZero( Abc_Ntk_t * pNtk, int fCleanup );
932 extern ABC_DLL Abc_Ntk_t *        Abc_NtkStrash( Abc_Ntk_t * pNtk, int fAllNodes, int fCleanup, int fRecord );
933 extern ABC_DLL Abc_Obj_t *        Abc_NodeStrash( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pNode, int fRecord );
934 extern ABC_DLL int                Abc_NtkAppend( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fAddPos );
935 extern ABC_DLL Abc_Ntk_t *        Abc_NtkTopmost( Abc_Ntk_t * pNtk, int nLevels );
936 /*=== abcSweep.c ==========================================================*/
937 extern ABC_DLL int                Abc_NtkSweep( Abc_Ntk_t * pNtk, int fVerbose );
938 extern ABC_DLL int                Abc_NtkCleanup( Abc_Ntk_t * pNtk, int fVerbose );
939 extern ABC_DLL int                Abc_NtkCleanupNodes( Abc_Ntk_t * pNtk, Vec_Ptr_t * vNodes, int fVerbose );
940 extern ABC_DLL int                Abc_NtkCleanupSeq( Abc_Ntk_t * pNtk, int fLatchSweep, int fAutoSweep, int fVerbose );
941 extern ABC_DLL int                Abc_NtkSweepBufsInvs( Abc_Ntk_t * pNtk, int fVerbose );
942 /*=== abcTiming.c ==========================================================*/
943 extern ABC_DLL Abc_Time_t *       Abc_NtkReadDefaultArrival( Abc_Ntk_t * pNtk );
944 extern ABC_DLL Abc_Time_t *       Abc_NtkReadDefaultRequired( Abc_Ntk_t * pNtk );
945 extern ABC_DLL Abc_Time_t *       Abc_NodeReadArrival( Abc_Obj_t * pNode );
946 extern ABC_DLL Abc_Time_t *       Abc_NodeReadRequired( Abc_Obj_t * pNode );
947 extern ABC_DLL float              Abc_NtkReadDefaultArrivalWorst( Abc_Ntk_t * pNtk );
948 extern ABC_DLL float              Abc_NtkReadDefaultRequiredWorst( Abc_Ntk_t * pNtk );
949 extern ABC_DLL float              Abc_NodeReadArrivalAve( Abc_Obj_t * pNode );
950 extern ABC_DLL float              Abc_NodeReadRequiredAve( Abc_Obj_t * pNode );
951 extern ABC_DLL float              Abc_NodeReadArrivalWorst( Abc_Obj_t * pNode );
952 extern ABC_DLL float              Abc_NodeReadRequiredWorst( Abc_Obj_t * pNode );
953 extern ABC_DLL Abc_Time_t *       Abc_NtkReadDefaultInputDrive( Abc_Ntk_t * pNtk );
954 extern ABC_DLL Abc_Time_t *       Abc_NtkReadDefaultOutputLoad( Abc_Ntk_t * pNtk );
955 extern ABC_DLL Abc_Time_t *       Abc_NodeReadInputDrive( Abc_Ntk_t * pNtk, int iPi );
956 extern ABC_DLL Abc_Time_t *       Abc_NodeReadOutputLoad( Abc_Ntk_t * pNtk, int iPo );
957 extern ABC_DLL float              Abc_NodeReadInputDriveWorst( Abc_Ntk_t * pNtk, int iPi );
958 extern ABC_DLL float              Abc_NodeReadOutputLoadWorst( Abc_Ntk_t * pNtk, int iPo );
959 extern ABC_DLL void               Abc_NtkTimeSetDefaultArrival( Abc_Ntk_t * pNtk, float Rise, float Fall );
960 extern ABC_DLL void               Abc_NtkTimeSetDefaultRequired( Abc_Ntk_t * pNtk, float Rise, float Fall );
961 extern ABC_DLL void               Abc_NtkTimeSetArrival( Abc_Ntk_t * pNtk, int ObjId, float Rise, float Fall );
962 extern ABC_DLL void               Abc_NtkTimeSetRequired( Abc_Ntk_t * pNtk, int ObjId, float Rise, float Fall );
963 extern ABC_DLL void               Abc_NtkTimeSetDefaultInputDrive( Abc_Ntk_t * pNtk, float Rise, float Fall );
964 extern ABC_DLL void               Abc_NtkTimeSetDefaultOutputLoad( Abc_Ntk_t * pNtk, float Rise, float Fall );
965 extern ABC_DLL void               Abc_NtkTimeSetInputDrive( Abc_Ntk_t * pNtk, int PiNum, float Rise, float Fall );
966 extern ABC_DLL void               Abc_NtkTimeSetOutputLoad( Abc_Ntk_t * pNtk, int PoNum, float Rise, float Fall );
967 extern ABC_DLL void               Abc_NtkTimeInitialize( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkOld );
968 extern ABC_DLL void               Abc_ManTimeStop( Abc_ManTime_t * p );
969 extern ABC_DLL void               Abc_ManTimeDup( Abc_Ntk_t * pNtkOld, Abc_Ntk_t * pNtkNew );
970 extern ABC_DLL void               Abc_NtkSetNodeLevelsArrival( Abc_Ntk_t * pNtk );
971 extern ABC_DLL float *            Abc_NtkGetCiArrivalFloats( Abc_Ntk_t * pNtk );
972 extern ABC_DLL float *            Abc_NtkGetCoRequiredFloats( Abc_Ntk_t * pNtk );
973 extern ABC_DLL Abc_Time_t *       Abc_NtkGetCiArrivalTimes( Abc_Ntk_t * pNtk );
974 extern ABC_DLL Abc_Time_t *       Abc_NtkGetCoRequiredTimes( Abc_Ntk_t * pNtk );
975 extern ABC_DLL float              Abc_NtkDelayTrace( Abc_Ntk_t * pNtk, Abc_Obj_t * pOut, Abc_Obj_t * pIn, int fPrint );
976 extern ABC_DLL int                Abc_ObjLevelNew( Abc_Obj_t * pObj );
977 extern ABC_DLL int                Abc_ObjReverseLevelNew( Abc_Obj_t * pObj );
978 extern ABC_DLL int                Abc_ObjRequiredLevel( Abc_Obj_t * pObj );
979 extern ABC_DLL int                Abc_ObjReverseLevel( Abc_Obj_t * pObj );
980 extern ABC_DLL void               Abc_ObjSetReverseLevel( Abc_Obj_t * pObj, int LevelR );
981 extern ABC_DLL void               Abc_NtkStartReverseLevels( Abc_Ntk_t * pNtk, int nMaxLevelIncrease );
982 extern ABC_DLL void               Abc_NtkStopReverseLevels( Abc_Ntk_t * pNtk );
983 extern ABC_DLL void               Abc_NtkUpdateLevel( Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels );
984 extern ABC_DLL void               Abc_NtkUpdateReverseLevel( Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels );
985 extern ABC_DLL void               Abc_NtkUpdate( Abc_Obj_t * pObj, Abc_Obj_t * pObjNew, Vec_Vec_t * vLevels );
986 /*=== abcUtil.c ==========================================================*/
987 extern ABC_DLL void *             Abc_NtkAttrFree( Abc_Ntk_t * pNtk, int Attr, int fFreeMan );
988 extern ABC_DLL void               Abc_NtkOrderCisCos( Abc_Ntk_t * pNtk );
989 extern ABC_DLL int                Abc_NtkGetCubeNum( Abc_Ntk_t * pNtk );
990 extern ABC_DLL int                Abc_NtkGetCubePairNum( Abc_Ntk_t * pNtk );
991 extern ABC_DLL int                Abc_NtkGetLitNum( Abc_Ntk_t * pNtk );
992 extern ABC_DLL int                Abc_NtkGetLitFactNum( Abc_Ntk_t * pNtk );
993 extern ABC_DLL int                Abc_NtkGetBddNodeNum( Abc_Ntk_t * pNtk );
994 extern ABC_DLL int                Abc_NtkGetAigNodeNum( Abc_Ntk_t * pNtk );
995 extern ABC_DLL int                Abc_NtkGetClauseNum( Abc_Ntk_t * pNtk );
996 extern ABC_DLL double             Abc_NtkGetMappedArea( Abc_Ntk_t * pNtk );
997 extern ABC_DLL int                Abc_NtkGetExorNum( Abc_Ntk_t * pNtk );
998 extern ABC_DLL int                Abc_NtkGetMuxNum( Abc_Ntk_t * pNtk );
999 extern ABC_DLL int                Abc_NtkGetBufNum( Abc_Ntk_t * pNtk );
1000 extern ABC_DLL int                Abc_NtkGetLargeNodeNum( Abc_Ntk_t * pNtk );
1001 extern ABC_DLL int                Abc_NtkGetChoiceNum( Abc_Ntk_t * pNtk );
1002 extern ABC_DLL int                Abc_NtkGetFaninMax( Abc_Ntk_t * pNtk );
1003 extern ABC_DLL int                Abc_NtkGetFanoutMax( Abc_Ntk_t * pNtk );
1004 extern ABC_DLL int                Abc_NtkGetTotalFanins( Abc_Ntk_t * pNtk );
1005 extern ABC_DLL void               Abc_NtkCleanCopy( Abc_Ntk_t * pNtk );
1006 extern ABC_DLL void               Abc_NtkCleanCopy_rec( Abc_Ntk_t * pNtk );
1007 extern ABC_DLL void               Abc_NtkCleanData( Abc_Ntk_t * pNtk );
1008 extern ABC_DLL void               Abc_NtkFillTemp( Abc_Ntk_t * pNtk );
1009 extern ABC_DLL int                Abc_NtkCountCopy( Abc_Ntk_t * pNtk );
1010 extern ABC_DLL Vec_Ptr_t *        Abc_NtkSaveCopy( Abc_Ntk_t * pNtk );
1011 extern ABC_DLL void               Abc_NtkLoadCopy( Abc_Ntk_t * pNtk, Vec_Ptr_t * vCopies );
1012 extern ABC_DLL void               Abc_NtkCleanNext( Abc_Ntk_t * pNtk );
1013 extern ABC_DLL void               Abc_NtkCleanNext_rec( Abc_Ntk_t * pNtk );
1014 extern ABC_DLL void               Abc_NtkCleanMarkA( Abc_Ntk_t * pNtk );
1015 extern ABC_DLL void               Abc_NtkCleanMarkB( Abc_Ntk_t * pNtk );
1016 extern ABC_DLL void               Abc_NtkCleanMarkC( Abc_Ntk_t * pNtk );
1017 extern ABC_DLL void               Abc_NtkCleanMarkAB( Abc_Ntk_t * pNtk );
1018 extern ABC_DLL void               Abc_NtkCleanMarkABC( Abc_Ntk_t * pNtk );
1019 extern ABC_DLL int                Abc_NodeFindFanin( Abc_Obj_t * pNode, Abc_Obj_t * pFanin );
1020 extern ABC_DLL Abc_Obj_t *        Abc_NodeFindCoFanout( Abc_Obj_t * pNode );
1021 extern ABC_DLL Abc_Obj_t *        Abc_NodeFindNonCoFanout( Abc_Obj_t * pNode );
1022 extern ABC_DLL Abc_Obj_t *        Abc_NodeHasUniqueCoFanout( Abc_Obj_t * pNode );
1023 extern ABC_DLL int                Abc_NtkLogicHasSimpleCos( Abc_Ntk_t * pNtk );
1024 extern ABC_DLL int                Abc_NtkLogicMakeSimpleCos( Abc_Ntk_t * pNtk, int  fDuplicate );
1025 extern ABC_DLL void               Abc_VecObjPushUniqueOrderByLevel( Vec_Ptr_t * p, Abc_Obj_t * pNode );
1026 extern ABC_DLL int                Abc_NodeIsExorType( Abc_Obj_t * pNode );
1027 extern ABC_DLL int                Abc_NodeIsMuxType( Abc_Obj_t * pNode );
1028 extern ABC_DLL int                Abc_NodeIsMuxControlType( Abc_Obj_t * pNode );
1029 extern ABC_DLL Abc_Obj_t *        Abc_NodeRecognizeMux( Abc_Obj_t * pNode, Abc_Obj_t ** ppNodeT, Abc_Obj_t ** ppNodeE );
1030 extern ABC_DLL int                Abc_NtkPrepareTwoNtks( FILE * pErr, Abc_Ntk_t * pNtk, char ** argv, int argc, Abc_Ntk_t ** ppNtk1, Abc_Ntk_t ** ppNtk2, int * pfDelete1, int * pfDelete2, int fCheck );
1031 extern ABC_DLL void               Abc_NodeCollectFanins( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes );
1032 extern ABC_DLL void               Abc_NodeCollectFanouts( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes );
1033 extern ABC_DLL Vec_Ptr_t *        Abc_NtkCollectLatches( Abc_Ntk_t * pNtk );
1034 extern ABC_DLL int                Abc_NodeCompareLevelsIncrease( Abc_Obj_t ** pp1, Abc_Obj_t ** pp2 );
1035 extern ABC_DLL int                Abc_NodeCompareLevelsDecrease( Abc_Obj_t ** pp1, Abc_Obj_t ** pp2 );
1036 extern ABC_DLL Vec_Int_t *        Abc_NtkFanoutCounts( Abc_Ntk_t * pNtk );
1037 extern ABC_DLL Vec_Ptr_t *        Abc_NtkCollectObjects( Abc_Ntk_t * pNtk );
1038 extern ABC_DLL Vec_Int_t *        Abc_NtkGetCiIds( Abc_Ntk_t * pNtk );
1039 extern ABC_DLL void               Abc_NtkReassignIds( Abc_Ntk_t * pNtk );
1040 extern ABC_DLL int                Abc_ObjPointerCompare( void ** pp1, void ** pp2 );
1041 extern ABC_DLL void               Abc_NtkTransferCopy( Abc_Ntk_t * pNtk );
1042 extern ABC_DLL void               Abc_NtkInvertConstraints( Abc_Ntk_t * pNtk );
1043 extern ABC_DLL void               Abc_NtkPrintCiLevels( Abc_Ntk_t * pNtk );
1044 extern ABC_DLL void               Abc_NtkReverseTopoOrder( Abc_Ntk_t * pNtk );
1045 extern ABC_DLL int                Abc_NtkIsTopo( Abc_Ntk_t * pNtk );
1046 extern ABC_DLL void               Abc_NtkTransferPhases( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * pNtk );
1047 extern ABC_DLL Gia_Man_t *        Abc_SopSynthesizeOne( char * pSop, int fClp );
1048 
1049 
1050 
1051 /*=== abcVerify.c ==========================================================*/
1052 extern ABC_DLL int *              Abc_NtkVerifyGetCleanModel( Abc_Ntk_t * pNtk, int nFrames );
1053 extern ABC_DLL int *              Abc_NtkVerifySimulatePattern( Abc_Ntk_t * pNtk, int * pModel );
1054 extern ABC_DLL int                Abc_NtkIsTrueCex( Abc_Ntk_t * pNtk, Abc_Cex_t * pCex );
1055 extern ABC_DLL int                Abc_NtkIsValidCex( Abc_Ntk_t * pNtk, Abc_Cex_t * pCex );
1056 
1057 
1058 
1059 ABC_NAMESPACE_HEADER_END
1060 
1061 
1062 
1063 #endif
1064 
1065 ////////////////////////////////////////////////////////////////////////
1066 ///                       END OF FILE                                ///
1067 ////////////////////////////////////////////////////////////////////////
1068