ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
abcUnate.c
Go to the documentation of this file.
1
20
21#include "base/abc/abc.h"
22
23#ifdef ABC_USE_CUDD
24#include "bdd/extrab/extraBdd.h"
25#endif
26
28
29
33#ifdef ABC_USE_CUDD
34
35static void Abc_NtkPrintUnateBdd( Abc_Ntk_t * pNtk, int fUseNaive, int fVerbose );
36static void Abc_NtkPrintUnateSat( Abc_Ntk_t * pNtk, int fVerbose );
37
41
53void Abc_NtkPrintUnate( Abc_Ntk_t * pNtk, int fUseBdds, int fUseNaive, int fVerbose )
54{
55 if ( fUseBdds || fUseNaive )
56 Abc_NtkPrintUnateBdd( pNtk, fUseNaive, fVerbose );
57 else
58 Abc_NtkPrintUnateSat( pNtk, fVerbose );
59}
60
72void Abc_NtkPrintUnateBdd( Abc_Ntk_t * pNtk, int fUseNaive, int fVerbose )
73{
74 Abc_Obj_t * pNode;
76 DdManager * dd; // the BDD manager used to hold shared BDDs
77// DdNode ** pbGlobal; // temporary storage for global BDDs
78 int TotalSupps = 0;
79 int TotalUnate = 0;
80 int i;
81 abctime clk = Abc_Clock();
82 abctime clkBdd, clkUnate;
83
84 // compute the global BDDs
85 dd = (DdManager *)Abc_NtkBuildGlobalBdds(pNtk, 10000000, 1, 1, 0, fVerbose);
86 if ( dd == NULL )
87 return;
88clkBdd = Abc_Clock() - clk;
89
90 // get information about the network
91// dd = pNtk->pManGlob;
92// dd = (DdManager *)Abc_NtkGlobalBddMan( pNtk );
93// pbGlobal = (DdNode **)Vec_PtrArray( pNtk->vFuncsGlob );
94
95 // print the size of the BDDs
96 printf( "Shared BDD size = %6d nodes.\n", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
97
98 // perform naive BDD-based computation
99 if ( fUseNaive )
100 {
101 Abc_NtkForEachCo( pNtk, pNode, i )
102 {
103// p = Extra_UnateComputeSlow( dd, pbGlobal[i] );
104 p = Extra_UnateComputeSlow( dd, (DdNode *)Abc_ObjGlobalBdd(pNode) );
105 if ( fVerbose )
106 {
107 printf( "Out%4d : ", i );
109 }
110 TotalSupps += p->nVars;
111 TotalUnate += p->nUnate;
113 }
114 }
115 // perform smart BDD-based computation
116 else
117 {
118 // create ZDD variables in the manager
119 Cudd_zddVarsFromBddVars( dd, 2 );
120 Abc_NtkForEachCo( pNtk, pNode, i )
121 {
122// p = Extra_UnateComputeFast( dd, pbGlobal[i] );
123 p = Extra_UnateComputeFast( dd, (DdNode *)Abc_ObjGlobalBdd(pNode) );
124 if ( fVerbose )
125 {
126 printf( "Out%4d : ", i );
128 }
129 TotalSupps += p->nVars;
130 TotalUnate += p->nUnate;
132 }
133 }
134clkUnate = Abc_Clock() - clk - clkBdd;
135
136 // print stats
137 printf( "Ins/Outs = %4d/%4d. Total supp = %5d. Total unate = %5d.\n",
138 Abc_NtkCiNum(pNtk), Abc_NtkCoNum(pNtk), TotalSupps, TotalUnate );
139 ABC_PRT( "Glob BDDs", clkBdd );
140 ABC_PRT( "Unateness", clkUnate );
141 ABC_PRT( "Total ", Abc_Clock() - clk );
142
143 // deref the PO functions
144// Abc_NtkFreeGlobalBdds( pNtk );
145 // stop the global BDD manager
146// Extra_StopManager( pNtk->pManGlob );
147// pNtk->pManGlob = NULL;
148 Abc_NtkFreeGlobalBdds( pNtk, 1 );
149}
150
162void Abc_NtkPrintUnateSat( Abc_Ntk_t * pNtk, int fVerbose )
163{
164}
165
166#else
167
168void Abc_NtkPrintUnate( Abc_Ntk_t * pNtk, int fUseBdds, int fUseNaive, int fVerbose ){}
169
170#endif
171
175
176
178
ABC_NAMESPACE_IMPL_START void Abc_NtkPrintUnate(Abc_Ntk_t *pNtk, int fUseBdds, int fUseNaive, int fVerbose)
DECLARATIONS ///.
Definition abcUnate.c:168
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachCo(pNtk, pCo, i)
Definition abc.h:522
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL void * Abc_NtkFreeGlobalBdds(Abc_Ntk_t *pNtk, int fFreeMan)
ABC_DLL void * Abc_NtkBuildGlobalBdds(Abc_Ntk_t *pNtk, int fBddSizeMax, int fDropInternal, int fReorder, int fReverse, int fVerbose)
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_PRT(a, t)
Definition abc_global.h:255
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Cube * p
Definition exorList.c:222
void Extra_UnateInfoDissolve(Extra_UnateInfo_t *)
Extra_UnateInfo_t * Extra_UnateComputeFast(DdManager *dd, DdNode *bFunc)
struct Extra_UnateInfo_t_ Extra_UnateInfo_t
Definition extraBdd.h:320
Extra_UnateInfo_t * Extra_UnateComputeSlow(DdManager *dd, DdNode *bFunc)
void Extra_UnateInfoPrint(Extra_UnateInfo_t *)