ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
ivy.h
Go to the documentation of this file.
1
20
21#ifndef ABC__aig__ivy__ivy_h
22#define ABC__aig__ivy__ivy_h
23
24
28
29#include <stdio.h>
30#include "misc/extra/extra.h"
31#include "misc/vec/vec.h"
32
36
37
38
40
41
45
46typedef struct Ivy_Man_t_ Ivy_Man_t;
47typedef struct Ivy_Obj_t_ Ivy_Obj_t;
48typedef int Ivy_Edge_t;
50
51// object types
52typedef enum {
53 IVY_NONE, // 0: non-existent object
54 IVY_PI, // 1: primary input (and constant 1 node)
55 IVY_PO, // 2: primary output
56 IVY_ASSERT, // 3: assertion
57 IVY_LATCH, // 4: sequential element
58 IVY_AND, // 5: AND node
59 IVY_EXOR, // 6: EXOR node
60 IVY_BUF, // 7: buffer (temporary)
61 IVY_VOID // 8: unused object
63
64// latch initial values
65typedef enum {
66 IVY_INIT_NONE, // 0: not a latch
67 IVY_INIT_0, // 1: zero
68 IVY_INIT_1, // 2: one
69 IVY_INIT_DC // 3: don't-care
71
72// the AIG node
73struct Ivy_Obj_t_ // 24 bytes (32-bit) or 32 bytes (64-bit) // 10 words - 16 words
74{
75 int Id; // integer ID
76 int TravId; // traversal ID
77 unsigned Type : 4; // object type
78 unsigned fMarkA : 1; // multipurpose mask
79 unsigned fMarkB : 1; // multipurpose mask
80 unsigned fExFan : 1; // set to 1 if last fanout added is EXOR
81 unsigned fPhase : 1; // value under 000...0 pattern
82 unsigned fFailTfo : 1; // the TFO of the failed node
83 unsigned Init : 2; // latch initial value
84 unsigned Level : 21; // logic level
85 int nRefs; // reference counter
86 Ivy_Obj_t * pFanin0; // fanin
87 Ivy_Obj_t * pFanin1; // fanin
88 Ivy_Obj_t * pFanout; // fanout
89 Ivy_Obj_t * pNextFan0; // next fanout of the first fanin
90 Ivy_Obj_t * pNextFan1; // next fanout of the second fanin
91 Ivy_Obj_t * pPrevFan0; // prev fanout of the first fanin
92 Ivy_Obj_t * pPrevFan1; // prev fanout of the second fanin
93 Ivy_Obj_t * pEquiv; // equivalent node
94};
95
96// the AIG manager
98{
99 // AIG nodes
100 Vec_Ptr_t * vPis; // the array of PIs
101 Vec_Ptr_t * vPos; // the array of POs
102 Vec_Ptr_t * vBufs; // the array of buffers
103 Vec_Ptr_t * vObjs; // the array of objects
104 Ivy_Obj_t * pConst1; // the constant 1 node
105 Ivy_Obj_t Ghost; // the ghost node
106 // AIG node counters
107 int nObjs[IVY_VOID];// the number of objects by type
108 int nCreated; // the number of created objects
109 int nDeleted; // the number of deleted objects
110 // stuctural hash table
111 int * pTable; // structural hash table
112 int nTableSize; // structural hash table size
113 // various data members
114 int fCatchExor; // set to 1 to detect EXORs
115 int nTravIds; // the traversal ID
116 int nLevelMax; // the maximum level
117 Vec_Int_t * vRequired; // required times
118 int fFanout; // fanout is allocated
119 void * pData; // the temporary data
120 void * pCopy; // the temporary data
121 Ivy_Man_t * pHaig; // history AIG if present
122 int nClassesSkip; // the number of skipped classes
123 // memory management
124 Vec_Ptr_t * vChunks; // allocated memory pieces
125 Vec_Ptr_t * vPages; // memory pages used by nodes
126 Ivy_Obj_t * pListFree; // the list of free nodes
127 // timing statistics
130};
131
133{
134 int nSimWords; // the number of words in the simulation info
135 double dSimSatur; // the ratio of refined classes when saturation is reached
136 int fPatScores; // enables simulation pattern scoring
137 int MaxScore; // max score after which resimulation is used
138 double dActConeRatio; // the ratio of cone to be bumped
139 double dActConeBumpMax; // the largest bump in activity
140 int fProve; // prove the miter outputs
141 int fVerbose; // verbose output
142 int fDoSparse; // skip sparse functions
143 int nBTLimitNode; // conflict limit at a node
144 int nBTLimitMiter; // conflict limit at an output
145// int nBTLimitGlobal; // conflict limit global
146// int nInsLimitNode; // inspection limit at a node
147// int nInsLimitMiter; // inspection limit at an output
148// int nInsLimitGlobal; // inspection limit global
149};
150
151
152#define IVY_CUT_LIMIT 256
153#define IVY_CUT_INPUT 6
154
155typedef struct Ivy_Cut_t_ Ivy_Cut_t;
157{
159 short nSize;
160 short nSizeMax;
162 unsigned uHash;
163};
164
167{
168 int nCuts;
172 Ivy_Cut_t pCuts[IVY_CUT_LIMIT]; // storage for cuts
173};
174
175#define IVY_LEAF_MASK 255
176#define IVY_LEAF_BITS 8
177
181
182#define IVY_MIN(a,b) (((a) < (b))? (a) : (b))
183#define IVY_MAX(a,b) (((a) > (b))? (a) : (b))
184
185extern void Ivy_ManAddMemory( Ivy_Man_t * p );
186
187static inline int Ivy_BitWordNum( int nBits ) { return (nBits>>5) + ((nBits&31) > 0); }
188static inline int Ivy_TruthWordNum( int nVars ) { return nVars <= 5 ? 1 : (1 << (nVars - 5)); }
189static inline int Ivy_InfoHasBit( unsigned * p, int i ) { return (p[(i)>>5] & (1<<((i) & 31))) > 0; }
190static inline void Ivy_InfoSetBit( unsigned * p, int i ) { p[(i)>>5] |= (1<<((i) & 31)); }
191static inline void Ivy_InfoXorBit( unsigned * p, int i ) { p[(i)>>5] ^= (1<<((i) & 31)); }
192
193static inline Ivy_Obj_t * Ivy_Regular( Ivy_Obj_t * p ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) & ~01); }
194static inline Ivy_Obj_t * Ivy_Not( Ivy_Obj_t * p ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) ^ 01); }
195static inline Ivy_Obj_t * Ivy_NotCond( Ivy_Obj_t * p, int c ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) ^ (c)); }
196static inline int Ivy_IsComplement( Ivy_Obj_t * p ) { return (int)((ABC_PTRUINT_T)(p) & 01); }
197
198static inline Ivy_Obj_t * Ivy_ManConst0( Ivy_Man_t * p ) { return Ivy_Not(p->pConst1); }
199static inline Ivy_Obj_t * Ivy_ManConst1( Ivy_Man_t * p ) { return p->pConst1; }
200static inline Ivy_Obj_t * Ivy_ManGhost( Ivy_Man_t * p ) { return &p->Ghost; }
201static inline Ivy_Obj_t * Ivy_ManPi( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vPis, i); }
202static inline Ivy_Obj_t * Ivy_ManPo( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vPos, i); }
203static inline Ivy_Obj_t * Ivy_ManObj( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vObjs, i); }
204
205static inline Ivy_Edge_t Ivy_EdgeCreate( int Id, int fCompl ) { return (Id << 1) | fCompl; }
206static inline int Ivy_EdgeId( Ivy_Edge_t Edge ) { return Edge >> 1; }
207static inline int Ivy_EdgeIsComplement( Ivy_Edge_t Edge ) { return Edge & 1; }
208static inline Ivy_Edge_t Ivy_EdgeRegular( Ivy_Edge_t Edge ) { return (Edge >> 1) << 1; }
209static inline Ivy_Edge_t Ivy_EdgeNot( Ivy_Edge_t Edge ) { return Edge ^ 1; }
210static inline Ivy_Edge_t Ivy_EdgeNotCond( Ivy_Edge_t Edge, int fCond ) { return Edge ^ fCond; }
211static inline Ivy_Edge_t Ivy_EdgeFromNode( Ivy_Obj_t * pNode ) { return Ivy_EdgeCreate( Ivy_Regular(pNode)->Id, Ivy_IsComplement(pNode) ); }
212static inline Ivy_Obj_t * Ivy_EdgeToNode( Ivy_Man_t * p, Ivy_Edge_t Edge ){ return Ivy_NotCond( Ivy_ManObj(p, Ivy_EdgeId(Edge)), Ivy_EdgeIsComplement(Edge) ); }
213
214static inline int Ivy_LeafCreate( int Id, int Lat ) { return (Id << IVY_LEAF_BITS) | Lat; }
215static inline int Ivy_LeafId( int Leaf ) { return Leaf >> IVY_LEAF_BITS; }
216static inline int Ivy_LeafLat( int Leaf ) { return Leaf & IVY_LEAF_MASK; }
217
218static inline int Ivy_ManPiNum( Ivy_Man_t * p ) { return p->nObjs[IVY_PI]; }
219static inline int Ivy_ManPoNum( Ivy_Man_t * p ) { return p->nObjs[IVY_PO]; }
220static inline int Ivy_ManAssertNum( Ivy_Man_t * p ) { return p->nObjs[IVY_ASSERT]; }
221static inline int Ivy_ManLatchNum( Ivy_Man_t * p ) { return p->nObjs[IVY_LATCH]; }
222static inline int Ivy_ManAndNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]; }
223static inline int Ivy_ManExorNum( Ivy_Man_t * p ) { return p->nObjs[IVY_EXOR]; }
224static inline int Ivy_ManBufNum( Ivy_Man_t * p ) { return p->nObjs[IVY_BUF]; }
225static inline int Ivy_ManObjNum( Ivy_Man_t * p ) { return p->nCreated - p->nDeleted; }
226static inline int Ivy_ManObjIdMax( Ivy_Man_t * p ) { return Vec_PtrSize(p->vObjs)-1; }
227static inline int Ivy_ManNodeNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+p->nObjs[IVY_EXOR];}
228static inline int Ivy_ManHashObjNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+p->nObjs[IVY_EXOR]+p->nObjs[IVY_LATCH]; }
229static inline int Ivy_ManGetCost( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+3*p->nObjs[IVY_EXOR]+8*p->nObjs[IVY_LATCH]; }
230
231static inline Ivy_Type_t Ivy_ObjType( Ivy_Obj_t * pObj ) { return (Ivy_Type_t)pObj->Type; }
232static inline Ivy_Init_t Ivy_ObjInit( Ivy_Obj_t * pObj ) { return (Ivy_Init_t)pObj->Init; }
233static inline int Ivy_ObjIsConst1( Ivy_Obj_t * pObj ) { return pObj->Id == 0; }
234static inline int Ivy_ObjIsGhost( Ivy_Obj_t * pObj ) { return pObj->Id < 0; }
235static inline int Ivy_ObjIsNone( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_NONE; }
236static inline int Ivy_ObjIsPi( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI; }
237static inline int Ivy_ObjIsPo( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO; }
238static inline int Ivy_ObjIsCi( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI || pObj->Type == IVY_LATCH; }
239static inline int Ivy_ObjIsCo( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO || pObj->Type == IVY_LATCH; }
240static inline int Ivy_ObjIsAssert( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_ASSERT; }
241static inline int Ivy_ObjIsLatch( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_LATCH; }
242static inline int Ivy_ObjIsAnd( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND; }
243static inline int Ivy_ObjIsExor( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_EXOR; }
244static inline int Ivy_ObjIsBuf( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_BUF; }
245static inline int Ivy_ObjIsNode( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND || pObj->Type == IVY_EXOR; }
246static inline int Ivy_ObjIsTerm( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI || pObj->Type == IVY_PO || pObj->Type == IVY_ASSERT; }
247static inline int Ivy_ObjIsHash( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND || pObj->Type == IVY_EXOR || pObj->Type == IVY_LATCH; }
248static inline int Ivy_ObjIsOneFanin( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO || pObj->Type == IVY_ASSERT || pObj->Type == IVY_BUF || pObj->Type == IVY_LATCH; }
249
250static inline int Ivy_ObjIsMarkA( Ivy_Obj_t * pObj ) { return pObj->fMarkA; }
251static inline void Ivy_ObjSetMarkA( Ivy_Obj_t * pObj ) { pObj->fMarkA = 1; }
252static inline void Ivy_ObjClearMarkA( Ivy_Obj_t * pObj ) { pObj->fMarkA = 0; }
253
254static inline void Ivy_ObjSetTravId( Ivy_Obj_t * pObj, int TravId ) { pObj->TravId = TravId; }
255static inline void Ivy_ObjSetTravIdCurrent( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { pObj->TravId = p->nTravIds; }
256static inline void Ivy_ObjSetTravIdPrevious( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { pObj->TravId = p->nTravIds - 1; }
257static inline int Ivy_ObjIsTravIdCurrent( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { return (int )((int)pObj->TravId == p->nTravIds); }
258static inline int Ivy_ObjIsTravIdPrevious( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { return (int )((int)pObj->TravId == p->nTravIds - 1); }
259
260static inline int Ivy_ObjId( Ivy_Obj_t * pObj ) { return pObj->Id; }
261static inline int Ivy_ObjTravId( Ivy_Obj_t * pObj ) { return pObj->TravId; }
262static inline int Ivy_ObjPhase( Ivy_Obj_t * pObj ) { return pObj->fPhase; }
263static inline int Ivy_ObjExorFanout( Ivy_Obj_t * pObj ) { return pObj->fExFan; }
264static inline int Ivy_ObjRefs( Ivy_Obj_t * pObj ) { return pObj->nRefs; }
265static inline void Ivy_ObjRefsInc( Ivy_Obj_t * pObj ) { pObj->nRefs++; }
266static inline void Ivy_ObjRefsDec( Ivy_Obj_t * pObj ) { assert( pObj->nRefs > 0 ); pObj->nRefs--; }
267static inline int Ivy_ObjFaninId0( Ivy_Obj_t * pObj ) { return pObj->pFanin0? Ivy_ObjId(Ivy_Regular(pObj->pFanin0)) : 0; }
268static inline int Ivy_ObjFaninId1( Ivy_Obj_t * pObj ) { return pObj->pFanin1? Ivy_ObjId(Ivy_Regular(pObj->pFanin1)) : 0; }
269static inline int Ivy_ObjFaninC0( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj->pFanin0); }
270static inline int Ivy_ObjFaninC1( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj->pFanin1); }
271static inline Ivy_Obj_t * Ivy_ObjFanin0( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj->pFanin0); }
272static inline Ivy_Obj_t * Ivy_ObjFanin1( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj->pFanin1); }
273static inline Ivy_Obj_t * Ivy_ObjChild0( Ivy_Obj_t * pObj ) { return pObj->pFanin0; }
274static inline Ivy_Obj_t * Ivy_ObjChild1( Ivy_Obj_t * pObj ) { return pObj->pFanin1; }
275static inline Ivy_Obj_t * Ivy_ObjChild0Equiv( Ivy_Obj_t * pObj ) { assert( !Ivy_IsComplement(pObj) ); return Ivy_ObjFanin0(pObj)? Ivy_NotCond(Ivy_ObjFanin0(pObj)->pEquiv, Ivy_ObjFaninC0(pObj)) : NULL; }
276static inline Ivy_Obj_t * Ivy_ObjChild1Equiv( Ivy_Obj_t * pObj ) { assert( !Ivy_IsComplement(pObj) ); return Ivy_ObjFanin1(pObj)? Ivy_NotCond(Ivy_ObjFanin1(pObj)->pEquiv, Ivy_ObjFaninC1(pObj)) : NULL; }
277static inline Ivy_Obj_t * Ivy_ObjEquiv( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj)->pEquiv? Ivy_NotCond(Ivy_Regular(pObj)->pEquiv, Ivy_IsComplement(pObj)) : NULL; }
278static inline int Ivy_ObjLevel( Ivy_Obj_t * pObj ) { return pObj->Level; }
279static inline int Ivy_ObjLevelNew( Ivy_Obj_t * pObj ) { return 1 + Ivy_ObjIsExor(pObj) + IVY_MAX(Ivy_ObjFanin0(pObj)->Level, Ivy_ObjFanin1(pObj)->Level); }
280static inline int Ivy_ObjFaninPhase( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj)? !Ivy_Regular(pObj)->fPhase : pObj->fPhase; }
281
282static inline void Ivy_ObjClean( Ivy_Obj_t * pObj )
283{
284 int IdSaved = pObj->Id;
285 memset( pObj, 0, sizeof(Ivy_Obj_t) );
286 pObj->Id = IdSaved;
287}
288static inline void Ivy_ObjOverwrite( Ivy_Obj_t * pBase, Ivy_Obj_t * pData )
289{
290 int IdSaved = pBase->Id;
291 memcpy( pBase, pData, sizeof(Ivy_Obj_t) );
292 pBase->Id = IdSaved;
293}
294static inline int Ivy_ObjWhatFanin( Ivy_Obj_t * pObj, Ivy_Obj_t * pFanin )
295{
296 if ( Ivy_ObjFanin0(pObj) == pFanin ) return 0;
297 if ( Ivy_ObjFanin1(pObj) == pFanin ) return 1;
298 assert(0); return -1;
299}
300static inline int Ivy_ObjFanoutC( Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout )
301{
302 if ( Ivy_ObjFanin0(pFanout) == pObj ) return Ivy_ObjFaninC0(pObj);
303 if ( Ivy_ObjFanin1(pFanout) == pObj ) return Ivy_ObjFaninC1(pObj);
304 assert(0); return -1;
305}
306
307// create the ghost of the new node
308static inline Ivy_Obj_t * Ivy_ObjCreateGhost( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1, Ivy_Type_t Type, Ivy_Init_t Init )
309{
310 Ivy_Obj_t * pGhost, * pTemp;
311 assert( Type != IVY_AND || !Ivy_ObjIsConst1(Ivy_Regular(p0)) );
312 assert( p1 == NULL || !Ivy_ObjIsConst1(Ivy_Regular(p1)) );
313 assert( Type == IVY_PI || Ivy_Regular(p0) != Ivy_Regular(p1) );
314 assert( Type != IVY_LATCH || !Ivy_IsComplement(p0) );
315// assert( p1 == NULL || (!Ivy_ObjIsLatch(Ivy_Regular(p0)) || !Ivy_ObjIsLatch(Ivy_Regular(p1))) );
316 pGhost = Ivy_ManGhost(p);
317 pGhost->Type = Type;
318 pGhost->Init = Init;
319 pGhost->pFanin0 = p0;
320 pGhost->pFanin1 = p1;
321 if ( p1 && Ivy_ObjFaninId0(pGhost) > Ivy_ObjFaninId1(pGhost) )
322 pTemp = pGhost->pFanin0, pGhost->pFanin0 = pGhost->pFanin1, pGhost->pFanin1 = pTemp;
323 return pGhost;
324}
325
326// get the complemented initial state
327static Ivy_Init_t Ivy_InitNotCond( Ivy_Init_t Init, int fCompl )
328{
329 assert( Init != IVY_INIT_NONE );
330 if ( fCompl == 0 )
331 return Init;
332 if ( Init == IVY_INIT_0 )
333 return IVY_INIT_1;
334 if ( Init == IVY_INIT_1 )
335 return IVY_INIT_0;
336 return IVY_INIT_DC;
337}
338
339// get the initial state after forward retiming over AND gate
340static Ivy_Init_t Ivy_InitAnd( Ivy_Init_t InitA, Ivy_Init_t InitB )
341{
342 assert( InitA != IVY_INIT_NONE && InitB != IVY_INIT_NONE );
343 if ( InitA == IVY_INIT_0 || InitB == IVY_INIT_0 )
344 return IVY_INIT_0;
345 if ( InitA == IVY_INIT_DC || InitB == IVY_INIT_DC )
346 return IVY_INIT_DC;
347 return IVY_INIT_1;
348}
349
350// get the initial state after forward retiming over EXOR gate
351static Ivy_Init_t Ivy_InitExor( Ivy_Init_t InitA, Ivy_Init_t InitB )
352{
353 assert( InitA != IVY_INIT_NONE && InitB != IVY_INIT_NONE );
354 if ( InitA == IVY_INIT_DC || InitB == IVY_INIT_DC )
355 return IVY_INIT_DC;
356 if ( InitA == IVY_INIT_0 && InitB == IVY_INIT_1 )
357 return IVY_INIT_1;
358 if ( InitA == IVY_INIT_1 && InitB == IVY_INIT_0 )
359 return IVY_INIT_1;
360 return IVY_INIT_0;
361}
362
363// internal memory manager
364static inline Ivy_Obj_t * Ivy_ManFetchMemory( Ivy_Man_t * p )
365{
366 Ivy_Obj_t * pTemp;
367 if ( p->pListFree == NULL )
369 pTemp = p->pListFree;
370 p->pListFree = *((Ivy_Obj_t **)pTemp);
371 memset( pTemp, 0, sizeof(Ivy_Obj_t) );
372 return pTemp;
373}
374static inline void Ivy_ManRecycleMemory( Ivy_Man_t * p, Ivy_Obj_t * pEntry )
375{
376 pEntry->Type = IVY_NONE; // distinquishes dead node from live node
377 *((Ivy_Obj_t **)pEntry) = p->pListFree;
378 p->pListFree = pEntry;
379}
380
381
385
386// iterator over the primary inputs
387#define Ivy_ManForEachPi( p, pObj, i ) \
388 Vec_PtrForEachEntry( Ivy_Obj_t *, p->vPis, pObj, i )
389// iterator over the primary outputs
390#define Ivy_ManForEachPo( p, pObj, i ) \
391 Vec_PtrForEachEntry( Ivy_Obj_t *, p->vPos, pObj, i )
392// iterator over all objects, including those currently not used
393#define Ivy_ManForEachObj( p, pObj, i ) \
394 Vec_PtrForEachEntry( Ivy_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
395// iterator over the combinational inputs
396#define Ivy_ManForEachCi( p, pObj, i ) \
397 Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsCi(pObj) ) {} else
398// iterator over the combinational outputs
399#define Ivy_ManForEachCo( p, pObj, i ) \
400 Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsCo(pObj) ) {} else
401// iterator over logic nodes (AND and EXOR gates)
402#define Ivy_ManForEachNode( p, pObj, i ) \
403 Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsNode(pObj) ) {} else
404// iterator over logic latches
405#define Ivy_ManForEachLatch( p, pObj, i ) \
406 Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsLatch(pObj) ) {} else
407// iterator over the nodes whose IDs are stored in the array
408#define Ivy_ManForEachNodeVec( p, vIds, pObj, i ) \
409 for ( i = 0; i < Vec_IntSize(vIds) && ((pObj) = Ivy_ManObj(p, Vec_IntEntry(vIds,i))); i++ )
410// iterator over the fanouts of an object
411#define Ivy_ObjForEachFanout( p, pObj, vArray, pFanout, i ) \
412 for ( i = 0, Ivy_ObjCollectFanouts(p, pObj, vArray); \
413 i < Vec_PtrSize(vArray) && ((pFanout) = (Ivy_Obj_t *)Vec_PtrEntry(vArray,i)); i++ )
414
418
419/*=== ivyBalance.c ========================================================*/
420extern Ivy_Man_t * Ivy_ManBalance( Ivy_Man_t * p, int fUpdateLevel );
421extern Ivy_Obj_t * Ivy_NodeBalanceBuildSuper( Ivy_Man_t * p, Vec_Ptr_t * vSuper, Ivy_Type_t Type, int fUpdateLevel );
422/*=== ivyCanon.c ========================================================*/
423extern Ivy_Obj_t * Ivy_CanonAnd( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
424extern Ivy_Obj_t * Ivy_CanonExor( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
425extern Ivy_Obj_t * Ivy_CanonLatch( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Init_t Init );
426/*=== ivyCheck.c ========================================================*/
427extern int Ivy_ManCheck( Ivy_Man_t * p );
428extern int Ivy_ManCheckFanoutNums( Ivy_Man_t * p );
429extern int Ivy_ManCheckFanouts( Ivy_Man_t * p );
430extern int Ivy_ManCheckChoices( Ivy_Man_t * p );
431/*=== ivyCut.c ==========================================================*/
432extern void Ivy_ManSeqFindCut( Ivy_Man_t * p, Ivy_Obj_t * pNode, Vec_Int_t * vFront, Vec_Int_t * vInside, int nSize );
433extern Ivy_Store_t * Ivy_NodeFindCutsAll( Ivy_Man_t * p, Ivy_Obj_t * pObj, int nLeaves );
434/*=== ivyDfs.c ==========================================================*/
435extern Vec_Int_t * Ivy_ManDfs( Ivy_Man_t * p );
436extern Vec_Int_t * Ivy_ManDfsSeq( Ivy_Man_t * p, Vec_Int_t ** pvLatches );
437extern void Ivy_ManCollectCone( Ivy_Obj_t * pObj, Vec_Ptr_t * vFront, Vec_Ptr_t * vCone );
440extern int Ivy_ManIsAcyclic( Ivy_Man_t * p );
441extern int Ivy_ManSetLevels( Ivy_Man_t * p, int fHaig );
442/*=== ivyDsd.c ==========================================================*/
443extern int Ivy_TruthDsd( unsigned uTruth, Vec_Int_t * vTree );
444extern void Ivy_TruthDsdPrint( FILE * pFile, Vec_Int_t * vTree );
445extern unsigned Ivy_TruthDsdCompute( Vec_Int_t * vTree );
446extern void Ivy_TruthDsdComputePrint( unsigned uTruth );
447extern Ivy_Obj_t * Ivy_ManDsdConstruct( Ivy_Man_t * p, Vec_Int_t * vFront, Vec_Int_t * vTree );
448/*=== ivyFanout.c ==========================================================*/
449extern void Ivy_ManStartFanout( Ivy_Man_t * p );
450extern void Ivy_ManStopFanout( Ivy_Man_t * p );
451extern void Ivy_ObjAddFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout );
452extern void Ivy_ObjDeleteFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout );
453extern void Ivy_ObjPatchFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanoutOld, Ivy_Obj_t * pFanoutNew );
454extern void Ivy_ObjCollectFanouts( Ivy_Man_t * p, Ivy_Obj_t * pObj, Vec_Ptr_t * vArray );
456extern int Ivy_ObjFanoutNum( Ivy_Man_t * p, Ivy_Obj_t * pObj );
457/*=== ivyFastMap.c =============================================================*/
458extern void Ivy_FastMapPerform( Ivy_Man_t * pAig, int nLimit, int fRecovery, int fVerbose );
459extern void Ivy_FastMapStop( Ivy_Man_t * pAig );
460extern void Ivy_FastMapReadSupp( Ivy_Man_t * pAig, Ivy_Obj_t * pObj, Vec_Int_t * vLeaves );
461extern void Ivy_FastMapReverseLevel( Ivy_Man_t * pAig );
462/*=== ivyFraig.c ==========================================================*/
463extern int Ivy_FraigProve( Ivy_Man_t ** ppManAig, void * pPars );
464extern Ivy_Man_t * Ivy_FraigPerform( Ivy_Man_t * pManAig, Ivy_FraigParams_t * pParams );
465extern Ivy_Man_t * Ivy_FraigMiter( Ivy_Man_t * pManAig, Ivy_FraigParams_t * pParams );
466extern void Ivy_FraigParamsDefault( Ivy_FraigParams_t * pParams );
467/*=== ivyHaig.c ==========================================================*/
468extern void Ivy_ManHaigStart( Ivy_Man_t * p, int fVerbose );
469extern void Ivy_ManHaigTrasfer( Ivy_Man_t * p, Ivy_Man_t * pNew );
470extern void Ivy_ManHaigStop( Ivy_Man_t * p );
471extern void Ivy_ManHaigPostprocess( Ivy_Man_t * p, int fVerbose );
472extern void Ivy_ManHaigCreateObj( Ivy_Man_t * p, Ivy_Obj_t * pObj );
473extern void Ivy_ManHaigCreateChoice( Ivy_Man_t * p, Ivy_Obj_t * pObjOld, Ivy_Obj_t * pObjNew );
474extern void Ivy_ManHaigSimulate( Ivy_Man_t * p );
475/*=== ivyMan.c ==========================================================*/
476extern Ivy_Man_t * Ivy_ManStart();
478extern Ivy_Man_t * Ivy_ManDup( Ivy_Man_t * p );
479extern Ivy_Man_t * Ivy_ManFrames( Ivy_Man_t * pMan, int nLatches, int nFrames, int fInit, Vec_Ptr_t ** pvMapping );
480extern void Ivy_ManStop( Ivy_Man_t * p );
481extern int Ivy_ManCleanup( Ivy_Man_t * p );
482extern int Ivy_ManPropagateBuffers( Ivy_Man_t * p, int fUpdateLevel );
483extern void Ivy_ManPrintStats( Ivy_Man_t * p );
484extern void Ivy_ManMakeSeq( Ivy_Man_t * p, int nLatches, int * pInits );
485/*=== ivyMem.c ==========================================================*/
486extern void Ivy_ManStartMemory( Ivy_Man_t * p );
487extern void Ivy_ManStopMemory( Ivy_Man_t * p );
488/*=== ivyMulti.c ==========================================================*/
489extern Ivy_Obj_t * Ivy_Multi( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
490extern Ivy_Obj_t * Ivy_Multi1( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
491extern Ivy_Obj_t * Ivy_Multi_rec( Ivy_Man_t * p, Ivy_Obj_t ** ppObjs, int nObjs, Ivy_Type_t Type );
492extern Ivy_Obj_t * Ivy_MultiBalance_rec( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
493extern int Ivy_MultiPlus( Ivy_Man_t * p, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vCone, Ivy_Type_t Type, int nLimit, Vec_Ptr_t * vSol );
494/*=== ivyObj.c ==========================================================*/
496extern Ivy_Obj_t * Ivy_ObjCreatePo( Ivy_Man_t * p, Ivy_Obj_t * pDriver );
497extern Ivy_Obj_t * Ivy_ObjCreate( Ivy_Man_t * p, Ivy_Obj_t * pGhost );
498extern void Ivy_ObjConnect( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFan0, Ivy_Obj_t * pFan1 );
499extern void Ivy_ObjDisconnect( Ivy_Man_t * p, Ivy_Obj_t * pObj );
500extern void Ivy_ObjPatchFanin0( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFaninNew );
501extern void Ivy_ObjDelete( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fFreeTop );
502extern void Ivy_ObjDelete_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fFreeTop );
503extern void Ivy_ObjReplace( Ivy_Man_t * p, Ivy_Obj_t * pObjOld, Ivy_Obj_t * pObjNew, int fDeleteOld, int fFreeTop, int fUpdateLevel );
504extern void Ivy_NodeFixBufferFanins( Ivy_Man_t * p, Ivy_Obj_t * pNode, int fUpdateLevel );
505/*=== ivyOper.c =========================================================*/
506extern Ivy_Obj_t * Ivy_Oper( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1, Ivy_Type_t Type );
507extern Ivy_Obj_t * Ivy_And( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
508extern Ivy_Obj_t * Ivy_Or( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
509extern Ivy_Obj_t * Ivy_Exor( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
510extern Ivy_Obj_t * Ivy_Mux( Ivy_Man_t * p, Ivy_Obj_t * pC, Ivy_Obj_t * p1, Ivy_Obj_t * p0 );
511extern Ivy_Obj_t * Ivy_Maj( Ivy_Man_t * p, Ivy_Obj_t * pA, Ivy_Obj_t * pB, Ivy_Obj_t * pC );
512extern Ivy_Obj_t * Ivy_Miter( Ivy_Man_t * p, Vec_Ptr_t * vPairs );
513extern Ivy_Obj_t * Ivy_Latch( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Init_t Init );
514/*=== ivyResyn.c =========================================================*/
515extern Ivy_Man_t * Ivy_ManResyn0( Ivy_Man_t * p, int fUpdateLevel, int fVerbose );
516extern Ivy_Man_t * Ivy_ManResyn( Ivy_Man_t * p, int fUpdateLevel, int fVerbose );
517extern Ivy_Man_t * Ivy_ManRwsat( Ivy_Man_t * pMan, int fVerbose );
518/*=== ivyRewrite.c =========================================================*/
519extern int Ivy_ManSeqRewrite( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost );
520extern int Ivy_ManRewriteAlg( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost );
521extern int Ivy_ManRewritePre( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost, int fVerbose );
522/*=== ivySeq.c =========================================================*/
523extern int Ivy_ManRewriteSeq( Ivy_Man_t * p, int fUseZeroCost, int fVerbose );
524/*=== ivyShow.c =========================================================*/
525extern void Ivy_ManShow( Ivy_Man_t * pMan, int fHaig, Vec_Ptr_t * vBold );
526/*=== ivyTable.c ========================================================*/
527extern Ivy_Obj_t * Ivy_TableLookup( Ivy_Man_t * p, Ivy_Obj_t * pObj );
528extern void Ivy_TableInsert( Ivy_Man_t * p, Ivy_Obj_t * pObj );
529extern void Ivy_TableDelete( Ivy_Man_t * p, Ivy_Obj_t * pObj );
530extern void Ivy_TableUpdate( Ivy_Man_t * p, Ivy_Obj_t * pObj, int ObjIdNew );
531extern int Ivy_TableCountEntries( Ivy_Man_t * p );
532extern void Ivy_TableProfile( Ivy_Man_t * p );
533/*=== ivyUtil.c =========================================================*/
534extern void Ivy_ManIncrementTravId( Ivy_Man_t * p );
535extern void Ivy_ManCleanTravId( Ivy_Man_t * p );
536extern unsigned * Ivy_ManCutTruth( Ivy_Man_t * p, Ivy_Obj_t * pRoot, Vec_Int_t * vLeaves, Vec_Int_t * vNodes, Vec_Int_t * vTruth );
537extern void Ivy_ManCollectCut( Ivy_Man_t * p, Ivy_Obj_t * pRoot, Vec_Int_t * vLeaves, Vec_Int_t * vNodes );
538extern Vec_Int_t * Ivy_ManLatches( Ivy_Man_t * p );
539extern int Ivy_ManLevels( Ivy_Man_t * p );
540extern void Ivy_ManResetLevels( Ivy_Man_t * p );
541extern int Ivy_ObjMffcLabel( Ivy_Man_t * p, Ivy_Obj_t * pObj );
542extern void Ivy_ObjUpdateLevel_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj );
543extern void Ivy_ObjUpdateLevelR_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj, int ReqNew );
544extern int Ivy_ObjIsMuxType( Ivy_Obj_t * pObj );
545extern Ivy_Obj_t * Ivy_ObjRecognizeMux( Ivy_Obj_t * pObj, Ivy_Obj_t ** ppObjT, Ivy_Obj_t ** ppObjE );
546extern Ivy_Obj_t * Ivy_ObjReal( Ivy_Obj_t * pObj );
547extern void Ivy_ObjPrintVerbose( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fHaig );
548extern void Ivy_ManPrintVerbose( Ivy_Man_t * p, int fHaig );
549extern int Ivy_CutTruthPrint( Ivy_Man_t * p, Ivy_Cut_t * pCut, unsigned uTruth );
550
551
552
554
555
556
557#endif
558
562
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
int Ivy_MultiPlus(Ivy_Man_t *p, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vCone, Ivy_Type_t Type, int nLimit, Vec_Ptr_t *vSol)
FUNCTION DEFINITIONS ///.
Definition ivyMulti.c:58
Ivy_Man_t * Ivy_ManResyn0(Ivy_Man_t *p, int fUpdateLevel, int fVerbose)
DECLARATIONS ///.
Definition ivyResyn.c:45
Ivy_Man_t * Ivy_FraigPerform(Ivy_Man_t *pManAig, Ivy_FraigParams_t *pParams)
Definition ivyFraig.c:451
void Ivy_ManStopMemory(Ivy_Man_t *p)
Definition ivyMem.c:66
Vec_Int_t * Ivy_ManLatches(Ivy_Man_t *p)
Definition ivyUtil.c:227
int Ivy_ManCheck(Ivy_Man_t *p)
DECLARATIONS ///.
Definition ivyCheck.c:45
struct Ivy_Cut_t_ Ivy_Cut_t
Definition ivy.h:155
#define IVY_CUT_INPUT
Definition ivy.h:153
int Ivy_ObjMffcLabel(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyUtil.c:359
Ivy_Obj_t * Ivy_Multi_rec(Ivy_Man_t *p, Ivy_Obj_t **ppObjs, int nObjs, Ivy_Type_t Type)
Definition ivyOper.c:225
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
Definition ivy.h:46
Ivy_Init_t
Definition ivy.h:65
@ IVY_INIT_0
Definition ivy.h:67
@ IVY_INIT_1
Definition ivy.h:68
@ IVY_INIT_DC
Definition ivy.h:69
@ IVY_INIT_NONE
Definition ivy.h:66
int Ivy_ManCheckFanouts(Ivy_Man_t *p)
Definition ivyCheck.c:171
Ivy_Obj_t * Ivy_NodeBalanceBuildSuper(Ivy_Man_t *p, Vec_Ptr_t *vSuper, Ivy_Type_t Type, int fUpdateLevel)
Definition ivyBalance.c:175
void Ivy_TruthDsdPrint(FILE *pFile, Vec_Int_t *vTree)
Definition ivyDsd.c:568
Ivy_Obj_t * Ivy_MultiBalance_rec(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
void Ivy_ObjDelete(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fFreeTop)
Definition ivyObj.c:255
Vec_Int_t * Ivy_ManRequiredLevels(Ivy_Man_t *p)
Definition ivyDfs.c:250
int Ivy_ManRewriteSeq(Ivy_Man_t *p, int fUseZeroCost, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition ivySeq.c:63
int Ivy_CutTruthPrint(Ivy_Man_t *p, Ivy_Cut_t *pCut, unsigned uTruth)
Definition ivyUtil.c:771
void Ivy_ManIncrementTravId(Ivy_Man_t *p)
DECLARATIONS ///.
Definition ivyUtil.c:45
Ivy_Obj_t * Ivy_Multi1(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
#define IVY_MAX(a, b)
Definition ivy.h:183
void Ivy_FastMapStop(Ivy_Man_t *pAig)
Definition ivyFastMap.c:194
Ivy_Obj_t * Ivy_Multi(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
Definition ivyOper.c:246
Ivy_Obj_t * Ivy_Mux(Ivy_Man_t *p, Ivy_Obj_t *pC, Ivy_Obj_t *p1, Ivy_Obj_t *p0)
Definition ivyOper.c:158
void Ivy_ManMakeSeq(Ivy_Man_t *p, int nLatches, int *pInits)
Definition ivyMan.c:482
void Ivy_ObjDisconnect(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyObj.c:185
Ivy_Obj_t * Ivy_Latch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
Definition ivyOper.c:287
Ivy_Obj_t * Ivy_CanonAnd(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition ivyCanon.c:90
void Ivy_TableInsert(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyTable.c:105
void Ivy_ManHaigSimulate(Ivy_Man_t *p)
Definition ivyHaig.c:440
void Ivy_ManShow(Ivy_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
FUNCTION DEFINITIONS ///.
Definition ivyShow.c:47
Ivy_Man_t * Ivy_ManRwsat(Ivy_Man_t *pMan, int fVerbose)
Definition ivyResyn.c:155
int Ivy_ManIsAcyclic(Ivy_Man_t *p)
Definition ivyDfs.c:373
void Ivy_ManHaigTrasfer(Ivy_Man_t *p, Ivy_Man_t *pNew)
Definition ivyHaig.c:137
void Ivy_ObjDeleteFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanout)
Definition ivyFanout.c:205
Ivy_Obj_t * Ivy_TableLookup(Ivy_Man_t *p, Ivy_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
Definition ivyTable.c:71
Ivy_Man_t * Ivy_ManResyn(Ivy_Man_t *p, int fUpdateLevel, int fVerbose)
Definition ivyResyn.c:86
void Ivy_ManAddMemory(Ivy_Man_t *p)
Definition ivyMem.c:89
int Ivy_Edge_t
Definition ivy.h:48
void Ivy_ManResetLevels(Ivy_Man_t *p)
Definition ivyUtil.c:292
Ivy_Obj_t * Ivy_Exor(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition ivyOper.c:113
int Ivy_ManCleanup(Ivy_Man_t *p)
Definition ivyMan.c:265
Ivy_Obj_t * Ivy_ObjCreate(Ivy_Man_t *p, Ivy_Obj_t *pGhost)
Definition ivyObj.c:77
Vec_Int_t * Ivy_ManDfsSeq(Ivy_Man_t *p, Vec_Int_t **pvLatches)
Definition ivyDfs.c:121
Ivy_Obj_t * Ivy_CanonLatch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
Definition ivyCanon.c:131
Ivy_Man_t * Ivy_ManStart()
DECLARATIONS ///.
Definition ivyMan.c:45
void Ivy_FastMapReverseLevel(Ivy_Man_t *pAig)
void Ivy_TableDelete(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyTable.c:132
void Ivy_FraigParamsDefault(Ivy_FraigParams_t *pParams)
FUNCTION DEFINITIONS ///.
Definition ivyFraig.c:225
Ivy_Obj_t * Ivy_ObjCreatePo(Ivy_Man_t *p, Ivy_Obj_t *pDriver)
Definition ivyObj.c:61
struct Ivy_Store_t_ Ivy_Store_t
Definition ivy.h:165
Ivy_Obj_t * Ivy_ObjReal(Ivy_Obj_t *pObj)
Definition ivyUtil.c:609
Ivy_Obj_t * Ivy_Oper(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1, Ivy_Type_t Type)
FUNCTION DEFINITIONS ///.
Definition ivyOper.c:63
void Ivy_TableUpdate(Ivy_Man_t *p, Ivy_Obj_t *pObj, int ObjIdNew)
Definition ivyTable.c:165
struct Ivy_FraigParams_t_ Ivy_FraigParams_t
Definition ivy.h:49
Ivy_Obj_t * Ivy_Maj(Ivy_Man_t *p, Ivy_Obj_t *pA, Ivy_Obj_t *pB, Ivy_Obj_t *pC)
Definition ivyOper.c:209
int Ivy_TruthDsd(unsigned uTruth, Vec_Int_t *vTree)
FUNCTION DEFINITIONS ///.
Definition ivyDsd.c:166
Vec_Int_t * Ivy_ManDfs(Ivy_Man_t *p)
Definition ivyDfs.c:87
void Ivy_ManStop(Ivy_Man_t *p)
Definition ivyMan.c:238
struct Ivy_Obj_t_ Ivy_Obj_t
Definition ivy.h:47
Ivy_Obj_t * Ivy_Or(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition ivyOper.c:142
void Ivy_ObjReplace(Ivy_Man_t *p, Ivy_Obj_t *pObjOld, Ivy_Obj_t *pObjNew, int fDeleteOld, int fFreeTop, int fUpdateLevel)
Definition ivyObj.c:328
Ivy_Obj_t * Ivy_Miter(Ivy_Man_t *p, Vec_Ptr_t *vPairs)
Definition ivyOper.c:264
void Ivy_ManHaigStop(Ivy_Man_t *p)
Definition ivyHaig.c:159
int Ivy_ObjIsMuxType(Ivy_Obj_t *pObj)
Definition ivyUtil.c:479
Ivy_Obj_t * Ivy_ObjRecognizeMux(Ivy_Obj_t *pObj, Ivy_Obj_t **ppObjT, Ivy_Obj_t **ppObjE)
Definition ivyUtil.c:517
void Ivy_ManHaigStart(Ivy_Man_t *p, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition ivyHaig.c:94
void Ivy_ManPrintStats(Ivy_Man_t *p)
Definition ivyMan.c:456
int Ivy_ManPropagateBuffers(Ivy_Man_t *p, int fUpdateLevel)
Definition ivyMan.c:414
Ivy_Obj_t * Ivy_ManDsdConstruct(Ivy_Man_t *p, Vec_Int_t *vFront, Vec_Int_t *vTree)
Definition ivyDsd.c:655
unsigned * Ivy_ManCutTruth(Ivy_Man_t *p, Ivy_Obj_t *pRoot, Vec_Int_t *vLeaves, Vec_Int_t *vNodes, Vec_Int_t *vTruth)
Definition ivyUtil.c:186
int Ivy_ManSeqRewrite(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost)
Ivy_Obj_t * Ivy_CanonExor(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition ivyCanon.c:109
void Ivy_ManPrintVerbose(Ivy_Man_t *p, int fHaig)
Definition ivyUtil.c:714
Vec_Vec_t * Ivy_ManLevelize(Ivy_Man_t *p)
Definition ivyDfs.c:224
void Ivy_TableProfile(Ivy_Man_t *p)
Definition ivyTable.c:250
void Ivy_ManCollectCut(Ivy_Man_t *p, Ivy_Obj_t *pRoot, Vec_Int_t *vLeaves, Vec_Int_t *vNodes)
Definition ivyUtil.c:106
int Ivy_ManRewriteAlg(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost)
FUNCTION DEFINITIONS ///.
Definition ivyRwrAlg.c:49
int Ivy_ManCheckFanoutNums(Ivy_Man_t *p)
Definition ivyCheck.c:148
Ivy_Man_t * Ivy_ManStartFrom(Ivy_Man_t *p)
Definition ivyMan.c:85
int Ivy_ObjFanoutNum(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyFanout.c:299
void Ivy_ObjPatchFanin0(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFaninNew)
Definition ivyObj.c:224
void Ivy_ManHaigCreateChoice(Ivy_Man_t *p, Ivy_Obj_t *pObjOld, Ivy_Obj_t *pObjNew)
Definition ivyHaig.c:246
void Ivy_ObjUpdateLevel_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyUtil.c:382
void Ivy_ManSeqFindCut(Ivy_Man_t *p, Ivy_Obj_t *pNode, Vec_Int_t *vFront, Vec_Int_t *vInside, int nSize)
Definition ivyCut.c:183
Ivy_Man_t * Ivy_ManFrames(Ivy_Man_t *pMan, int nLatches, int nFrames, int fInit, Vec_Ptr_t **pvMapping)
Definition ivyMan.c:172
Ivy_Store_t * Ivy_NodeFindCutsAll(Ivy_Man_t *p, Ivy_Obj_t *pObj, int nLeaves)
Definition ivyCut.c:892
void Ivy_ManStartMemory(Ivy_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition ivyMem.c:49
Ivy_Obj_t * Ivy_ObjCreatePi(Ivy_Man_t *p)
DECLARATIONS ///.
Definition ivyObj.c:45
void Ivy_ObjCollectFanouts(Ivy_Man_t *p, Ivy_Obj_t *pObj, Vec_Ptr_t *vArray)
Definition ivyFanout.c:262
void Ivy_FastMapReadSupp(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Int_t *vLeaves)
Definition ivyFastMap.c:793
int Ivy_ManRewritePre(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition ivyRwr.c:55
void Ivy_ObjPrintVerbose(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fHaig)
Definition ivyUtil.c:629
void Ivy_FastMapPerform(Ivy_Man_t *pAig, int nLimit, int fRecovery, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition ivyFastMap.c:105
void Ivy_ManStopFanout(Ivy_Man_t *p)
Definition ivyFanout.c:162
unsigned Ivy_TruthDsdCompute(Vec_Int_t *vTree)
Definition ivyDsd.c:478
void Ivy_TruthDsdComputePrint(unsigned uTruth)
Definition ivyDsd.c:678
Ivy_Type_t
Definition ivy.h:52
@ IVY_AND
Definition ivy.h:58
@ IVY_ASSERT
Definition ivy.h:56
@ IVY_LATCH
Definition ivy.h:57
@ IVY_PO
Definition ivy.h:55
@ IVY_BUF
Definition ivy.h:60
@ IVY_VOID
Definition ivy.h:61
@ IVY_PI
Definition ivy.h:54
@ IVY_NONE
Definition ivy.h:53
@ IVY_EXOR
Definition ivy.h:59
#define IVY_LEAF_BITS
Definition ivy.h:176
void Ivy_ManCleanTravId(Ivy_Man_t *p)
Definition ivyUtil.c:63
void Ivy_ObjPatchFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanoutOld, Ivy_Obj_t *pFanoutNew)
Definition ivyFanout.c:237
int Ivy_ManSetLevels(Ivy_Man_t *p, int fHaig)
Definition ivyDfs.c:457
void Ivy_ObjAddFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanout)
Definition ivyFanout.c:183
Ivy_Obj_t * Ivy_ObjReadFirstFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyFanout.c:283
void Ivy_NodeFixBufferFanins(Ivy_Man_t *p, Ivy_Obj_t *pNode, int fUpdateLevel)
Definition ivyObj.c:442
int Ivy_TableCountEntries(Ivy_Man_t *p)
Definition ivyTable.c:187
#define IVY_LEAF_MASK
Definition ivy.h:175
void Ivy_ManStartFanout(Ivy_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition ivyFanout.c:136
void Ivy_ObjDelete_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fFreeTop)
Definition ivyObj.c:299
void Ivy_ObjConnect(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFan0, Ivy_Obj_t *pFan1)
Definition ivyObj.c:150
void Ivy_ManHaigCreateObj(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition ivyHaig.c:183
Ivy_Man_t * Ivy_ManBalance(Ivy_Man_t *p, int fUpdateLevel)
FUNCTION DECLARATIONS ///.
Definition ivyBalance.c:51
void Ivy_ObjUpdateLevelR_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj, int ReqNew)
Definition ivyUtil.c:444
Ivy_Man_t * Ivy_FraigMiter(Ivy_Man_t *pManAig, Ivy_FraigParams_t *pParams)
Definition ivyFraig.c:480
void Ivy_ManCollectCone(Ivy_Obj_t *pObj, Vec_Ptr_t *vFront, Vec_Ptr_t *vCone)
Definition ivyDfs.c:195
void Ivy_ManHaigPostprocess(Ivy_Man_t *p, int fVerbose)
Definition ivyHaig.c:350
Ivy_Man_t * Ivy_ManDup(Ivy_Man_t *p)
Definition ivyMan.c:110
int Ivy_ManCheckChoices(Ivy_Man_t *p)
Definition ivyCheck.c:255
Ivy_Obj_t * Ivy_And(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition ivyOper.c:84
#define IVY_CUT_LIMIT
Definition ivy.h:152
int Ivy_FraigProve(Ivy_Man_t **ppManAig, void *pPars)
Definition ivyFraig.c:255
int Ivy_ManLevels(Ivy_Man_t *p)
Definition ivyUtil.c:249
unsigned uHash
Definition ivy.h:162
short nSize
Definition ivy.h:159
short nSizeMax
Definition ivy.h:160
int pArray[IVY_CUT_INPUT]
Definition ivy.h:161
int nLatches
Definition ivy.h:158
double dActConeBumpMax
Definition ivy.h:139
double dActConeRatio
Definition ivy.h:138
double dSimSatur
Definition ivy.h:135
int nBTLimitMiter
Definition ivy.h:144
int nObjs[IVY_VOID]
Definition ivy.h:107
int fCatchExor
Definition ivy.h:114
void * pCopy
Definition ivy.h:120
Ivy_Man_t * pHaig
Definition ivy.h:121
abctime time1
Definition ivy.h:128
int nLevelMax
Definition ivy.h:116
Ivy_Obj_t Ghost
Definition ivy.h:105
int * pTable
Definition ivy.h:111
int fFanout
Definition ivy.h:118
Ivy_Obj_t * pConst1
Definition ivy.h:104
Vec_Ptr_t * vPages
Definition ivy.h:125
Vec_Ptr_t * vChunks
Definition ivy.h:124
Vec_Ptr_t * vPos
Definition ivy.h:101
int nTableSize
Definition ivy.h:112
int nTravIds
Definition ivy.h:115
void * pData
Definition ivy.h:119
Vec_Ptr_t * vObjs
Definition ivy.h:103
Ivy_Obj_t * pListFree
Definition ivy.h:126
int nCreated
Definition ivy.h:108
Vec_Int_t * vRequired
Definition ivy.h:117
int nDeleted
Definition ivy.h:109
abctime time2
Definition ivy.h:129
Vec_Ptr_t * vPis
Definition ivy.h:100
Vec_Ptr_t * vBufs
Definition ivy.h:102
int nClassesSkip
Definition ivy.h:122
Ivy_Obj_t * pPrevFan0
Definition ivy.h:91
Ivy_Obj_t * pFanout
Definition ivy.h:88
Ivy_Obj_t * pPrevFan1
Definition ivy.h:92
unsigned fMarkB
Definition ivy.h:79
Ivy_Obj_t * pNextFan1
Definition ivy.h:90
Ivy_Obj_t * pEquiv
Definition ivy.h:93
Ivy_Obj_t * pFanin0
Definition ivy.h:86
int TravId
Definition ivy.h:76
int Id
Definition ivy.h:75
unsigned Type
Definition ivy.h:77
unsigned fExFan
Definition ivy.h:80
Ivy_Obj_t * pNextFan0
Definition ivy.h:89
unsigned fFailTfo
Definition ivy.h:82
int nRefs
Definition ivy.h:85
Ivy_Obj_t * pFanin1
Definition ivy.h:87
unsigned Level
Definition ivy.h:84
unsigned fMarkA
Definition ivy.h:78
unsigned fPhase
Definition ivy.h:81
unsigned Init
Definition ivy.h:83
Ivy_Cut_t pCuts[IVY_CUT_LIMIT]
Definition ivy.h:172
int nCutsMax
Definition ivy.h:170
int fSatur
Definition ivy.h:171
int nCuts
Definition ivy.h:168
int nCutsM
Definition ivy.h:169
#define assert(ex)
Definition util_old.h:213
char * memcpy()
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