ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
llb1Pivot.c
Go to the documentation of this file.
1
20
21#include "llbInt.h"
22
24
25
29
33
46{
47 Aig_Obj_t * pFanout;
48 int k, iFan = -1;
49 if ( Aig_ObjIsTravIdPrevious(p, pObj) )
50 return 0;
51 if ( Aig_ObjIsTravIdCurrent(p, pObj) )
52 return 1;
53 if ( Saig_ObjIsLi(p, pObj) )
54 return 0;
55 if ( Saig_ObjIsPo(p, pObj) )
56 return 0;
57 if ( pObj == pPivot )
58 return 1;
59 assert( Aig_ObjIsCand(pObj) );
60 Aig_ObjForEachFanout( p, pObj, pFanout, iFan, k )
61 if ( !Llb_ManTracePaths_rec( p, pFanout, pPivot ) )
62 {
63 Aig_ObjSetTravIdPrevious(p, pObj);
64 return 0;
65 }
66 Aig_ObjSetTravIdCurrent(p, pObj);
67 return 1;
68}
69
82{
83 Aig_Obj_t * pObj;
84 int i, Counter = 0;
85 Aig_ManIncrementTravId( p ); // prev = visited with path to LI (value 0)
86 Aig_ManIncrementTravId( p ); // cur = visited w/o path to LI (value 1)
87 Saig_ManForEachLo( p, pObj, i )
88 Counter += Llb_ManTracePaths_rec( p, pObj, pPivot );
89 return Counter;
90}
91
104{
105 Aig_Obj_t * pObj;
106 int i, Count;
108 Aig_ManForEachNode( p, pObj, i )
109 {
110 if ( Aig_ObjRefs(pObj) <= 1 )
111 continue;
112 Count = Llb_ManTracePaths( p, pObj );
113 printf( "Obj =%5d. Lev =%3d. Fanout =%5d. Count = %3d.\n",
114 i, Aig_ObjLevel(pObj), Aig_ObjRefs(pObj), Count );
115 }
117}
118
131{
132 if ( pObj->fMarkB )
133 return;
134 pObj->fMarkB = 1;
135 assert( Aig_ObjIsNode(pObj) );
136 Llb_ManLabelLiCones_rec( p, Aig_ObjFanin0(pObj) );
137 Llb_ManLabelLiCones_rec( p, Aig_ObjFanin1(pObj) );
138}
139
152{
153 Aig_Obj_t * pObj;
154 int i;
155 // mark const and PIs
156 Aig_ManConst1(p)->fMarkB = 1;
157 Aig_ManForEachCi( p, pObj, i )
158 pObj->fMarkB = 1;
159 // mark cones
160 Saig_ManForEachLi( p, pObj, i )
161 Llb_ManLabelLiCones_rec( p, Aig_ObjFanin0(pObj) );
162}
163
176{
177 Vec_Ptr_t * vMuxes;
178 Aig_Obj_t * pObj;
179 int i, Counter = 0;
180
181 // remove refs due to MUXes
182 vMuxes = Aig_ManMuxesCollect( p );
183 Aig_ManMuxesDeref( p, vMuxes );
184
185 // mark nodes feeding into LIs
188
189 // mark internal nodes
191 Aig_ManForEachNode( p, pObj, i )
192 if ( pObj->fMarkB && pObj->nRefs > 1 )
193 {
194 if ( Llb_ManTracePaths(p, pObj) > 0 )
195 pObj->fMarkA = 1;
196 Counter++;
197 }
199// printf( "TracePath tried = %d.\n", Counter );
200
201 // mark nodes feeding into LIs
203
204 // add refs due to MUXes
205 Aig_ManMuxesRef( p, vMuxes );
206 Vec_PtrFree( vMuxes );
207}
208
221{
222 Vec_Int_t * vVar2Obj;
223 Aig_Obj_t * pObj;
224 int i;
225 // mark inputs/outputs
226 Aig_ManForEachCi( p, pObj, i )
227 pObj->fMarkA = 1;
228 Saig_ManForEachLi( p, pObj, i )
229 pObj->fMarkA = 1;
230
231 // mark internal pivot nodes
232 if ( fUseInternal )
234
235 // assign variable numbers
236 Aig_ManConst1(p)->fMarkA = 0;
237 vVar2Obj = Vec_IntAlloc( 100 );
238 Aig_ManForEachCi( p, pObj, i )
239 Vec_IntPush( vVar2Obj, Aig_ObjId(pObj) );
240 Aig_ManForEachNode( p, pObj, i )
241 if ( pObj->fMarkA )
242 Vec_IntPush( vVar2Obj, Aig_ObjId(pObj) );
243 Saig_ManForEachLi( p, pObj, i )
244 Vec_IntPush( vVar2Obj, Aig_ObjId(pObj) );
245 return vVar2Obj;
246}
247
251
252
254
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition aigFanout.c:56
void Aig_ManCleanMarkB(Aig_Man_t *p)
Definition aigUtil.c:167
void Aig_ManFanoutStop(Aig_Man_t *p)
Definition aigFanout.c:89
#define Aig_ObjForEachFanout(p, pObj, pFanout, iFan, i)
Definition aig.h:427
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigUtil.c:44
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Definition aig.h:393
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
void Aig_ManMuxesDeref(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition aigUtil.c:1501
#define Aig_ManForEachNode(p, pObj, i)
Definition aig.h:413
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
void Aig_ManMuxesRef(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition aigUtil.c:1531
Vec_Ptr_t * Aig_ManMuxesCollect(Aig_Man_t *pAig)
Definition aigUtil.c:1478
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
void Llb_ManMarkInternalPivots(Aig_Man_t *p)
Definition llb1Pivot.c:175
ABC_NAMESPACE_IMPL_START int Llb_ManTracePaths_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pPivot)
DECLARATIONS ///.
Definition llb1Pivot.c:45
void Llb_ManLabelLiCones(Aig_Man_t *p)
Definition llb1Pivot.c:151
int Llb_ManTracePaths(Aig_Man_t *p, Aig_Obj_t *pPivot)
Definition llb1Pivot.c:81
void Llb_ManLabelLiCones_rec(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition llb1Pivot.c:130
Vec_Int_t * Llb_ManMarkPivotNodes(Aig_Man_t *p, int fUseInternal)
Definition llb1Pivot.c:220
void Llb_ManTestCuts(Aig_Man_t *p)
Definition llb1Pivot.c:103
#define Saig_ManForEachLi(p, pObj, i)
Definition saig.h:98
#define Saig_ManForEachLo(p, pObj, i)
Definition saig.h:96
unsigned int nRefs
Definition aig.h:81
unsigned int fMarkB
Definition aig.h:80
unsigned int fMarkA
Definition aig.h:79
#define assert(ex)
Definition util_old.h:213
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42