49 Vec_IntPush( vPairs, pObj0->
Id );
50 Vec_IntPush( vPairs, pObj1->
Id );
71 for ( i = 0; i < Vec_IntSize(vPairs); i += 2 )
73 pObj0 = Aig_ManObj( p0, Vec_IntEntry(vPairs, i) );
74 pObj1 = Aig_ManObj( p1, Vec_IntEntry(vPairs, i+1) );
81 pObj0 = Aig_ManConst1( p0 );
82 pObj1 = Aig_ManConst1( p1 );
88 pObj1 = Aig_ManCi( p1, i );
95 pObj1 = Aig_ManCo( p1, i );
103 if ( pObj0->
pData == NULL )
106 if ( !Saig_ObjIsLo(p1, pObj1) )
107 Abc_Print( 1,
"Mismatch between LO pairs.\n" );
111 if ( pObj1->
pData == NULL )
114 if ( !Saig_ObjIsLo(p0, pObj0) )
115 Abc_Print( 1,
"Mismatch between LO pairs.\n" );
134 Vec_PtrClear( vNodes );
138 if ( !Aig_ObjIsNode(pObj) && !Aig_ObjIsCi(pObj) )
140 if ( pObj->
pData != NULL )
142 if ( Saig_ObjIsLo(
p, pObj) )
144 pNext = Saig_ObjLoToLi(
p, pObj);
145 pNext = Aig_ObjFanin0(pNext);
146 if ( pNext->
pData && !Aig_ObjIsTravIdCurrent(
p, pNext) && !Aig_ObjIsConst1(pNext) )
148 Aig_ObjSetTravIdCurrent(
p, pNext);
149 Vec_PtrPush( vNodes, pNext );
152 if ( Aig_ObjIsNode(pObj) )
154 pNext = Aig_ObjFanin0(pObj);
155 if ( pNext->
pData && !Aig_ObjIsTravIdCurrent(
p, pNext) )
157 Aig_ObjSetTravIdCurrent(
p, pNext);
158 Vec_PtrPush( vNodes, pNext );
160 pNext = Aig_ObjFanin1(pObj);
161 if ( pNext->
pData && !Aig_ObjIsTravIdCurrent(
p, pNext) )
163 Aig_ObjSetTravIdCurrent(
p, pNext);
164 Vec_PtrPush( vNodes, pNext );
169 if ( Saig_ObjIsPo(
p, pNext) )
171 if ( Saig_ObjIsLi(
p, pNext) )
172 pNext = Saig_ObjLiToLo(
p, pNext);
173 if ( pNext->
pData && !Aig_ObjIsTravIdCurrent(
p, pNext) )
175 Aig_ObjSetTravIdCurrent(
p, pNext);
176 Vec_PtrPush( vNodes, pNext );
199 if ( !Aig_ObjIsNode(pObj) && !Aig_ObjIsCi(pObj) )
201 if ( pObj->
pData != NULL )
226 vNodes0 = Vec_PtrAlloc( 1000 );
227 vNodes1 = Vec_PtrAlloc( 1000 );
231 Abc_Print( 1,
"Extending islands by %d steps:\n", nDist );
232 Abc_Print( 1,
"%2d : Total = %6d. Unmatched = %6d. Ratio = %6.2f %%\n",
233 0, Aig_ManCiNum(p0) + Aig_ManNodeNum(p0),
234 nUnmached, 100.0 * nUnmached/(Aig_ManCiNum(p0) + Aig_ManNodeNum(p0)) );
236 for ( d = 0; d < nDist; d++ )
243 if ( pNext1 == NULL )
246 if ( Saig_ObjIsPi(p0, pNext1) )
248 pNext0->
pData = NULL;
249 pNext1->
pData = NULL;
254 if ( pNext1 == NULL )
257 if ( Saig_ObjIsPi(p1, pNext1) )
259 pNext0->
pData = NULL;
260 pNext1->
pData = NULL;
265 Abc_Print( 1,
"%2d : Total = %6d. Unmatched = %6d. Ratio = %6.2f %%\n",
266 d+1, Aig_ManCiNum(p0) + Aig_ManNodeNum(p0),
267 nUnmached, 100.0 * nUnmached/(Aig_ManCiNum(p0) + Aig_ManNodeNum(p0)) );
270 Vec_PtrFree( vNodes0 );
271 Vec_PtrFree( vNodes1 );
293 vNewLis = Vec_PtrAlloc( 100 );
296 if ( pObj0->
pData != NULL )
299 pObj0->
pData = pObj1;
300 pObj1->
pData = pObj0;
301 Vec_PtrPush( vNewLis, pObj0Li );
306 if ( pObj0->
pData != NULL )
308 pObj1 =
Aig_And( p1, Aig_ObjChild0Copy(pObj0), Aig_ObjChild1Copy(pObj0) );
309 pObj0->
pData = pObj1;
310 pObj1->
pData = pObj0;
317 Vec_PtrFree( vNewLis );
338 assert( Aig_ManCiNum(p0) == Aig_ManCiNum(p1) );
339 assert( Aig_ManCoNum(p0) == Aig_ManCoNum(p1) );
340 assert( Aig_ManRegNum(p0) == Aig_ManRegNum(p1) );
341 assert( Aig_ManObjNum(p0) == Aig_ManObjNum(p1) );
343 vPairsNew = Vec_IntAlloc( 2*Aig_ManObjNum(p0) );
346 if ( Aig_ObjIsCo(pObj0) )
349 Vec_IntPush( vPairsNew, pObj0->
Id );
350 Vec_IntPush( vPairsNew, pObj1->
Id );
376 vPairsMiter = Vec_IntAlloc( 2*Aig_ManObjNum(p0) );
377 for ( i = 0; i < Vec_IntSize(vPairsAll); i += 2 )
379 pObj0 = Aig_ManObj( p0, Vec_IntEntry(vPairsAll, i) );
380 pObj1 = Aig_ManObj( p1, Vec_IntEntry(vPairsAll, i+1) );
390 assert( !Aig_IsComplement(pObj0) );
391 assert( !Aig_IsComplement(pObj1) );
392 assert( Aig_ObjType(pObj0) == Aig_ObjType(pObj1) );
393 if ( Aig_ObjIsCo(pObj0) )
395 assert( Aig_ObjIsNode(pObj0) || Saig_ObjIsLo(pMiter, pObj0) );
396 assert( Aig_ObjIsNode(pObj1) || Saig_ObjIsLo(pMiter, pObj1) );
398 Vec_IntPush( vPairsMiter, pObj0->
Id );
399 Vec_IntPush( vPairsMiter, pObj1->
Id );
426 if ( pPars->nIsleDist )
434 Vec_IntFree( vPairsAll );
438 if (
p->pPars->fPartSigCorr )
441 p->ppClasses =
Ssw_ClassesPrepare( pMiter, pPars->nFramesK, pPars->fLatchCorr, pPars->fConstCorr, pPars->fOutputCorr, pPars->nMaxLevs, pPars->fVerbose );
442 if (
p->pPars->fDumpSRInit )
444 if (
p->pPars->fPartSigCorr )
449 Abc_Print( 1,
"Speculatively reduced miter is saved in file \"%s\".\n",
"srm_part.blif" );
452 Abc_Print( 1,
"Dumping speculative miter is possible only for partial signal correspondence (switch \"-c\").\n" );
454 p->pSml =
Ssw_SmlStart( pMiter, 0, 1 +
p->pPars->nFramesAddSim, 1 );
461 Vec_IntFree( vPairsMiter );
492 Abc_Print( 1,
"Verification successful. " );
493 else if ( RetValue == 0 )
494 Abc_Print( 1,
"Verification failed with a counter-example. " );
496 Abc_Print( 1,
"Verification UNDECIDED. The number of remaining regs = %d (total = %d). ",
497 Aig_ManRegNum(pAigRes), Aig_ManRegNum(p0)+Aig_ManRegNum(p1) );
498 ABC_PRT(
"Time", Abc_Clock() - clk );
520 vPairs = Vec_IntAlloc( 100 );
523 if ( !Aig_ObjIsConst1(pObj) && !Aig_ObjIsCi(pObj) && !Aig_ObjIsNode(pObj) )
525 Vec_IntPush( vPairs, i );
526 Vec_IntPush( vPairs, i );
547 if ( pPars->fVerbose )
548 Abc_Print( 1,
"Performing sequential verification using structural similarity.\n" );
552 if ( pPars->fVerbose )
559 Abc_Print( 1,
"Demitering has failed.\n" );
568 if ( pPars->fVerbose )
579 assert( Aig_ManRegNum(pPart0) > 0 );
580 assert( Aig_ManRegNum(pPart1) > 0 );
581 assert( Saig_ManPiNum(pPart0) == Saig_ManPiNum(pPart1) );
582 assert( Saig_ManPoNum(pPart0) == Saig_ManPoNum(pPart1) );
589 Vec_IntFree( vPairs );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
Aig_Man_t * Aig_ManDupSimple(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ManFanoutStop(Aig_Man_t *p)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ObjForEachFanout(p, pObj, pFanout, iFan, i)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
void Aig_ManPrintStats(Aig_Man_t *p)
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ManCleanData(Aig_Man_t *p)
void Aig_ManDumpBlif(Aig_Man_t *p, char *pFileName, Vec_Ptr_t *vPiNames, Vec_Ptr_t *vPoNames)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Vec_Int_t * Saig_StrSimPerformMatching(Aig_Man_t *p0, Aig_Man_t *p1, int nDist, int fVerbose, Aig_Man_t **ppMiter)
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
int Saig_ManDemiterSimpleDiff(Aig_Man_t *p, Aig_Man_t **ppAig0, Aig_Man_t **ppAig1)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
Aig_Man_t * Saig_ManCreateMiter(Aig_Man_t *p1, Aig_Man_t *p2, int Oper)
Aig_Man_t * Ssw_SpeculativeReduction(Ssw_Man_t *p)
Ssw_Cla_t * Ssw_ClassesPreparePairsSimple(Aig_Man_t *pMiter, Vec_Int_t *vPairs)
Ssw_Cla_t * Ssw_ClassesPrepare(Aig_Man_t *pAig, int nFramesK, int fLatchCorr, int fConstCorr, int fOutputCorr, int nMaxLevs, int fVerbose)
void Ssw_ClassesSetData(Ssw_Cla_t *p, void *pManData, unsigned(*pFuncNodeHash)(void *, Aig_Obj_t *), int(*pFuncNodeIsConst)(void *, Aig_Obj_t *), int(*pFuncNodesAreEqual)(void *, Aig_Obj_t *, Aig_Obj_t *))
Aig_Man_t * Ssw_SignalCorrespondenceRefine(Ssw_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Ssw_Man_t_ Ssw_Man_t
INCLUDES ///.
Ssw_Sml_t * Ssw_SmlStart(Aig_Man_t *pAig, int nPref, int nFrames, int nWordsFrame)
void Ssw_ManStop(Ssw_Man_t *p)
Ssw_Man_t * Ssw_ManCreate(Aig_Man_t *pAig, Ssw_Pars_t *pPars)
DECLARATIONS ///.
unsigned Ssw_SmlObjHashWord(Ssw_Sml_t *p, Aig_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
int Ssw_SmlObjIsConstWord(Ssw_Sml_t *p, Aig_Obj_t *pObj)
void Ssw_MatchingExtend(Aig_Man_t *p0, Aig_Man_t *p1, int nDist, int fVerbose)
Aig_Man_t * Ssw_SecWithSimilaritySweep(Aig_Man_t *p0, Aig_Man_t *p1, Vec_Int_t *vPairs, Ssw_Pars_t *pPars)
int Ssw_MatchingCountUnmached(Aig_Man_t *p)
ABC_NAMESPACE_IMPL_START void Ssw_CreatePair(Vec_Int_t *vPairs, Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
DECLARATIONS ///.
int Ssw_SecWithSimilarityPairs(Aig_Man_t *p0, Aig_Man_t *p1, Vec_Int_t *vPairs, Ssw_Pars_t *pPars)
void Ssw_MatchingStart(Aig_Man_t *p0, Aig_Man_t *p1, Vec_Int_t *vPairs)
Vec_Int_t * Ssw_MatchingPairs(Aig_Man_t *p0, Aig_Man_t *p1)
void Ssw_MatchingComplete(Aig_Man_t *p0, Aig_Man_t *p1)
int Ssw_SecWithSimilarity(Aig_Man_t *p0, Aig_Man_t *p1, Ssw_Pars_t *pPars)
void Ssw_MatchingExtendOne(Aig_Man_t *p, Vec_Ptr_t *vNodes)
Vec_Int_t * Saig_StrSimPerformMatching_hack(Aig_Man_t *p0, Aig_Man_t *p1)
Vec_Int_t * Ssw_MatchingMiter(Aig_Man_t *pMiter, Aig_Man_t *p0, Aig_Man_t *p1, Vec_Int_t *vPairsAll)
void Ssw_ManSetDefaultParams(Ssw_Pars_t *p)
DECLARATIONS ///.
int Ssw_SmlObjsAreEqualWord(Ssw_Sml_t *p, Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
typedefABC_NAMESPACE_HEADER_START struct Ssw_Pars_t_ Ssw_Pars_t
INCLUDES ///.
int Ssw_MiterStatus(Aig_Man_t *p, int fVerbose)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.