54static inline int Faig_CheckIdPi(
Faig_Man_t *
p,
int i ) {
return i >= 1 && i <
p->nPis1; }
55static inline int Faig_CheckIdLo(
Faig_Man_t *
p,
int i ) {
return i >=
p->nPis1 && i <
p->nCis1; }
56static inline int Faig_CheckIdNo(
Faig_Man_t *
p,
int i ) {
return i >=
p->nCis1 && i <
p->nCisNos1; }
57static inline int Faig_CheckIdPo(
Faig_Man_t *
p,
int i ) {
return i >=
p->nCisNos1 && i <
p->nCisNosPos1; }
58static inline int Faig_CheckIdLi(
Faig_Man_t *
p,
int i ) {
return i >=
p->nCisNosPos1 && i <
p->nObjs; }
59static inline int Faig_CheckIdCo(
Faig_Man_t *
p,
int i ) {
return i >=
p->nCisNos1 && i <
p->nObjs; }
60static inline int Faig_CheckIdObj(
Faig_Man_t *
p,
int i ) {
return i >= 0 && i <
p->nObjs; }
62static inline int Faig_ObjIdToNumPi(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdPi(
p,i) );
return i - 1; }
63static inline int Faig_ObjIdToNumLo(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdLo(
p,i) );
return i -
p->nPis1; }
64static inline int Faig_ObjIdToNumNo(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdNo(
p,i) );
return i -
p->nCis1; }
65static inline int Faig_ObjIdToNumPo(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdPo(
p,i) );
return i -
p->nCisNos1; }
66static inline int Faig_ObjIdToNumLi(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdLi(
p,i) );
return i -
p->nCisNosPos1; }
67static inline int Faig_ObjIdToNumCo(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdCo(
p,i) );
return i -
p->nCisNos1; }
69static inline int Faig_ObjLoToLi(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdLo(
p,i) );
return p->nObjs - (
p->nCis1 - i); }
70static inline int Faig_ObjLiToLo(
Faig_Man_t *
p,
int i ) {
assert( Faig_CheckIdLi(
p,i) );
return p->nCis1 - (
p->nObjs - i); }
72static inline int Faig_NodeChild0(
Faig_Man_t *
p,
int n ) {
return p->pObjs[n<<1]; }
73static inline int Faig_NodeChild1(
Faig_Man_t *
p,
int n ) {
return p->pObjs[(n<<1)+1]; }
74static inline int Faig_CoChild0(
Faig_Man_t *
p,
int n ) {
return p->pObjs[(
p->nNos<<1)+n]; }
75static inline int Faig_ObjFaninC(
int iFan ) {
return iFan & 1; }
76static inline int Faig_ObjFanin(
int iFan ) {
return iFan >> 1; }
95 return Aig_ManObjNumMax(pAig) ==
96 1 + Aig_ManCiNum(pAig) + Aig_ManNodeNum(pAig) + Aig_ManCoNum(pAig);
115 nWords = 2 * Aig_ManNodeNum(pAig) + Aig_ManCoNum(pAig);
119 p->nPis = Aig_ManCiNum(pAig) - Aig_ManRegNum(pAig);
120 p->nPos = Aig_ManCoNum(pAig) - Aig_ManRegNum(pAig);
121 p->nCis = Aig_ManCiNum(pAig);
122 p->nCos = Aig_ManCoNum(pAig);
123 p->nFfs = Aig_ManRegNum(pAig);
124 p->nNos = Aig_ManNodeNum(pAig);
126 p->nPis1 =
p->nPis + 1;
127 p->nCis1 =
p->nCis + 1;
128 p->nCisNos1 =
p->nCis +
p->nNos + 1;
129 p->nCisNosPos1 =
p->nCis +
p->nNos +
p->nPos + 1;
130 p->nObjs =
p->nCis +
p->nNos +
p->nCos + 1;
154 p->pObjs[iWord++] = (Aig_ObjFaninId0(pObj) << 1) | Aig_ObjFaninC0(pObj);
155 p->pObjs[iWord++] = (Aig_ObjFaninId1(pObj) << 1) | Aig_ObjFaninC1(pObj);
158 p->pObjs[iWord++] = (Aig_ObjFaninId0(pObj) << 1) | Aig_ObjFaninC0(pObj);
174static inline unsigned Faig_SimulateNode(
Faig_Man_t *
p,
int Id,
unsigned * pSimInfo )
176 int n = Faig_ObjIdToNumNo(
p, Id );
177 int iFan0 = Faig_NodeChild0(
p, n );
178 int iFan1 = Faig_NodeChild1(
p, n );
179 if ( Faig_ObjFaninC(iFan0) && Faig_ObjFaninC(iFan1) )
180 return ~(pSimInfo[Faig_ObjFanin(iFan0)] | pSimInfo[Faig_ObjFanin(iFan1)]);
181 if ( Faig_ObjFaninC(iFan0) && !Faig_ObjFaninC(iFan1) )
182 return (~pSimInfo[Faig_ObjFanin(iFan0)] & pSimInfo[Faig_ObjFanin(iFan1)]);
183 if ( !Faig_ObjFaninC(iFan0) && Faig_ObjFaninC(iFan1) )
184 return (pSimInfo[Faig_ObjFanin(iFan0)] & ~pSimInfo[Faig_ObjFanin(iFan1)]);
186 return (pSimInfo[Faig_ObjFanin(iFan0)] & pSimInfo[Faig_ObjFanin(iFan1)]);
200static inline unsigned Faig_SimulateCo(
Faig_Man_t *
p,
int Id,
unsigned * pSimInfo )
202 int n = Faig_ObjIdToNumCo(
p, Id );
203 int iFan0 = Faig_CoChild0(
p, n );
204 if ( Faig_ObjFaninC(iFan0) )
205 return ~pSimInfo[Faig_ObjFanin(iFan0)];
207 return pSimInfo[Faig_ObjFanin(iFan0)];
221static inline unsigned Faig_SimulateRandomShift(
unsigned uOld )
237static inline unsigned Faig_SimulateTransferShift(
unsigned uOld,
unsigned uNew )
239 return (uOld << 16) | (uNew & 0xffff);
256 unsigned * pSimInfo =
ABC_ALLOC(
unsigned,
p->nObjs );
262 for ( f = 0; f < nFrames; f++ )
266 for ( i = 1; i <
p->nPis1; i++ )
267 pSimInfo[i] = f? Faig_SimulateRandomShift( pSimInfo[i] ) :
Aig_ManRandom( 0 );
268 for ( ; i <
p->nCis1; i++ )
269 pSimInfo[i] = f? Faig_SimulateTransferShift( pSimInfo[i], pSimInfo[Faig_ObjLoToLi(
p,i)] ) : 0;
273 for ( i = 1; i <
p->nPis1; i++ )
275 for ( ; i <
p->nCis1; i++ )
276 pSimInfo[i] = f? pSimInfo[Faig_ObjLoToLi(
p,i)] : 0;
278 for ( ; i <
p->nCisNos1; i++ )
279 pSimInfo[i] = Faig_SimulateNode(
p, i, pSimInfo );
280 for ( ; i <
p->nObjs; i++ )
281 pSimInfo[i] = Faig_SimulateCo(
p, i, pSimInfo );
286 for ( i = 0; i <
p->nObjs; i++ )
287 pNumOnes[i] += Aig_WordCountOnes( (pSimInfo[i] ^ (pSimInfo[i] >> 16)) & 0xffff );
291 for ( i = 0; i <
p->nObjs; i++ )
292 pNumOnes[i] += Aig_WordCountOnes( pSimInfo[i] );
312 int nTotal = 32 * nSimWords;
329 int nTotal = 32 * nSimWords;
330 return (
float)nOnes /
nTotal;
355 vSwitching = Vec_IntStart( Aig_ManObjNumMax(
p) );
356 pSwitching = (
float *)vSwitching->pArray;
364 nFramesReal = nFrames;
367 if ( nFramesReal <= nPref )
369 printf(
"The total number of frames (%d) should exceed prefix (%d).\n", nFramesReal, nPref );
370 printf(
"Setting the total number of frames to be %d.\n", nFrames );
371 nFramesReal = nFrames;
382 pObj = Aig_ManConst1(
p);
390 assert( Counter == pAig->nObjs );
396 pObj = Aig_ManConst1(
p);
404 assert( Counter == pAig->nObjs );
410 pObj = Aig_ManConst1(
p);
418 assert( Counter == pAig->nObjs );
#define ABC_ALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
unsigned Aig_ManRandom(int fReset)
int nTotal
DECLARATIONS ///.
ABC_DLL char * Abc_FrameReadFlag(char *pFlag)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int * Faig_ManSimulateFrames(Faig_Man_t *p, int nFrames, int nPref, int fTrans)
Vec_Int_t * Saig_ManComputeSwitchProb3s(Aig_Man_t *p, int nFrames, int nPref, int fProbOne)
float Faig_ManComputeSwitching(int nOnes, int nSimWords)
typedefABC_NAMESPACE_IMPL_START struct Faig_Man_t_ Faig_Man_t
DECLARATIONS ///.
float Faig_ManComputeProbOne(int nOnes, int nSimWords)
int Faig_ManIsCorrect(Aig_Man_t *pAig)
FUNCTION DEFINITIONS ///.
Faig_Man_t * Faig_ManAlloc(Aig_Man_t *pAig)
Vec_Int_t * Faig_ManComputeSwitchProbs4(Aig_Man_t *p, int nFrames, int nPref, int fProbOne)
Faig_Man_t * Faig_ManCreate(Aig_Man_t *pAig)