ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
pdrTsim2.c
Go to the documentation of this file.
1
20
21#include "pdrInt.h"
22#include "aig/gia/giaAig.h"
23
25
29
31{
32 Gia_Man_t * pGia; // user's AIG
33 Vec_Int_t * vPrio; // priority of each flop
34 Vec_Int_t * vCiObjs; // cone leaves (CI obj IDs)
35 Vec_Int_t * vCoObjs; // cone roots (CO obj IDs)
36 Vec_Int_t * vCiVals; // cone leaf values (0/1 CI values)
37 Vec_Int_t * vCoVals; // cone root values (0/1 CO values)
38 Vec_Int_t * vNodes; // cone nodes (node obj IDs)
39 Vec_Int_t * vTemp; // cone nodes (node obj IDs)
40 Vec_Int_t * vPiLits; // resulting array of PI literals
41 Vec_Int_t * vFfLits; // resulting array of flop literals
42 Pdr_Man_t * pMan; // calling manager
43};
44
48
61{
62 Txs_Man_t * p;
63// Aig_Obj_t * pObj;
64// int i;
65 assert( Vec_IntSize(vPrio) == Aig_ManRegNum(pAig) );
66 p = ABC_CALLOC( Txs_Man_t, 1 );
67 p->pGia = Gia_ManFromAigSimple(pAig); // user's AIG
68// Aig_ManForEachObj( pAig, pObj, i )
69// assert( i == 0 || pObj->iData == Abc_Var2Lit(i, 0) );
70 p->vPrio = vPrio; // priority of each flop
71 p->vCiObjs = Vec_IntAlloc( 100 ); // cone leaves (CI obj IDs)
72 p->vCoObjs = Vec_IntAlloc( 100 ); // cone roots (CO obj IDs)
73 p->vCiVals = Vec_IntAlloc( 100 ); // cone leaf values (0/1 CI values)
74 p->vCoVals = Vec_IntAlloc( 100 ); // cone root values (0/1 CO values)
75 p->vNodes = Vec_IntAlloc( 100 ); // cone nodes (node obj IDs)
76 p->vTemp = Vec_IntAlloc( 100 ); // cone nodes (node obj IDs)
77 p->vPiLits = Vec_IntAlloc( 100 ); // resulting array of PI literals
78 p->vFfLits = Vec_IntAlloc( 100 ); // resulting array of flop literals
79 p->pMan = pMan; // calling manager
80 return p;
81}
83{
84 Gia_ManStop( p->pGia );
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 );
93 ABC_FREE( p );
94}
95
108void Txs_ManCollectCone_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vCiObjs, Vec_Int_t * vNodes )
109{
110 if ( !~pObj->Value )
111 return;
112 pObj->Value = ~0;
113 if ( Gia_ObjIsCi(pObj) )
114 {
115 Vec_IntPush( vCiObjs, Gia_ObjId(p, pObj) );
116 return;
117 }
118 assert( Gia_ObjIsAnd(pObj) );
119 Txs_ManCollectCone_rec( p, Gia_ObjFanin0(pObj), vCiObjs, vNodes );
120 Txs_ManCollectCone_rec( p, Gia_ObjFanin1(pObj), vCiObjs, vNodes );
121 Vec_IntPush( vNodes, Gia_ObjId(p, pObj) );
122}
123void Txs_ManCollectCone( Gia_Man_t * p, Vec_Int_t * vCoObjs, Vec_Int_t * vCiObjs, Vec_Int_t * vNodes )
124{
125 Gia_Obj_t * pObj; int i;
126// printf( "Collecting cones for clause with %d literals.\n", Vec_IntSize(vCoObjs) );
127 Vec_IntClear( vCiObjs );
128 Vec_IntClear( vNodes );
129 Gia_ManConst0(p)->Value = ~0;
130 Gia_ManForEachObjVec( vCoObjs, p, pObj, i )
131 Txs_ManCollectCone_rec( p, Gia_ObjFanin0(pObj), vCiObjs, vNodes );
132}
133
146 Vec_Int_t * vPrio, Vec_Int_t * vCiObjs, Vec_Int_t * vCiVals,
147 Vec_Int_t * vNodes, Vec_Int_t * vCoObjs, Vec_Int_t * vCoVals )
148{
149 Gia_Obj_t * pObj, * pFan0, * pFan1;
150 int i, value0, value1;
151 pObj = Gia_ManConst0(p);
152 pObj->fMark0 = 0;
153 pObj->fMark1 = 0;
154 Gia_ManForEachObjVec( vCiObjs, p, pObj, i )
155 {
156 pObj->fMark0 = Vec_IntEntry(vCiVals, i);
157 pObj->fMark1 = 0;
158 pObj->Value = Gia_ObjIsPi(p, pObj) ? 0x7FFFFFFF : Vec_IntEntry(vPrio, Gia_ObjCioId(pObj)-Gia_ManPiNum(p));
159 assert( ~pObj->Value );
160 }
161 Gia_ManForEachObjVec( vNodes, p, pObj, i )
162 {
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;
168 pObj->fMark1 = 0;
169 if ( pObj->fMark0 )
170 pObj->Value = Abc_MinInt( pFan0->Value, pFan1->Value );
171 else if ( value0 )
172 pObj->Value = pFan1->Value;
173 else if ( value1 )
174 pObj->Value = pFan0->Value;
175 else // if ( value0 == 0 && value1 == 0 )
176 pObj->Value = Abc_MaxInt( pFan0->Value, pFan1->Value );
177 assert( ~pObj->Value );
178 }
179 Gia_ManForEachObjVec( vCoObjs, p, pObj, i )
180 {
181 pFan0 = Gia_ObjFanin0(pObj);
182 pObj->fMark0 = (pFan0->fMark0 ^ Gia_ObjFaninC0(pObj));
183 pFan0->fMark1 = 1;
184 assert( (int)pObj->fMark0 == Vec_IntEntry(vCoVals, i) );
185 }
186}
187
199static inline int Txs_ObjIsJust( Gia_Man_t * p, Gia_Obj_t * pObj )
200{
201 Gia_Obj_t * pFan0 = Gia_ObjFanin0(pObj);
202 Gia_Obj_t * pFan1 = Gia_ObjFanin1(pObj);
203 int value0 = pFan0->fMark0 ^ Gia_ObjFaninC0(pObj);
204 int value1 = pFan1->fMark0 ^ Gia_ObjFaninC1(pObj);
205 assert( Gia_ObjIsAnd(pObj) );
206 if ( pObj->fMark0 )
207 return pFan0->fMark1 && pFan1->fMark1;
208 assert( !pObj->fMark0 );
209 assert( !value0 || !value1 );
210 if ( value0 )
211 return pFan1->fMark1 || Gia_ObjIsPi(p, pFan1);
212 if ( value1 )
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);
216}
217void Txs_ManBackwardPass( Gia_Man_t * p, Vec_Int_t * vCiObjs, Vec_Int_t * vNodes, Vec_Int_t * vPiLits, Vec_Int_t * vFfLits )
218{
219 Gia_Obj_t * pObj, * pFan0, * pFan1; int i, value0, value1;
220 Gia_ManForEachObjVecReverse( vNodes, p, pObj, i )
221 {
222 if ( !pObj->fMark1 )
223 continue;
224 pObj->fMark1 = 0;
225 pFan0 = Gia_ObjFanin0(pObj);
226 pFan1 = Gia_ObjFanin1(pObj);
227 if ( pObj->fMark0 )
228 {
229 pFan0->fMark1 = 1;
230 pFan1->fMark1 = 1;
231 continue;
232 }
233 value0 = pFan0->fMark0 ^ Gia_ObjFaninC0(pObj);
234 value1 = pFan1->fMark0 ^ Gia_ObjFaninC1(pObj);
235 assert( !value0 || !value1 );
236 if ( value0 )
237 pFan1->fMark1 = 1;
238 else if ( value1 )
239 pFan0->fMark1 = 1;
240 else // if ( !value0 && !value1 )
241 {
242 if ( pFan0->fMark1 || pFan1->fMark1 )
243 continue;
244 if ( Gia_ObjIsPi(p, pFan0) )
245 pFan0->fMark1 = 1;
246 else if ( Gia_ObjIsPi(p, pFan1) )
247 pFan1->fMark1 = 1;
248 else if ( Gia_ObjIsAnd(pFan0) && Txs_ObjIsJust(p, pFan0) )
249 pFan0->fMark1 = 1;
250 else if ( Gia_ObjIsAnd(pFan1) && Txs_ObjIsJust(p, pFan1) )
251 pFan1->fMark1 = 1;
252 else
253 {
254 if ( pFan0->Value >= pFan1->Value )
255 pFan0->fMark1 = 1;
256 else
257 pFan1->fMark1 = 1;
258 }
259 }
260 }
261 Vec_IntClear( vPiLits );
262 Vec_IntClear( vFfLits );
263 Gia_ManForEachObjVec( vCiObjs, p, pObj, i )
264 {
265 if ( !pObj->fMark1 )
266 continue;
267 if ( Gia_ObjIsPi(p, pObj) )
268 Vec_IntPush( vPiLits, Abc_Var2Lit(Gia_ObjCioId(pObj), !pObj->fMark0) );
269 else
270 Vec_IntPush( vFfLits, Abc_Var2Lit(Gia_ObjCioId(pObj)-Gia_ManPiNum(p), !pObj->fMark0) );
271 }
272 assert( Vec_IntSize(vFfLits) > 0 );
273}
274
286void Txs_ManSelectJustPath( Gia_Man_t * p, Vec_Int_t * vNodes, Vec_Int_t * vCoObjs, Vec_Int_t * vRes )
287{
288 Gia_Obj_t * pObj, * pFan0, * pFan1;
289 int i, value0, value1;
290 // mark CO drivers
291 Gia_ManForEachObjVec( vCoObjs, p, pObj, i )
292 Gia_ObjFanin0(pObj)->fMark1 = 1;
293 // collect just paths
294 Vec_IntClear( vRes );
295 Gia_ManForEachObjVecReverse( vNodes, p, pObj, i )
296 {
297 if ( !pObj->fMark1 )
298 continue;
299 pObj->fMark1 = 0;
300 Vec_IntPush( vRes, Gia_ObjId(p, pObj) );
301 pFan0 = Gia_ObjFanin0(pObj);
302 pFan1 = Gia_ObjFanin1(pObj);
303 if ( pObj->fMark0 )
304 {
305 pFan0->fMark1 = 1;
306 pFan1->fMark1 = 1;
307 continue;
308 }
309 value0 = pFan0->fMark0 ^ Gia_ObjFaninC0(pObj);
310 value1 = pFan1->fMark0 ^ Gia_ObjFaninC1(pObj);
311 assert( !value0 || !value1 );
312 if ( value0 )
313 pFan1->fMark1 = 1;
314 else if ( value1 )
315 pFan0->fMark1 = 1;
316 else // if ( !value0 && !value1 )
317 {
318 pFan0->fMark1 = 1;
319 pFan1->fMark1 = 1;
320 }
321 }
322 Vec_IntReverseOrder( vRes );
323}
324void Txs_ManCollectJustPis( Gia_Man_t * p, Vec_Int_t * vCiObjs, Vec_Int_t * vPiLits )
325{
326 Gia_Obj_t * pObj; int i;
327 Vec_IntClear( vPiLits );
328 Gia_ManForEachObjVec( vCiObjs, p, pObj, i )
329 if ( pObj->fMark1 && Gia_ObjIsPi(p, pObj) )
330 Vec_IntPush( vPiLits, Abc_Var2Lit(Gia_ObjCioId(pObj), !pObj->fMark0) );
331}
333{
334 Gia_Obj_t * pObj; int i;
335 Gia_ManConst0(p)->Value = 0x7FFFFFFF;
336 Gia_ManForEachObjVec( vCiObjs, p, pObj, i )
337 pObj->Value = Gia_ObjIsPi(p, pObj) ? 0x7FFFFFFF : Gia_ObjCioId(pObj) - Gia_ManPiNum(p);
338}
340{
341 Gia_Obj_t * pObj, * pFan0, * pFan1;
342 int i, value0, value1;
343 Gia_ManForEachObjVec( vNodes, p, pObj, i )
344 {
345 pFan0 = Gia_ObjFanin0(pObj);
346 pFan1 = Gia_ObjFanin1(pObj);
347 if ( pObj->fMark0 )
348 {
349// pObj->Value = Abc_MinInt( pFan0->Value, pFan1->Value );
350 if ( pFan0->Value == 0x7FFFFFFF )
351 pObj->Value = pFan1->Value;
352 else if ( pFan1->Value == 0x7FFFFFFF )
353 pObj->Value = pFan0->Value;
354 else if ( Vec_IntEntry(vPrio, pFan0->Value) < Vec_IntEntry(vPrio, pFan1->Value) )
355 pObj->Value = pFan0->Value;
356 else
357 pObj->Value = pFan1->Value;
358 continue;
359 }
360 value0 = pFan0->fMark0 ^ Gia_ObjFaninC0(pObj);
361 value1 = pFan1->fMark0 ^ Gia_ObjFaninC1(pObj);
362 assert( !value0 || !value1 );
363 if ( value0 )
364 pObj->Value = pFan1->Value;
365 else if ( value1 )
366 pObj->Value = pFan0->Value;
367 else // if ( value0 == 0 && value1 == 0 )
368 {
369// pObj->Value = Abc_MaxInt( pFan0->Value, pFan1->Value );
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) )
373 pObj->Value = pFan0->Value;
374 else
375 pObj->Value = pFan1->Value;
376 }
377 assert( ~pObj->Value );
378 }
379}
380int Txs_ManFindMinId( Gia_Man_t * p, Vec_Int_t * vCoObjs, Vec_Int_t * vPrio )
381{
382 Gia_Obj_t * pObj; int i, iMinId = -1;
383 Gia_ManForEachObjVec( vCoObjs, p, pObj, i )
384 if ( Gia_ObjFanin0(pObj)->Value != 0x7FFFFFFF )
385 {
386 if ( iMinId == -1 || Vec_IntEntry(vPrio, iMinId) > Vec_IntEntry(vPrio, Gia_ObjFanin0(pObj)->Value) )
387 iMinId = Gia_ObjFanin0(pObj)->Value;
388 }
389 return iMinId;
390}
392 Vec_Int_t * vPrio, Vec_Int_t * vCiObjs,
393 Vec_Int_t * vNodes, Vec_Int_t * vCoObjs,
394 Vec_Int_t * vPiLits, Vec_Int_t * vFfLits, Vec_Int_t * vTemp )
395{
396 Gia_Obj_t * pObj;
397 int iPrioCi;
398 // propagate PI influence
399 Txs_ManSelectJustPath( p, vNodes, vCoObjs, vTemp );
400 Txs_ManCollectJustPis( p, vCiObjs, vPiLits );
401// printf( "%d -> %d ", Vec_IntSize(vNodes), Vec_IntSize(vTemp) );
402 // iteratively detect and remove smallest IDs
403 Vec_IntClear( vFfLits );
404 Txs_ManInitPrio( p, vCiObjs );
405 while ( 1 )
406 {
407 Txs_ManPropagatePrio( p, vTemp, vPrio );
408 iPrioCi = Txs_ManFindMinId( p, vCoObjs, vPrio );
409 if ( iPrioCi == -1 )
410 break;
411 pObj = Gia_ManCi( p, Gia_ManPiNum(p)+iPrioCi );
412 Vec_IntPush( vFfLits, Abc_Var2Lit(iPrioCi, !pObj->fMark0) );
413 pObj->Value = 0x7FFFFFFF;
414 }
415}
416void Txs_ManPrintFlopLits( Vec_Int_t * vFfLits, Vec_Int_t * vPrio )
417{
418 int i, Entry;
419 printf( "%3d : ", Vec_IntSize(vFfLits) );
420 Vec_IntForEachEntry( vFfLits, Entry, i )
421 printf( "%s%d(%d) ", Abc_LitIsCompl(Entry)? "+":"-", Abc_Lit2Var(Entry), Vec_IntEntry(vPrio, Abc_Lit2Var(Entry)) );
422 printf( "\n" );
423}
424
436void 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 )
437{
438 Gia_Obj_t * pObj;
439 int i, iLit;
440 Gia_ObjTerSimSet0( Gia_ManConst0(p) );
441 Gia_ManForEachObjVec( vCiObjs, p, pObj, i )
442 Gia_ObjTerSimSetX( pObj );
443 Vec_IntForEachEntry( vPiLits, iLit, i )
444 {
445 pObj = Gia_ManPi( p, Abc_Lit2Var(iLit) );
446 assert( Gia_ObjTerSimGetX(pObj) );
447 if ( Abc_LitIsCompl(iLit) )
448 Gia_ObjTerSimSet0( pObj );
449 else
450 Gia_ObjTerSimSet1( pObj );
451 }
452 Vec_IntForEachEntry( vFfLits, iLit, i )
453 {
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 );
458 else
459 Gia_ObjTerSimSet1( pObj );
460 }
461 Gia_ManForEachObjVec( vNodes, p, pObj, i )
462 Gia_ObjTerSimAnd( pObj );
463 Gia_ManForEachObjVec( vCoObjs, p, pObj, i )
464 {
465 Gia_ObjTerSimCo( pObj );
466 if ( Vec_IntEntry(vCoVals, i) )
467 assert( Gia_ObjTerSimGet1(pObj) );
468 else
469 assert( Gia_ObjTerSimGet0(pObj) );
470 }
471}
472
491{
492 int fTryNew = 1;
493 Pdr_Set_t * pRes;
494 Gia_Obj_t * pObj;
495 // collect CO objects
496 Vec_IntClear( p->vCoObjs );
497 if ( pCube == NULL ) // the target is the property output
498 {
499 pObj = Gia_ManCo(p->pGia, p->pMan->iOutCur);
500 Vec_IntPush( p->vCoObjs, Gia_ObjId(p->pGia, pObj) );
501 }
502 else // the target is the cube
503 {
504 int i;
505 for ( i = 0; i < pCube->nLits; i++ )
506 {
507 if ( pCube->Lits[i] == -1 )
508 continue;
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) );
511 }
512 }
513if ( 0 )
514{
515Abc_Print( 1, "Trying to justify cube " );
516if ( pCube )
517 Pdr_SetPrint( stdout, pCube, Gia_ManRegNum(p->pGia), NULL );
518else
519 Abc_Print( 1, "<prop=fail>" );
520Abc_Print( 1, " in frame %d.\n", k );
521}
522
523 // collect CI objects
524 Txs_ManCollectCone( p->pGia, p->vCoObjs, p->vCiObjs, p->vNodes );
525 // collect values
526 Pdr_ManCollectValues( p->pMan, k, p->vCiObjs, p->vCiVals );
527 Pdr_ManCollectValues( p->pMan, k, p->vCoObjs, p->vCoVals );
528
529 // perform two passes
530 Txs_ManForwardPass( p->pGia, p->vPrio, p->vCiObjs, p->vCiVals, p->vNodes, p->vCoObjs, p->vCoVals );
531 if ( fTryNew )
532 Txs_ManFindCiReduction( p->pGia, p->vPrio, p->vCiObjs, p->vNodes, p->vCoObjs, p->vPiLits, p->vFfLits, p->vTemp );
533 else
534 Txs_ManBackwardPass( p->pGia, p->vCiObjs, p->vNodes, p->vPiLits, p->vFfLits );
535 Txs_ManVerify( p->pGia, p->vCiObjs, p->vNodes, p->vPiLits, p->vFfLits, p->vCoObjs, p->vCoVals );
536
537 // derive the final set
538 pRes = Pdr_SetCreate( p->vFfLits, p->vPiLits );
539 //ZH: Disabled assertion because this invariant doesn't hold with down
540 //because of the join operation which can bring in initial states
541 //assert( k == 0 || !Pdr_SetIsInit(pRes, -1) );
542 return pRes;
543}
544
548
549
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
Definition giaAig.c:212
void Gia_ManStop(Gia_Man_t *p)
Definition giaMan.c:82
#define Gia_ManForEachObjVecReverse(vVec, p, pObj, i)
Definition gia.h:1202
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Definition gia.h:1194
Pdr_Set_t * Pdr_SetCreate(Vec_Int_t *vLits, Vec_Int_t *vPiLits)
Definition pdrUtil.c:65
struct Pdr_Set_t_ Pdr_Set_t
Definition pdrInt.h:74
void Pdr_SetPrint(FILE *pFile, Pdr_Set_t *p, int nRegs, Vec_Int_t *vFlopCounts)
Definition pdrUtil.c:225
typedefABC_NAMESPACE_HEADER_START struct Txs_Man_t_ Txs_Man_t
INCLUDES ///.
Definition pdrInt.h:71
struct Pdr_Man_t_ Pdr_Man_t
Definition pdrInt.h:95
void Pdr_ManCollectValues(Pdr_Man_t *p, int k, Vec_Int_t *vObjIds, Vec_Int_t *vValues)
Definition pdrSat.c:236
void Txs_ManCollectCone_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes)
Definition pdrTsim2.c:108
void Txs_ManBackwardPass(Gia_Man_t *p, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes, Vec_Int_t *vPiLits, Vec_Int_t *vFfLits)
Definition pdrTsim2.c:217
void Txs_ManPrintFlopLits(Vec_Int_t *vFfLits, Vec_Int_t *vPrio)
Definition pdrTsim2.c:416
void Txs_ManInitPrio(Gia_Man_t *p, Vec_Int_t *vCiObjs)
Definition pdrTsim2.c:332
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)
Definition pdrTsim2.c:436
int Txs_ManFindMinId(Gia_Man_t *p, Vec_Int_t *vCoObjs, Vec_Int_t *vPrio)
Definition pdrTsim2.c:380
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)
Definition pdrTsim2.c:145
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)
Definition pdrTsim2.c:391
Pdr_Set_t * Txs_ManTernarySim(Txs_Man_t *p, int k, Pdr_Set_t *pCube)
Definition pdrTsim2.c:490
void Txs_ManCollectCone(Gia_Man_t *p, Vec_Int_t *vCoObjs, Vec_Int_t *vCiObjs, Vec_Int_t *vNodes)
Definition pdrTsim2.c:123
void Txs_ManStop(Txs_Man_t *p)
Definition pdrTsim2.c:82
void Txs_ManCollectJustPis(Gia_Man_t *p, Vec_Int_t *vCiObjs, Vec_Int_t *vPiLits)
Definition pdrTsim2.c:324
void Txs_ManSelectJustPath(Gia_Man_t *p, Vec_Int_t *vNodes, Vec_Int_t *vCoObjs, Vec_Int_t *vRes)
Definition pdrTsim2.c:286
Txs_Man_t * Txs_ManStart(Pdr_Man_t *pMan, Aig_Man_t *pAig, Vec_Int_t *vPrio)
FUNCTION DEFINITIONS ///.
Definition pdrTsim2.c:60
void Txs_ManPropagatePrio(Gia_Man_t *p, Vec_Int_t *vNodes, Vec_Int_t *vPrio)
Definition pdrTsim2.c:339
unsigned fMark1
Definition gia.h:86
unsigned Value
Definition gia.h:89
unsigned fMark0
Definition gia.h:81
int Lits[0]
Definition pdrInt.h:81
int nLits
Definition pdrInt.h:80
DECLARATIONS ///.
Definition pdrTsim2.c:31
Vec_Int_t * vCoObjs
Definition pdrTsim2.c:35
Pdr_Man_t * pMan
Definition pdrTsim2.c:42
Vec_Int_t * vNodes
Definition pdrTsim2.c:38
Vec_Int_t * vPrio
Definition pdrTsim2.c:33
Vec_Int_t * vCiObjs
Definition pdrTsim2.c:34
Vec_Int_t * vCoVals
Definition pdrTsim2.c:37
Vec_Int_t * vCiVals
Definition pdrTsim2.c:36
Gia_Man_t * pGia
Definition pdrTsim2.c:32
Vec_Int_t * vTemp
Definition pdrTsim2.c:39
Vec_Int_t * vPiLits
Definition pdrTsim2.c:40
Vec_Int_t * vFfLits
Definition pdrTsim2.c:41
#define assert(ex)
Definition util_old.h:213
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54