65 assert( Vec_IntSize(vPrio) == Aig_ManRegNum(pAig) );
71 p->vCiObjs = Vec_IntAlloc( 100 );
72 p->vCoObjs = Vec_IntAlloc( 100 );
73 p->vCiVals = Vec_IntAlloc( 100 );
74 p->vCoVals = Vec_IntAlloc( 100 );
75 p->vNodes = Vec_IntAlloc( 100 );
76 p->vTemp = Vec_IntAlloc( 100 );
77 p->vPiLits = Vec_IntAlloc( 100 );
78 p->vFfLits = Vec_IntAlloc( 100 );
85 Vec_IntFree(
p->vCiObjs );
86 Vec_IntFree(
p->vCoObjs );
87 Vec_IntFree(
p->vCiVals );
88 Vec_IntFree(
p->vCoVals );
89 Vec_IntFree(
p->vNodes );
90 Vec_IntFree(
p->vTemp );
91 Vec_IntFree(
p->vPiLits );
92 Vec_IntFree(
p->vFfLits );
113 if ( Gia_ObjIsCi(pObj) )
115 Vec_IntPush( vCiObjs, Gia_ObjId(
p, pObj) );
118 assert( Gia_ObjIsAnd(pObj) );
121 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
127 Vec_IntClear( vCiObjs );
128 Vec_IntClear( vNodes );
129 Gia_ManConst0(
p)->Value = ~0;
150 int i, value0, value1;
151 pObj = Gia_ManConst0(
p);
156 pObj->
fMark0 = Vec_IntEntry(vCiVals, i);
158 pObj->
Value = Gia_ObjIsPi(
p, pObj) ? 0x7FFFFFFF : Vec_IntEntry(vPrio, Gia_ObjCioId(pObj)-Gia_ManPiNum(
p));
163 pFan0 = Gia_ObjFanin0(pObj);
164 pFan1 = Gia_ObjFanin1(pObj);
165 value0 = pFan0->
fMark0 ^ Gia_ObjFaninC0(pObj);
166 value1 = pFan1->
fMark0 ^ Gia_ObjFaninC1(pObj);
167 pObj->
fMark0 = value0 && value1;
181 pFan0 = Gia_ObjFanin0(pObj);
184 assert( (
int)pObj->
fMark0 == Vec_IntEntry(vCoVals, i) );
203 int value0 = pFan0->
fMark0 ^ Gia_ObjFaninC0(pObj);
204 int value1 = pFan1->
fMark0 ^ Gia_ObjFaninC1(pObj);
205 assert( Gia_ObjIsAnd(pObj) );
209 assert( !value0 || !value1 );
211 return pFan1->
fMark1 || Gia_ObjIsPi(
p, pFan1);
213 return pFan0->
fMark1 || Gia_ObjIsPi(
p, pFan0);
214 assert( !value0 && !value1 );
215 return pFan0->
fMark1 || pFan1->
fMark1 || Gia_ObjIsPi(
p, pFan0) || Gia_ObjIsPi(
p, pFan1);
219 Gia_Obj_t * pObj, * pFan0, * pFan1;
int i, value0, value1;
225 pFan0 = Gia_ObjFanin0(pObj);
226 pFan1 = Gia_ObjFanin1(pObj);
233 value0 = pFan0->
fMark0 ^ Gia_ObjFaninC0(pObj);
234 value1 = pFan1->
fMark0 ^ Gia_ObjFaninC1(pObj);
235 assert( !value0 || !value1 );
244 if ( Gia_ObjIsPi(
p, pFan0) )
246 else if ( Gia_ObjIsPi(
p, pFan1) )
248 else if ( Gia_ObjIsAnd(pFan0) && Txs_ObjIsJust(
p, pFan0) )
250 else if ( Gia_ObjIsAnd(pFan1) && Txs_ObjIsJust(
p, pFan1) )
261 Vec_IntClear( vPiLits );
262 Vec_IntClear( vFfLits );
267 if ( Gia_ObjIsPi(
p, pObj) )
268 Vec_IntPush( vPiLits, Abc_Var2Lit(Gia_ObjCioId(pObj), !pObj->
fMark0) );
270 Vec_IntPush( vFfLits, Abc_Var2Lit(Gia_ObjCioId(pObj)-Gia_ManPiNum(
p), !pObj->
fMark0) );
272 assert( Vec_IntSize(vFfLits) > 0 );
289 int i, value0, value1;
292 Gia_ObjFanin0(pObj)->
fMark1 = 1;
294 Vec_IntClear( vRes );
300 Vec_IntPush( vRes, Gia_ObjId(
p, pObj) );
301 pFan0 = Gia_ObjFanin0(pObj);
302 pFan1 = Gia_ObjFanin1(pObj);
309 value0 = pFan0->
fMark0 ^ Gia_ObjFaninC0(pObj);
310 value1 = pFan1->
fMark0 ^ Gia_ObjFaninC1(pObj);
311 assert( !value0 || !value1 );
322 Vec_IntReverseOrder( vRes );
327 Vec_IntClear( vPiLits );
329 if ( pObj->
fMark1 && Gia_ObjIsPi(
p, pObj) )
330 Vec_IntPush( vPiLits, Abc_Var2Lit(Gia_ObjCioId(pObj), !pObj->
fMark0) );
335 Gia_ManConst0(
p)->
Value = 0x7FFFFFFF;
337 pObj->
Value = Gia_ObjIsPi(
p, pObj) ? 0x7FFFFFFF : Gia_ObjCioId(pObj) - Gia_ManPiNum(
p);
342 int i, value0, value1;
345 pFan0 = Gia_ObjFanin0(pObj);
346 pFan1 = Gia_ObjFanin1(pObj);
350 if ( pFan0->
Value == 0x7FFFFFFF )
352 else if ( pFan1->
Value == 0x7FFFFFFF )
354 else if ( Vec_IntEntry(vPrio, pFan0->
Value) < Vec_IntEntry(vPrio, pFan1->
Value) )
360 value0 = pFan0->
fMark0 ^ Gia_ObjFaninC0(pObj);
361 value1 = pFan1->
fMark0 ^ Gia_ObjFaninC1(pObj);
362 assert( !value0 || !value1 );
370 if ( pFan0->
Value == 0x7FFFFFFF || pFan1->
Value == 0x7FFFFFFF )
371 pObj->
Value = 0x7FFFFFFF;
372 else if ( Vec_IntEntry(vPrio, pFan0->
Value) >= Vec_IntEntry(vPrio, pFan1->
Value) )
384 if ( Gia_ObjFanin0(pObj)->Value != 0x7FFFFFFF )
386 if ( iMinId == -1 || Vec_IntEntry(vPrio, iMinId) > Vec_IntEntry(vPrio, Gia_ObjFanin0(pObj)->Value) )
387 iMinId = Gia_ObjFanin0(pObj)->Value;
403 Vec_IntClear( vFfLits );
411 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p)+iPrioCi );
412 Vec_IntPush( vFfLits, Abc_Var2Lit(iPrioCi, !pObj->
fMark0) );
413 pObj->
Value = 0x7FFFFFFF;
419 printf(
"%3d : ", Vec_IntSize(vFfLits) );
421 printf(
"%s%d(%d) ", Abc_LitIsCompl(Entry)?
"+":
"-", Abc_Lit2Var(Entry), Vec_IntEntry(vPrio, Abc_Lit2Var(Entry)) );
440 Gia_ObjTerSimSet0( Gia_ManConst0(
p) );
442 Gia_ObjTerSimSetX( pObj );
445 pObj = Gia_ManPi(
p, Abc_Lit2Var(iLit) );
446 assert( Gia_ObjTerSimGetX(pObj) );
447 if ( Abc_LitIsCompl(iLit) )
448 Gia_ObjTerSimSet0( pObj );
450 Gia_ObjTerSimSet1( pObj );
454 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p) + Abc_Lit2Var(iLit) );
455 assert( Gia_ObjTerSimGetX(pObj) );
456 if ( Abc_LitIsCompl(iLit) )
457 Gia_ObjTerSimSet0( pObj );
459 Gia_ObjTerSimSet1( pObj );
462 Gia_ObjTerSimAnd( pObj );
465 Gia_ObjTerSimCo( pObj );
466 if ( Vec_IntEntry(vCoVals, i) )
467 assert( Gia_ObjTerSimGet1(pObj) );
469 assert( Gia_ObjTerSimGet0(pObj) );
496 Vec_IntClear(
p->vCoObjs );
499 pObj = Gia_ManCo(
p->pGia,
p->pMan->iOutCur);
500 Vec_IntPush(
p->vCoObjs, Gia_ObjId(
p->pGia, pObj) );
505 for ( i = 0; i < pCube->
nLits; i++ )
507 if ( pCube->
Lits[i] == -1 )
509 pObj = Gia_ManCo(
p->pGia, Gia_ManPoNum(
p->pGia) + Abc_Lit2Var(pCube->
Lits[i]));
510 Vec_IntPush(
p->vCoObjs, Gia_ObjId(
p->pGia, pObj) );
515Abc_Print( 1,
"Trying to justify cube " );
519 Abc_Print( 1,
"<prop=fail>" );
520Abc_Print( 1,
" in frame %d.\n", k );
535 Txs_ManVerify(
p->pGia,
p->vCiObjs,
p->vNodes,
p->vPiLits,
p->vFfLits,
p->vCoObjs,
p->vCoVals );
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachObjVecReverse(vVec, p, pObj, i)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Pdr_Set_t * Pdr_SetCreate(Vec_Int_t *vLits, Vec_Int_t *vPiLits)
struct Pdr_Set_t_ Pdr_Set_t
void Pdr_SetPrint(FILE *pFile, Pdr_Set_t *p, int nRegs, Vec_Int_t *vFlopCounts)
typedefABC_NAMESPACE_HEADER_START struct Txs_Man_t_ Txs_Man_t
INCLUDES ///.
struct Pdr_Man_t_ Pdr_Man_t
void Pdr_ManCollectValues(Pdr_Man_t *p, int k, Vec_Int_t *vObjIds, Vec_Int_t *vValues)
void Txs_ManCollectCone_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes)
void Txs_ManBackwardPass(Gia_Man_t *p, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes, Vec_Int_t *vPiLits, Vec_Int_t *vFfLits)
void Txs_ManPrintFlopLits(Vec_Int_t *vFfLits, Vec_Int_t *vPrio)
void Txs_ManInitPrio(Gia_Man_t *p, Vec_Int_t *vCiObjs)
void Txs_ManVerify(Gia_Man_t *p, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes, Vec_Int_t *vPiLits, Vec_Int_t *vFfLits, Vec_Int_t *vCoObjs, Vec_Int_t *vCoVals)
int Txs_ManFindMinId(Gia_Man_t *p, Vec_Int_t *vCoObjs, Vec_Int_t *vPrio)
void Txs_ManForwardPass(Gia_Man_t *p, Vec_Int_t *vPrio, Vec_Int_t *vCiObjs, Vec_Int_t *vCiVals, Vec_Int_t *vNodes, Vec_Int_t *vCoObjs, Vec_Int_t *vCoVals)
void Txs_ManFindCiReduction(Gia_Man_t *p, Vec_Int_t *vPrio, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes, Vec_Int_t *vCoObjs, Vec_Int_t *vPiLits, Vec_Int_t *vFfLits, Vec_Int_t *vTemp)
Pdr_Set_t * Txs_ManTernarySim(Txs_Man_t *p, int k, Pdr_Set_t *pCube)
void Txs_ManCollectCone(Gia_Man_t *p, Vec_Int_t *vCoObjs, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes)
void Txs_ManStop(Txs_Man_t *p)
void Txs_ManCollectJustPis(Gia_Man_t *p, Vec_Int_t *vCiObjs, Vec_Int_t *vPiLits)
void Txs_ManSelectJustPath(Gia_Man_t *p, Vec_Int_t *vNodes, Vec_Int_t *vCoObjs, Vec_Int_t *vRes)
Txs_Man_t * Txs_ManStart(Pdr_Man_t *pMan, Aig_Man_t *pAig, Vec_Int_t *vPrio)
FUNCTION DEFINITIONS ///.
void Txs_ManPropagatePrio(Gia_Man_t *p, Vec_Int_t *vNodes, Vec_Int_t *vPrio)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.