ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
cov.h File Reference
#include "base/abc/abc.h"
#include "covInt.h"
Include dependency graph for cov.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Cov_Obj_t_
 
struct  Cov_Man_t_
 

Typedefs

typedef typedefABC_NAMESPACE_HEADER_START struct Cov_Man_t_ Cov_Man_t
 DECLARATIONS ///.
 
typedef struct Cov_Obj_t_ Cov_Obj_t
 

Functions

Abc_Ntk_tAbc_NtkCovDerive (Cov_Man_t *p, Abc_Ntk_t *pNtk)
 FUNCTION DEFINITIONS ///.
 
Abc_Ntk_tAbc_NtkCovDeriveClean (Cov_Man_t *p, Abc_Ntk_t *pNtk)
 
Abc_Ntk_tAbc_NtkCovDeriveRegular (Cov_Man_t *p, Abc_Ntk_t *pNtk)
 
Abc_Ntk_tAbc_NtkSopEsopCover (Abc_Ntk_t *pNtk, int nFaninMax, int nCubesMax, int fUseEsop, int fUseSop, int fUseInvs, int fVerbose)
 FUNCTION DEFINITIONS ///.
 
Cov_Man_tCov_ManAlloc (Abc_Ntk_t *pNtk, int nFaninMax, int nCubesMax)
 DECLARATIONS ///.
 
void Cov_ManFree (Cov_Man_t *p)
 
void Abc_NodeCovDropData (Cov_Man_t *p, Abc_Obj_t *pObj)
 
Abc_Ntk_tAbc_NtkCovTestSop (Abc_Ntk_t *pNtk)
 

Typedef Documentation

◆ Cov_Man_t

typedef typedefABC_NAMESPACE_HEADER_START struct Cov_Man_t_ Cov_Man_t

DECLARATIONS ///.

CFile****************************************************************

FileName [cov.h]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Mapping into network of SOPs/ESOPs.]

Synopsis [External declarations.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
cov.h,v 1.00 2005/06/20 00:00:00 alanmi Exp

]

Definition at line 34 of file cov.h.

◆ Cov_Obj_t

typedef struct Cov_Obj_t_ Cov_Obj_t

Definition at line 35 of file cov.h.

Function Documentation

◆ Abc_NodeCovDropData()

void Abc_NodeCovDropData ( Cov_Man_t * p,
Abc_Obj_t * pObj )
extern

Function*************************************************************

Synopsis [Drop the covers at the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 126 of file covMan.c.

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}
Cube * p
Definition exorList.c:222
int Id
Definition abc.h:132
#define assert(ex)
Definition util_old.h:213

◆ Abc_NtkCovDerive()

Abc_Ntk_t * Abc_NtkCovDerive ( Cov_Man_t * p,
Abc_Ntk_t * pNtk )
extern

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Derives the decomposed network.]

Description []

SideEffects []

SeeAlso []

Definition at line 183 of file covBuild.c.

184{
185 Abc_Ntk_t * pNtkNew;
186 Abc_Obj_t * pObj;
187 int i;
188 assert( Abc_NtkIsStrash(pNtk) );
189 // perform strashing
190 pNtkNew = Abc_NtkStartFrom( pNtk, ABC_NTK_LOGIC, ABC_FUNC_SOP );
191 // reconstruct the network
192 Abc_NtkForEachCo( pNtk, pObj, i )
193 {
194 Abc_NtkCovDeriveNode_rec( p, pNtkNew, Abc_ObjFanin0(pObj), 0 );
195// printf( "*** CO %s : %d -> %d \n", Abc_ObjName(pObj), pObj->pCopy->Id, Abc_ObjFanin0(pObj)->pCopy->Id );
196 }
197 // add the COs
198 Abc_NtkFinalize( pNtk, pNtkNew );
199 Abc_NtkLogicMakeSimpleCos( pNtkNew, 1 );
200 // make sure everything is okay
201 if ( !Abc_NtkCheck( pNtkNew ) )
202 {
203 printf( "Abc_NtkCovDerive: The network check has failed.\n" );
204 Abc_NtkDelete( pNtkNew );
205 return NULL;
206 }
207 return pNtkNew;
208}
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachCo(pNtk, pCo, i)
Definition abc.h:522
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Definition abcCheck.c:64
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL void Abc_NtkFinalize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkNew)
Definition abcNtk.c:355
@ ABC_NTK_LOGIC
Definition abc.h:57
ABC_DLL int Abc_NtkLogicMakeSimpleCos(Abc_Ntk_t *pNtk, int fDuplicate)
Definition abcUtil.c:1080
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Definition abcNtk.c:1421
@ ABC_FUNC_SOP
Definition abc.h:65
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
Definition abcNtk.c:157
Abc_Obj_t * Abc_NtkCovDeriveNode_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int Level)
Definition covBuild.c:103
Here is the call graph for this function:

