42static inline int Saig_SimObjFaninC0(
Saig_SimObj_t * pObj ) {
return pObj->iFan0 & 1; }
43static inline int Saig_SimObjFaninC1(
Saig_SimObj_t * pObj ) {
return pObj->iFan1 & 1; }
44static inline int Saig_SimObjFanin0(
Saig_SimObj_t * pObj ) {
return pObj->iFan0 >> 1; }
45static inline int Saig_SimObjFanin1(
Saig_SimObj_t * pObj ) {
return pObj->iFan1 >> 1; }
76 pEntry->Type = pObj->
Type;
77 if ( Aig_ObjIsCi(pObj) || i == 0 )
79 if ( Saig_ObjIsLo(
p, pObj) )
81 pEntry->iFan0 = (Saig_ObjLoToLi(
p, pObj)->Id << 1);
86 pEntry->iFan0 = (Aig_ObjFaninId0(pObj) << 1) | Aig_ObjFaninC0(pObj);
87 if ( Aig_ObjIsCo(pObj) )
89 assert( Aig_ObjIsNode(pObj) );
90 pEntry->iFan1 = (Aig_ObjFaninId1(pObj) << 1) | Aig_ObjFaninC1(pObj);
92 pEntry = pAig + Aig_ManObjNumMax(
p);
112 if ( Saig_SimObjFaninC0(pObj) && Saig_SimObjFaninC1(pObj) )
113 pObj->pData[0] = ~(pObj0->pData[0] | pObj1->pData[0]);
114 else if ( Saig_SimObjFaninC0(pObj) && !Saig_SimObjFaninC1(pObj) )
115 pObj->pData[0] = (~pObj0->pData[0] & pObj1->pData[0]);
116 else if ( !Saig_SimObjFaninC0(pObj) && Saig_SimObjFaninC1(pObj) )
117 pObj->pData[0] = (pObj0->pData[0] & ~pObj1->pData[0]);
119 pObj->pData[0] = (pObj0->pData[0] & pObj1->pData[0]);
137 pObj->pData[0] = (Saig_SimObjFaninC0(pObj)? ~pObj0->pData[0] : pObj0->pData[0])
138 & (Saig_SimObjFaninC1(pObj)? ~pObj1->pData[0] : pObj1->pData[0]);
155 if ( Saig_SimObjFaninC0(pObj) )
156 pObj->pData[0] = ~pObj0->pData[0];
158 pObj->pData[0] = pObj0->pData[0];
176 for ( f = 0; f < nFrames; f++ )
178 for ( pEntry = pAig; pEntry->Type !=
AIG_OBJ_VOID; pEntry++ )
181 Saig_ManSimulateNode( pAig, pEntry );
183 Saig_ManSimulateOneInput( pAig, pEntry );
186 if ( pEntry->iFan0 == 0 )
189 Saig_ManSimulateOneInput( pAig, pEntry );
192 pEntry->pData[0] = ~0;
196 pEntry->Number += Aig_WordCountOnes( pEntry->pData[0] );
214 int nTotal = 32 * nSimWords;
231 int nTotal = 32 * nSimWords;
232 return (
float)nOnes /
nTotal;
248 int nTotal = 32 * nSimWords;
252 return (
float)nOnes /
nTotal;
273 vSwitching = Vec_IntStart( Aig_ManObjNumMax(
p) );
274 pSwitching = (
float *)vSwitching->pArray;
283 nFramesReal = nFrames;
286 if ( nFramesReal <= nPref )
288 printf(
"The total number of frames (%d) should exceed prefix (%d).\n", nFramesReal, nPref );\
289 printf(
"Setting the total number of frames to be %d.\n", nFrames );
290 nFramesReal = nFrames;
297 for ( pEntry = pAig; pEntry->Type !=
AIG_OBJ_VOID; pEntry++ )
370 p->nBytes = 2*(2*nNodes + nOuts);
372 p->iNode = 1 +
p->nIns;
407 assert(
p->iNode == 1 +
p->nIns +
p->nNodes +
p->nOuts );
408 p->iNode = 1 +
p->nIns;
429 *
p->pCur++ = (x & 0x7f) | 0x80;
433 assert(
p->pCur -
p->Data <
p->nBytes - 10 );
450 for ( i = 0; (ch = *
p->pCur++) & 0x80; i++ )
451 x |= (ch & 0x7f) << (7 * i);
452 return x | (ch << (7 * i));
469 assert( iFan1 < (
p->iNode << 1) );
487 if (
p->iPrev == -1 )
489 else if (
p->iPrev <= iFan0 )
528 if (
p->iPrev == -1 )
532 return p->iPrev =
p->iPrev + (Num >> 1);
533 return p->iPrev =
p->iPrev - (Num >> 1);
552 pCMan =
Aig_CManStart( Aig_ManCiNum(
p), Aig_ManNodeNum(
p), Aig_ManCoNum(
p) );
555 (Aig_ObjFaninId0(pObj) << 1) | Aig_ObjFaninC0(pObj),
556 (Aig_ObjFaninId1(pObj) << 1) | Aig_ObjFaninC1(pObj) );
559 (Aig_ObjFaninId0(pObj) << 1) | Aig_ObjFaninC0(pObj) );
560 printf(
"\nBytes alloc = %5d. Bytes used = %7d. Ave per node = %4.2f. \n",
#define ABC_ALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define Aig_ManForEachObj(p, pObj, i)
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 ///.
Vec_Int_t * Saig_ManComputeSwitchProb4s(Aig_Man_t *p, int nFrames, int nPref, int fProbOne)
float Saig_ManComputeProbOnePlus(int nOnes, int nSimWords, int fCompl)
typedefABC_NAMESPACE_IMPL_START struct Saig_SimObj_t_ Saig_SimObj_t
DECLARATIONS ///.
void Aig_CManRestart(Aig_CMan_t *p)
void Aig_CManAddNode(Aig_CMan_t *p, int iFan0, int iFan1)
void Aig_CManGetNode(Aig_CMan_t *p, int *piFan0, int *piFan1)
void Aig_CManStop(Aig_CMan_t *p)
int Aig_CManGetPo(Aig_CMan_t *p)
Aig_CMan_t * Aig_CManStart(int nIns, int nNodes, int nOuts)
struct Aig_CMan_t_ Aig_CMan_t
Saig_SimObj_t * Saig_ManCreateMan(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
void Aig_CManStoreNum(Aig_CMan_t *p, unsigned x)
int Aig_CManRestoreNum(Aig_CMan_t *p)
float Saig_ManComputeProbOne(int nOnes, int nSimWords)
float Saig_ManComputeSwitching(int nOnes, int nSimWords)
Aig_CMan_t * Aig_CManCreate(Aig_Man_t *p)
void Aig_CManAddPo(Aig_CMan_t *p, int iFan0)
void Saig_ManSimulateFrames(Saig_SimObj_t *pAig, int nFrames, int nPref)