ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
fraigApi.c
Go to the documentation of this file.
1
18
19#include "fraigInt.h"
20
22
23
27
31
46Fraig_Node_t ** Fraig_ManReadInputs ( Fraig_Man_t * p ) { return p->vInputs->pArray; }
47Fraig_Node_t ** Fraig_ManReadOutputs( Fraig_Man_t * p ) { return p->vOutputs->pArray; }
48Fraig_Node_t ** Fraig_ManReadNodes( Fraig_Man_t * p ) { return p->vNodes->pArray; }
49int Fraig_ManReadInputNum ( Fraig_Man_t * p ) { return p->vInputs->nSize; }
50int Fraig_ManReadOutputNum( Fraig_Man_t * p ) { return p->vOutputs->nSize; }
51int Fraig_ManReadNodeNum( Fraig_Man_t * p ) { return p->vNodes->nSize; }
52Fraig_Node_t * Fraig_ManReadConst1 ( Fraig_Man_t * p ) { return p->pConst1; }
53Fraig_Node_t * Fraig_ManReadIthNode( Fraig_Man_t * p, int i ) { assert ( i < p->vNodes->nSize ); return p->vNodes->pArray[i]; }
54char ** Fraig_ManReadInputNames( Fraig_Man_t * p ) { return p->ppInputNames; }
55char ** Fraig_ManReadOutputNames( Fraig_Man_t * p ) { return p->ppOutputNames; }
56char * Fraig_ManReadVarsInt( Fraig_Man_t * p ) { return (char *)p->vVarsInt; }
57char * Fraig_ManReadSat( Fraig_Man_t * p ) { return (char *)p->pSat; }
58int Fraig_ManReadFuncRed( Fraig_Man_t * p ) { return p->fFuncRed; }
59int Fraig_ManReadFeedBack( Fraig_Man_t * p ) { return p->fFeedBack; }
60int Fraig_ManReadDoSparse( Fraig_Man_t * p ) { return p->fDoSparse; }
61int Fraig_ManReadChoicing( Fraig_Man_t * p ) { return p->fChoicing; }
62int Fraig_ManReadVerbose( Fraig_Man_t * p ) { return p->fVerbose; }
63int * Fraig_ManReadModel( Fraig_Man_t * p ) { return p->pModel; }
64// returns the number of patterns used for random simulation (this number is fixed for the FRAIG run)
65int Fraig_ManReadPatternNumRandom( Fraig_Man_t * p ) { return p->nWordsRand * 32; }
66// returns the number of dynamic patterns accumulated at runtime (include SAT solver counter-examples and distance-1 patterns derived from them)
67int Fraig_ManReadPatternNumDynamic( Fraig_Man_t * p ) { return p->iWordStart * 32; }
68// returns the number of dynamic patterns proved useful to distinquish some FRAIG nodes (this number is more than 0 after the first garbage collection of patterns)
70// returns the number of times FRAIG package timed out
71int Fraig_ManReadSatFails( Fraig_Man_t * p ) { return p->nSatFailsReal; }
72// returns the number of conflicts in the SAT solver
73int Fraig_ManReadConflicts( Fraig_Man_t * p ) { return p->pSat? Msat_SolverReadBackTracks(p->pSat) : 0; }
74// returns the number of inspections in the SAT solver
75int Fraig_ManReadInspects( Fraig_Man_t * p ) { return p->pSat? Msat_SolverReadInspects(p->pSat) : 0; }
76
88void Fraig_ManSetFuncRed( Fraig_Man_t * p, int fFuncRed ) { p->fFuncRed = fFuncRed; }
89void Fraig_ManSetFeedBack( Fraig_Man_t * p, int fFeedBack ) { p->fFeedBack = fFeedBack; }
90void Fraig_ManSetDoSparse( Fraig_Man_t * p, int fDoSparse ) { p->fDoSparse = fDoSparse; }
91void Fraig_ManSetChoicing( Fraig_Man_t * p, int fChoicing ) { p->fChoicing = fChoicing; }
92void Fraig_ManSetTryProve( Fraig_Man_t * p, int fTryProve ) { p->fTryProve = fTryProve; }
93void Fraig_ManSetVerbose( Fraig_Man_t * p, int fVerbose ) { p->fVerbose = fVerbose; }
94void Fraig_ManSetOutputNames( Fraig_Man_t * p, char ** ppNames ) { p->ppOutputNames = ppNames; }
95void Fraig_ManSetInputNames( Fraig_Man_t * p, char ** ppNames ) { p->ppInputNames = ppNames; }
96
110int Fraig_NodeReadNum( Fraig_Node_t * p ) { return p->Num; }
115int Fraig_NodeReadNumRefs( Fraig_Node_t * p ) { return p->nRefs; }
116int Fraig_NodeReadNumFanouts( Fraig_Node_t * p ) { return p->nFanouts; }
117int Fraig_NodeReadSimInv( Fraig_Node_t * p ) { return p->fInv; }
118int Fraig_NodeReadNumOnes( Fraig_Node_t * p ) { return p->nOnes; }
119// returns the pointer to the random simulation patterns (their number is returned by Fraig_ManReadPatternNumRandom)
120// memory pointed to by this and the following procedure is maintained by the FRAIG package and exists as long as the package runs
121unsigned * Fraig_NodeReadPatternsRandom( Fraig_Node_t * p ) { return p->puSimR; }
122// returns the pointer to the dynamic simulation patterns (their number is returned by Fraig_ManReadPatternNumDynamic or Fraig_ManReadPatternNumDynamicFiltered)
123// if the number of patterns is not evenly divisible by 32, the patterns beyond the given number contain garbage
124unsigned * Fraig_NodeReadPatternsDynamic( Fraig_Node_t * p ) { return p->puSimD; }
125
137void Fraig_NodeSetData0( Fraig_Node_t * p, Fraig_Node_t * pData ) { p->pData0 = pData; }
138void Fraig_NodeSetData1( Fraig_Node_t * p, Fraig_Node_t * pData ) { p->pData1 = pData; }
139
151int Fraig_NodeIsConst( Fraig_Node_t * p ) { return (Fraig_Regular(p))->Num == 0; }
152int Fraig_NodeIsVar( Fraig_Node_t * p ) { return (Fraig_Regular(p))->NumPi >= 0; }
153int Fraig_NodeIsAnd( Fraig_Node_t * p ) { return (Fraig_Regular(p))->NumPi < 0 && (Fraig_Regular(p))->Num > 0; }
154int Fraig_NodeComparePhase( Fraig_Node_t * p1, Fraig_Node_t * p2 ) { assert( !Fraig_IsComplement(p1) ); assert( !Fraig_IsComplement(p2) ); return p1->fInv ^ p2->fInv; }
155
169{
170 int k;
171 if ( i < 0 )
172 {
173 printf( "Requesting a PI with a negative number\n" );
174 return NULL;
175 }
176 // create the PIs to fill in the interval
177 if ( i >= p->vInputs->nSize )
178 for ( k = p->vInputs->nSize; k <= i; k++ )
180 return p->vInputs->pArray[i];
181}
182
195{
196 // internal node may be a PO two times
197 Fraig_Regular(pNode)->fNodePo = 1;
198 Fraig_NodeVecPush( p->vOutputs, pNode );
199}
200
213{
214 return Fraig_NodeAndCanon( p, p1, p2 );
215}
216
232
245{
246 return Fraig_NodeMux( p, p1, Fraig_Not(p2), p2 );
247}
248
261{
262 Fraig_Node_t * pAnd1, * pAnd2, * pRes;
263 pAnd1 = Fraig_NodeAndCanon( p, pC, pT ); Fraig_Ref( pAnd1 );
264 pAnd2 = Fraig_NodeAndCanon( p, Fraig_Not(pC), pE ); Fraig_Ref( pAnd2 );
265 pRes = Fraig_NodeOr( p, pAnd1, pAnd2 );
266 Fraig_RecursiveDeref( p, pAnd1 );
267 Fraig_RecursiveDeref( p, pAnd2 );
268 Fraig_Deref( pRes );
269 return pRes;
270}
271
272
285void Fraig_NodeSetChoice( Fraig_Man_t * pMan, Fraig_Node_t * pNodeOld, Fraig_Node_t * pNodeNew )
286{
287// assert( pMan->fChoicing );
288 pNodeNew->pNextE = pNodeOld->pNextE;
289 pNodeOld->pNextE = pNodeNew;
290 pNodeNew->pRepr = pNodeOld;
291}
292
296
297
299
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Cube * p
Definition exorList.c:222
int Fraig_ManReadInspects(Fraig_Man_t *p)
Definition fraigApi.c:75
int Fraig_NodeIsConst(Fraig_Node_t *p)
Definition fraigApi.c:151
void Fraig_ManSetFeedBack(Fraig_Man_t *p, int fFeedBack)
Definition fraigApi.c:89
int Fraig_ManReadSatFails(Fraig_Man_t *p)
Definition fraigApi.c:71
unsigned * Fraig_NodeReadPatternsRandom(Fraig_Node_t *p)
Definition fraigApi.c:121
void Fraig_ManSetPo(Fraig_Man_t *p, Fraig_Node_t *pNode)
Definition fraigApi.c:194
int Fraig_ManReadPatternNumDynamicFiltered(Fraig_Man_t *p)
Definition fraigApi.c:69
Fraig_Node_t * Fraig_ManReadIthNode(Fraig_Man_t *p, int i)
Definition fraigApi.c:53
ABC_NAMESPACE_IMPL_START Fraig_NodeVec_t * Fraig_ManReadVecInputs(Fraig_Man_t *p)
DECLARATIONS ///.
Definition fraigApi.c:43
int Fraig_NodeReadNumFanouts(Fraig_Node_t *p)
Definition fraigApi.c:116
int Fraig_NodeReadNumOnes(Fraig_Node_t *p)
Definition fraigApi.c:118
Fraig_Node_t * Fraig_NodeMux(Fraig_Man_t *p, Fraig_Node_t *pC, Fraig_Node_t *pT, Fraig_Node_t *pE)
Definition fraigApi.c:260
int Fraig_NodeComparePhase(Fraig_Node_t *p1, Fraig_Node_t *p2)
Definition fraigApi.c:154
Fraig_NodeVec_t * Fraig_ManReadVecOutputs(Fraig_Man_t *p)
Definition fraigApi.c:44
int Fraig_ManReadNodeNum(Fraig_Man_t *p)
Definition fraigApi.c:51
void Fraig_NodeSetChoice(Fraig_Man_t *pMan, Fraig_Node_t *pNodeOld, Fraig_Node_t *pNodeNew)
Definition fraigApi.c:285
void Fraig_ManSetInputNames(Fraig_Man_t *p, char **ppNames)
Definition fraigApi.c:95
int Fraig_ManReadDoSparse(Fraig_Man_t *p)
Definition fraigApi.c:60
int Fraig_ManReadPatternNumRandom(Fraig_Man_t *p)
Definition fraigApi.c:65
char * Fraig_ManReadVarsInt(Fraig_Man_t *p)
Definition fraigApi.c:56
int Fraig_ManReadFeedBack(Fraig_Man_t *p)
Definition fraigApi.c:59
Fraig_Node_t * Fraig_NodeReadData0(Fraig_Node_t *p)
Definition fraigApi.c:108
Fraig_Node_t * Fraig_NodeReadRepr(Fraig_Node_t *p)
Definition fraigApi.c:114
int Fraig_ManReadVerbose(Fraig_Man_t *p)
Definition fraigApi.c:62
int Fraig_ManReadInputNum(Fraig_Man_t *p)
Definition fraigApi.c:49
int Fraig_ManReadConflicts(Fraig_Man_t *p)
Definition fraigApi.c:73
char ** Fraig_ManReadOutputNames(Fraig_Man_t *p)
Definition fraigApi.c:55
char ** Fraig_ManReadInputNames(Fraig_Man_t *p)
Definition fraigApi.c:54
Fraig_Node_t * Fraig_NodeExor(Fraig_Man_t *p, Fraig_Node_t *p1, Fraig_Node_t *p2)
Definition fraigApi.c:244
void Fraig_ManSetVerbose(Fraig_Man_t *p, int fVerbose)
Definition fraigApi.c:93
Fraig_Node_t * Fraig_NodeOr(Fraig_Man_t *p, Fraig_Node_t *p1, Fraig_Node_t *p2)
Definition fraigApi.c:228
Fraig_Node_t ** Fraig_ManReadInputs(Fraig_Man_t *p)
Definition fraigApi.c:46
int Fraig_NodeReadNumRefs(Fraig_Node_t *p)
Definition fraigApi.c:115
void Fraig_ManSetDoSparse(Fraig_Man_t *p, int fDoSparse)
Definition fraigApi.c:90
Fraig_Node_t * Fraig_NodeReadOne(Fraig_Node_t *p)
Definition fraigApi.c:111
int Fraig_NodeIsAnd(Fraig_Node_t *p)
Definition fraigApi.c:153
void Fraig_ManSetOutputNames(Fraig_Man_t *p, char **ppNames)
Definition fraigApi.c:94
int Fraig_ManReadChoicing(Fraig_Man_t *p)
Definition fraigApi.c:61
int Fraig_ManReadPatternNumDynamic(Fraig_Man_t *p)
Definition fraigApi.c:67
Fraig_Node_t * Fraig_ManReadConst1(Fraig_Man_t *p)
Definition fraigApi.c:52
int Fraig_NodeReadSimInv(Fraig_Node_t *p)
Definition fraigApi.c:117
int * Fraig_ManReadModel(Fraig_Man_t *p)
Definition fraigApi.c:63
void Fraig_NodeSetData1(Fraig_Node_t *p, Fraig_Node_t *pData)
Definition fraigApi.c:138
void Fraig_ManSetTryProve(Fraig_Man_t *p, int fTryProve)
Definition fraigApi.c:92
Fraig_NodeVec_t * Fraig_ManReadVecNodes(Fraig_Man_t *p)
Definition fraigApi.c:45
unsigned * Fraig_NodeReadPatternsDynamic(Fraig_Node_t *p)
Definition fraigApi.c:124
Fraig_Node_t * Fraig_ManReadIthVar(Fraig_Man_t *p, int i)
Definition fraigApi.c:168
int Fraig_ManReadFuncRed(Fraig_Man_t *p)
Definition fraigApi.c:58
Fraig_Node_t ** Fraig_ManReadNodes(Fraig_Man_t *p)
Definition fraigApi.c:48
void Fraig_ManSetChoicing(Fraig_Man_t *p, int fChoicing)
Definition fraigApi.c:91
Fraig_Node_t * Fraig_NodeReadNextE(Fraig_Node_t *p)
Definition fraigApi.c:113
Fraig_Node_t * Fraig_NodeReadData1(Fraig_Node_t *p)
Definition fraigApi.c:109
Fraig_Node_t * Fraig_NodeReadTwo(Fraig_Node_t *p)
Definition fraigApi.c:112
void Fraig_ManSetFuncRed(Fraig_Man_t *p, int fFuncRed)
Definition fraigApi.c:88
int Fraig_NodeReadNum(Fraig_Node_t *p)
Definition fraigApi.c:110
Fraig_Node_t * Fraig_NodeAnd(Fraig_Man_t *p, Fraig_Node_t *p1, Fraig_Node_t *p2)
Definition fraigApi.c:212
int Fraig_ManReadOutputNum(Fraig_Man_t *p)
Definition fraigApi.c:50
char * Fraig_ManReadSat(Fraig_Man_t *p)
Definition fraigApi.c:57
Fraig_Node_t ** Fraig_ManReadOutputs(Fraig_Man_t *p)
Definition fraigApi.c:47
int Fraig_NodeIsVar(Fraig_Node_t *p)
Definition fraigApi.c:152
void Fraig_NodeSetData0(Fraig_Node_t *p, Fraig_Node_t *pData)
Definition fraigApi.c:137
ABC_NAMESPACE_IMPL_START Fraig_Node_t * Fraig_NodeAndCanon(Fraig_Man_t *pMan, Fraig_Node_t *p1, Fraig_Node_t *p2)
DECLARATIONS ///.
Definition fraigCanon.c:52
Fraig_Node_t * Fraig_NodeCreatePi(Fraig_Man_t *p)
Definition fraigNode.c:87
#define Fraig_IsComplement(p)
GLOBAL VARIABLES ///.
Definition fraig.h:107
#define Fraig_Regular(p)
Definition fraig.h:108
#define Fraig_Deref(p)
Definition fraig.h:114
#define Fraig_Not(p)
Definition fraig.h:109
#define Fraig_Ref(p)
Definition fraig.h:113
struct Fraig_NodeVecStruct_t_ Fraig_NodeVec_t
Definition fraig.h:42
typedefABC_NAMESPACE_HEADER_START struct Fraig_ManStruct_t_ Fraig_Man_t
INCLUDES ///.
Definition fraig.h:40
struct Fraig_NodeStruct_t_ Fraig_Node_t
Definition fraig.h:41
void Fraig_NodeVecPush(Fraig_NodeVec_t *p, Fraig_Node_t *Entry)
Definition fraigVec.c:189
#define Fraig_RecursiveDeref(p, c)
Definition fraig.h:115
int Msat_SolverReadInspects(Msat_Solver_t *p)
int Msat_SolverReadBackTracks(Msat_Solver_t *p)
Fraig_Node_t * pRepr
Definition fraigInt.h:242
Fraig_Node_t * pNextE
Definition fraigInt.h:241
#define assert(ex)
Definition util_old.h:213