◆ Abc_NtkCovDeriveClean()

Abc_Ntk_t * Abc_NtkCovDeriveClean ( Cov_Man_t * p,
Abc_Ntk_t * pNtk )
extern

Function*************************************************************

Synopsis [Derives the decomposed network.]

Description [The resulting network contains only pure AND/OR/EXOR gates and inverters. This procedure is usedful to generate Verilog.]

SideEffects []

SeeAlso []

Definition at line 357 of file covBuild.c.

358{
359 Abc_Ntk_t * pNtkNew;
360 Abc_Obj_t * pObj, * pNodeNew;
361 int i;
362 assert( Abc_NtkIsStrash(pNtk) );
363 // perform strashing
364 pNtkNew = Abc_NtkStartFrom( pNtk, ABC_NTK_LOGIC, ABC_FUNC_SOP );
365 // reconstruct the network
366 Abc_NtkForEachCo( pNtk, pObj, i )
367 {
368 pNodeNew = Abc_NtkCovDeriveNodeInv_rec( p, pNtkNew, Abc_ObjFanin0(pObj), Abc_ObjFaninC0(pObj) );
369 Abc_ObjAddFanin( pObj->pCopy, pNodeNew );
370 }
371 // add the COs
372 Abc_NtkLogicMakeSimpleCos( pNtkNew, 0 );
373 // make sure everything is okay
374 if ( !Abc_NtkCheck( pNtkNew ) )
375 {
376 printf( "Abc_NtkCovDeriveInv: The network check has failed.\n" );
377 Abc_NtkDelete( pNtkNew );
378 return NULL;
379 }
380 return pNtkNew;
381}
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
Definition abcFanio.c:84
Abc_Obj_t * Abc_NtkCovDeriveNodeInv_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCompl)
Definition covBuild.c:300
Abc_Obj_t * pCopy
Definition abc.h:148
Here is the call graph for this function:

◆ Abc_NtkCovDeriveRegular()

Abc_Ntk_t * Abc_NtkCovDeriveRegular ( Cov_Man_t * p,
Abc_Ntk_t * pNtk )
extern

Function*************************************************************

Synopsis [Derives the decomposed network.]

Description []

SideEffects []

SeeAlso []

Definition at line 503 of file covBuild.c.

504{
505 Abc_Ntk_t * pNtkNew;
506 Abc_Obj_t * pObj, * pNodeNew;
507 int i;
508 assert( Abc_NtkIsStrash(pNtk) );
509 // perform strashing
510 pNtkNew = Abc_NtkStartFrom( pNtk, ABC_NTK_LOGIC, ABC_FUNC_SOP );
511 // reconstruct the network
512 if ( Abc_ObjFanoutNum(Abc_AigConst1(pNtk)) > 0 )
514 Abc_NtkForEachCo( pNtk, pObj, i )
515 {
516 pNodeNew = Abc_NtkCovDerive_rec( p, pNtkNew, Abc_ObjFanin0(pObj) );
517 if ( Abc_ObjFaninC0(pObj) )
518 {
519 if ( pNodeNew->pData && Abc_ObjFanoutNum(Abc_ObjFanin0(pObj)) == 1 )
520 Abc_SopComplement( (char *)pNodeNew->pData );
521 else
522 pNodeNew = Abc_NtkCreateNodeInv( pNtkNew, pNodeNew );
523 }
524 Abc_ObjAddFanin( pObj->pCopy, pNodeNew );
525 }
526 // add the COs
527 Abc_NtkLogicMakeSimpleCos( pNtkNew, 0 );
528 // make sure everything is okay
529 if ( !Abc_NtkCheck( pNtkNew ) )
530 {
531 printf( "Abc_NtkCovDerive: The network check has failed.\n" );
532 Abc_NtkDelete( pNtkNew );
533 return NULL;
534 }
535 return pNtkNew;
536}
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst1(Abc_Ntk_t *pNtk)
Definition abcObj.c:643
ABC_DLL void Abc_SopComplement(char *pSop)
Definition abcSop.c:648
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeInv(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
Definition abcObj.c:674
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
Definition abcAig.c:683
Abc_Obj_t * Abc_NtkCovDerive_rec(Cov_Man_t *p, Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj)
Definition covBuild.c:396
void * pData
Definition abc.h:145
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_NtkCovTestSop()

Abc_Ntk_t * Abc_NtkCovTestSop ( Abc_Ntk_t * pNtk)
extern

◆ Abc_NtkSopEsopCover()

Abc_Ntk_t * Abc_NtkSopEsopCover ( Abc_Ntk_t * pNtk,
int nFaninMax,
int nCubesMax,
int fUseEsop,
int fUseSop,
int fUseInvs,
int fVerbose )
extern

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Performs decomposition.]

