ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
llb2Bad.c File Reference
#include "llbInt.h"
Include dependency graph for llb2Bad.c:

Go to the source code of this file.

Functions

ABC_NAMESPACE_IMPL_START DdNode * Llb_BddComputeBad (Aig_Man_t *pInit, DdManager *dd, abctime TimeOut)
 DECLARATIONS ///.
 
DdNode * Llb_BddQuantifyPis (Aig_Man_t *pInit, DdManager *dd, DdNode *bFunc)
 

Function Documentation

◆ Llb_BddComputeBad()

ABC_NAMESPACE_IMPL_START DdNode * Llb_BddComputeBad ( Aig_Man_t * pInit,
DdManager * dd,
abctime TimeOut )

DECLARATIONS ///.

CFile****************************************************************

FileName [llb2Bad.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [BDD based reachability.]

Synopsis [Computing bad states.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
llb2Bad.c,v 1.00 2005/06/20 00:00:00 alanmi Exp

] FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis [Computes bad in working manager.]

Description []

SideEffects []

SeeAlso []

Definition at line 45 of file llb2Bad.c.

46{
47 Vec_Ptr_t * vNodes;
48 DdNode * bBdd0, * bBdd1, * bTemp, * bResult;
49 Aig_Obj_t * pObj;
50 int i, k;
51 assert( Cudd_ReadSize(dd) == Aig_ManCiNum(pInit) );
52 // initialize elementary variables
53 Aig_ManConst1(pInit)->pData = Cudd_ReadOne( dd );
54 Saig_ManForEachLo( pInit, pObj, i )
55 pObj->pData = Cudd_bddIthVar( dd, i );
56 Saig_ManForEachPi( pInit, pObj, i )
57 pObj->pData = Cudd_bddIthVar( dd, Aig_ManRegNum(pInit) + i );
58 // compute internal nodes
59 vNodes = Aig_ManDfsNodes( pInit, (Aig_Obj_t **)Vec_PtrArray(pInit->vCos), Saig_ManPoNum(pInit) );
60 Vec_PtrForEachEntry( Aig_Obj_t *, vNodes, pObj, i )
61 {
62 if ( !Aig_ObjIsNode(pObj) )
63 continue;
64 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
65 bBdd1 = Cudd_NotCond( (DdNode *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj) );
66// pObj->pData = Extra_bddAndTime( dd, bBdd0, bBdd1, TimeOut );
67 pObj->pData = Cudd_bddAnd( dd, bBdd0, bBdd1 );
68 if ( pObj->pData == NULL )
69 {
70 Vec_PtrForEachEntryStop( Aig_Obj_t *, vNodes, pObj, k, i )
71 if ( pObj->pData )
72 Cudd_RecursiveDeref( dd, (DdNode *)pObj->pData );
73 Vec_PtrFree( vNodes );
74 return NULL;
75 }
76 Cudd_Ref( (DdNode *)pObj->pData );
77 }
78 // quantify PIs of each PO
79 bResult = Cudd_ReadLogicZero( dd ); Cudd_Ref( bResult );
80 Saig_ManForEachPo( pInit, pObj, i )
81 {
82 bBdd0 = Cudd_NotCond( Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
83 bResult = Cudd_bddOr( dd, bTemp = bResult, bBdd0 ); Cudd_Ref( bResult );
84 Cudd_RecursiveDeref( dd, bTemp );
85 }
86 // deref
87 Vec_PtrForEachEntry( Aig_Obj_t *, vNodes, pObj, i )
88 {
89 if ( !Aig_ObjIsNode(pObj) )
90 continue;
91 Cudd_RecursiveDeref( dd, (DdNode *)pObj->pData );
92 }
93 Vec_PtrFree( vNodes );
94 Cudd_Deref( bResult );
95 return bResult;
96}
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
Vec_Ptr_t * Aig_ManDfsNodes(Aig_Man_t *p, Aig_Obj_t **ppNodes, int nNodes)
Definition aigDfs.c:347
#define Saig_ManForEachPo(p, pObj, i)
Definition saig.h:93
#define Saig_ManForEachLo(p, pObj, i)
Definition saig.h:96
#define Saig_ManForEachPi(p, pObj, i)
Definition saig.h:91
void * pData
Definition aig.h:87
#define assert(ex)
Definition util_old.h:213
#define Vec_PtrForEachEntryStop(Type, vVec, pEntry, i, Stop)
Definition vecPtr.h:59
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
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Llb_BddQuantifyPis()

DdNode * Llb_BddQuantifyPis ( Aig_Man_t * pInit,
DdManager * dd,
DdNode * bFunc )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 109 of file llb2Bad.c.

110{
111 DdNode * bVar, * bCube, * bTemp;
112 Aig_Obj_t * pObj;
113 int i;
114 abctime TimeStop;
115 assert( Cudd_ReadSize(dd) == Aig_ManCiNum(pInit) );
116 TimeStop = dd->TimeStop; dd->TimeStop = 0;
117 // create PI cube
118 bCube = Cudd_ReadOne( dd ); Cudd_Ref( bCube );
119 Saig_ManForEachPi( pInit, pObj, i ) {
120 bVar = Cudd_bddIthVar( dd, Aig_ManRegNum(pInit) + i );
121 bCube = Cudd_bddAnd( dd, bTemp = bCube, bVar ); Cudd_Ref( bCube );
122 Cudd_RecursiveDeref( dd, bTemp );
123 }
124 // quantify PI cube
125 bFunc = Cudd_bddExistAbstract( dd, bFunc, bCube ); Cudd_Ref( bFunc );
126 Cudd_RecursiveDeref( dd, bCube );
127 Cudd_Deref( bFunc );
128 dd->TimeStop = TimeStop;
129 return bFunc;
130}
ABC_INT64_T abctime
Definition abc_global.h:332
Here is the caller graph for this function: