ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
fraLcr.c
Go to the documentation of this file.
1
20
21#include "fra.h"
22
24
25
29
30typedef struct Fra_Lcr_t_ Fra_Lcr_t;
32{
33 // original AIG
35 // equivalence class representation
37 // partitioning information
38 Vec_Ptr_t * vParts; // output partitions
39 int * pInToOutPart; // mapping of PI num into PO partition num
40 int * pInToOutNum; // mapping of PI num into the num of this PO in the partition
41 // AIGs for the partitions
43 // other variables
45 // parameters
48 // statistics
49 int nIters;
56 // runtime
63};
64
68
81{
82 Fra_Lcr_t * p;
83 p = ABC_ALLOC( Fra_Lcr_t, 1 );
84 memset( p, 0, sizeof(Fra_Lcr_t) );
85 p->pAig = pAig;
86 p->pInToOutPart = ABC_ALLOC( int, Aig_ManCiNum(pAig) );
87 memset( p->pInToOutPart, 0, sizeof(int) * Aig_ManCiNum(pAig) );
88 p->pInToOutNum = ABC_ALLOC( int, Aig_ManCiNum(pAig) );
89 memset( p->pInToOutNum, 0, sizeof(int) * Aig_ManCiNum(pAig) );
90 p->vFraigs = Vec_PtrAlloc( 1000 );
91 return p;
92}
93
106{
107 printf( "Iterations = %d. LitBeg = %d. LitEnd = %d. (%6.2f %%).\n",
108 p->nIters, p->nLitsBeg, p->nLitsEnd, 100.0*p->nLitsEnd/p->nLitsBeg );
109 printf( "NBeg = %d. NEnd = %d. (Gain = %6.2f %%). RBeg = %d. REnd = %d. (Gain = %6.2f %%).\n",
110 p->nNodesBeg, p->nNodesEnd, 100.0*(p->nNodesBeg-p->nNodesEnd)/p->nNodesBeg,
111 p->nRegsBeg, p->nRegsEnd, 100.0*(p->nRegsBeg-p->nRegsEnd)/p->nRegsBeg );
112 ABC_PRT( "AIG simulation ", p->timeSim );
113 ABC_PRT( "AIG partitioning", p->timePart );
114 ABC_PRT( "AIG rebuiding ", p->timeTrav );
115 ABC_PRT( "FRAIGing ", p->timeFraig );
116 ABC_PRT( "AIG updating ", p->timeUpdate );
117 ABC_PRT( "TOTAL RUNTIME ", p->timeTotal );
118}
119
132{
133 Aig_Obj_t * pObj;
134 int i;
135 if ( p->fVerbose )
136 Lcr_ManPrint( p );
137 Aig_ManForEachCi( p->pAig, pObj, i )
138 pObj->pNext = NULL;
139 Vec_PtrFree( p->vFraigs );
140 if ( p->pCla ) Fra_ClassesStop( p->pCla );
141 if ( p->vParts ) Vec_VecFree( (Vec_Vec_t *)p->vParts );
142 ABC_FREE( p->pInToOutPart );
143 ABC_FREE( p->pInToOutNum );
144 ABC_FREE( p );
145}
146
159{
160 Fra_Man_t * p;
161 Aig_Obj_t * pObj;
162 int i;
163 p = ABC_ALLOC( Fra_Man_t, 1 );
164 memset( p, 0, sizeof(Fra_Man_t) );
165// Aig_ManForEachCi( pAig, pObj, i )
166 Aig_ManForEachObj( pAig, pObj, i )
167 pObj->pData = p;
168 return p;
169}
170
183{
184 Aig_Obj_t * pObj;
185 int i;
186 Aig_ManForEachCi( pAig, pObj, i )
187 pObj->pData = p;
188}
189
202{
203 Fra_Man_t * pTemp = (Fra_Man_t *)pObj0->pData;
204 Fra_Lcr_t * pLcr = (Fra_Lcr_t *)pTemp->pBmc;
205 Aig_Man_t * pFraig;
206 Aig_Obj_t * pOut0, * pOut1;
207 int nPart0, nPart1;
208 assert( Aig_ObjIsCi(pObj0) );
209 assert( Aig_ObjIsCi(pObj1) );
210 // find the partition to which these nodes belong
211 nPart0 = pLcr->pInToOutPart[(long)pObj0->pNext];
212 nPart1 = pLcr->pInToOutPart[(long)pObj1->pNext];
213 // if this is the result of refinement of the class created const-1 nodes
214 // the nodes may end up in different partions - we assume them equivalent
215 if ( nPart0 != nPart1 )
216 {
217 assert( 0 );
218 return 1;
219 }
220 assert( nPart0 == nPart1 );
221 pFraig = (Aig_Man_t *)Vec_PtrEntry( pLcr->vFraigs, nPart0 );
222 // get the fraig outputs
223 pOut0 = Aig_ManCo( pFraig, pLcr->pInToOutNum[(long)pObj0->pNext] );
224 pOut1 = Aig_ManCo( pFraig, pLcr->pInToOutNum[(long)pObj1->pNext] );
225 return Aig_ObjFanin0(pOut0) == Aig_ObjFanin0(pOut1);
226}
227
240{
241 Fra_Man_t * pTemp = (Fra_Man_t *)pObj->pData;
242 Fra_Lcr_t * pLcr = (Fra_Lcr_t *)pTemp->pBmc;
243 Aig_Man_t * pFraig;
244 Aig_Obj_t * pOut;
245 int nPart;
246 assert( Aig_ObjIsCi(pObj) );
247 // find the partition to which these nodes belong
248 nPart = pLcr->pInToOutPart[(long)pObj->pNext];
249 pFraig = (Aig_Man_t *)Vec_PtrEntry( pLcr->vFraigs, nPart );
250 // get the fraig outputs
251 pOut = Aig_ManCo( pFraig, pLcr->pInToOutNum[(long)pObj->pNext] );
252 return Aig_ObjFanin0(pOut) == Aig_ManConst1(pFraig);
253}
254
267{
268 Aig_Obj_t * pObjNew;
269 if ( pObj->pData )
270 return (Aig_Obj_t *)pObj->pData;
271 Fra_LcrManDup_rec( pNew, p, Aig_ObjFanin0(pObj) );
272 if ( Aig_ObjIsBuf(pObj) )
273 return (Aig_Obj_t *)(pObj->pData = Aig_ObjChild0Copy(pObj));
274 Fra_LcrManDup_rec( pNew, p, Aig_ObjFanin1(pObj) );
275 pObjNew = Aig_Oper( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj), Aig_ObjType(pObj) );
276 return (Aig_Obj_t *)(pObj->pData = pObjNew);
277}
278
297{
298 Aig_Man_t * pNew;
299 Aig_Obj_t * pObj, * pObjPo, * pObjNew, ** ppClass, * pMiter;
300 int i, c, Offset;
301 // remember the numbers of the inputs of the original AIG
302 Aig_ManForEachCi( pLcr->pAig, pObj, i )
303 {
304 pObj->pData = pLcr;
305 pObj->pNext = (Aig_Obj_t *)(long)i;
306 }
307 // compute the LO/LI offset
308 Offset = Aig_ManCoNum(pLcr->pAig) - Aig_ManCiNum(pLcr->pAig);
309 // create the PIs
310 Aig_ManCleanData( pLcr->pAig );
311 pNew = Aig_ManStartFrom( pLcr->pAig );
312 // go over the equivalence classes
313 Vec_PtrForEachEntry( Aig_Obj_t **, pLcr->pCla->vClasses, ppClass, i )
314 {
315 pMiter = Aig_ManConst0(pNew);
316 for ( c = 0; ppClass[c]; c++ )
317 {
318 assert( Aig_ObjIsCi(ppClass[c]) );
319 pObjPo = Aig_ManCo( pLcr->pAig, Offset+(long)ppClass[c]->pNext );
320 pObjNew = Fra_LcrManDup_rec( pNew, pLcr->pAig, Aig_ObjFanin0(pObjPo) );
321 pMiter = Aig_Exor( pNew, pMiter, pObjNew );
322 }
323 Aig_ObjCreateCo( pNew, pMiter );
324 }
325 // go over the constant candidates
326 Vec_PtrForEachEntry( Aig_Obj_t *, pLcr->pCla->vClasses1, pObj, i )
327 {
328 assert( Aig_ObjIsCi(pObj) );
329 pObjPo = Aig_ManCo( pLcr->pAig, Offset+(long)pObj->pNext );
330 pMiter = Fra_LcrManDup_rec( pNew, pLcr->pAig, Aig_ObjFanin0(pObjPo) );
331 Aig_ObjCreateCo( pNew, pMiter );
332 }
333 return pNew;
334}
335
347void Fra_LcrRemapPartitions( Vec_Ptr_t * vParts, Fra_Cla_t * pCla, int * pInToOutPart, int * pInToOutNum )
348{
349 Vec_Int_t * vOne, * vOneNew;
350 Aig_Obj_t ** ppClass, * pObjPi;
351 int Out, Offset, i, k, c;
352 // compute the LO/LI offset
353 Offset = Aig_ManCoNum(pCla->pAig) - Aig_ManCiNum(pCla->pAig);
354 Vec_PtrForEachEntry( Vec_Int_t *, vParts, vOne, i )
355 {
356 vOneNew = Vec_IntAlloc( Vec_IntSize(vOne) );
357 Vec_IntForEachEntry( vOne, Out, k )
358 {
359 if ( Out < Vec_PtrSize(pCla->vClasses) )
360 {
361 ppClass = (Aig_Obj_t **)Vec_PtrEntry( pCla->vClasses, Out );
362 for ( c = 0; ppClass[c]; c++ )
363 {
364 pInToOutPart[(long)ppClass[c]->pNext] = i;
365 pInToOutNum[(long)ppClass[c]->pNext] = Vec_IntSize(vOneNew);
366 Vec_IntPush( vOneNew, Offset+(long)ppClass[c]->pNext );
367 }
368 }
369 else
370 {
371 pObjPi = (Aig_Obj_t *)Vec_PtrEntry( pCla->vClasses1, Out - Vec_PtrSize(pCla->vClasses) );
372 pInToOutPart[(long)pObjPi->pNext] = i;
373 pInToOutNum[(long)pObjPi->pNext] = Vec_IntSize(vOneNew);
374 Vec_IntPush( vOneNew, Offset+(long)pObjPi->pNext );
375 }
376 }
377 // replace the class
378 Vec_PtrWriteEntry( vParts, i, vOneNew );
379 Vec_IntFree( vOne );
380 }
381}
382
395{
396 assert( !Aig_IsComplement(pObj) );
397 if ( Aig_ObjIsTravIdCurrent(p, pObj) )
398 return (Aig_Obj_t *)pObj->pData;
399 Aig_ObjSetTravIdCurrent(p, pObj);
400 if ( Aig_ObjIsCi(pObj) )
401 {
402// Aig_Obj_t * pRepr = Fra_ClassObjRepr(pObj);
403 Aig_Obj_t * pRepr = pCla->pMemRepr[pObj->Id];
404 if ( pRepr == NULL )
405 pObj->pData = Aig_ObjCreateCi( pNew );
406 else
407 {
408 pObj->pData = Fra_LcrCreatePart_rec( pCla, pNew, p, pRepr );
409 pObj->pData = Aig_NotCond( (Aig_Obj_t *)pObj->pData, pRepr->fPhase ^ pObj->fPhase );
410 }
411 return (Aig_Obj_t *)pObj->pData;
412 }
413 Fra_LcrCreatePart_rec( pCla, pNew, p, Aig_ObjFanin0(pObj) );
414 Fra_LcrCreatePart_rec( pCla, pNew, p, Aig_ObjFanin1(pObj) );
415 return (Aig_Obj_t *)(pObj->pData = Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) ));
416}
417
430{
431 Aig_Man_t * pNew;
432 Aig_Obj_t * pObj, * pObjNew;
433 int Out, i;
434 // create new AIG for this partition
435 pNew = Aig_ManStartFrom( p->pAig );
436 Aig_ManIncrementTravId( p->pAig );
437 Aig_ObjSetTravIdCurrent( p->pAig, Aig_ManConst1(p->pAig) );
438 Aig_ManConst1(p->pAig)->pData = Aig_ManConst1(pNew);
439 Vec_IntForEachEntry( vPart, Out, i )
440 {
441 pObj = Aig_ManCo( p->pAig, Out );
442 if ( pObj->fMarkA )
443 {
444 pObjNew = Fra_LcrCreatePart_rec( p->pCla, pNew, p->pAig, Aig_ObjFanin0(pObj) );
445 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObj) );
446 }
447 else
448 pObjNew = Aig_ManConst1( pNew );
449 Aig_ObjCreateCo( pNew, pObjNew );
450 }
451 return pNew;
452}
453
466{
467 Aig_Obj_t * pObj, ** ppClass;
468 int i, c, Offset;
469 // compute the LO/LI offset
470 Offset = Aig_ManCoNum(p->pCla->pAig) - Aig_ManCiNum(p->pCla->pAig);
471 // mark the nodes remaining in the classes
472 Vec_PtrForEachEntry( Aig_Obj_t *, p->pCla->vClasses1, pObj, i )
473 {
474 pObj = Aig_ManCo( p->pCla->pAig, Offset+(long)pObj->pNext );
475 pObj->fMarkA = 1;
476 }
477 Vec_PtrForEachEntry( Aig_Obj_t **, p->pCla->vClasses, ppClass, i )
478 {
479 for ( c = 0; ppClass[c]; c++ )
480 {
481 pObj = Aig_ManCo( p->pCla->pAig, Offset+(long)ppClass[c]->pNext );
482 pObj->fMarkA = 1;
483 }
484 }
485}
486
499{
500 Aig_Obj_t * pObj, ** ppClass;
501 int i, c, Offset;
502 // compute the LO/LI offset
503 Offset = Aig_ManCoNum(p->pCla->pAig) - Aig_ManCiNum(p->pCla->pAig);
504 // mark the nodes remaining in the classes
505 Vec_PtrForEachEntry( Aig_Obj_t *, p->pCla->vClasses1, pObj, i )
506 {
507 pObj = Aig_ManCo( p->pCla->pAig, Offset+(long)pObj->pNext );
508 pObj->fMarkA = 0;
509 }
510 Vec_PtrForEachEntry( Aig_Obj_t **, p->pCla->vClasses, ppClass, i )
511 {
512 for ( c = 0; ppClass[c]; c++ )
513 {
514 pObj = Aig_ManCo( p->pCla->pAig, Offset+(long)ppClass[c]->pNext );
515 pObj->fMarkA = 0;
516 }
517 }
518}
519
531Aig_Man_t * Fra_FraigLatchCorrespondence( Aig_Man_t * pAig, int nFramesP, int nConfMax, int fProve, int fVerbose, int * pnIter, float TimeLimit )
532{
533 int nPartSize = 200;
534 int fReprSelect = 0;
535 Fra_Lcr_t * p;
536 Fra_Sml_t * pSml;
537 Fra_Man_t * pTemp;
538 Aig_Man_t * pAigPart, * pAigTemp, * pAigNew = NULL;
539 Vec_Int_t * vPart;
540 int i, nIter;
541 abctime timeSim, clk2, clk3, clk = Abc_Clock();
542 abctime TimeToStop = TimeLimit ? TimeLimit * CLOCKS_PER_SEC + Abc_Clock() : 0;
543 if ( Aig_ManNodeNum(pAig) == 0 )
544 {
545 if ( pnIter ) *pnIter = 0;
546 // Ntl_ManFinalize() requires the following to satisfy an assertion.
547 Aig_ManReprStart(pAig,Aig_ManObjNumMax(pAig));
548 return Aig_ManDupOrdered(pAig);
549 }
550 assert( Aig_ManRegNum(pAig) > 0 );
551
552 // simulate the AIG
553clk2 = Abc_Clock();
554if ( fVerbose )
555printf( "Simulating AIG with %d nodes for %d cycles ... ", Aig_ManNodeNum(pAig), nFramesP + 32 );
556 pSml = Fra_SmlSimulateSeq( pAig, nFramesP, 32, 1, 1 );
557if ( fVerbose )
558{
559ABC_PRT( "Time", Abc_Clock() - clk2 );
560}
561timeSim = Abc_Clock() - clk2;
562
563 // check if simulation discovered non-constant-0 POs
564 if ( fProve && pSml->fNonConstOut )
565 {
566 pAig->pSeqModel = Fra_SmlGetCounterExample( pSml );
567 Fra_SmlStop( pSml );
568 return NULL;
569 }
570
571 // start the manager
572 p = Lcr_ManAlloc( pAig );
573 p->nFramesP = nFramesP;
574 p->fVerbose = fVerbose;
575 p->timeSim += timeSim;
576
577 pTemp = Fra_LcrAigPrepare( pAig );
578 pTemp->pBmc = (Fra_Bmc_t *)p;
579 pTemp->pSml = pSml;
580
581 // get preliminary info about equivalence classes
582 pTemp->pCla = p->pCla = Fra_ClassesStart( p->pAig );
583 Fra_ClassesPrepare( p->pCla, 1, 0 );
584 p->pCla->pFuncNodeIsConst = Fra_LcrNodeIsConst;
585 p->pCla->pFuncNodesAreEqual = Fra_LcrNodesAreEqual;
586 Fra_SmlStop( pTemp->pSml );
587
588 // partition the AIG for latch correspondence computation
589clk2 = Abc_Clock();
590if ( fVerbose )
591printf( "Partitioning AIG ... " );
593 p->vParts = (Vec_Ptr_t *)Aig_ManPartitionSmart( pAigPart, nPartSize, 0, NULL );
594 Fra_LcrRemapPartitions( p->vParts, p->pCla, p->pInToOutPart, p->pInToOutNum );
595 Aig_ManStop( pAigPart );
596if ( fVerbose )
597{
598ABC_PRT( "Time", Abc_Clock() - clk2 );
599p->timePart += Abc_Clock() - clk2;
600}
601
602 // get the initial stats
603 p->nLitsBeg = Fra_ClassesCountLits( p->pCla );
604 p->nNodesBeg = Aig_ManNodeNum(p->pAig);
605 p->nRegsBeg = Aig_ManRegNum(p->pAig);
606
607 // perform iterative reduction of the partitions
608 p->fRefining = 1;
609 for ( nIter = 0; p->fRefining; nIter++ )
610 {
611 p->fRefining = 0;
612 clk3 = Abc_Clock();
613 // derive AIGs for each partition
615 Vec_PtrClear( p->vFraigs );
616 Vec_PtrForEachEntry( Vec_Int_t *, p->vParts, vPart, i )
617 {
618 if ( TimeLimit != 0.0 && Abc_Clock() > TimeToStop )
619 {
620 Vec_PtrForEachEntry( Aig_Man_t *, p->vFraigs, pAigPart, i )
621 Aig_ManStop( pAigPart );
622 Aig_ManCleanMarkA( pAig );
623 Aig_ManCleanMarkB( pAig );
624 printf( "Fra_FraigLatchCorrespondence(): Runtime limit exceeded.\n" );
625 goto finish;
626 }
627clk2 = Abc_Clock();
628 pAigPart = Fra_LcrCreatePart( p, vPart );
629p->timeTrav += Abc_Clock() - clk2;
630clk2 = Abc_Clock();
631 pAigTemp = Fra_FraigEquivence( pAigPart, nConfMax, 0 );
632p->timeFraig += Abc_Clock() - clk2;
633 Vec_PtrPush( p->vFraigs, pAigTemp );
634/*
635 {
636 char Name[1000];
637 sprintf( Name, "part%04d.blif", i );
638 Aig_ManDumpBlif( pAigPart, Name, NULL, NULL );
639 }
640printf( "Finished part %4d (out of %4d). ", i, Vec_PtrSize(p->vParts) );
641ABC_PRT( "Time", Abc_Clock() - clk3 );
642*/
643
644 Aig_ManStop( pAigPart );
645 }
647 // report the intermediate results
648 if ( fVerbose )
649 {
650 printf( "%3d : Const = %6d. Class = %6d. L = %6d. Part = %3d. ",
651 nIter, Vec_PtrSize(p->pCla->vClasses1), Vec_PtrSize(p->pCla->vClasses),
652 Fra_ClassesCountLits(p->pCla), Vec_PtrSize(p->vParts) );
653 ABC_PRT( "T", Abc_Clock() - clk3 );
654 }
655 // refine the classes
656 Fra_LcrAigPrepareTwo( p->pAig, pTemp );
657 if ( Fra_ClassesRefine( p->pCla ) )
658 p->fRefining = 1;
659 if ( Fra_ClassesRefine1( p->pCla, 0, NULL ) )
660 p->fRefining = 1;
661 // clean the fraigs
662 Vec_PtrForEachEntry( Aig_Man_t *, p->vFraigs, pAigPart, i )
663 Aig_ManStop( pAigPart );
664
665 // repartition if needed
666 if ( 1 )
667 {
668clk2 = Abc_Clock();
669 Vec_VecFree( (Vec_Vec_t *)p->vParts );
671 p->vParts = (Vec_Ptr_t *)Aig_ManPartitionSmart( pAigPart, nPartSize, 0, NULL );
672 Fra_LcrRemapPartitions( p->vParts, p->pCla, p->pInToOutPart, p->pInToOutNum );
673 Aig_ManStop( pAigPart );
674p->timePart += Abc_Clock() - clk2;
675 }
676 }
677 p->nIters = nIter;
678
679 // move the classes into representatives and reduce AIG
680clk2 = Abc_Clock();
681// Fra_ClassesPrint( p->pCla, 1 );
682 if ( fReprSelect )
683 Fra_ClassesSelectRepr( p->pCla );
684 Fra_ClassesCopyReprs( p->pCla, NULL );
685 pAigNew = Aig_ManDupRepr( p->pAig, 0 );
686 Aig_ManSeqCleanup( pAigNew );
687// Aig_ManCountMergeRegs( pAigNew );
688p->timeUpdate += Abc_Clock() - clk2;
689p->timeTotal = Abc_Clock() - clk;
690 // get the final stats
691 p->nLitsEnd = Fra_ClassesCountLits( p->pCla );
692 p->nNodesEnd = Aig_ManNodeNum(pAigNew);
693 p->nRegsEnd = Aig_ManRegNum(pAigNew);
694finish:
695 ABC_FREE( pTemp );
696 Lcr_ManFree( p );
697 if ( pnIter ) *pnIter = nIter;
698 return pAigNew;
699}
700
701
705
706
708
ABC_INT64_T abctime
Definition abc_global.h:332
#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
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Definition aigRepr.c:267
Aig_Man_t * Aig_ManDupOrdered(Aig_Man_t *p)
Definition aigDup.c:277
void Aig_ManCleanMarkB(Aig_Man_t *p)
Definition aigUtil.c:167
int Aig_ManSeqCleanup(Aig_Man_t *p)
Definition aigScl.c:158
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
Definition aigRepr.c:45
void Aig_ManCleanMarkA(Aig_Man_t *p)
Definition aigUtil.c:148
#define Aig_ManForEachObj(p, pObj, i)
Definition aig.h:403
void Aig_ManStop(Aig_Man_t *p)
Definition aigMan.c:187
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigUtil.c:44
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Definition aig.h:393
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:104
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Definition aigObj.c:66
Aig_Obj_t * Aig_Oper(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1, Aig_Type_t Type)
Definition aigOper.c:83
Aig_Man_t * Aig_ManStartFrom(Aig_Man_t *p)
Definition aigMan.c:92
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
Aig_Obj_t * Aig_Exor(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:220
Vec_Ptr_t * Aig_ManPartitionSmart(Aig_Man_t *p, int nPartSizeLimit, int fVerbose, Vec_Ptr_t **pvPartSupps)
Definition aigPart.c:686
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigObj.c:45
void Aig_ManCleanData(Aig_Man_t *p)
Definition aigUtil.c:205
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
void Fra_ClassNodesUnmark(Fra_Lcr_t *p)
Definition fraLcr.c:498
int Fra_LcrNodeIsConst(Aig_Obj_t *pObj)
Definition fraLcr.c:239
Aig_Man_t * Fra_FraigLatchCorrespondence(Aig_Man_t *pAig, int nFramesP, int nConfMax, int fProve, int fVerbose, int *pnIter, float TimeLimit)
Definition fraLcr.c:531
Fra_Lcr_t * Lcr_ManAlloc(Aig_Man_t *pAig)
FUNCTION DEFINITIONS ///.
Definition fraLcr.c:80
Fra_Man_t * Fra_LcrAigPrepare(Aig_Man_t *pAig)
Definition fraLcr.c:158
Aig_Man_t * Fra_LcrCreatePart(Fra_Lcr_t *p, Vec_Int_t *vPart)
Definition fraLcr.c:429
void Fra_LcrRemapPartitions(Vec_Ptr_t *vParts, Fra_Cla_t *pCla, int *pInToOutPart, int *pInToOutNum)
Definition fraLcr.c:347
void Fra_ClassNodesMark(Fra_Lcr_t *p)
Definition fraLcr.c:465
void Fra_LcrAigPrepareTwo(Aig_Man_t *pAig, Fra_Man_t *p)
Definition fraLcr.c:182
typedefABC_NAMESPACE_IMPL_START struct Fra_Lcr_t_ Fra_Lcr_t
DECLARATIONS ///.
Definition fraLcr.c:30
Aig_Man_t * Fra_LcrDeriveAigForPartitioning(Fra_Lcr_t *pLcr)
Definition fraLcr.c:296
void Lcr_ManFree(Fra_Lcr_t *p)
Definition fraLcr.c:131
int Fra_LcrNodesAreEqual(Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
Definition fraLcr.c:201
void Lcr_ManPrint(Fra_Lcr_t *p)
Definition fraLcr.c:105
Aig_Obj_t * Fra_LcrCreatePart_rec(Fra_Cla_t *pCla, Aig_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
Definition fraLcr.c:394
Aig_Obj_t * Fra_LcrManDup_rec(Aig_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
Definition fraLcr.c:266
int Fra_ClassesRefine1(Fra_Cla_t *p, int fRefineNewClass, int *pSkipped)
Definition fraClass.c:527
void Fra_ClassesCopyReprs(Fra_Cla_t *p, Vec_Ptr_t *vFailed)
Definition fraClass.c:114
Fra_Cla_t * Fra_ClassesStart(Aig_Man_t *pAig)
FUNCTION DEFINITIONS ///.
Definition fraClass.c:60
struct Fra_Bmc_t_ Fra_Bmc_t
Definition fra.h:59
void Fra_ClassesStop(Fra_Cla_t *p)
Definition fraClass.c:90
Aig_Man_t * Fra_FraigEquivence(Aig_Man_t *pManAig, int nConfMax, int fProve)
Definition fraCore.c:468
void Fra_SmlStop(Fra_Sml_t *p)
Definition fraSim.c:839
void Fra_ClassesPrepare(Fra_Cla_t *p, int fLatchCorr, int nMaxLevs)
Definition fraClass.c:276
struct Fra_Man_t_ Fra_Man_t
Definition fra.h:56
int Fra_ClassesRefine(Fra_Cla_t *p)
Definition fraClass.c:493
int Fra_ClassesCountLits(Fra_Cla_t *p)
Definition fraClass.c:164
struct Fra_Sml_t_ Fra_Sml_t
Definition fra.h:58
void Fra_ClassesSelectRepr(Fra_Cla_t *p)
Definition fraClass.c:706
Fra_Sml_t * Fra_SmlSimulateSeq(Aig_Man_t *pAig, int nPref, int nFrames, int nWords, int fCheckMiter)
Definition fraSim.c:1027
struct Fra_Cla_t_ Fra_Cla_t
Definition fra.h:57
Abc_Cex_t * Fra_SmlGetCounterExample(Fra_Sml_t *p)
Definition fraSim.c:1049
int Id
Definition aig.h:85
Aig_Obj_t * pNext
Definition aig.h:72
unsigned int fMarkA
Definition aig.h:79
void * pData
Definition aig.h:87
unsigned int fPhase
Definition aig.h:78
Vec_Ptr_t * vClasses1
Definition fra.h:155
Aig_Man_t * pAig
Definition fra.h:152
Aig_Obj_t ** pMemRepr
Definition fra.h:153
Vec_Ptr_t * vClasses
Definition fra.h:154
int nLitsBeg
Definition fraLcr.c:50
Aig_Man_t * pAig
Definition fraLcr.c:34
Vec_Ptr_t * vFraigs
Definition fraLcr.c:42
abctime timePart
Definition fraLcr.c:58
int nNodesEnd
Definition fraLcr.c:53
abctime timeTrav
Definition fraLcr.c:59
int nLitsEnd
Definition fraLcr.c:51
abctime timeSim
Definition fraLcr.c:57
int fVerbose
Definition fraLcr.c:47
Vec_Ptr_t * vParts
Definition fraLcr.c:38
int nFramesP
Definition fraLcr.c:46
Fra_Cla_t * pCla
Definition fraLcr.c:36
int * pInToOutPart
Definition fraLcr.c:39
int nNodesBeg
Definition fraLcr.c:52
int * pInToOutNum
Definition fraLcr.c:40
int fRefining
Definition fraLcr.c:44
abctime timeTotal
Definition fraLcr.c:62
int nRegsEnd
Definition fraLcr.c:55
abctime timeFraig
Definition fraLcr.c:60
int nIters
Definition fraLcr.c:49
abctime timeUpdate
Definition fraLcr.c:61
int nRegsBeg
Definition fraLcr.c:54
Fra_Cla_t * pCla
Definition fra.h:198
Fra_Bmc_t * pBmc
Definition fra.h:202
Fra_Sml_t * pSml
Definition fra.h:200
int fNonConstOut
Definition fra.h:179
#define assert(ex)
Definition util_old.h:213
char * memset()
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42