ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
aig.h
Go to the documentation of this file.
1
20
21#ifndef ABC__aig__aig__aig_h
22#define ABC__aig__aig__aig_h
23
24
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 "misc/util/utilCex.h"
36
40
41
42
44
45
49
50typedef struct Aig_Man_t_ Aig_Man_t;
51typedef struct Aig_Obj_t_ Aig_Obj_t;
55
56// object types
57typedef enum {
58 AIG_OBJ_NONE, // 0: non-existent object
59 AIG_OBJ_CONST1, // 1: constant 1
60 AIG_OBJ_CI, // 2: combinational input
61 AIG_OBJ_CO, // 3: combinational output
62 AIG_OBJ_BUF, // 4: buffer node
63 AIG_OBJ_AND, // 5: AND node
64 AIG_OBJ_EXOR, // 6: EXOR node
65 AIG_OBJ_VOID // 7: unused object
67
68// the AIG node
69struct Aig_Obj_t_ // 8 words
70{
71 union {
72 Aig_Obj_t * pNext; // strashing table
73 int CioId; // 0-based number of CI/CO
74 };
75 Aig_Obj_t * pFanin0; // fanin
76 Aig_Obj_t * pFanin1; // fanin
77 unsigned int Type : 3; // object type
78 unsigned int fPhase : 1; // value under 000...0 pattern
79 unsigned int fMarkA : 1; // multipurpose mask
80 unsigned int fMarkB : 1; // multipurpose mask
81 unsigned int nRefs : 26; // reference count
82 unsigned Level : 24; // the level of this node
83 unsigned nCuts : 8; // the number of cuts
84 int TravId; // unique ID of last traversal involving the node
85 int Id; // unique ID of the node
86 union { // temporary store for user's data
87 void * pData;
88 int iData;
89 float dData;
90 };
91};
92
93// the AIG manager
95{
96 char * pName; // the design name
97 char * pSpec; // the input file name
98 // AIG nodes
99 Vec_Ptr_t * vCis; // the array of PIs
100 Vec_Ptr_t * vCos; // the array of POs
101 Vec_Ptr_t * vObjs; // the array of all nodes (optional)
102 Vec_Ptr_t * vBufs; // the array of buffers
103 Aig_Obj_t * pConst1; // the constant 1 node
104 Aig_Obj_t Ghost; // the ghost node
105 int nRegs; // the number of registers (registers are last POs)
106 int nTruePis; // the number of true primary inputs
107 int nTruePos; // the number of true primary outputs
108 int nAsserts; // the number of asserts among POs (asserts are first POs)
109 int nConstrs; // the number of constraints (model checking only)
110 int nBarBufs; // the number of barrier buffers
111 // AIG node counters
112 int nObjs[AIG_OBJ_VOID];// the number of objects by type
113 int nDeleted; // the number of deleted objects
114 // structural hash table
115 Aig_Obj_t ** pTable; // structural hash table
116 int nTableSize; // structural hash table size
117 // representation of fanouts
118 int * pFanData; // the database to store fanout information
119 int nFansAlloc; // the size of fanout representation
120 Vec_Vec_t * vLevels; // used to update timing information
121 int nBufReplaces; // the number of times replacement led to a buffer
122 int nBufFixes; // the number of times buffers were propagated
123 int nBufMax; // the maximum number of buffers during computation
124 // topological order
125 unsigned * pOrderData;
127 int iPrev;
128 int iNext;
131 // representatives
132 Aig_Obj_t ** pEquivs; // linked list of equivalent nodes (when choices are used)
133 Aig_Obj_t ** pReprs; // representatives of each node
134 int nReprsAlloc; // the number of allocated representatives
135 // various data members
136 Aig_MmFixed_t * pMemObjs; // memory manager for objects
137 Vec_Int_t * vLevelR; // the reverse level of the nodes
138 int nLevelMax; // maximum number of levels
139 void * pData; // the temporary data
140 void * pData2; // the temporary data
141 int nTravIds; // the current traversal ID
142 int fCatchExor; // enables EXOR nodes
143 int fAddStrash; // performs additional strashing
144 Aig_Obj_t ** pObjCopies; // mapping of AIG nodes into FRAIG nodes
145 void (*pImpFunc) (void*, void*); // implication checking precedure
146 void * pImpData; // implication checking data
147 void * pManTime; // the timing manager
148 void * pManCuts;
149 int * pFastSim;
150 unsigned * pTerSimData; // ternary simulation data
155 Vec_Ptr_t * vSeqModelVec; // vector of counter-examples (for sequential miters)
161 Vec_Int_t * vProbs; // probability of node being 1
162 Vec_Int_t * vCiNumsOrig; // original CI names
163 int nComplEdges; // complemented edges
165 // timing statistics
168 //-- jlong -- begin
171 //-- jlong -- end
172};
173
174// cut computation
176typedef struct Aig_Cut_t_ Aig_Cut_t;
177
178// the cut used to represent node in the AIG
180{
181 Aig_Cut_t * pNext; // the next cut in the table
182 int Cost; // the cost of the cut
183 unsigned uSign; // cut signature
184 int iNode; // the node, for which it is the cut
185 short nCutSize; // the number of bytes in the cut
186 char nLeafMax; // the maximum number of fanins
187 char nFanins; // the current number of fanins
188 int pFanins[0]; // the fanins (followed by the truth table)
189};
190
191// the CNF computation manager
193{
194 // AIG manager
195 Aig_Man_t * pAig; // the input AIG manager
196 Aig_Cut_t ** pCuts; // the cuts for each node in the output manager
197 // parameters
198 int nCutsMax; // the max number of cuts at the node
199 int nLeafMax; // the max number of leaves of a cut
200 int fTruth; // enables truth table computation
201 int fVerbose; // enables verbose output
202 // internal variables
203 int nCutSize; // the number of bytes needed to store one cut
204 int nTruthWords; // the number of truth table words
205 Aig_MmFixed_t * pMemCuts; // memory manager for cuts
206 unsigned * puTemp[4]; // used for the truth table computation
207};
208
209static inline Aig_Cut_t * Aig_ObjCuts( Aig_ManCut_t * p, Aig_Obj_t * pObj ) { return p->pCuts[pObj->Id]; }
210static inline void Aig_ObjSetCuts( Aig_ManCut_t * p, Aig_Obj_t * pObj, Aig_Cut_t * pCuts ) { p->pCuts[pObj->Id] = pCuts; }
211
212static inline int Aig_CutLeaveNum( Aig_Cut_t * pCut ) { return pCut->nFanins; }
213static inline int * Aig_CutLeaves( Aig_Cut_t * pCut ) { return pCut->pFanins; }
214static inline unsigned * Aig_CutTruth( Aig_Cut_t * pCut ) { return (unsigned *)(pCut->pFanins + pCut->nLeafMax); }
215static inline Aig_Cut_t * Aig_CutNext( Aig_Cut_t * pCut ) { return (Aig_Cut_t *)(((char *)pCut) + pCut->nCutSize); }
216
217// iterator over cuts of the node
218#define Aig_ObjForEachCut( p, pObj, pCut, i ) \
219 for ( i = 0, pCut = Aig_ObjCuts(p, pObj); i < p->nCutsMax; i++, pCut = Aig_CutNext(pCut) )
220// iterator over leaves of the cut
221#define Aig_CutForEachLeaf( p, pCut, pLeaf, i ) \
222 for ( i = 0; (i < (int)(pCut)->nFanins) && ((pLeaf) = Aig_ManObj(p, (pCut)->pFanins[i])); i++ )
223
227
228static inline unsigned Aig_ObjCutSign( unsigned ObjId ) { return (1U << (ObjId & 31)); }
229static inline int Aig_WordCountOnes( unsigned uWord )
230{
231 uWord = (uWord & 0x55555555) + ((uWord>>1) & 0x55555555);
232 uWord = (uWord & 0x33333333) + ((uWord>>2) & 0x33333333);
233 uWord = (uWord & 0x0F0F0F0F) + ((uWord>>4) & 0x0F0F0F0F);
234 uWord = (uWord & 0x00FF00FF) + ((uWord>>8) & 0x00FF00FF);
235 return (uWord & 0x0000FFFF) + (uWord>>16);
236}
237static inline int Aig_WordFindFirstBit( unsigned uWord )
238{
239 int i;
240 for ( i = 0; i < 32; i++ )
241 if ( uWord & (1 << i) )
242 return i;
243 return -1;
244}
245
246static inline Aig_Obj_t * Aig_Regular( Aig_Obj_t * p ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) & ~01); }
247static inline Aig_Obj_t * Aig_Not( Aig_Obj_t * p ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) ^ 01); }
248static inline Aig_Obj_t * Aig_NotCond( Aig_Obj_t * p, int c ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) ^ (c)); }
249static inline int Aig_IsComplement( Aig_Obj_t * p ) { return (int)((ABC_PTRUINT_T)(p) & 01); }
250
251static inline int Aig_ManCiNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_CI]; }
252static inline int Aig_ManCoNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_CO]; }
253static inline int Aig_ManBufNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_BUF]; }
254static inline int Aig_ManAndNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]; }
255static inline int Aig_ManExorNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_EXOR]; }
256static inline int Aig_ManNodeNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]+p->nObjs[AIG_OBJ_EXOR]; }
257static inline int Aig_ManGetCost( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]+3*p->nObjs[AIG_OBJ_EXOR]; }
258static inline int Aig_ManObjNum( Aig_Man_t * p ) { return Vec_PtrSize(p->vObjs) - p->nDeleted; }
259static inline int Aig_ManObjNumMax( Aig_Man_t * p ) { return Vec_PtrSize(p->vObjs); }
260static inline int Aig_ManRegNum( Aig_Man_t * p ) { return p->nRegs; }
261static inline int Aig_ManConstrNum( Aig_Man_t * p ) { return p->nConstrs; }
262
263static inline Aig_Obj_t * Aig_ManConst0( Aig_Man_t * p ) { return Aig_Not(p->pConst1); }
264static inline Aig_Obj_t * Aig_ManConst1( Aig_Man_t * p ) { return p->pConst1; }
265static inline Aig_Obj_t * Aig_ManGhost( Aig_Man_t * p ) { return &p->Ghost; }
266static inline Aig_Obj_t * Aig_ManCi( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCis, i); }
267static inline Aig_Obj_t * Aig_ManCo( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCos, i); }
268static inline Aig_Obj_t * Aig_ManLo( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCis, Aig_ManCiNum(p)-Aig_ManRegNum(p)+i); }
269static inline Aig_Obj_t * Aig_ManLi( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCos, Aig_ManCoNum(p)-Aig_ManRegNum(p)+i); }
270static inline Aig_Obj_t * Aig_ManObj( Aig_Man_t * p, int i ) { return p->vObjs ? (Aig_Obj_t *)Vec_PtrEntry(p->vObjs, i) : NULL; }
271
272static inline Aig_Type_t Aig_ObjType( Aig_Obj_t * pObj ) { return (Aig_Type_t)pObj->Type; }
273static inline int Aig_ObjIsNone( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_NONE; }
274static inline int Aig_ObjIsConst1( Aig_Obj_t * pObj ) { assert(!Aig_IsComplement(pObj)); return pObj->Type == AIG_OBJ_CONST1; }
275static inline int Aig_ObjIsCi( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI; }
276static inline int Aig_ObjIsCo( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CO; }
277static inline int Aig_ObjIsBuf( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_BUF; }
278static inline int Aig_ObjIsAnd( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND; }
279static inline int Aig_ObjIsExor( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_EXOR; }
280static inline int Aig_ObjIsNode( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
281static inline int Aig_ObjIsTerm( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI || pObj->Type == AIG_OBJ_CO || pObj->Type == AIG_OBJ_CONST1; }
282static inline int Aig_ObjIsHash( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
283static inline int Aig_ObjIsChoice( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pEquivs && p->pEquivs[pObj->Id] && pObj->nRefs > 0; }
284static inline int Aig_ObjIsCand( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI || pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
285static inline int Aig_ObjCioId( Aig_Obj_t * pObj ) { assert( !Aig_ObjIsNode(pObj) ); return pObj->CioId; }
286static inline int Aig_ObjId( Aig_Obj_t * pObj ) { return pObj->Id; }
287
288static inline int Aig_ObjIsMarkA( Aig_Obj_t * pObj ) { return pObj->fMarkA; }
289static inline void Aig_ObjSetMarkA( Aig_Obj_t * pObj ) { pObj->fMarkA = 1; }
290static inline void Aig_ObjClearMarkA( Aig_Obj_t * pObj ) { pObj->fMarkA = 0; }
291
292static inline void Aig_ObjSetTravId( Aig_Obj_t * pObj, int TravId ) { pObj->TravId = TravId; }
293static inline void Aig_ObjSetTravIdCurrent( Aig_Man_t * p, Aig_Obj_t * pObj ) { pObj->TravId = p->nTravIds; }
294static inline void Aig_ObjSetTravIdPrevious( Aig_Man_t * p, Aig_Obj_t * pObj ) { pObj->TravId = p->nTravIds - 1; }
295static inline int Aig_ObjIsTravIdCurrent( Aig_Man_t * p, Aig_Obj_t * pObj ) { return (int)(pObj->TravId == p->nTravIds); }
296static inline int Aig_ObjIsTravIdPrevious( Aig_Man_t * p, Aig_Obj_t * pObj ) { return (int)(pObj->TravId == p->nTravIds - 1); }
297
298static inline int Aig_ObjPhase( Aig_Obj_t * pObj ) { return pObj->fPhase; }
299static inline int Aig_ObjPhaseReal( Aig_Obj_t * pObj ) { return pObj? Aig_Regular(pObj)->fPhase ^ Aig_IsComplement(pObj) : 1; }
300static inline int Aig_ObjRefs( Aig_Obj_t * pObj ) { return pObj->nRefs; }
301static inline void Aig_ObjRef( Aig_Obj_t * pObj ) { pObj->nRefs++; }
302static inline void Aig_ObjDeref( Aig_Obj_t * pObj ) { assert( pObj->nRefs > 0 ); pObj->nRefs--; }
303static inline void Aig_ObjClearRef( Aig_Obj_t * pObj ) { pObj->nRefs = 0; }
304static inline int Aig_ObjFaninId0( Aig_Obj_t * pObj ) { return pObj->pFanin0? Aig_Regular(pObj->pFanin0)->Id : -1; }
305static inline int Aig_ObjFaninId1( Aig_Obj_t * pObj ) { return pObj->pFanin1? Aig_Regular(pObj->pFanin1)->Id : -1; }
306static inline int Aig_ObjFaninC0( Aig_Obj_t * pObj ) { return Aig_IsComplement(pObj->pFanin0); }
307static inline int Aig_ObjFaninC1( Aig_Obj_t * pObj ) { return Aig_IsComplement(pObj->pFanin1); }
308static inline Aig_Obj_t * Aig_ObjFanin0( Aig_Obj_t * pObj ) { return Aig_Regular(pObj->pFanin0); }
309static inline Aig_Obj_t * Aig_ObjFanin1( Aig_Obj_t * pObj ) { return Aig_Regular(pObj->pFanin1); }
310static inline Aig_Obj_t * Aig_ObjChild0( Aig_Obj_t * pObj ) { return pObj->pFanin0; }
311static inline Aig_Obj_t * Aig_ObjChild1( Aig_Obj_t * pObj ) { return pObj->pFanin1; }
312static inline Aig_Obj_t * Aig_ObjChild0Copy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin0(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj)) : NULL; }
313static inline Aig_Obj_t * Aig_ObjChild1Copy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj)) : NULL; }
314static inline Aig_Obj_t * Aig_ObjChild0Next( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin0(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin0(pObj)->pNext, Aig_ObjFaninC0(pObj)) : NULL; }
315static inline Aig_Obj_t * Aig_ObjChild1Next( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin1(pObj)->pNext, Aig_ObjFaninC1(pObj)) : NULL; }
316static inline void Aig_ObjChild0Flip( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); pObj->pFanin0 = Aig_Not(pObj->pFanin0); }
317static inline void Aig_ObjChild1Flip( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); pObj->pFanin1 = Aig_Not(pObj->pFanin1); }
318static inline Aig_Obj_t * Aig_ObjCopy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return (Aig_Obj_t *)pObj->pData; }
319static inline void Aig_ObjSetCopy( Aig_Obj_t * pObj, Aig_Obj_t * pCopy ) { assert( !Aig_IsComplement(pObj) ); pObj->pData = pCopy; }
320static inline Aig_Obj_t * Aig_ObjRealCopy( Aig_Obj_t * pObj ) { return Aig_NotCond((Aig_Obj_t *)Aig_Regular(pObj)->pData, Aig_IsComplement(pObj));}
321static inline int Aig_ObjToLit( Aig_Obj_t * pObj ) { return Abc_Var2Lit( Aig_ObjId(Aig_Regular(pObj)), Aig_IsComplement(pObj) ); }
322static inline Aig_Obj_t * Aig_ObjFromLit( Aig_Man_t * p,int iLit){ return Aig_NotCond( Aig_ManObj(p, Abc_Lit2Var(iLit)), Abc_LitIsCompl(iLit) ); }
323static inline int Aig_ObjLevel( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return pObj->Level; }
324static inline int Aig_ObjLevelNew( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? 1 + Aig_ObjIsExor(pObj) + Abc_MaxInt(Aig_ObjFanin0(pObj)->Level, Aig_ObjFanin1(pObj)->Level) : Aig_ObjFanin0(pObj)->Level; }
325static inline int Aig_ObjSetLevel( Aig_Obj_t * pObj, int i ) { assert( !Aig_IsComplement(pObj) ); return pObj->Level = i; }
326static inline void Aig_ObjClean( Aig_Obj_t * pObj ) { memset( pObj, 0, sizeof(Aig_Obj_t) ); }
327static inline Aig_Obj_t * Aig_ObjFanout0( Aig_Man_t * p, Aig_Obj_t * pObj ) { assert(p->pFanData && pObj->Id < p->nFansAlloc); return Aig_ManObj(p, p->pFanData[5*pObj->Id] >> 1); }
328static inline Aig_Obj_t * Aig_ObjEquiv( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pEquivs? p->pEquivs[pObj->Id] : NULL; }
329static inline void Aig_ObjSetEquiv( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pEqu ) { assert(p->pEquivs); p->pEquivs[pObj->Id] = pEqu; }
330static inline Aig_Obj_t * Aig_ObjRepr( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pReprs? p->pReprs[pObj->Id] : NULL; }
331static inline void Aig_ObjSetRepr( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pRepr ) { assert(p->pReprs); p->pReprs[pObj->Id] = pRepr; }
332static inline int Aig_ObjWhatFanin( Aig_Obj_t * pObj, Aig_Obj_t * pFanin )
333{
334 if ( Aig_ObjFanin0(pObj) == pFanin ) return 0;
335 if ( Aig_ObjFanin1(pObj) == pFanin ) return 1;
336 assert(0); return -1;
337}
338static inline int Aig_ObjFanoutC( Aig_Obj_t * pObj, Aig_Obj_t * pFanout )
339{
340 if ( Aig_ObjFanin0(pFanout) == pObj ) return Aig_ObjFaninC0(pObj);
341 if ( Aig_ObjFanin1(pFanout) == pObj ) return Aig_ObjFaninC1(pObj);
342 assert(0); return -1;
343}
344
345// create the ghost of the new node
346static inline Aig_Obj_t * Aig_ObjCreateGhost( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1, Aig_Type_t Type )
347{
348 Aig_Obj_t * pGhost;
349 assert( Type != AIG_OBJ_AND || !Aig_ObjIsConst1(Aig_Regular(p0)) );
350 assert( p1 == NULL || !Aig_ObjIsConst1(Aig_Regular(p1)) );
351 assert( Type == AIG_OBJ_CI || Aig_Regular(p0) != Aig_Regular(p1) );
352 pGhost = Aig_ManGhost(p);
353 pGhost->Type = Type;
354 if ( p1 == NULL || Aig_Regular(p0)->Id < Aig_Regular(p1)->Id )
355 {
356 pGhost->pFanin0 = p0;
357 pGhost->pFanin1 = p1;
358 }
359 else
360 {
361 pGhost->pFanin0 = p1;
362 pGhost->pFanin1 = p0;
363 }
364 return pGhost;
365}
366
367// internal memory manager
368static inline Aig_Obj_t * Aig_ManFetchMemory( Aig_Man_t * p )
369{
370 extern char * Aig_MmFixedEntryFetch( Aig_MmFixed_t * p );
371 Aig_Obj_t * pTemp;
372 pTemp = (Aig_Obj_t *)Aig_MmFixedEntryFetch( p->pMemObjs );
373 memset( pTemp, 0, sizeof(Aig_Obj_t) );
374 pTemp->Id = Vec_PtrSize(p->vObjs);
375 Vec_PtrPush( p->vObjs, pTemp );
376 return pTemp;
377}
378static inline void Aig_ManRecycleMemory( Aig_Man_t * p, Aig_Obj_t * pEntry )
379{
380 extern void Aig_MmFixedEntryRecycle( Aig_MmFixed_t * p, char * pEntry );
381 assert( pEntry->nRefs == 0 );
382 pEntry->Type = AIG_OBJ_NONE; // distinquishes a dead node from a live node
383 Aig_MmFixedEntryRecycle( p->pMemObjs, (char *)pEntry );
384 p->nDeleted++;
385}
386
387
391
392// iterator over the combinational inputs
393#define Aig_ManForEachCi( p, pObj, i ) \
394 Vec_PtrForEachEntry( Aig_Obj_t *, p->vCis, pObj, i )
395#define Aig_ManForEachCiReverse( p, pObj, i ) \
396 Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vCis, pObj, i )
397// iterator over the combinational outputs
398#define Aig_ManForEachCo( p, pObj, i ) \
399 Vec_PtrForEachEntry( Aig_Obj_t *, p->vCos, pObj, i )
400#define Aig_ManForEachCoReverse( p, pObj, i ) \
401 Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vCos, pObj, i )
402// iterators over all objects, including those currently not used
403#define Aig_ManForEachObj( p, pObj, i ) \
404 Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
405#define Aig_ManForEachObjReverse( p, pObj, i ) \
406 Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
407// iterators over the objects whose IDs are stored in an array
408#define Aig_ManForEachObjVec( vIds, p, pObj, i ) \
409 for ( i = 0; i < Vec_IntSize(vIds) && (((pObj) = Aig_ManObj(p, Vec_IntEntry(vIds,i))), 1); i++ )
410#define Aig_ManForEachObjVecReverse( vIds, p, pObj, i ) \
411 for ( i = Vec_IntSize(vIds) - 1; i >= 0 && (((pObj) = Aig_ManObj(p, Vec_IntEntry(vIds,i))), 1); i-- )
412// iterators over all nodes
413#define Aig_ManForEachNode( p, pObj, i ) \
414 Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsNode(pObj) ) {} else
415#define Aig_ManForEachNodeReverse( p, pObj, i ) \
416 Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsNode(pObj) ) {} else
417// iterator over all nodes
418#define Aig_ManForEachExor( p, pObj, i ) \
419 Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsExor(pObj) ) {} else
420#define Aig_ManForEachExorReverse( p, pObj, i ) \
421 Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsExor(pObj) ) {} else
422
423// these two procedures are only here for the use inside the iterator
424static inline int Aig_ObjFanout0Int( Aig_Man_t * p, int ObjId ) { assert(ObjId < p->nFansAlloc); return p->pFanData[5*ObjId]; }
425static inline int Aig_ObjFanoutNext( Aig_Man_t * p, int iFan ) { assert(iFan/2 < p->nFansAlloc); return p->pFanData[5*(iFan >> 1) + 3 + (iFan & 1)]; }
426// iterator over the fanouts
427#define Aig_ObjForEachFanout( p, pObj, pFanout, iFan, i ) \
428 for ( assert(p->pFanData), i = 0; (i < (int)(pObj)->nRefs) && \
429 (((iFan) = i? Aig_ObjFanoutNext(p, iFan) : Aig_ObjFanout0Int(p, pObj->Id)), 1) && \
430 (((pFanout) = Aig_ManObj(p, iFan>>1)), 1); i++ )
431
432
436
437// iterator over the primary inputs
438#define Aig_ManForEachPiSeq( p, pObj, i ) \
439 Vec_PtrForEachEntryStop( Aig_Obj_t *, p->vCis, pObj, i, Aig_ManCiNum(p)-Aig_ManRegNum(p) )
440// iterator over the latch outputs
441#define Aig_ManForEachLoSeq( p, pObj, i ) \
442 Vec_PtrForEachEntryStart( Aig_Obj_t *, p->vCis, pObj, i, Aig_ManCiNum(p)-Aig_ManRegNum(p) )
443// iterator over the primary outputs
444#define Aig_ManForEachPoSeq( p, pObj, i ) \
445 Vec_PtrForEachEntryStop( Aig_Obj_t *, p->vCos, pObj, i, Aig_ManCoNum(p)-Aig_ManRegNum(p) )
446// iterator over the latch inputs
447#define Aig_ManForEachLiSeq( p, pObj, i ) \
448 Vec_PtrForEachEntryStart( Aig_Obj_t *, p->vCos, pObj, i, Aig_ManCoNum(p)-Aig_ManRegNum(p) )
449// iterator over the latch input and outputs
450#define Aig_ManForEachLiLoSeq( p, pObjLi, pObjLo, k ) \
451 for ( k = 0; (k < Aig_ManRegNum(p)) && (((pObjLi) = Aig_ManLi(p, k)), 1) \
452 && (((pObjLo)=Aig_ManLo(p, k)), 1); k++ )
453
457
458/*=== aigCheck.c ========================================================*/
459extern ABC_DLL int Aig_ManCheck( Aig_Man_t * p );
460extern void Aig_ManCheckMarkA( Aig_Man_t * p );
461extern void Aig_ManCheckPhase( Aig_Man_t * p );
462/*=== aigCuts.c ========================================================*/
463extern Aig_ManCut_t * Aig_ComputeCuts( Aig_Man_t * pAig, int nCutsMax, int nLeafMax, int fTruth, int fVerbose );
464extern void Aig_ManCutStop( Aig_ManCut_t * p );
465/*=== aigDfs.c ==========================================================*/
466extern int Aig_ManVerifyTopoOrder( Aig_Man_t * p );
467extern Vec_Ptr_t * Aig_ManDfs( Aig_Man_t * p, int fNodesOnly );
468extern Vec_Ptr_t * Aig_ManDfsAll( Aig_Man_t * p );
469extern Vec_Ptr_t * Aig_ManDfsPreorder( Aig_Man_t * p, int fNodesOnly );
471extern Vec_Ptr_t * Aig_ManDfsNodes( Aig_Man_t * p, Aig_Obj_t ** ppNodes, int nNodes );
474extern int Aig_ManLevelNum( Aig_Man_t * p );
475extern int Aig_ManChoiceLevel( Aig_Man_t * p );
476extern int Aig_DagSize( Aig_Obj_t * pObj );
477extern int Aig_SupportSize( Aig_Man_t * p, Aig_Obj_t * pObj );
478extern Vec_Ptr_t * Aig_Support( Aig_Man_t * p, Aig_Obj_t * pObj );
479extern void Aig_SupportNodes( Aig_Man_t * p, Aig_Obj_t ** ppObjs, int nObjs, Vec_Ptr_t * vSupp );
480extern void Aig_ConeUnmark_rec( Aig_Obj_t * pObj );
481extern Aig_Obj_t * Aig_Transfer( Aig_Man_t * pSour, Aig_Man_t * pDest, Aig_Obj_t * pObj, int nVars );
482extern Aig_Obj_t * Aig_Compose( Aig_Man_t * p, Aig_Obj_t * pRoot, Aig_Obj_t * pFunc, int iVar );
483extern void Aig_ObjCollectCut( Aig_Obj_t * pRoot, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vNodes );
484extern int Aig_ObjCollectSuper( Aig_Obj_t * pObj, Vec_Ptr_t * vSuper );
485/*=== aigDup.c ==========================================================*/
486extern Aig_Obj_t * Aig_ManDupSimpleDfs_rec( Aig_Man_t * pNew, Aig_Man_t * p, Aig_Obj_t * pObj );
490extern Aig_Man_t * Aig_ManDupSimpleDfsPart( Aig_Man_t * p, Vec_Ptr_t * vPis, Vec_Ptr_t * vCos );
492extern Aig_Man_t * Aig_ManDupCof( Aig_Man_t * p, int iInput, int Value );
493extern Aig_Man_t * Aig_ManDupTrim( Aig_Man_t * p );
494extern Aig_Man_t * Aig_ManDupExor( Aig_Man_t * p );
495extern Aig_Man_t * Aig_ManDupDfs( Aig_Man_t * p );
496extern Vec_Ptr_t * Aig_ManOrderPios( Aig_Man_t * p, Aig_Man_t * pOrder );
497extern Aig_Man_t * Aig_ManDupDfsGuided( Aig_Man_t * p, Vec_Ptr_t * vPios );
503extern Aig_Man_t * Aig_ManCreateMiter( Aig_Man_t * p1, Aig_Man_t * p2, int fImpl );
504extern Aig_Man_t * Aig_ManDupOrpos( Aig_Man_t * p, int fAddRegs );
505extern Aig_Man_t * Aig_ManDupOneOutput( Aig_Man_t * p, int iPoNum, int fAddRegs );
506extern Aig_Man_t * Aig_ManDupUnsolvedOutputs( Aig_Man_t * p, int fAddRegs );
507extern Aig_Man_t * Aig_ManDupArray( Vec_Ptr_t * vArray );
508extern Aig_Man_t * Aig_ManDupNodes( Aig_Man_t * pMan, Vec_Ptr_t * vArray );
509/*=== aigFanout.c ==========================================================*/
510extern void Aig_ObjAddFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout );
511extern void Aig_ObjRemoveFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout );
512extern void Aig_ManFanoutStart( Aig_Man_t * p );
513extern void Aig_ManFanoutStop( Aig_Man_t * p );
514/*=== aigFrames.c ==========================================================*/
515extern Aig_Man_t * Aig_ManFrames( Aig_Man_t * pAig, int nFs, int fInit, int fOuts, int fRegs, int fEnlarge, Aig_Obj_t *** ppObjMap );
516/*=== aigMan.c ==========================================================*/
517extern Aig_Man_t * Aig_ManStart( int nNodesMax );
519extern Aig_Man_t * Aig_ManExtractMiter( Aig_Man_t * p, Aig_Obj_t * pNode1, Aig_Obj_t * pNode2 );
520extern void Aig_ManStop( Aig_Man_t * p );
521extern void Aig_ManStopP( Aig_Man_t ** p );
522extern int Aig_ManCleanup( Aig_Man_t * p );
523extern int Aig_ManAntiCleanup( Aig_Man_t * p );
524extern int Aig_ManCiCleanup( Aig_Man_t * p );
525extern int Aig_ManCoCleanup( Aig_Man_t * p );
526extern void Aig_ManPrintStats( Aig_Man_t * p );
527extern void Aig_ManReportImprovement( Aig_Man_t * p, Aig_Man_t * pNew );
528extern void Aig_ManSetRegNum( Aig_Man_t * p, int nRegs );
529extern void Aig_ManFlipFirstPo( Aig_Man_t * p );
530extern void * Aig_ManReleaseData( Aig_Man_t * p );
531/*=== aigMem.c ==========================================================*/
534/*=== aigMffc.c ==========================================================*/
535extern int Aig_NodeRef_rec( Aig_Obj_t * pNode, unsigned LevelMin );
536extern int Aig_NodeDeref_rec( Aig_Obj_t * pNode, unsigned LevelMin, float * pPower, float * pProbs );
537extern int Aig_NodeMffcSupp( Aig_Man_t * p, Aig_Obj_t * pNode, int LevelMin, Vec_Ptr_t * vSupp );
538extern int Aig_NodeMffcLabel( Aig_Man_t * p, Aig_Obj_t * pNode, float * pPower );
539extern int Aig_NodeMffcLabelCut( Aig_Man_t * p, Aig_Obj_t * pNode, Vec_Ptr_t * vLeaves );
540extern int Aig_NodeMffcExtendCut( Aig_Man_t * p, Aig_Obj_t * pNode, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vResult );
541/*=== aigObj.c ==========================================================*/
543extern Aig_Obj_t * Aig_ObjCreateCo( Aig_Man_t * p, Aig_Obj_t * pDriver );
544extern Aig_Obj_t * Aig_ObjCreate( Aig_Man_t * p, Aig_Obj_t * pGhost );
545extern void Aig_ObjConnect( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFan0, Aig_Obj_t * pFan1 );
546extern void Aig_ObjDisconnect( Aig_Man_t * p, Aig_Obj_t * pObj );
547extern void Aig_ObjDelete( Aig_Man_t * p, Aig_Obj_t * pObj );
548extern void Aig_ObjDelete_rec( Aig_Man_t * p, Aig_Obj_t * pObj, int fFreeTop );
549extern void Aig_ObjDeletePo( Aig_Man_t * p, Aig_Obj_t * pObj );
550extern void Aig_ObjPrint( Aig_Man_t * p, Aig_Obj_t * pObj );
551extern void Aig_ObjPatchFanin0( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFaninNew );
552extern void Aig_ObjReplace( Aig_Man_t * p, Aig_Obj_t * pObjOld, Aig_Obj_t * pObjNew, int fUpdateLevel );
553/*=== aigOper.c =========================================================*/
554extern Aig_Obj_t * Aig_IthVar( Aig_Man_t * p, int i );
555extern Aig_Obj_t * Aig_Oper( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1, Aig_Type_t Type );
556extern Aig_Obj_t * Aig_And( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
557extern Aig_Obj_t * Aig_Or( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
558extern Aig_Obj_t * Aig_Exor( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
559extern Aig_Obj_t * Aig_Mux( Aig_Man_t * p, Aig_Obj_t * pC, Aig_Obj_t * p1, Aig_Obj_t * p0 );
560extern Aig_Obj_t * Aig_Maj( Aig_Man_t * p, Aig_Obj_t * pA, Aig_Obj_t * pB, Aig_Obj_t * pC );
561extern Aig_Obj_t * Aig_Multi( Aig_Man_t * p, Aig_Obj_t ** pArgs, int nArgs, Aig_Type_t Type );
562extern Aig_Obj_t * Aig_Miter( Aig_Man_t * p, Vec_Ptr_t * vPairs );
563extern Aig_Obj_t * Aig_MiterTwo( Aig_Man_t * p, Vec_Ptr_t * vNodes1, Vec_Ptr_t * vNodes2 );
564extern Aig_Obj_t * Aig_CreateAnd( Aig_Man_t * p, int nVars );
565extern Aig_Obj_t * Aig_CreateOr( Aig_Man_t * p, int nVars );
566extern Aig_Obj_t * Aig_CreateExor( Aig_Man_t * p, int nVars );
567/*=== aigOrder.c =========================================================*/
568extern void Aig_ManOrderStart( Aig_Man_t * p );
569extern void Aig_ManOrderStop( Aig_Man_t * p );
570extern void Aig_ObjOrderInsert( Aig_Man_t * p, int ObjId );
571extern void Aig_ObjOrderRemove( Aig_Man_t * p, int ObjId );
572extern void Aig_ObjOrderAdvance( Aig_Man_t * p );
573/*=== aigPart.c =========================================================*/
577extern Vec_Ptr_t * Aig_ManPartitionSmart( Aig_Man_t * p, int nPartSizeLimit, int fVerbose, Vec_Ptr_t ** pvPartSupps );
578extern Vec_Ptr_t * Aig_ManPartitionSmartRegisters( Aig_Man_t * pAig, int nSuppSizeLimit, int fVerbose );
579extern Vec_Ptr_t * Aig_ManPartitionNaive( Aig_Man_t * p, int nPartSize );
580extern Vec_Ptr_t * Aig_ManMiterPartitioned( Aig_Man_t * p1, Aig_Man_t * p2, int nPartSize, int fSmart );
581extern Aig_Man_t * Aig_ManChoicePartitioned( Vec_Ptr_t * vAigs, int nPartSize, int nConfMax, int nLevelMax, int fVerbose );
582extern Aig_Man_t * Aig_ManFraigPartitioned( Aig_Man_t * pAig, int nPartSize, int nConfMax, int nLevelMax, int fVerbose );
583extern Aig_Man_t * Aig_ManChoiceConstructive( Vec_Ptr_t * vAigs, int fVerbose );
584/*=== aigPartReg.c =========================================================*/
585extern Vec_Ptr_t * Aig_ManRegPartitionSimple( Aig_Man_t * pAig, int nPartSize, int nOverSize );
586extern void Aig_ManPartDivide( Vec_Ptr_t * vResult, Vec_Int_t * vDomain, int nPartSize, int nOverSize );
587extern Vec_Ptr_t * Aig_ManRegPartitionSmart( Aig_Man_t * pAig, int nPartSize );
588extern Aig_Man_t * Aig_ManRegCreatePart( Aig_Man_t * pAig, Vec_Int_t * vPart, int * pnCountPis, int * pnCountRegs, int ** ppMapBack );
589extern Vec_Ptr_t * Aig_ManRegProjectOnehots( Aig_Man_t * pAig, Aig_Man_t * pPart, Vec_Ptr_t * vOnehots, int fVerbose );
590/*=== aigRepr.c =========================================================*/
591extern void Aig_ManReprStart( Aig_Man_t * p, int nIdMax );
592extern void Aig_ManReprStop( Aig_Man_t * p );
593extern void Aig_ObjCreateRepr( Aig_Man_t * p, Aig_Obj_t * pNode1, Aig_Obj_t * pNode2 );
594extern void Aig_ManTransferRepr( Aig_Man_t * pNew, Aig_Man_t * p );
595extern Aig_Man_t * Aig_ManDupRepr( Aig_Man_t * p, int fOrdered );
597extern int Aig_ManCountReprs( Aig_Man_t * p );
598extern Aig_Man_t * Aig_ManRehash( Aig_Man_t * p );
599extern int Aig_ObjCheckTfi( Aig_Man_t * p, Aig_Obj_t * pNew, Aig_Obj_t * pOld );
600extern void Aig_ManMarkValidChoices( Aig_Man_t * p );
601extern int Aig_TransferMappedClasses( Aig_Man_t * pAig, Aig_Man_t * pPart, int * pMapBack );
602/*=== aigRet.c ========================================================*/
603extern Aig_Man_t * Rtm_ManRetime( Aig_Man_t * p, int fForward, int nStepsMax, int fVerbose );
604/*=== aigRetF.c ========================================================*/
605extern Aig_Man_t * Aig_ManRetimeFrontier( Aig_Man_t * p, int nStepsMax );
606/*=== aigScl.c ==========================================================*/
607extern Aig_Man_t * Aig_ManRemap( Aig_Man_t * p, Vec_Ptr_t * vMap );
608extern int Aig_ManSeqCleanup( Aig_Man_t * p );
609extern int Aig_ManSeqCleanupBasic( Aig_Man_t * p );
610extern int Aig_ManCountMergeRegs( Aig_Man_t * p );
611extern Aig_Man_t * Aig_ManReduceLaches( Aig_Man_t * p, int fVerbose );
612extern void Aig_ManComputeSccs( Aig_Man_t * p );
613extern Aig_Man_t * Aig_ManScl( Aig_Man_t * pAig, int fLatchConst, int fLatchEqual, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose );
614/*=== aigShow.c ========================================================*/
615extern void Aig_ManShow( Aig_Man_t * pMan, int fHaig, Vec_Ptr_t * vBold );
616/*=== aigTable.c ========================================================*/
617extern Aig_Obj_t * Aig_TableLookup( Aig_Man_t * p, Aig_Obj_t * pGhost );
618extern Aig_Obj_t * Aig_TableLookupTwo( Aig_Man_t * p, Aig_Obj_t * pFanin0, Aig_Obj_t * pFanin1 );
619extern void Aig_TableInsert( Aig_Man_t * p, Aig_Obj_t * pObj );
620extern void Aig_TableDelete( Aig_Man_t * p, Aig_Obj_t * pObj );
621extern int Aig_TableCountEntries( Aig_Man_t * p );
622extern void Aig_TableProfile( Aig_Man_t * p );
623extern void Aig_TableClear( Aig_Man_t * p );
624/*=== aigTiming.c ========================================================*/
625extern void Aig_ObjClearReverseLevel( Aig_Man_t * p, Aig_Obj_t * pObj );
626extern int Aig_ObjRequiredLevel( Aig_Man_t * p, Aig_Obj_t * pObj );
627extern void Aig_ManStartReverseLevels( Aig_Man_t * p, int nMaxLevelIncrease );
628extern void Aig_ManStopReverseLevels( Aig_Man_t * p );
629extern void Aig_ManUpdateLevel( Aig_Man_t * p, Aig_Obj_t * pObjNew );
630extern void Aig_ManUpdateReverseLevel( Aig_Man_t * p, Aig_Obj_t * pObjNew );
631extern void Aig_ManVerifyLevel( Aig_Man_t * p );
632extern void Aig_ManVerifyReverseLevel( Aig_Man_t * p );
633/*=== aigTruth.c ========================================================*/
634extern unsigned * Aig_ManCutTruth( Aig_Obj_t * pRoot, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vNodes, Vec_Ptr_t * vTruthElem, Vec_Ptr_t * vTruthStore );
635/*=== aigTsim.c ========================================================*/
636extern Aig_Man_t * Aig_ManConstReduce( Aig_Man_t * p, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose );
637/*=== aigUtil.c =========================================================*/
638extern void Aig_ManIncrementTravId( Aig_Man_t * p );
639extern char * Aig_TimeStamp();
640extern int Aig_ManHasNoGaps( Aig_Man_t * p );
641extern int Aig_ManLevels( Aig_Man_t * p );
642extern void Aig_ManResetRefs( Aig_Man_t * p );
643extern void Aig_ManCleanMarkA( Aig_Man_t * p );
644extern void Aig_ManCleanMarkB( Aig_Man_t * p );
645extern void Aig_ManCleanMarkAB( Aig_Man_t * p );
646extern void Aig_ManCleanData( Aig_Man_t * p );
647extern void Aig_ObjCleanData_rec( Aig_Obj_t * pObj );
648extern void Aig_ManCleanNext( Aig_Man_t * p );
649extern void Aig_ObjCollectMulti( Aig_Obj_t * pFunc, Vec_Ptr_t * vSuper );
650extern int Aig_ObjIsMuxType( Aig_Obj_t * pObj );
651extern int Aig_ObjRecognizeExor( Aig_Obj_t * pObj, Aig_Obj_t ** ppFan0, Aig_Obj_t ** ppFan1 );
652extern Aig_Obj_t * Aig_ObjRecognizeMux( Aig_Obj_t * pObj, Aig_Obj_t ** ppObjT, Aig_Obj_t ** ppObjE );
653extern Aig_Obj_t * Aig_ObjReal_rec( Aig_Obj_t * pObj );
654extern int Aig_ObjCompareIdIncrease( Aig_Obj_t ** pp1, Aig_Obj_t ** pp2 );
655extern void Aig_ObjPrintEqn( FILE * pFile, Aig_Obj_t * pObj, Vec_Vec_t * vLevels, int Level );
656extern void Aig_ObjPrintVerilog( FILE * pFile, Aig_Obj_t * pObj, Vec_Vec_t * vLevels, int Level );
657extern void Aig_ObjPrintVerbose( Aig_Obj_t * pObj, int fHaig );
658extern void Aig_ManPrintVerbose( Aig_Man_t * p, int fHaig );
659extern void Aig_ManDump( Aig_Man_t * p );
660extern void Aig_ManDumpBlif( Aig_Man_t * p, char * pFileName, Vec_Ptr_t * vPiNames, Vec_Ptr_t * vPoNames );
661extern void Aig_ManDumpVerilog( Aig_Man_t * p, char * pFileName );
662extern void Aig_ManSetCioIds( Aig_Man_t * p );
663extern void Aig_ManCleanCioIds( Aig_Man_t * p );
664extern int Aig_ManChoiceNum( Aig_Man_t * p );
665extern char * Aig_FileNameGenericAppend( char * pBase, char * pSuffix );
666extern unsigned Aig_ManRandom( int fReset );
667extern word Aig_ManRandom64( int fReset );
668extern void Aig_ManRandomInfo( Vec_Ptr_t * vInfo, int iInputStart, int iWordStart, int iWordStop );
669extern void Aig_NodeUnionLists( Vec_Ptr_t * vArr1, Vec_Ptr_t * vArr2, Vec_Ptr_t * vArr );
670extern void Aig_NodeIntersectLists( Vec_Ptr_t * vArr1, Vec_Ptr_t * vArr2, Vec_Ptr_t * vArr );
671extern void Aig_ManSetPhase( Aig_Man_t * pAig );
672extern Vec_Ptr_t * Aig_ManMuxesCollect( Aig_Man_t * pAig );
673extern void Aig_ManMuxesDeref( Aig_Man_t * pAig, Vec_Ptr_t * vMuxes );
674extern void Aig_ManMuxesRef( Aig_Man_t * pAig, Vec_Ptr_t * vMuxes );
675extern void Aig_ManInvertConstraints( Aig_Man_t * pAig );
676
677/*=== aigWin.c =========================================================*/
678extern void Aig_ManFindCut( Aig_Obj_t * pRoot, Vec_Ptr_t * vFront, Vec_Ptr_t * vVisited, int nSizeLimit, int nFanoutLimit );
679
680/*=== aigMem.c ===========================================================*/
681// fixed-size-block memory manager
682extern Aig_MmFixed_t * Aig_MmFixedStart( int nEntrySize, int nEntriesMax );
683extern void Aig_MmFixedStop( Aig_MmFixed_t * p, int fVerbose );
684extern char * Aig_MmFixedEntryFetch( Aig_MmFixed_t * p );
685extern void Aig_MmFixedEntryRecycle( Aig_MmFixed_t * p, char * pEntry );
686extern void Aig_MmFixedRestart( Aig_MmFixed_t * p );
689// flexible-size-block memory manager
691extern void Aig_MmFlexStop( Aig_MmFlex_t * p, int fVerbose );
692extern char * Aig_MmFlexEntryFetch( Aig_MmFlex_t * p, int nBytes );
693extern void Aig_MmFlexRestart( Aig_MmFlex_t * p );
695// hierarchical memory manager
696extern Aig_MmStep_t * Aig_MmStepStart( int nSteps );
697extern void Aig_MmStepStop( Aig_MmStep_t * p, int fVerbose );
698extern char * Aig_MmStepEntryFetch( Aig_MmStep_t * p, int nBytes );
699extern void Aig_MmStepEntryRecycle( Aig_MmStep_t * p, char * pEntry, int nBytes );
701
702
703
705
706
707
708#endif
709
713
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
#define ABC_DLL
Definition abcapis.h:57
void Aig_ObjPrintVerilog(FILE *pFile, Aig_Obj_t *pObj, Vec_Vec_t *vLevels, int Level)
Definition aigUtil.c:566
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition aigFanout.c:56
Aig_Obj_t * Aig_ObjRecognizeMux(Aig_Obj_t *pObj, Aig_Obj_t **ppObjT, Aig_Obj_t **ppObjE)
Definition aigUtil.c:387
int Aig_ManCoCleanup(Aig_Man_t *p)
Definition aigMan.c:345
int Aig_MmStepReadMemUsage(Aig_MmStep_t *p)
Definition aigMem.c:598
void Aig_ObjCollectCut(Aig_Obj_t *pRoot, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes)
Definition aigDfs.c:1031
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Definition aigRepr.c:267
Aig_Obj_t * Aig_ObjCreate(Aig_Man_t *p, Aig_Obj_t *pGhost)
Definition aigObj.c:89
int Aig_NodeDeref_rec(Aig_Obj_t *pNode, unsigned LevelMin, float *pPower, float *pProbs)
DECLARATIONS ///.
Definition aigMffc.c:45
Aig_Man_t * Aig_ManDupSimpleDfsPart(Aig_Man_t *p, Vec_Ptr_t *vPis, Vec_Ptr_t *vCos)
Definition aigDup.c:240
Vec_Ptr_t * Aig_ManOrderPios(Aig_Man_t *p, Aig_Man_t *pOrder)
Definition aigDup.c:626
Aig_Obj_t * Aig_CreateAnd(Aig_Man_t *p, int nVars)
Definition aigOper.c:474
Aig_Man_t * Aig_ManDupOrdered(Aig_Man_t *p)
Definition aigDup.c:277
Aig_Man_t * Aig_ManRehash(Aig_Man_t *p)
Definition aigRepr.c:454
void Aig_ManPrintVerbose(Aig_Man_t *p, int fHaig)
Definition aigUtil.c:698
int Aig_ManChoiceNum(Aig_Man_t *p)
Definition aigUtil.c:1020
void Aig_ManCleanMarkB(Aig_Man_t *p)
Definition aigUtil.c:167
int Aig_ManSeqCleanup(Aig_Man_t *p)
Definition aigScl.c:158
Vec_Ptr_t * Aig_ManDfsReverse(Aig_Man_t *p)
Definition aigDfs.c:472
Vec_Ptr_t * Aig_ManDfsChoices(Aig_Man_t *p)
Definition aigDfs.c:405
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
Definition aigMan.c:438
void Aig_MmFlexRestart(Aig_MmFlex_t *p)
Definition aigMem.c:415
Aig_Man_t * Aig_ManDupExor(Aig_Man_t *p)
Definition aigDup.c:462
void Aig_ObjPrintEqn(FILE *pFile, Aig_Obj_t *pObj, Vec_Vec_t *vLevels, int Level)
Definition aigUtil.c:519
void Aig_MmFlexStop(Aig_MmFlex_t *p, int fVerbose)
Definition aigMem.c:337
int Aig_MmFixedReadMemUsage(Aig_MmFixed_t *p)
Definition aigMem.c:271
char * Aig_MmStepEntryFetch(Aig_MmStep_t *p, int nBytes)
Definition aigMem.c:538
Aig_Man_t * Aig_ManDupSimple(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigDup.c:46
void Aig_ManSetCioIds(Aig_Man_t *p)
Definition aigUtil.c:978
Aig_Man_t * Aig_ManDupLevelized(Aig_Man_t *p)
Definition aigDup.c:763
int Aig_ManLevelNum(Aig_Man_t *p)
Definition aigDfs.c:500
void Aig_ManCutStop(Aig_ManCut_t *p)
Definition aigCuts.c:86
Aig_Man_t * Aig_ManDupDfs(Aig_Man_t *p)
Definition aigDup.c:563
int Aig_ObjCheckTfi(Aig_Man_t *p, Aig_Obj_t *pNew, Aig_Obj_t *pOld)
Definition aigRepr.c:435
int Aig_ManVerifyTopoOrder(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigDfs.c:46
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
Definition aigRepr.c:45
int Aig_ManHasNoGaps(Aig_Man_t *p)
Definition aigUtil.c:86
Vec_Ptr_t * Aig_ManPartitionNaive(Aig_Man_t *p, int nPartSize)
Definition aigPart.c:941
Aig_Man_t * Aig_ManDupSimpleDfs(Aig_Man_t *p)
Definition aigDup.c:184
void Aig_ManCleanMarkA(Aig_Man_t *p)
Definition aigUtil.c:148
int Aig_ObjRecognizeExor(Aig_Obj_t *pObj, Aig_Obj_t **ppFan0, Aig_Obj_t **ppFan1)
Definition aigUtil.c:343
void Aig_ObjOrderInsert(Aig_Man_t *p, int ObjId)
Definition aigOrder.c:95
Vec_Ptr_t * Aig_ManSupportsRegisters(Aig_Man_t *p)
Definition aigPart.c:418
void Aig_ManInvertConstraints(Aig_Man_t *pAig)
Definition aigUtil.c:1561
void Aig_ManFanoutStop(Aig_Man_t *p)
Definition aigFanout.c:89
Aig_Man_t * Aig_ManDupTrim(Aig_Man_t *p)
Definition aigDup.c:413
Aig_Obj_t * Aig_Maj(Aig_Man_t *p, Aig_Obj_t *pA, Aig_Obj_t *pB, Aig_Obj_t *pC)
Definition aigOper.c:376
int Aig_NodeMffcExtendCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vResult)
Definition aigMffc.c:265
char * Aig_MmFixedEntryFetch(Aig_MmFixed_t *p)
Definition aigMem.c:161
void Aig_ObjDeletePo(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigObj.c:261
Aig_Man_t * Aig_ManDupArray(Vec_Ptr_t *vArray)
Definition aigDup.c:1255
char * Aig_MmFlexEntryFetch(Aig_MmFlex_t *p, int nBytes)
Definition aigMem.c:366
void Aig_ManStopMemory(Aig_Man_t *p)
void Aig_ObjCreateRepr(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
Definition aigRepr.c:83
void Aig_ManStop(Aig_Man_t *p)
Definition aigMan.c:187
int Aig_NodeRef_rec(Aig_Obj_t *pNode, unsigned LevelMin)
Definition aigMffc.c:86
void Aig_ObjDisconnect(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigObj.c:171
Aig_Man_t * Aig_ManReduceLaches(Aig_Man_t *p, int fVerbose)
Definition aigScl.c:455
Aig_Obj_t * Aig_Transfer(Aig_Man_t *pSour, Aig_Man_t *pDest, Aig_Obj_t *pObj, int nVars)
Definition aigDfs.c:918
Aig_Obj_t * Aig_ManDupSimpleDfs_rec(Aig_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigDup.c:157
Aig_Man_t * Rtm_ManRetime(Aig_Man_t *p, int fForward, int nStepsMax, int fVerbose)
Definition aigRet.c:834
void Aig_SupportNodes(Aig_Man_t *p, Aig_Obj_t **ppObjs, int nObjs, Vec_Ptr_t *vSupp)
Definition aigDfs.c:868
int Aig_ManSeqCleanupBasic(Aig_Man_t *p)
Definition aigScl.c:257
void Aig_ManStartReverseLevels(Aig_Man_t *p, int nMaxLevelIncrease)
Definition aigTiming.c:142
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigUtil.c:44
Aig_Man_t * Aig_ManChoiceConstructive(Vec_Ptr_t *vAigs, int fVerbose)
Definition aigPart.c:1564
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:104
Aig_Man_t * Aig_ManFraigPartitioned(Aig_Man_t *pAig, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
Definition aigPart.c:1379
Aig_Man_t * Aig_ManConstReduce(Aig_Man_t *p, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose)
Definition aigTsim.c:498
Aig_Man_t * Aig_ManDupRepres(Aig_Man_t *p)
Definition aigDup.c:920
void Aig_ObjConnect(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFan0, Aig_Obj_t *pFan1)
Definition aigObj.c:126
void Aig_ManStartMemory(Aig_Man_t *p)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Definition aigObj.c:66
int Aig_ManCiCleanup(Aig_Man_t *p)
Definition aigMan.c:314
Aig_Obj_t * Aig_Mux(Aig_Man_t *p, Aig_Obj_t *pC, Aig_Obj_t *p1, Aig_Obj_t *p0)
Definition aigOper.c:317
Aig_Obj_t * Aig_Oper(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1, Aig_Type_t Type)
Definition aigOper.c:83
Aig_Man_t * Aig_ManStartFrom(Aig_Man_t *p)
Definition aigMan.c:92
int Aig_MmFixedReadMaxEntriesUsed(Aig_MmFixed_t *p)
Definition aigMem.c:287
void Aig_ManCleanNext(Aig_Man_t *p)
Definition aigUtil.c:224
void Aig_ManVerifyReverseLevel(Aig_Man_t *p)
Definition aigTiming.c:334
void Aig_ManFindCut(Aig_Obj_t *pRoot, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited, int nSizeLimit, int nFanoutLimit)
Definition aigWin.c:145
void Aig_ConeUnmark_rec(Aig_Obj_t *pObj)
Definition aigDfs.c:704
void Aig_ManCleanCioIds(Aig_Man_t *p)
Definition aigUtil.c:999
int Aig_ObjCollectSuper(Aig_Obj_t *pObj, Vec_Ptr_t *vSuper)
Definition aigDfs.c:1111
int Aig_SupportSize(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigDfs.c:772
int Aig_ManAntiCleanup(Aig_Man_t *p)
Definition aigMan.c:293
void Aig_ManStopP(Aig_Man_t **p)
Definition aigMan.c:246
void Aig_ManDumpVerilog(Aig_Man_t *p, char *pFileName)
Definition aigUtil.c:861
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
void Aig_NodeIntersectLists(Vec_Ptr_t *vArr1, Vec_Ptr_t *vArr2, Vec_Ptr_t *vArr)
Definition aigUtil.c:1277
void Aig_ObjPrintVerbose(Aig_Obj_t *pObj, int fHaig)
Definition aigUtil.c:653
void Aig_ManStopReverseLevels(Aig_Man_t *p)
Definition aigTiming.c:175
void Aig_ManMuxesDeref(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition aigUtil.c:1501
void Aig_TableClear(Aig_Man_t *p)
Definition aigTable.c:265
void Aig_ManReportImprovement(Aig_Man_t *p, Aig_Man_t *pNew)
Definition aigMan.c:415
void Aig_ManMarkValidChoices(Aig_Man_t *p)
Definition aigRepr.c:481
int Aig_ManLevels(Aig_Man_t *p)
Definition aigUtil.c:102
Aig_Obj_t * Aig_Miter(Aig_Man_t *p, Vec_Ptr_t *vPairs)
Definition aigOper.c:431
void Aig_ManPartDivide(Vec_Ptr_t *vResult, Vec_Int_t *vDomain, int nPartSize, int nOverSize)
Definition aigPartReg.c:513
void Aig_TableInsert(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigTable.c:173
Aig_Man_t * Aig_ManDupDfsGuided(Aig_Man_t *p, Vec_Ptr_t *vPios)
Definition aigDup.c:694
int Aig_ManCountMergeRegs(Aig_Man_t *p)
Definition aigScl.c:310
Aig_Man_t * Aig_ManDupCof(Aig_Man_t *p, int iInput, int Value)
Definition aigDup.c:345
struct Aig_MmFlex_t_ Aig_MmFlex_t
Definition aig.h:53
Aig_Obj_t * Aig_Exor(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:220
struct Aig_Cut_t_ Aig_Cut_t
Definition aig.h:176
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
Definition aigMan.c:47
Aig_Man_t * Aig_ManRegCreatePart(Aig_Man_t *pAig, Vec_Int_t *vPart, int *pnCountPis, int *pnCountRegs, int **ppMapBack)
Definition aigPartReg.c:308
int Aig_ObjCompareIdIncrease(Aig_Obj_t **pp1, Aig_Obj_t **pp2)
Definition aigUtil.c:496
Vec_Ptr_t * Aig_ManPartitionSmart(Aig_Man_t *p, int nPartSizeLimit, int fVerbose, Vec_Ptr_t **pvPartSupps)
Definition aigPart.c:686
Aig_Man_t * Aig_ManFrames(Aig_Man_t *pAig, int nFs, int fInit, int fOuts, int fRegs, int fEnlarge, Aig_Obj_t ***ppObjMap)
FUNCTION DEFINITIONS ///.
Definition aigFrames.c:51
Aig_Man_t * Aig_ManDupWithoutPos(Aig_Man_t *p)
Definition aigDup.c:835
Aig_Man_t * Aig_ManChoicePartitioned(Vec_Ptr_t *vAigs, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
Definition aigPart.c:1247
void Aig_ObjDelete_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int fFreeTop)
Definition aigObj.c:232
void Aig_ManPrintStats(Aig_Man_t *p)
Definition aigMan.c:379
unsigned * Aig_ManCutTruth(Aig_Obj_t *pRoot, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes, Vec_Ptr_t *vTruthElem, Vec_Ptr_t *vTruthStore)
Definition aigTruth.c:80
Aig_ManCut_t * Aig_ComputeCuts(Aig_Man_t *pAig, int nCutsMax, int nLeafMax, int fTruth, int fVerbose)
Definition aigCuts.c:631
Aig_Obj_t * Aig_Compose(Aig_Man_t *p, Aig_Obj_t *pRoot, Aig_Obj_t *pFunc, int iVar)
Definition aigDfs.c:980
Vec_Ptr_t * Aig_ManRegPartitionSimple(Aig_Man_t *pAig, int nPartSize, int nOverSize)
Definition aigPartReg.c:474
Vec_Ptr_t * Aig_ManPartitionSmartRegisters(Aig_Man_t *pAig, int nSuppSizeLimit, int fVerbose)
Definition aigPart.c:811
int Aig_NodeMffcLabel(Aig_Man_t *p, Aig_Obj_t *pNode, float *pPower)
Definition aigMffc.c:211
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
int Aig_ManCleanup(Aig_Man_t *p)
Definition aigMan.c:265
struct Aig_ManCut_t_ Aig_ManCut_t
Definition aig.h:175
void Aig_ManReprStop(Aig_Man_t *p)
Definition aigRepr.c:65
Aig_Man_t * Aig_ManRemap(Aig_Man_t *p, Vec_Ptr_t *vMap)
DECLARATIONS ///.
Definition aigScl.c:46
void Aig_ManMuxesRef(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition aigUtil.c:1531
void Aig_ObjPatchFanin0(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFaninNew)
Definition aigObj.c:282
void Aig_ObjOrderRemove(Aig_Man_t *p, int ObjId)
Definition aigOrder.c:130
void Aig_ManFlipFirstPo(Aig_Man_t *p)
Definition aigMan.c:457
void Aig_ObjClearReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigTiming.c:83
Vec_Ptr_t * Aig_ManSupportsInverse(Aig_Man_t *p)
Definition aigPart.c:385
Aig_Man_t * Aig_ManRetimeFrontier(Aig_Man_t *p, int nStepsMax)
Definition aigRetF.c:125
void Aig_ManCleanMarkAB(Aig_Man_t *p)
Definition aigUtil.c:186
Vec_Vec_t * Aig_ManLevelize(Aig_Man_t *p)
Definition aigDfs.c:321
void Aig_ObjOrderAdvance(Aig_Man_t *p)
Definition aigOrder.c:162
Aig_Man_t * Aig_ManDupNodes(Aig_Man_t *pMan, Vec_Ptr_t *vArray)
Definition aigDup.c:1302
void Aig_ManResetRefs(Aig_Man_t *p)
Definition aigUtil.c:122
Aig_Man_t * Aig_ManDupSimpleWithHints(Aig_Man_t *p, Vec_Int_t *vHints)
Definition aigDup.c:107
void Aig_ManVerifyLevel(Aig_Man_t *p)
Definition aigTiming.c:307
void Aig_ObjReplace(Aig_Man_t *p, Aig_Obj_t *pObjOld, Aig_Obj_t *pObjNew, int fUpdateLevel)
Definition aigObj.c:467
char * Aig_TimeStamp()
Definition aigUtil.c:62
void Aig_NodeUnionLists(Vec_Ptr_t *vArr1, Vec_Ptr_t *vArr2, Vec_Ptr_t *vArr)
Definition aigUtil.c:1238
Aig_MmFixed_t * Aig_MmFixedStart(int nEntrySize, int nEntriesMax)
FUNCTION DEFINITIONS ///.
Definition aigMem.c:96
Vec_Ptr_t * Aig_ManDfs(Aig_Man_t *p, int fNodesOnly)
Definition aigDfs.c:145
Aig_Obj_t * Aig_CreateExor(Aig_Man_t *p, int nVars)
Definition aigOper.c:516
Aig_Man_t * Aig_ManDupRepresDfs(Aig_Man_t *p)
Definition aigDup.c:995
Vec_Ptr_t * Aig_ManDfsNodes(Aig_Man_t *p, Aig_Obj_t **ppNodes, int nNodes)
Definition aigDfs.c:347
void Aig_ObjAddFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Definition aigFanout.c:107
void Aig_ManOrderStop(Aig_Man_t *p)
Definition aigOrder.c:76
Aig_Obj_t * Aig_TableLookup(Aig_Man_t *p, Aig_Obj_t *pGhost)
Definition aigTable.c:116
Aig_Man_t * Aig_ManDupUnsolvedOutputs(Aig_Man_t *p, int fAddRegs)
Definition aigDup.c:1199
void * Aig_ManReleaseData(Aig_Man_t *p)
Definition aigMan.c:473
Aig_Obj_t * Aig_Multi(Aig_Man_t *p, Aig_Obj_t **pArgs, int nArgs, Aig_Type_t Type)
Definition aigOper.c:413
int Aig_NodeMffcLabelCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves)
Definition aigMffc.c:236
int Aig_ManCountReprs(Aig_Man_t *p)
Definition aigRepr.c:378
int Aig_TransferMappedClasses(Aig_Man_t *pAig, Aig_Man_t *pPart, int *pMapBack)
Definition aigRepr.c:533
void Aig_MmStepStop(Aig_MmStep_t *p, int fVerbose)
Definition aigMem.c:511
void Aig_ObjCollectMulti(Aig_Obj_t *pFunc, Vec_Ptr_t *vSuper)
Definition aigUtil.c:289
int Aig_ObjRequiredLevel(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigTiming.c:100
Vec_Ptr_t * Aig_ManRegPartitionSmart(Aig_Man_t *pAig, int nPartSize)
Definition aigPartReg.c:413
Vec_Ptr_t * Aig_ManMiterPartitioned(Aig_Man_t *p1, Aig_Man_t *p2, int nPartSize, int fSmart)
Definition aigPart.c:1189
Aig_Man_t * Aig_ManDupOneOutput(Aig_Man_t *p, int iPoNum, int fAddRegs)
Definition aigDup.c:1152
int Aig_NodeMffcSupp(Aig_Man_t *p, Aig_Obj_t *pNode, int LevelMin, Vec_Ptr_t *vSupp)
Definition aigMffc.c:179
int Aig_DagSize(Aig_Obj_t *pObj)
Definition aigDfs.c:726
void Aig_MmFixedRestart(Aig_MmFixed_t *p)
Definition aigMem.c:232
Aig_MmFlex_t * Aig_MmFlexStart()
Definition aigMem.c:305
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigObj.c:45
int Aig_TableCountEntries(Aig_Man_t *p)
Definition aigTable.c:218
Aig_Man_t * Aig_ManDupReprBasic(Aig_Man_t *p)
Definition aigRepr.c:323
Aig_Obj_t * Aig_TableLookupTwo(Aig_Man_t *p, Aig_Obj_t *pFanin0, Aig_Obj_t *pFanin1)
Definition aigTable.c:146
Aig_Man_t * Aig_ManExtractMiter(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
Definition aigMan.c:147
Aig_Man_t * Aig_ManScl(Aig_Man_t *pAig, int fLatchConst, int fLatchEqual, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose)
Definition aigScl.c:650
char * Aig_FileNameGenericAppend(char *pBase, char *pSuffix)
Definition aigUtil.c:1083
Vec_Ptr_t * Aig_ManRegProjectOnehots(Aig_Man_t *pAig, Aig_Man_t *pPart, Vec_Ptr_t *vOnehots, int fVerbose)
Definition aigPartReg.c:248
word Aig_ManRandom64(int fReset)
Definition aigUtil.c:1200
void Aig_MmFixedEntryRecycle(Aig_MmFixed_t *p, char *pEntry)
Definition aigMem.c:212
void Aig_ManCheckPhase(Aig_Man_t *p)
Definition aigCheck.c:151
Aig_Obj_t * Aig_CreateOr(Aig_Man_t *p, int nVars)
Definition aigOper.c:495
Aig_Obj_t * Aig_ObjReal_rec(Aig_Obj_t *pObj)
Definition aigUtil.c:476
Aig_Man_t * Aig_ManDupOrpos(Aig_Man_t *p, int fAddRegs)
Definition aigDup.c:1099
void Aig_ManCheckMarkA(Aig_Man_t *p)
Definition aigCheck.c:132
void Aig_ObjDelete(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigObj.c:209
void Aig_ObjCleanData_rec(Aig_Obj_t *pObj)
Definition aigUtil.c:243
Aig_Obj_t * Aig_IthVar(Aig_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Definition aigOper.c:63
int Aig_MmFlexReadMemUsage(Aig_MmFlex_t *p)
Definition aigMem.c:443
Vec_Ptr_t * Aig_Support(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigDfs.c:846
void Aig_ManSetPhase(Aig_Man_t *pAig)
Definition aigUtil.c:1449
Aig_Type_t
Definition aig.h:57
@ AIG_OBJ_CO
Definition aig.h:61
@ AIG_OBJ_AND
Definition aig.h:63
@ AIG_OBJ_VOID
Definition aig.h:65
@ AIG_OBJ_EXOR
Definition aig.h:64
@ AIG_OBJ_NONE
Definition aig.h:58
@ AIG_OBJ_CI
Definition aig.h:60
@ AIG_OBJ_BUF
Definition aig.h:62
@ AIG_OBJ_CONST1
Definition aig.h:59
Vec_Ptr_t * Aig_ManMuxesCollect(Aig_Man_t *pAig)
Definition aigUtil.c:1478
struct Aig_MmFixed_t_ Aig_MmFixed_t
Definition aig.h:52
Aig_MmStep_t * Aig_MmStepStart(int nSteps)
Definition aigMem.c:472
int Aig_ObjIsMuxType(Aig_Obj_t *pObj)
Definition aigUtil.c:307
void Aig_MmFixedStop(Aig_MmFixed_t *p, int fVerbose)
Definition aigMem.c:132
void Aig_ManCleanData(Aig_Man_t *p)
Definition aigUtil.c:205
Aig_Man_t * Aig_ManCreateMiter(Aig_Man_t *p1, Aig_Man_t *p2, int fImpl)
Definition aigDup.c:1049
void Aig_ManTransferRepr(Aig_Man_t *pNew, Aig_Man_t *p)
Definition aigRepr.c:211
void Aig_ManUpdateReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
Definition aigTiming.c:247
Aig_Obj_t * Aig_Or(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:259
void Aig_TableProfile(Aig_Man_t *p)
Definition aigTable.c:239
Vec_Ptr_t * Aig_ManDfsPreorder(Aig_Man_t *p, int fNodesOnly)
Definition aigDfs.c:285
void Aig_ManUpdateLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
Definition aigTiming.c:195
void Aig_ObjRemoveFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Definition aigFanout.c:154
Vec_Ptr_t * Aig_ManSupports(Aig_Man_t *p)
Definition aigPart.c:273
void Aig_ManRandomInfo(Vec_Ptr_t *vInfo, int iInputStart, int iWordStart, int iWordStop)
Definition aigUtil.c:1218
int Aig_ManChoiceLevel(Aig_Man_t *p)
Definition aigDfs.c:595
void Aig_ManOrderStart(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigOrder.c:45
void Aig_MmStepEntryRecycle(Aig_MmStep_t *p, char *pEntry, int nBytes)
Definition aigMem.c:571
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
Definition aigCheck.c:45
void Aig_ManComputeSccs(Aig_Man_t *p)
Definition aigScl.c:489
void Aig_TableDelete(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigTable.c:196
unsigned Aig_ManRandom(int fReset)
Definition aigUtil.c:1170
void Aig_ManDump(Aig_Man_t *p)
Definition aigUtil.c:725
void Aig_ManDumpBlif(Aig_Man_t *p, char *pFileName, Vec_Ptr_t *vPiNames, Vec_Ptr_t *vPoNames)
Definition aigUtil.c:746
struct Aig_MmStep_t_ Aig_MmStep_t
Definition aig.h:54
Aig_Obj_t * Aig_MiterTwo(Aig_Man_t *p, Vec_Ptr_t *vNodes1, Vec_Ptr_t *vNodes2)
Definition aigOper.c:453
void Aig_ManShow(Aig_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
Definition aigShow.c:341
void Aig_ObjPrint(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition aigObj.c:316
Vec_Ptr_t * Aig_ManDfsAll(Aig_Man_t *p)
Definition aigDfs.c:228
Aig_Man_t * Aig_ManDupFlopsOnly(Aig_Man_t *p)
Definition aigDup.c:871
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
char nLeafMax
Definition aig.h:186
int Cost
Definition aig.h:182
int iNode
Definition aig.h:184
char nFanins
Definition aig.h:187
short nCutSize
Definition aig.h:185
Aig_Cut_t * pNext
Definition aig.h:181
int pFanins[0]
Definition aig.h:188
unsigned uSign
Definition aig.h:183
Aig_Man_t * pAig
Definition aig.h:195
int nCutSize
Definition aig.h:203
int fVerbose
Definition aig.h:201
int nCutsMax
Definition aig.h:198
int nLeafMax
Definition aig.h:199
unsigned * puTemp[4]
Definition aig.h:206
int nTruthWords
Definition aig.h:204
Aig_Cut_t ** pCuts
Definition aig.h:196
Aig_MmFixed_t * pMemCuts
Definition aig.h:205
int fTruth
Definition aig.h:200
Abc_Cex_t * pSeqModel
Definition aig.h:154
int fAddStrash
Definition aig.h:143
Vec_Int_t * vProbs
Definition aig.h:161
Aig_Obj_t ** pObjCopies
Definition aig.h:144
Vec_Ptr_t * vObjs
Definition aig.h:101
int nTruePis
Definition aig.h:106
Vec_Vec_t * vClockDoms
Definition aig.h:160
Vec_Ptr_t * vMapped
Definition aig.h:151
Vec_Int_t * vFlopNums
Definition aig.h:152
Vec_Ptr_t * unfold2_type_II
Definition aig.h:170
Aig_Obj_t * pConst1
Definition aig.h:103
int nReprsAlloc
Definition aig.h:134
int nTruePos
Definition aig.h:107
int nLevelMax
Definition aig.h:138
Aig_Obj_t Ghost
Definition aig.h:104
Aig_Man_t * pManExdc
Definition aig.h:156
unsigned * pTerSimData
Definition aig.h:150
Vec_Int_t * vFlopReprs
Definition aig.h:153
unsigned * pOrderData
Definition aig.h:125
Vec_Ptr_t * vCos
Definition aig.h:100
int nObjs[AIG_OBJ_VOID]
Definition aig.h:112
int nConstrs
Definition aig.h:109
int nBarBufs
Definition aig.h:110
int * pFanData
Definition aig.h:118
int nComplEdges
Definition aig.h:163
int nAndTotal
Definition aig.h:129
void * pData
Definition aig.h:139
Vec_Ptr_t * vBufs
Definition aig.h:102
int * pFastSim
Definition aig.h:149
int fCreatePios
Definition aig.h:158
Vec_Ptr_t * vSeqModelVec
Definition aig.h:155
int nAndPrev
Definition aig.h:130
char * pSpec
Definition aig.h:97
int iNext
Definition aig.h:128
void * pData2
Definition aig.h:140
abctime time1
Definition aig.h:166
abctime time2
Definition aig.h:167
Vec_Vec_t * vLevels
Definition aig.h:120
void(* pImpFunc)(void *, void *)
Definition aig.h:145
int nTravIds
Definition aig.h:141
int nBufReplaces
Definition aig.h:121
int nOrderAlloc
Definition aig.h:126
Vec_Ptr_t * vOnehots
Definition aig.h:157
int nFansAlloc
Definition aig.h:119
int nTableSize
Definition aig.h:116
Aig_MmFixed_t * pMemObjs
Definition aig.h:136
int nBufMax
Definition aig.h:123
Aig_Obj_t ** pReprs
Definition aig.h:133
int fCatchExor
Definition aig.h:142
Vec_Ptr_t * vCis
Definition aig.h:99
void * pImpData
Definition aig.h:146
void * pManCuts
Definition aig.h:148
int nDeleted
Definition aig.h:113
char * pName
Definition aig.h:96
Aig_Obj_t ** pTable
Definition aig.h:115
int nBufFixes
Definition aig.h:122
int nAsserts
Definition aig.h:108
int iPrev
Definition aig.h:127
Vec_Int_t * vLevelR
Definition aig.h:137
Vec_Ptr_t * unfold2_type_I
Definition aig.h:169
Vec_Int_t * vCiNumsOrig
Definition aig.h:162
abctime Time2Quit
Definition aig.h:164
Vec_Int_t * vEquPairs
Definition aig.h:159
Aig_Obj_t ** pEquivs
Definition aig.h:132
int nRegs
Definition aig.h:105
void * pManTime
Definition aig.h:147
DECLARATIONS ///.
Definition aigMem.c:31
int Id
Definition aig.h:85
unsigned int nRefs
Definition aig.h:81
int iData
Definition aig.h:88
int CioId
Definition aig.h:73
unsigned int fMarkB
Definition aig.h:80
unsigned nCuts
Definition aig.h:83
Aig_Obj_t * pNext
Definition aig.h:72
int TravId
Definition aig.h:84
unsigned int fMarkA
Definition aig.h:79
void * pData
Definition aig.h:87
Aig_Obj_t * pFanin1
Definition aig.h:76
Aig_Obj_t * pFanin0
Definition aig.h:75
float dData
Definition aig.h:89
unsigned Level
Definition aig.h:82
unsigned int fPhase
Definition aig.h:78
unsigned int Type
Definition aig.h:77
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
Definition utilCex.h:39
#define assert(ex)
Definition util_old.h:213
char * memset()
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42