ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
covMan.c
Go to the documentation of this file.
1
20
21#include "cov.h"
22
24
25
29
33
45Cov_Man_t * Cov_ManAlloc( Abc_Ntk_t * pNtk, int nFaninMax, int nCubesMax )
46{
47 Cov_Man_t * pMan;
48 Cov_Obj_t * pMem;
49 Abc_Obj_t * pObj;
50 int i;
51 assert( pNtk->pManCut == NULL );
52
53 // start the manager
54 pMan = ABC_ALLOC( Cov_Man_t, 1 );
55 memset( pMan, 0, sizeof(Cov_Man_t) );
56 pMan->nFaninMax = nFaninMax;
57 pMan->nCubesMax = nCubesMax;
58 pMan->nWords = Abc_BitWordNum( nFaninMax * 2 );
59
60 // get the cubes
61 pMan->vComTo0 = Vec_IntAlloc( 2*nFaninMax );
62 pMan->vComTo1 = Vec_IntAlloc( 2*nFaninMax );
63 pMan->vPairs0 = Vec_IntAlloc( nFaninMax );
64 pMan->vPairs1 = Vec_IntAlloc( nFaninMax );
65 pMan->vTriv0 = Vec_IntAlloc( 1 ); Vec_IntPush( pMan->vTriv0, -1 );
66 pMan->vTriv1 = Vec_IntAlloc( 1 ); Vec_IntPush( pMan->vTriv1, -1 );
67
68 // allocate memory for object structures
69 pMan->pMemory = pMem = ABC_ALLOC( Cov_Obj_t, sizeof(Cov_Obj_t) * Abc_NtkObjNumMax(pNtk) );
70 memset( pMem, 0, sizeof(Cov_Obj_t) * Abc_NtkObjNumMax(pNtk) );
71 // allocate storage for the pointers to the memory
72 pMan->vObjStrs = Vec_PtrAlloc( Abc_NtkObjNumMax(pNtk) );
73 Vec_PtrFill( pMan->vObjStrs, Abc_NtkObjNumMax(pNtk), NULL );
74 Abc_NtkForEachObj( pNtk, pObj, i )
75 Vec_PtrWriteEntry( pMan->vObjStrs, i, pMem + i );
76 // create the cube manager
77 pMan->pManMin = Min_ManAlloc( nFaninMax );
78 return pMan;
79}
80
93{
94 Vec_Int_t * vSupp;
95 int i;
96 for ( i = 0; i < p->vObjStrs->nSize; i++ )
97 {
98 vSupp = ((Cov_Obj_t *)p->vObjStrs->pArray[i])->vSupp;
99 if ( vSupp ) Vec_IntFree( vSupp );
100 }
101
102 Min_ManFree( p->pManMin );
103 Vec_PtrFree( p->vObjStrs );
104 Vec_IntFree( p->vFanCounts );
105 Vec_IntFree( p->vTriv0 );
106 Vec_IntFree( p->vTriv1 );
107 Vec_IntFree( p->vComTo0 );
108 Vec_IntFree( p->vComTo1 );
109 Vec_IntFree( p->vPairs0 );
110 Vec_IntFree( p->vPairs1 );
111 ABC_FREE( p->pMemory );
112 ABC_FREE( p );
113}
114
127{
128 int nFanouts;
129 assert( p->vFanCounts );
130 nFanouts = Vec_IntEntry( p->vFanCounts, pObj->Id );
131 assert( nFanouts > 0 );
132 if ( --nFanouts == 0 )
133 {
134 Vec_IntFree( Abc_ObjGetSupp(pObj) );
135 Abc_ObjSetSupp( pObj, NULL );
136 Min_CoverRecycle( p->pManMin, Abc_ObjGetCover2(pObj) );
137 Abc_ObjSetCover2( pObj, NULL );
138 p->nSupps--;
139 }
140 Vec_IntWriteEntry( p->vFanCounts, pObj->Id, nFanouts );
141}
142
146
147
149
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
Definition abc.h:449
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#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
void Min_ManFree(Min_Man_t *p)
Definition covMinMan.c:104
Min_Man_t * Min_ManAlloc(int nVars)
DECLARATIONS ///.
Definition covMinMan.c:45
ABC_NAMESPACE_IMPL_START Cov_Man_t * Cov_ManAlloc(Abc_Ntk_t *pNtk, int nFaninMax, int nCubesMax)
DECLARATIONS ///.
Definition covMan.c:45
void Abc_NodeCovDropData(Cov_Man_t *p, Abc_Obj_t *pObj)
Definition covMan.c:126
void Cov_ManFree(Cov_Man_t *p)
Definition covMan.c:92
typedefABC_NAMESPACE_HEADER_START struct Cov_Man_t_ Cov_Man_t
DECLARATIONS ///.
Definition cov.h:34
struct Cov_Obj_t_ Cov_Obj_t
Definition cov.h:35
Cube * p
Definition exorList.c:222
void * pManCut
Definition abc.h:193
int Id
Definition abc.h:132
#define assert(ex)
Definition util_old.h:213
char * memset()