Description []

SideEffects []

SeeAlso []

Definition at line 60 of file covCore.c.

61{
62 Abc_Ntk_t * pNtkNew;
63 Cov_Man_t * p;
64
65 assert( Abc_NtkIsStrash(pNtk) );
66
67 // create the manager
68 p = Cov_ManAlloc( pNtk, nFaninMax, nCubesMax );
69 p->fUseEsop = fUseEsop;
70 p->fUseSop = fUseSop;
71 pNtk->pManCut = p;
72
73 // perform mapping
74 Abc_NtkCovCovers( p, pNtk, fVerbose );
75
76 // derive the final network
77// if ( fUseInvs )
78// pNtkNew = Abc_NtkCovDeriveClean( p, pNtk );
79// else
80// pNtkNew = Abc_NtkCovDerive( p, pNtk );
81// pNtkNew = NULL;
82 pNtkNew = Abc_NtkCovDeriveRegular( p, pNtk );
83
84 Cov_ManFree( p );
85 pNtk->pManCut = NULL;
86
87 // make sure that everything is okay
88 if ( pNtkNew && !Abc_NtkCheck( pNtkNew ) )
89 {
90 printf( "Abc_NtkCov: The network check has failed.\n" );
91 Abc_NtkDelete( pNtkNew );
92 return NULL;
93 }
94 return pNtkNew;
95}
void Cov_ManFree(Cov_Man_t *p)
Definition covMan.c:92
Abc_Ntk_t * Abc_NtkCovDeriveRegular(Cov_Man_t *p, Abc_Ntk_t *pNtk)
Definition covBuild.c:503
typedefABC_NAMESPACE_HEADER_START struct Cov_Man_t_ Cov_Man_t
DECLARATIONS ///.
Definition cov.h:34
Cov_Man_t * Cov_ManAlloc(Abc_Ntk_t *pNtk, int nFaninMax, int nCubesMax)
DECLARATIONS ///.
Definition covMan.c:45
void * pManCut
Definition abc.h:193
Here is the call graph for this function:

◆ Cov_ManAlloc()

Cov_Man_t * Cov_ManAlloc ( Abc_Ntk_t * pNtk,
int nFaninMax,
int nCubesMax )
extern

DECLARATIONS ///.

CFile****************************************************************

FileName [covMan.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Mapping into network of SOPs/ESOPs.]

Synopsis [Decomposition manager.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
covMan.c,v 1.00 2005/06/20 00:00:00 alanmi Exp

] FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 45 of file covMan.c.

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}
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
Definition abc.h:449
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
Min_Man_t * Min_ManAlloc(int nVars)
DECLARATIONS ///.
Definition covMinMan.c:45
struct Cov_Obj_t_ Cov_Obj_t
Definition cov.h:35
char * memset()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Cov_ManFree()

void Cov_ManFree ( Cov_Man_t * p)
extern

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 92 of file covMan.c.

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}
#define ABC_FREE(obj)
Definition abc_global.h:267
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
Here is the call graph for this function:
Here is the caller graph for this function: