ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
simMan.c
Go to the documentation of this file.
1
20
21#include "base/abc/abc.h"
22#include "sim.h"
23
25
26
30
34
46Sym_Man_t * Sym_ManStart( Abc_Ntk_t * pNtk, int fVerbose )
47{
48 Sym_Man_t * p;
49 int i, v;
50 // start the manager
51 p = ABC_ALLOC( Sym_Man_t, 1 );
52 memset( p, 0, sizeof(Sym_Man_t) );
53 p->pNtk = pNtk;
54 p->vNodes = Abc_NtkDfs( pNtk, 0 );
55 p->nInputs = Abc_NtkCiNum(p->pNtk);
56 p->nOutputs = Abc_NtkCoNum(p->pNtk);
57 // internal simulation information
58 p->nSimWords = SIM_NUM_WORDS(p->nInputs);
59 p->vSim = Sim_UtilInfoAlloc( Abc_NtkObjNumMax(pNtk), p->nSimWords, 0 );
60 // symmetry info for each output
61 p->vMatrSymms = Vec_PtrStart( p->nOutputs );
62 p->vMatrNonSymms = Vec_PtrStart( p->nOutputs );
63 p->vPairsTotal = Vec_IntStart( p->nOutputs );
64 p->vPairsSym = Vec_IntStart( p->nOutputs );
65 p->vPairsNonSym = Vec_IntStart( p->nOutputs );
66 for ( i = 0; i < p->nOutputs; i++ )
67 {
68 p->vMatrSymms->pArray[i] = Extra_BitMatrixStart( p->nInputs );
69 p->vMatrNonSymms->pArray[i] = Extra_BitMatrixStart( p->nInputs );
70 }
71 // temporary patterns
72 p->uPatRand = ABC_ALLOC( unsigned, p->nSimWords );
73 p->uPatCol = ABC_ALLOC( unsigned, p->nSimWords );
74 p->uPatRow = ABC_ALLOC( unsigned, p->nSimWords );
75 p->vVarsU = Vec_IntStart( 100 );
76 p->vVarsV = Vec_IntStart( 100 );
77 // compute supports
78 p->vSuppFun = Sim_ComputeFunSupp( pNtk, fVerbose );
79 p->vSupports = Vec_VecStart( p->nOutputs );
80 for ( i = 0; i < p->nOutputs; i++ )
81 for ( v = 0; v < p->nInputs; v++ )
82 if ( Sim_SuppFunHasVar( p->vSuppFun, i, v ) )
83 Vec_VecPushInt( p->vSupports, i, v );
84 return p;
85}
86
99{
100 int i;
102 if ( p->vSuppFun ) Sim_UtilInfoFree( p->vSuppFun );
103 if ( p->vSim ) Sim_UtilInfoFree( p->vSim );
104 if ( p->vNodes ) Vec_PtrFree( p->vNodes );
105 if ( p->vSupports ) Vec_VecFree( p->vSupports );
106 for ( i = 0; i < p->nOutputs; i++ )
107 {
108 Extra_BitMatrixStop( (Extra_BitMat_t *)p->vMatrSymms->pArray[i] );
109 Extra_BitMatrixStop( (Extra_BitMat_t *)p->vMatrNonSymms->pArray[i] );
110 }
111 Vec_IntFree( p->vVarsU );
112 Vec_IntFree( p->vVarsV );
113 Vec_PtrFree( p->vMatrSymms );
114 Vec_PtrFree( p->vMatrNonSymms );
115 Vec_IntFree( p->vPairsTotal );
116 Vec_IntFree( p->vPairsSym );
117 Vec_IntFree( p->vPairsNonSym );
118 ABC_FREE( p->uPatRand );
119 ABC_FREE( p->uPatCol );
120 ABC_FREE( p->uPatRow );
121 ABC_FREE( p );
122}
123
136{
137// printf( "Inputs = %5d. Outputs = %5d. Sim words = %5d.\n",
138// Abc_NtkCiNum(p->pNtk), Abc_NtkCoNum(p->pNtk), p->nSimWords );
139 printf( "Total symm = %8d.\n", p->nPairsSymm );
140 printf( "Structural symm = %8d.\n", p->nPairsSymmStr );
141 printf( "Total non-sym = %8d.\n", p->nPairsNonSymm );
142 printf( "Total var pairs = %8d.\n", p->nPairsTotal );
143 printf( "Sat runs SAT = %8d.\n", p->nSatRunsSat );
144 printf( "Sat runs UNSAT = %8d.\n", p->nSatRunsUnsat );
145 ABC_PRT( "Structural ", p->timeStruct );
146 ABC_PRT( "Simulation ", p->timeSim );
147 ABC_PRT( "Matrix ", p->timeMatr );
148 ABC_PRT( "Counting ", p->timeCount );
149 ABC_PRT( "Fraiging ", p->timeFraig );
150 ABC_PRT( "SAT ", p->timeSat );
151 ABC_PRT( "TOTAL ", p->timeTotal );
152}
153
154
166Sim_Man_t * Sim_ManStart( Abc_Ntk_t * pNtk, int fLightweight )
167{
168 Sim_Man_t * p;
169 // start the manager
170 p = ABC_ALLOC( Sim_Man_t, 1 );
171 memset( p, 0, sizeof(Sim_Man_t) );
172 p->pNtk = pNtk;
173 p->nInputs = Abc_NtkCiNum(p->pNtk);
174 p->nOutputs = Abc_NtkCoNum(p->pNtk);
175 // internal simulation information
176 p->nSimBits = 2048;
177 p->nSimWords = SIM_NUM_WORDS(p->nSimBits);
178 p->vSim0 = Sim_UtilInfoAlloc( Abc_NtkObjNumMax(pNtk), p->nSimWords, 0 );
179 p->fLightweight = fLightweight;
180 if (!p->fLightweight) {
181 p->vSim1 = Sim_UtilInfoAlloc( Abc_NtkObjNumMax(pNtk), p->nSimWords, 0 );
182 // support information
183 p->nSuppBits = Abc_NtkCiNum(pNtk);
184 p->nSuppWords = SIM_NUM_WORDS(p->nSuppBits);
185 p->vSuppStr = Sim_ComputeStrSupp( pNtk );
186 p->vSuppFun = Sim_UtilInfoAlloc( Abc_NtkCoNum(p->pNtk), p->nSuppWords, 1 );
187 // other data
188 p->pMmPat = Extra_MmFixedStart( sizeof(Sim_Pat_t) + p->nSuppWords * sizeof(unsigned) );
189 p->vFifo = Vec_PtrAlloc( 100 );
190 p->vDiffs = Vec_IntAlloc( 100 );
191 // allocate support targets (array of unresolved outputs for each input)
192 p->vSuppTargs = Vec_VecStart( p->nInputs );
193 }
194 return p;
195}
196
209{
211 if ( p->vSim0 ) Sim_UtilInfoFree( p->vSim0 );
212 if ( p->vSim1 ) Sim_UtilInfoFree( p->vSim1 );
213 if ( p->vSuppStr ) Sim_UtilInfoFree( p->vSuppStr );
214// if ( p->vSuppFun ) Sim_UtilInfoFree( p->vSuppFun );
215 if ( p->vSuppTargs ) Vec_VecFree( p->vSuppTargs );
216 if ( p->pMmPat ) Extra_MmFixedStop( p->pMmPat );
217 if ( p->vFifo ) Vec_PtrFree( p->vFifo );
218 if ( p->vDiffs ) Vec_IntFree( p->vDiffs );
219 ABC_FREE( p );
220}
221
234{
235// printf( "Inputs = %5d. Outputs = %5d. Sim words = %5d.\n",
236// Abc_NtkCiNum(p->pNtk), Abc_NtkCoNum(p->pNtk), p->nSimWords );
237 printf( "Total func supps = %8d.\n", Sim_UtilCountSuppSizes(p, 0) );
238 printf( "Total struct supps = %8d.\n", Sim_UtilCountSuppSizes(p, 1) );
239 printf( "Sat runs SAT = %8d.\n", p->nSatRunsSat );
240 printf( "Sat runs UNSAT = %8d.\n", p->nSatRunsUnsat );
241 ABC_PRT( "Simulation ", p->timeSim );
242 ABC_PRT( "Traversal ", p->timeTrav );
243 ABC_PRT( "Fraiging ", p->timeFraig );
244 ABC_PRT( "SAT ", p->timeSat );
245 ABC_PRT( "TOTAL ", p->timeTotal );
246}
247
248
249
262{
263 Sim_Pat_t * pPat;
264 pPat = (Sim_Pat_t *)Extra_MmFixedEntryFetch( p->pMmPat );
265 pPat->Output = -1;
266 pPat->pData = (unsigned *)((char *)pPat + sizeof(Sim_Pat_t));
267 memset( pPat->pData, 0, p->nSuppWords * sizeof(unsigned) );
268 return pPat;
269}
270
283{
284 Extra_MmFixedEntryRecycle( p->pMmPat, (char *)pPat );
285}
286
290
291
293
ABC_DLL Vec_Ptr_t * Abc_NtkDfs(Abc_Ntk_t *pNtk, int fCollectAll)
Definition abcDfs.c:82
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
#define ABC_PRT(a, t)
Definition abc_global.h:255
#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
Cube * p
Definition exorList.c:222
char * Extra_MmFixedEntryFetch(Extra_MmFixed_t *p)
void Extra_MmFixedStop(Extra_MmFixed_t *p)
Extra_BitMat_t * Extra_BitMatrixStart(int nSize)
struct Extra_BitMat_t_ Extra_BitMat_t
Definition extra.h:81
Extra_MmFixed_t * Extra_MmFixedStart(int nEntrySize)
void Extra_MmFixedEntryRecycle(Extra_MmFixed_t *p, char *pEntry)
void Extra_BitMatrixStop(Extra_BitMat_t *p)
void Sim_ManPatFree(Sim_Man_t *p, Sim_Pat_t *pPat)
Definition simMan.c:282
Sim_Pat_t * Sim_ManPatAlloc(Sim_Man_t *p)
Definition simMan.c:261
void Sim_ManPrintStats(Sim_Man_t *p)
Definition simMan.c:233
Sim_Man_t * Sim_ManStart(Abc_Ntk_t *pNtk, int fLightweight)
Definition simMan.c:166
void Sim_ManStop(Sim_Man_t *p)
Definition simMan.c:208
void Sym_ManStop(Sym_Man_t *p)
Definition simMan.c:98
ABC_NAMESPACE_IMPL_START Sym_Man_t * Sym_ManStart(Abc_Ntk_t *pNtk, int fVerbose)
DECLARATIONS ///.
Definition simMan.c:46
void Sym_ManPrintStats(Sym_Man_t *p)
Definition simMan.c:135
void Sim_UtilInfoFree(Vec_Ptr_t *p)
Definition simUtils.c:84
struct Sim_Pat_t_ Sim_Pat_t
Definition sim.h:136
Vec_Ptr_t * Sim_UtilInfoAlloc(int nSize, int nWords, int fClean)
FUNCTION DEFINITIONS ///.
Definition simUtils.c:57
struct Sim_Man_t_ Sim_Man_t
Definition sim.h:100
#define Sim_SuppFunHasVar(vSupps, Output, v)
Definition sim.h:169
int Sim_UtilCountSuppSizes(Sim_Man_t *p, int fStruct)
Definition simUtils.c:372
Vec_Ptr_t * Sim_ComputeStrSupp(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Definition simSupp.c:57
Vec_Ptr_t * Sim_ComputeFunSupp(Abc_Ntk_t *pNtk, int fVerbose)
Definition simSupp.c:103
#define SIM_NUM_WORDS(n)
MACRO DEFINITIONS ///.
Definition sim.h:148
typedefABC_NAMESPACE_HEADER_START struct Sym_Man_t_ Sym_Man_t
INCLUDES ///.
Definition sim.h:48
int Output
Definition sim.h:140
unsigned * pData
Definition sim.h:141
char * memset()