53 p->nPats = 8 *
sizeof(unsigned) *
p->nWords;
54 p->nWordsOut =
p->nPats *
p->nWords;
55 p->nPatsOut =
p->nPats *
p->nPats;
57 p->vPats = Vec_PtrAllocSimInfo( 1024,
p->nWords );
58 p->vPats0 = Vec_PtrAllocSimInfo( 128,
p->nWords );
59 p->vPats1 = Vec_PtrAllocSimInfo( 128,
p->nWords );
60 p->vOuts = Vec_PtrAllocSimInfo( 128,
p->nWordsOut );
62 p->vCands = Vec_VecStart( 16 );
81 assert( Abc_NtkIsStrash(pAig) );
83 if ( Vec_PtrSize(
p->vPats) < Abc_NtkObjNumMax(pAig)+1 )
85 Vec_PtrFree(
p->vPats );
86 p->vPats = Vec_PtrAllocSimInfo( Abc_NtkObjNumMax(pAig)+1,
p->nWords );
88 if ( Vec_PtrSize(
p->vPats0) < Abc_NtkPiNum(pAig) )
90 Vec_PtrFree(
p->vPats0 );
91 p->vPats0 = Vec_PtrAllocSimInfo( Abc_NtkPiNum(pAig),
p->nWords );
93 if ( Vec_PtrSize(
p->vPats1) < Abc_NtkPiNum(pAig) )
95 Vec_PtrFree(
p->vPats1 );
96 p->vPats1 = Vec_PtrAllocSimInfo( Abc_NtkPiNum(pAig),
p->nWords );
98 if ( Vec_PtrSize(
p->vOuts) < Abc_NtkPoNum(pAig) )
100 Vec_PtrFree(
p->vOuts );
101 p->vOuts = Vec_PtrAllocSimInfo( Abc_NtkPoNum(pAig),
p->nWordsOut );
104 Abc_InfoClear( Vec_PtrEntry(
p->vPats0,0),
p->nWords * Abc_NtkPiNum(pAig) );
105 Abc_InfoClear( Vec_PtrEntry(
p->vPats1,0),
p->nWords * Abc_NtkPiNum(pAig) );
123 Vec_PtrFree(
p->vPats );
124 Vec_PtrFree(
p->vPats0 );
125 Vec_PtrFree(
p->vPats1 );
126 Vec_PtrFree(
p->vOuts );
127 Vec_VecFree(
p->vCands );
150 pInfo = Vec_PtrEntry(
p->vPats, pObj->
Id );
151 Abc_InfoRandom( pInfo,
p->nWords );
169 unsigned * pInfo, * pInfo2;
173 pInfo = Vec_PtrEntry(
p->vPats, pObj->
Id );
174 pInfo2 = Vec_PtrEntry( vInfo, i );
175 for ( w = 0; w <
p->nWords; w++ )
176 pInfo[w] = pInfo2[w];
193 unsigned * pInfo, * pInfo1, * pInfo2;
194 int k, fComp1, fComp2;
196 assert( Abc_ObjIsNode(pNode) );
197 pInfo = Vec_PtrEntry(vSimInfo, pNode->
Id);
198 pInfo1 = Vec_PtrEntry(vSimInfo, Abc_ObjFaninId0(pNode));
199 pInfo2 = Vec_PtrEntry(vSimInfo, Abc_ObjFaninId1(pNode));
200 fComp1 = Abc_ObjFaninC0(pNode);
201 fComp2 = Abc_ObjFaninC1(pNode);
202 if ( fComp1 && fComp2 )
203 for ( k = 0; k < nSimWords; k++ )
204 pInfo[k] = ~pInfo1[k] & ~pInfo2[k];
205 else if ( fComp1 && !fComp2 )
206 for ( k = 0; k < nSimWords; k++ )
207 pInfo[k] = ~pInfo1[k] & pInfo2[k];
208 else if ( !fComp1 && fComp2 )
209 for ( k = 0; k < nSimWords; k++ )
210 pInfo[k] = pInfo1[k] & ~pInfo2[k];
212 for ( k = 0; k < nSimWords; k++ )
213 pInfo[k] = pInfo1[k] & pInfo2[k];
229 unsigned * pInfo, * pInfo1;
232 assert( Abc_ObjIsCo(pNode) );
233 pInfo = Vec_PtrEntry(vSimInfo, pNode->
Id);
234 pInfo1 = Vec_PtrEntry(vSimInfo, Abc_ObjFaninId0(pNode));
235 fComp1 = Abc_ObjFaninC0(pNode);
237 for ( k = 0; k < nSimWords; k++ )
238 pInfo[k] = ~pInfo1[k];
240 for ( k = 0; k < nSimWords; k++ )
241 pInfo[k] = pInfo1[k];
259 Abc_InfoFill( Vec_PtrEntry(
p->vPats,0),
p->nWords );
280 unsigned * pInfoCare, * pInfoNode;
282 pInfoCare = Vec_PtrEntry(
p->vPats, Abc_NtkPo(
p->pAig, 0)->Id );
283 pInfoNode = Vec_PtrEntry(
p->vPats, Abc_NtkPo(
p->pAig, 1)->Id );
284 for ( i = 0; i <
p->nPats; i++ )
287 if ( !Abc_InfoHasBit(pInfoCare, i) )
293 if ( !Abc_InfoHasBit(pInfoNode, i) )
295 if (
p->nPats0 >=
p->nPats )
298 if ( Abc_InfoHasBit( Vec_PtrEntry(
p->vPats, pObj->
Id), i ) )
299 Abc_InfoSetBit( Vec_PtrEntry(
p->vPats0, j),
p->nPats0 );
304 if (
p->nPats1 >=
p->nPats )
307 if ( Abc_InfoHasBit( Vec_PtrEntry(
p->vPats, pObj->
Id), i ) )
308 Abc_InfoSetBit( Vec_PtrEntry(
p->vPats1, j),
p->nPats1 );
329 assert( nPats > 0 && nPats <
nWords * 8 * (
int)
sizeof(
unsigned) );
331 if ( nPats < 8 *
sizeof(
unsigned) )
335 pInfo[0] |= ((~0) << nPats);
336 nPats = 8 *
sizeof(unsigned);
339 iWords = nPats / (8 *
sizeof(unsigned));
342 for ( w = iWords; w <
nWords; w++ )
360 unsigned * pInfo, * pInfo2;
365 pInfo = Vec_PtrEntry(
p->vPats, pObj->
Id );
366 pInfo2 = Vec_PtrEntry(
p->vOuts, i );
367 for ( j = 0; j <
p->nPats; j++ )
368 for ( w = 0; w <
p->nWords; w++ )
369 *pInfo2++ = pInfo[w];
386 unsigned * pInfo, * pInfo2;
391 pInfo = Vec_PtrEntry(
p->vPats, pObj->
Id );
392 pInfo2 = Vec_PtrEntry(
p->vOuts, i );
393 for ( j = 0; j <
p->nPats; j++, pInfo2 +=
p->nWords )
394 if ( Abc_InfoHasBit( pInfo, j ) )
395 for ( w = 0; w <
p->nWords; w++ )
396 pInfo2[w] = ~pInfo2[w];
413 unsigned * pInfoCare, * pInfoNode;
414 int i, nDcs, nOnes, nZeros;
415 pInfoCare = Vec_PtrEntry(
p->vPats, Abc_NtkPo(
p->pAig, 0)->Id );
416 pInfoNode = Vec_PtrEntry(
p->vPats, Abc_NtkPo(
p->pAig, 1)->Id );
417 nDcs = nOnes = nZeros = 0;
418 for ( i = 0; i <
p->nPats; i++ )
421 if ( !Abc_InfoHasBit(pInfoCare, i) )
427 if ( !Abc_InfoHasBit(pInfoNode, i) )
432 printf(
"On = %3d (%7.2f %%) ", nOnes, 100.0*nOnes/
p->nPats );
433 printf(
"Off = %3d (%7.2f %%) ", nZeros, 100.0*nZeros/
p->nPats );
434 printf(
"Dc = %3d (%7.2f %%) ", nDcs, 100.0*nDcs/
p->nPats );
435 printf(
"P0 = %3d ",
p->nPats0 );
436 printf(
"P1 = %3d ",
p->nPats1 );
437 if (
p->nPats0 < 4 ||
p->nPats1 < 4 )
460 pInfo2 = Vec_PtrEntry(
p->vOuts, i );
483 for ( Limit = 0; Limit < 10; Limit++ )
488 if ( !(
p->nPats0 <
p->nPats ||
p->nPats1 <
p->nPats) )
497 if (
p->nPats0 < 4 ||
p->nPats1 < 4 )
503 if (
p->nPats0 <
p->nPats )
505 if (
p->nPats1 <
p->nPats )
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_AigForEachAnd(pNtk, pNode, i)
#define Abc_NtkForEachPo(pNtk, pPo, i)
struct Abc_Ntk_t_ Abc_Ntk_t
#define Abc_NtkForEachPi(pNtk, pPi, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Extra_PrintBinary(FILE *pFile, unsigned Sign[], int nBits)
struct Res_Sim_t_ Res_Sim_t
void Res_SimFree(Res_Sim_t *p)
void Res_SimSetGiven(Res_Sim_t *p, Vec_Ptr_t *vInfo)
void Res_SimPadSimInfo(Vec_Ptr_t *vPats, int nPats, int nWords)
void Res_SimAdjust(Res_Sim_t *p, Abc_Ntk_t *pAig)
int Res_SimPrepare(Res_Sim_t *p, Abc_Ntk_t *pAig, int nTruePis, int fVerbose)
ABC_NAMESPACE_IMPL_START Res_Sim_t * Res_SimAlloc(int nWords)
DECLARATIONS ///.
void Res_SimSetRandom(Res_Sim_t *p)
void Res_SimTransferOne(Abc_Obj_t *pNode, Vec_Ptr_t *vSimInfo, int nSimWords)
void Res_SimProcessPats(Res_Sim_t *p)
void Res_SimReportOne(Res_Sim_t *p)
void Res_SimDeriveInfoComplement(Res_Sim_t *p)
void Res_SimPerformOne(Abc_Obj_t *pNode, Vec_Ptr_t *vSimInfo, int nSimWords)
void Res_SimPerformRound(Res_Sim_t *p)
void Res_SimPrintOutPatterns(Res_Sim_t *p, Abc_Ntk_t *pAig)
void Res_SimDeriveInfoReplicate(Res_Sim_t *p)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.