ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
giaTis.c
Go to the documentation of this file.
1
20
21#include "gia.h"
22
24
25
29
33
46{
47 Gia_Man_t * pNew, * pTemp;
48 Gia_Obj_t * pObj, * pFan0, * pFan1, * pFanC;
49 int i;
50 assert( p->pMuxes == NULL );
51 ABC_FREE( p->pRefs );
53 // start the new manager
54 pNew = Gia_ManStart( 5000 );
55 pNew->pName = Abc_UtilStrsav( p->pName );
56 pNew->pSpec = Abc_UtilStrsav( p->pSpec );
57 pNew->pMuxes = ABC_CALLOC( unsigned, pNew->nObjsAlloc );
58 // create constant
59 Gia_ManConst0(p)->Value = 0;
60 // create PIs
61 Gia_ManForEachCi( p, pObj, i )
62 pObj->Value = Gia_ManAppendCi( pNew );
63 // create internal nodes
64 Gia_ManHashStart( pNew );
65 Gia_ManForEachAnd( p, pObj, i )
66 {
67 if ( !Gia_ObjIsMuxType(pObj) || (Gia_ObjRefNum(p, Gia_ObjFanin0(pObj)) > 1 && Gia_ObjRefNum(p, Gia_ObjFanin1(pObj)) > 1) )
68 pObj->Value = Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
69 else if ( Gia_ObjRecognizeExor(pObj, &pFan0, &pFan1) )
70 pObj->Value = Gia_ManHashXorReal( pNew, Gia_ObjLitCopy(p, Gia_ObjToLit(p, pFan0)), Gia_ObjLitCopy(p, Gia_ObjToLit(p, pFan1)) );
71 else
72 {
73 pFanC = Gia_ObjRecognizeMux( pObj, &pFan1, &pFan0 );
74 pObj->Value = Gia_ManHashMuxReal( pNew, Gia_ObjLitCopy(p, Gia_ObjToLit(p, pFanC)), Gia_ObjLitCopy(p, Gia_ObjToLit(p, pFan1)), Gia_ObjLitCopy(p, Gia_ObjToLit(p, pFan0)) );
75 }
76 }
77 Gia_ManHashStop( pNew );
78 // create ROs
79 Gia_ManForEachCo( p, pObj, i )
80 pObj->Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
81 Gia_ManSetRegNum( pNew, Gia_ManRegNum(p) );
82 // perform cleanup
83 pNew = Gia_ManCleanup( pTemp = pNew );
84 Gia_ManStop( pTemp );
85 return pNew;
86}
87
99void Gia_ManTisCollectMffc_rec( Gia_Man_t * p, int Id, Vec_Int_t * vMffc, Vec_Int_t * vLeaves )
100{
101 Gia_Obj_t * pObj;
102 if ( Gia_ObjIsTravIdCurrentId(p, Id) )
103 return;
104 Gia_ObjSetTravIdCurrentId(p, Id);
105 if ( Gia_ObjRefNumId(p, Id) > 1 )
106 {
107 Vec_IntPush( vLeaves, Id );
108 return;
109 }
110 pObj = Gia_ManObj( p, Id );
111 if ( Gia_ObjIsCi(pObj) )
112 {
113 Vec_IntPush( vLeaves, Id );
114 return;
115 }
116 assert( Gia_ObjIsAnd(pObj) );
117 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId0(pObj, Id), vMffc, vLeaves );
118 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId1(pObj, Id), vMffc, vLeaves );
119 if ( Gia_ObjIsMuxId(p, Id) )
120 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId2(p, Id), vMffc, vLeaves );
121 Vec_IntPush( vMffc, Id );
122}
123void Gia_ManTisCollectMffc( Gia_Man_t * p, int Id, Vec_Int_t * vMffc, Vec_Int_t * vLeaves )
124{
125 Gia_Obj_t * pObj = Gia_ManObj( p, Id );
126 assert( Gia_ObjIsAnd(pObj) );
127 Vec_IntClear( vMffc );
128 Vec_IntClear( vLeaves );
130 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId0(pObj, Id), vMffc, vLeaves );
131 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId1(pObj, Id), vMffc, vLeaves );
132 if ( Gia_ObjIsMuxId(p, Id) )
133 Gia_ManTisCollectMffc_rec( p, Gia_ObjFaninId2(p, Id), vMffc, vLeaves );
134 Vec_IntPush( vMffc, Id );
135}
136
148void Gia_ManTisPrintMffc( Gia_Man_t * p, int Id, Vec_Int_t * vMffc, Vec_Int_t * vLeaves )
149{
150 Gia_Obj_t * pObj;
151 int i;
152 printf( "MFFC %d has %d nodes and %d leaves:\n", Id, Vec_IntSize(vMffc), Vec_IntSize(vLeaves) );
153 Gia_ManForEachObjVecReverse( vMffc, p, pObj, i )
154 {
155 printf( "Node %2d : ", Vec_IntSize(vMffc) - 1 - i );
156 Gia_ObjPrint( p, pObj );
157 }
158 Gia_ManForEachObjVec( vLeaves, p, pObj, i )
159 {
160 printf( "Leaf %2d : ", i );
161 Gia_ObjPrint( p, pObj );
162 }
163 printf( "\n" );
164}
165
178{
179 Gia_Man_t * p;
180 Gia_Obj_t * pObj;
181 Vec_Int_t * vMffc, * vLeaves;
182 int i;
183 vMffc = Vec_IntAlloc( 10 );
184 vLeaves = Vec_IntAlloc( 10 );
185 p = Gia_ManTisDupMuxes( pInit );
187 Gia_ManForEachAnd( p, pObj, i )
188 {
189 if ( Gia_ObjRefNumId(p, i) == 1 )
190 continue;
191 Gia_ManTisCollectMffc( p, i, vMffc, vLeaves );
192 Gia_ManTisPrintMffc( p, i, vMffc, vLeaves );
193 }
194 Gia_ManForEachCo( p, pObj, i )
195 {
196 if ( Gia_ObjRefNumId(p, Gia_ObjFaninId0p(p, pObj)) > 1 )
197 continue;
198 Gia_ManTisCollectMffc( p, Gia_ObjFaninId0p(p, pObj), vMffc, vLeaves );
199 Gia_ManTisPrintMffc( p, Gia_ObjFaninId0p(p, pObj), vMffc, vLeaves );
200 }
201 Gia_ManStop( p );
202 Vec_IntFree( vMffc );
203 Vec_IntFree( vLeaves );
204}
205
206
210
211
213
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
void Gia_ManTisCollectMffc(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
Definition giaTis.c:123
void Gia_ManTisTest(Gia_Man_t *pInit)
Definition giaTis.c:177
void Gia_ManTisCollectMffc_rec(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
Definition giaTis.c:99
void Gia_ManTisPrintMffc(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
Definition giaTis.c:148
ABC_NAMESPACE_IMPL_START Gia_Man_t * Gia_ManTisDupMuxes(Gia_Man_t *p)
DECLARATIONS ///.
Definition giaTis.c:45
void Gia_ManStop(Gia_Man_t *p)
Definition giaMan.c:82
void Gia_ManHashStart(Gia_Man_t *p)
Definition giaHash.c:125
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
Definition giaUtil.c:1056
#define Gia_ManForEachAnd(p, pObj, i)
Definition gia.h:1214
int Gia_ManHashMuxReal(Gia_Man_t *p, int iLitC, int iLit1, int iLit0)
Definition giaHash.c:521
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
Definition giaMan.c:764
#define Gia_ManForEachObjVecReverse(vVec, p, pObj, i)
Definition gia.h:1202
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
Definition giaMan.c:57
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
Definition giaUtil.c:982
void Gia_ObjPrint(Gia_Man_t *p, Gia_Obj_t *pObj)
Definition giaUtil.c:1456
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Definition gia.h:1194
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
Definition giaScl.c:84
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
Definition giaUtil.c:1018
void Gia_ManCreateRefs(Gia_Man_t *p)
Definition giaUtil.c:779
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Definition giaHash.c:576
void Gia_ManIncrementTravId(Gia_Man_t *p)
Definition giaUtil.c:190
int Gia_ManHashXorReal(Gia_Man_t *p, int iLit0, int iLit1)
Definition giaHash.c:469
#define Gia_ManForEachCo(p, pObj, i)
Definition gia.h:1236
#define Gia_ManForEachCi(p, pObj, i)
Definition gia.h:1228
void Gia_ManHashStop(Gia_Man_t *p)
Definition giaHash.c:149
unsigned * pMuxes
Definition gia.h:106
char * pSpec
Definition gia.h:100
int nObjsAlloc
Definition gia.h:104
char * pName
Definition gia.h:99
unsigned Value
Definition gia.h:89
#define assert(ex)
Definition util_old.h:213