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

Go to the source code of this file.

Classes

struct  Gli_Obj_t_
 
struct  Gli_Man_t_
 

Macros

#define Gli_ManForEachObj(p, pObj, i)
 
#define Gli_ManForEachNode(p, pObj, i)
 
#define Gli_ManForEachEntry(vVec, p, pObj, i)
 
#define Gli_ManForEachCi(p, pObj, i)
 
#define Gli_ManForEachCo(p, pObj, i)
 
#define Gli_ManForEachPi(p, pObj, i)
 
#define Gli_ManForEachPo(p, pObj, i)
 
#define Gli_ManForEachRo(p, pObj, i)
 
#define Gli_ManForEachRi(p, pObj, i)
 
#define Gli_ManForEachRiRo(p, pObjRi, pObjRo, i)
 
#define Gli_ObjForEachFanin(pObj, pNext, i)
 
#define Gli_ObjForEachFanout(pObj, pNext, i)
 

Typedefs

typedef typedefABC_NAMESPACE_IMPL_START struct Gli_Obj_t_ Gli_Obj_t
 DECLARATIONS ///.
 
typedef struct Gli_Man_t_ Gli_Man_t
 

Functions

Gli_Man_tGli_ManAlloc (int nObjs, int nRegs, int nFanioPairs)
 FUNCTION DEFINITIONS ///.
 
void Gli_ManStop (Gli_Man_t *p)
 
void Gli_ManPrintObjects (Gli_Man_t *p)
 
void Gli_ManFinalize (Gli_Man_t *p)
 
void Gli_ObjAddFanin (Gli_Obj_t *pObj, Gli_Obj_t *pFanin)
 
Gli_Obj_tGli_ObjAlloc (Gli_Man_t *p, int nFanins, int nFanouts)
 
int Gli_ManCreateCi (Gli_Man_t *p, int nFanouts)
 
int Gli_ManCreateCo (Gli_Man_t *p, int iFanin)
 
int Gli_ManCreateNode (Gli_Man_t *p, Vec_Int_t *vFanins, int nFanouts, word *pGateTruth)
 
int Gli_ObjNumSwitches (Gli_Man_t *p, int iNode)
 
int Gli_ObjNumGlitches (Gli_Man_t *p, int iNode)
 
void Gli_ManSetPiRandom (Gli_Man_t *p, float PiTransProb)
 
void Gli_ManSetPiFromSaved (Gli_Man_t *p, int iBit)
 
void Gli_ManSwitching (Gli_Man_t *p)
 
void Gli_ManGlitching (Gli_Man_t *p)
 
void Gli_ManVerify (Gli_Man_t *p)
 
unsigned Gli_ManSimulateSeqNode (Gli_Man_t *p, Gli_Obj_t *pNode)
 
void Gli_ManSimulateSeqPref (Gli_Man_t *p, int nPref)
 
void Gli_ManSetDataSaved (Gli_Man_t *p, int iBit)
 
void Gli_ManSetPiRandomSeq (Gli_Man_t *p, float PiTransProb)
 
void Gli_ManSwitchesAndGlitches (Gli_Man_t *p, int nPatterns, float PiTransProb, int fVerbose)
 

Macro Definition Documentation

◆ Gli_ManForEachCi

#define Gli_ManForEachCi ( p,
pObj,
i )
Value:
for ( i = 0; (i < Vec_IntSize(p->vCis)) && (pObj = Gli_ManObj(p,Vec_IntEntry(p->vCis,i))); i++ )
Cube * p
Definition exorList.c:222

Definition at line 108 of file giaGlitch.c.

108#define Gli_ManForEachCi( p, pObj, i ) \
109 for ( i = 0; (i < Vec_IntSize(p->vCis)) && (pObj = Gli_ManObj(p,Vec_IntEntry(p->vCis,i))); i++ )

◆ Gli_ManForEachCo

#define Gli_ManForEachCo ( p,
pObj,
i )
Value:
for ( i = 0; (i < Vec_IntSize(p->vCos)) && (pObj = Gli_ManObj(p,Vec_IntEntry(p->vCos,i))); i++ )

Definition at line 110 of file giaGlitch.c.

110#define Gli_ManForEachCo( p, pObj, i ) \
111 for ( i = 0; (i < Vec_IntSize(p->vCos)) && (pObj = Gli_ManObj(p,Vec_IntEntry(p->vCos,i))); i++ )

◆ Gli_ManForEachEntry

#define Gli_ManForEachEntry ( vVec,
p,
pObj,
i )
Value:
for ( i = 0; (i < Vec_IntSize(vVec)) && (pObj = Gli_ManObj(p,Vec_IntEntry(vVec,i))); i++ )

Definition at line 106 of file giaGlitch.c.

106#define Gli_ManForEachEntry( vVec, p, pObj, i ) \
107 for ( i = 0; (i < Vec_IntSize(vVec)) && (pObj = Gli_ManObj(p,Vec_IntEntry(vVec,i))); i++ )

◆ Gli_ManForEachNode

#define Gli_ManForEachNode ( p,
pObj,
i )
Value:
for ( i = 0; (i < p->nObjData) && (pObj = Gli_ManObj(p,i)); i += Gli_ObjSize(pObj) ) if ( Gli_ObjIsTerm(pObj) ) {} else

Definition at line 103 of file giaGlitch.c.

103#define Gli_ManForEachNode( p, pObj, i ) \
104 for ( i = 0; (i < p->nObjData) && (pObj = Gli_ManObj(p,i)); i += Gli_ObjSize(pObj) ) if ( Gli_ObjIsTerm(pObj) ) {} else

◆ Gli_ManForEachObj

#define Gli_ManForEachObj ( p,
pObj,
i )
Value:
for ( i = 0; (i < p->nObjData) && (pObj = Gli_ManObj(p,i)); i += Gli_ObjSize(pObj) )

Definition at line 101 of file giaGlitch.c.

101#define Gli_ManForEachObj( p, pObj, i ) \
102 for ( i = 0; (i < p->nObjData) && (pObj = Gli_ManObj(p,i)); i += Gli_ObjSize(pObj) )

◆ Gli_ManForEachPi

#define Gli_ManForEachPi ( p,
pObj,
i )
Value:
for ( i = 0; (i < Gli_ManPiNum(p)) && ((pObj) = Gli_ManCi(p, i)); i++ )

Definition at line 113 of file giaGlitch.c.

113#define Gli_ManForEachPi( p, pObj, i ) \
114 for ( i = 0; (i < Gli_ManPiNum(p)) && ((pObj) = Gli_ManCi(p, i)); i++ )

◆ Gli_ManForEachPo

#define Gli_ManForEachPo ( p,
pObj,
i )
Value:
for ( i = 0; (i < Gli_ManPoNum(p)) && ((pObj) = Gli_ManCo(p, i)); i++ )

Definition at line 115 of file giaGlitch.c.

115#define Gli_ManForEachPo( p, pObj, i ) \
116 for ( i = 0; (i < Gli_ManPoNum(p)) && ((pObj) = Gli_ManCo(p, i)); i++ )

◆ Gli_ManForEachRi

#define Gli_ManForEachRi ( p,
pObj,
i )
Value:
for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObj) = Gli_ManCo(p, Gli_ManPoNum(p)+i)); i++ )

Definition at line 119 of file giaGlitch.c.

119#define Gli_ManForEachRi( p, pObj, i ) \
120 for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObj) = Gli_ManCo(p, Gli_ManPoNum(p)+i)); i++ )

◆ Gli_ManForEachRiRo

#define Gli_ManForEachRiRo ( p,
pObjRi,
pObjRo,
i )
Value:
for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObjRi) = Gli_ManCo(p, Gli_ManPoNum(p)+i)) && ((pObjRo) = Gli_ManCi(p, Gli_ManPiNum(p)+i)); i++ )

Definition at line 121 of file giaGlitch.c.

121#define Gli_ManForEachRiRo( p, pObjRi, pObjRo, i ) \
122 for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObjRi) = Gli_ManCo(p, Gli_ManPoNum(p)+i)) && ((pObjRo) = Gli_ManCi(p, Gli_ManPiNum(p)+i)); i++ )

◆ Gli_ManForEachRo

#define Gli_ManForEachRo ( p,
pObj,
i )
Value:
for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObj) = Gli_ManCi(p, Gli_ManPiNum(p)+i)); i++ )

Definition at line 117 of file giaGlitch.c.

117#define Gli_ManForEachRo( p, pObj, i ) \
118 for ( i = 0; (i < Gli_ManRegNum(p)) && ((pObj) = Gli_ManCi(p, Gli_ManPiNum(p)+i)); i++ )

◆ Gli_ObjForEachFanin

#define Gli_ObjForEachFanin ( pObj,
pNext,
i )
Value:
for ( i = 0; (i < (int)pObj->nFanins) && (pNext = Gli_ObjFanin(pObj,i)); i++ )

Definition at line 124 of file giaGlitch.c.

124#define Gli_ObjForEachFanin( pObj, pNext, i ) \
125 for ( i = 0; (i < (int)pObj->nFanins) && (pNext = Gli_ObjFanin(pObj,i)); i++ )

◆ Gli_ObjForEachFanout

#define Gli_ObjForEachFanout ( pObj,
pNext,
i )
Value:
for ( i = 0; (i < (int)pObj->nFanouts) && (pNext = Gli_ObjFanout(pObj,i)); i++ )

Definition at line 126 of file giaGlitch.c.

126#define Gli_ObjForEachFanout( pObj, pNext, i ) \
127 for ( i = 0; (i < (int)pObj->nFanouts) && (pNext = Gli_ObjFanout(pObj,i)); i++ )

Typedef Documentation

◆ Gli_Man_t

typedef struct Gli_Man_t_ Gli_Man_t

Definition at line 55 of file giaGlitch.c.

◆ Gli_Obj_t

typedef typedefABC_NAMESPACE_IMPL_START struct Gli_Obj_t_ Gli_Obj_t

DECLARATIONS ///.

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

FileName [giaGlitch.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Scalable AIG package.]

Synopsis [Glitch simulation.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

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

Revision [

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

]

Definition at line 30 of file giaGlitch.c.

Function Documentation

◆ Gli_ManAlloc()

Gli_Man_t * Gli_ManAlloc ( int nObjs,
int nRegs,
int nFanioPairs )

FUNCTION DEFINITIONS ///.

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

Synopsis [Creates logic network.]

Description []

SideEffects []

SeeAlso []

Definition at line 144 of file giaGlitch.c.

145{
146 Gli_Man_t * p;
147 p = (Gli_Man_t *)ABC_CALLOC( int, (sizeof(Gli_Man_t) / 4) + (sizeof(Gli_Obj_t) / 4) * nObjs + 2 * nFanioPairs );
148 p->nRegs = nRegs;
149 p->vCis = Vec_IntAlloc( 1000 );
150 p->vCos = Vec_IntAlloc( 1000 );
151 p->vCisChanged = Vec_IntAlloc( 1000 );
152 p->vAffected = Vec_IntAlloc( 1000 );
153 p->vFrontier = Vec_IntAlloc( 1000 );
154 p->nObjData = (sizeof(Gli_Obj_t) / 4) * nObjs + 2 * nFanioPairs;
155 p->pObjData = (int *)(p + 1);
156 return p;
157}
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
struct Gli_Man_t_ Gli_Man_t
Definition giaGlitch.c:55
typedefABC_NAMESPACE_IMPL_START struct Gli_Obj_t_ Gli_Obj_t
DECLARATIONS ///.
Definition giaGlitch.c:30
Here is the caller graph for this function:

◆ Gli_ManCreateCi()

int Gli_ManCreateCi ( Gli_Man_t * p,
int nFanouts )

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

Synopsis [Creates CI.]

Description []

SideEffects []

SeeAlso []

Definition at line 288 of file giaGlitch.c.

289{
290 Gli_Obj_t * pObj;
291 pObj = Gli_ObjAlloc( p, 0, nFanouts );
292 pObj->fTerm = 1;
293 Vec_IntPush( p->vCis, pObj->Handle );
294 return pObj->Handle;
295}
Gli_Obj_t * Gli_ObjAlloc(Gli_Man_t *p, int nFanins, int nFanouts)
Definition giaGlitch.c:265
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManCreateCo()

int Gli_ManCreateCo ( Gli_Man_t * p,
int iFanin )

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

Synopsis [Creates CO.]

Description []

SideEffects []

SeeAlso []

Definition at line 308 of file giaGlitch.c.

309{
310 Gli_Obj_t * pObj, * pFanin;
311 pObj = Gli_ObjAlloc( p, 1, 0 );
312 pObj->fTerm = 1;
313 pFanin = Gli_ManObj( p, iFanin );
314 Gli_ObjAddFanin( pObj, pFanin );
315 pObj->fPhase = pObj->fPhase2 = pFanin->fPhase;
316 Vec_IntPush( p->vCos, pObj->Handle );
317 return pObj->Handle;
318}
void Gli_ObjAddFanin(Gli_Obj_t *pObj, Gli_Obj_t *pFanin)
Definition giaGlitch.c:246
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManCreateNode()

int Gli_ManCreateNode ( Gli_Man_t * p,
Vec_Int_t * vFanins,
int nFanouts,
word * pGateTruth )

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

Synopsis [Creates node.]

Description []

SideEffects []

SeeAlso []

Definition at line 369 of file giaGlitch.c.

370{
371 Gli_Obj_t * pObj, * pFanin;
372 int i;
373 assert( Vec_IntSize(vFanins) <= 16 );
374 pObj = Gli_ObjAlloc( p, Vec_IntSize(vFanins), nFanouts );
375 Gli_ManForEachEntry( vFanins, p, pFanin, i )
376 Gli_ObjAddFanin( pObj, pFanin );
377 pObj->pTruth = pGateTruth;
378 pObj->fPhase = pObj->fPhase2 = Gli_NodeComputeValue( pObj );
379 return pObj->Handle;
380}
#define Gli_ManForEachEntry(vVec, p, pObj, i)
Definition giaGlitch.c:106
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManFinalize()

void Gli_ManFinalize ( Gli_Man_t * p)

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

Synopsis [Checks logic network.]

Description []

SideEffects []

SeeAlso []

Definition at line 221 of file giaGlitch.c.

222{
223 Gli_Obj_t * pObj;
224 int i;
225 assert( p->iObjData == p->nObjData );
226 Gli_ManForEachObj( p, pObj, i )
227 {
228 assert( pObj->iFanin == (int)pObj->nFanins );
229 assert( pObj->iFanout == (int)pObj->nFanouts );
230 pObj->iFanin = 0;
231 pObj->iFanout = 0;
232 }
233}
#define Gli_ManForEachObj(p, pObj, i)
Definition giaGlitch.c:101
Here is the caller graph for this function:

◆ Gli_ManGlitching()

void Gli_ManGlitching ( Gli_Man_t * p)

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

Synopsis [Computes glitching activity of each node.]

Description []

SideEffects []

SeeAlso []

Definition at line 506 of file giaGlitch.c.

507{
508 Gli_Obj_t * pThis, * pFanout;//, * pOther = Gli_ManObj(p, 41);
509 int i, k, Handle;
510// Gli_ManForEachObj( p, pThis, i )
511// assert( pThis->fMark == 0 );
512 // start the array of affected nodes
513 Vec_IntClear( p->vAffected );
514 Vec_IntForEachEntry( p->vCisChanged, Handle, i )
515 Vec_IntPush( p->vAffected, Handle );
516 // iteration propagation
517 while ( Vec_IntSize(p->vAffected) > 0 )
518 {
519 // compute the frontier
520 Vec_IntClear( p->vFrontier );
521 Gli_ManForEachEntry( p->vAffected, p, pThis, i )
522 {
523 Gli_ObjForEachFanout( pThis, pFanout, k )
524 {
525 if ( Gli_ObjIsCo(pFanout) )
526 continue;
527 if ( pFanout->fMark )
528 continue;
529 pFanout->fMark = 1;
530 Vec_IntPush( p->vFrontier, pFanout->Handle );
531 }
532 }
533 // compute the next set of affected nodes
534 Vec_IntClear( p->vAffected );
535 Gli_ManForEachEntry( p->vFrontier, p, pThis, i )
536 {
537 pThis->fMark = 0;
538 if ( ((int)pThis->fPhase2) == Gli_NodeComputeValue2(pThis) )
539 continue;
540 pThis->fPhase2 ^= 1;
541 pThis->nGlitches++;
542 Vec_IntPush( p->vAffected, pThis->Handle );
543 }
544 }
545}
#define Gli_ObjForEachFanout(pObj, pNext, i)
Definition giaGlitch.c:126
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
Here is the caller graph for this function:

◆ Gli_ManPrintObjects()

void Gli_ManPrintObjects ( Gli_Man_t * p)

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

Synopsis [Checks logic network.]

Description []

SideEffects []

SeeAlso []

Definition at line 192 of file giaGlitch.c.

193{
194 Gli_Obj_t * pObj, * pNext;
195 int i, k;
196 Gli_ManForEachObj( p, pObj, i )
197 {
198 printf( "Node %d \n", pObj->Handle );
199 printf( "Fanins: " );
200 Gli_ObjForEachFanin( pObj, pNext, k )
201 printf( "%d ", pNext->Handle );
202 printf( "\n" );
203 printf( "Fanouts: " );
204 Gli_ObjForEachFanout( pObj, pNext, k )
205 printf( "%d ", pNext->Handle );
206 printf( "\n" );
207 }
208}
#define Gli_ObjForEachFanin(pObj, pNext, i)
Definition giaGlitch.c:124

◆ Gli_ManSetDataSaved()

void Gli_ManSetDataSaved ( Gli_Man_t * p,
int iBit )

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

Synopsis [Initialized object values to be one pattern in the saved data.]

Description []

SideEffects []

SeeAlso []

Definition at line 675 of file giaGlitch.c.

676{
677 Gli_Obj_t * pObj;
678 int i;
679 Gli_ManForEachCi( p, pObj, i )
680 pObj->fPhase = pObj->fPhase2 = ((p->pSimInfoPrev[i] >> iBit) & 1);
681 Gli_ManForEachNode( p, pObj, i )
682 pObj->fPhase = pObj->fPhase2 = Gli_NodeComputeValue( pObj );
683}
#define Gli_ManForEachCi(p, pObj, i)
Definition giaGlitch.c:108
#define Gli_ManForEachNode(p, pObj, i)
Definition giaGlitch.c:103
Here is the caller graph for this function:

◆ Gli_ManSetPiFromSaved()

void Gli_ManSetPiFromSaved ( Gli_Man_t * p,
int iBit )

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

Synopsis [Sets random info at the PIs and collects changed PIs.]

Description []

SideEffects []

SeeAlso []

Definition at line 455 of file giaGlitch.c.

456{
457 Gli_Obj_t * pObj;
458 int i;
459 Vec_IntClear( p->vCisChanged );
460 Gli_ManForEachCi( p, pObj, i )
461 if ( (p->pSimInfoPrev[i] ^ pObj->uSimInfo) & (1 << iBit) )
462 {
463 Vec_IntPush( p->vCisChanged, pObj->Handle );
464 pObj->fPhase ^= 1;
465 pObj->fPhase2 ^= 1;
466 pObj->nSwitches++;
467 pObj->nGlitches++;
468 }
469}

◆ Gli_ManSetPiRandom()

void Gli_ManSetPiRandom ( Gli_Man_t * p,
float PiTransProb )

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

Synopsis [Sets random info at the PIs and collects changed PIs.]

Description []

SideEffects []

SeeAlso []

Definition at line 426 of file giaGlitch.c.

427{
428 Gli_Obj_t * pObj;
429 float Multi = 1.0 / (1 << 16);
430 int i;
431 assert( 0.0 < PiTransProb && PiTransProb < 1.0 );
432 Vec_IntClear( p->vCisChanged );
433 Gli_ManForEachCi( p, pObj, i )
434 if ( Multi * (Gia_ManRandom(0) & 0xffff) < PiTransProb )
435 {
436 Vec_IntPush( p->vCisChanged, pObj->Handle );
437 pObj->fPhase ^= 1;
438 pObj->fPhase2 ^= 1;
439 pObj->nSwitches++;
440 pObj->nGlitches++;
441 }
442}
unsigned Gia_ManRandom(int fReset)
FUNCTION DEFINITIONS ///.
Definition giaUtil.c:49
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManSetPiRandomSeq()

void Gli_ManSetPiRandomSeq ( Gli_Man_t * p,
float PiTransProb )

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

Synopsis [Sets random info at the PIs and collects changed PIs.]

Description []

SideEffects []

SeeAlso []

Definition at line 696 of file giaGlitch.c.

697{
698 Gli_Obj_t * pObj, * pObjRi;
699 float Multi = 1.0 / (1 << 16);
700 int i;
701 assert( 0.0 < PiTransProb && PiTransProb < 1.0 );
702 // transfer data to the COs
703 Gli_ManForEachCo( p, pObj, i )
704 pObj->fPhase = pObj->fPhase2 = Gli_ObjFanin(pObj, 0)->fPhase;
705 // set changed PIs
706 Vec_IntClear( p->vCisChanged );
707 Gli_ManForEachPi( p, pObj, i )
708 if ( Multi * (Gia_ManRandom(0) & 0xffff) < PiTransProb )
709 {
710 Vec_IntPush( p->vCisChanged, pObj->Handle );
711 pObj->fPhase ^= 1;
712 pObj->fPhase2 ^= 1;
713 pObj->nSwitches++;
714 pObj->nGlitches++;
715 }
716 // set changed ROs
717 Gli_ManForEachRiRo( p, pObjRi, pObj, i )
718 if ( pObjRi->fPhase != pObj->fPhase )
719 {
720 Vec_IntPush( p->vCisChanged, pObj->Handle );
721 pObj->fPhase ^= 1;
722 pObj->fPhase2 ^= 1;
723 pObj->nSwitches++;
724 pObj->nGlitches++;
725 }
726
727}
#define Gli_ManForEachPi(p, pObj, i)
Definition giaGlitch.c:113
#define Gli_ManForEachCo(p, pObj, i)
Definition giaGlitch.c:110
#define Gli_ManForEachRiRo(p, pObjRi, pObjRo, i)
Definition giaGlitch.c:121
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManSimulateSeqNode()

unsigned Gli_ManSimulateSeqNode ( Gli_Man_t * p,
Gli_Obj_t * pNode )

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

Synopsis [Simulates one node.]

Description []

SideEffects []

SeeAlso []

Definition at line 580 of file giaGlitch.c.

581{
582 unsigned pSimInfos[6], Result = 0;
583 int nFanins = Gli_ObjFaninNum(pNode);
584 int i, k, Phase;
585 Gli_Obj_t * pFanin;
586 assert( nFanins <= 16 );
587 Gli_ObjForEachFanin( pNode, pFanin, i )
588 pSimInfos[i] = pFanin->uSimInfo;
589 for ( i = 0; i < 32; i++ )
590 {
591 Phase = 0;
592 for ( k = 0; k < nFanins; k++ )
593 if ( (pSimInfos[k] >> i) & 1 )
594 Phase |= (1 << k);
595 if ( Abc_InfoHasBit( (unsigned *)pNode->pTruth, Phase ) )
596 Result |= (1 << i);
597 }
598 return Result;
599}
Here is the caller graph for this function:

◆ Gli_ManSimulateSeqPref()

void Gli_ManSimulateSeqPref ( Gli_Man_t * p,
int nPref )

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

Synopsis [Simulates sequential network randomly for the given number of frames.]

Description []

SideEffects []

SeeAlso []

Definition at line 635 of file giaGlitch.c.

636{
637 Gli_Obj_t * pObj, * pObjRi, * pObjRo;
638 int i, f;
639 // initialize simulation data
640 Gli_ManForEachPi( p, pObj, i )
641 pObj->uSimInfo = Gli_ManUpdateRandomInput( pObj->uSimInfo, 0.5 );
642 Gli_ManForEachRo( p, pObj, i )
643 pObj->uSimInfo = 0;
644 for ( f = 0; f < nPref; f++ )
645 {
646 // simulate one frame
647 Gli_ManForEachNode( p, pObj, i )
648 pObj->uSimInfo = Gli_ManSimulateSeqNode( p, pObj );
649 Gli_ManForEachRi( p, pObj, i )
650 pObj->uSimInfo = Gli_ObjFanin(pObj, 0)->uSimInfo;
651 // initialize the next frame
652 Gli_ManForEachPi( p, pObj, i )
653 pObj->uSimInfo = Gli_ManUpdateRandomInput( pObj->uSimInfo, 0.5 );
654 Gli_ManForEachRiRo( p, pObjRi, pObjRo, i )
655 pObjRo->uSimInfo = pObjRi->uSimInfo;
656 }
657 // save simulation data after nPref timeframes
658 if ( p->pSimInfoPrev == NULL )
659 p->pSimInfoPrev = ABC_ALLOC( unsigned, Gli_ManCiNum(p) );
660 Gli_ManForEachCi( p, pObj, i )
661 p->pSimInfoPrev[i] = pObj->uSimInfo;
662}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define Gli_ManForEachRo(p, pObj, i)
Definition giaGlitch.c:117
unsigned Gli_ManSimulateSeqNode(Gli_Man_t *p, Gli_Obj_t *pNode)
Definition giaGlitch.c:580
#define Gli_ManForEachRi(p, pObj, i)
Definition giaGlitch.c:119
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManStop()

void Gli_ManStop ( Gli_Man_t * p)

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

Synopsis [Deletes logic network.]

Description []

SideEffects []

SeeAlso []

Definition at line 170 of file giaGlitch.c.

171{
172 Vec_IntFree( p->vCis );
173 Vec_IntFree( p->vCos );
174 Vec_IntFree( p->vCisChanged );
175 Vec_IntFree( p->vAffected );
176 Vec_IntFree( p->vFrontier );
177 ABC_FREE( p->pSimInfoPrev );
178 ABC_FREE( p );
179}
#define ABC_FREE(obj)
Definition abc_global.h:267
Here is the caller graph for this function:

◆ Gli_ManSwitchesAndGlitches()

void Gli_ManSwitchesAndGlitches ( Gli_Man_t * p,
int nPatterns,
float PiTransProb,
int fVerbose )

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

Synopsis [Computes glitching activity of each node.]

Description []

SideEffects []

SeeAlso []

Definition at line 740 of file giaGlitch.c.

741{
742 int i, k;
743 abctime clk = Abc_Clock();
744 Gia_ManRandom( 1 );
746 if ( p->nRegs == 0 )
747 {
748 for ( i = 0; i < nPatterns; i++ )
749 {
750 Gli_ManSetPiRandom( p, PiTransProb );
753// Gli_ManVerify( p );
754 }
755 }
756 else
757 {
758 int nIters = Abc_BitWordNum(nPatterns);
760 for ( i = 0; i < 32; i++ )
761 {
763 for ( k = 0; k < nIters; k++ )
764 {
765 Gli_ManSetPiRandomSeq( p, PiTransProb );
768// Gli_ManVerify( p );
769 }
770 }
771 }
772 if ( fVerbose )
773 {
774 printf( "Simulated %d patterns. Input transition probability %.2f. ", nPatterns, PiTransProb );
775 ABC_PRMn( "Memory", 4*p->nObjData );
776 ABC_PRT( "Time", Abc_Clock() - clk );
777 }
778}
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_PRT(a, t)
Definition abc_global.h:255
#define ABC_PRMn(a, f)
Definition abc_global.h:261
void Gli_ManSetPiRandom(Gli_Man_t *p, float PiTransProb)
Definition giaGlitch.c:426
void Gli_ManGlitching(Gli_Man_t *p)
Definition giaGlitch.c:506
void Gli_ManSetPiRandomSeq(Gli_Man_t *p, float PiTransProb)
Definition giaGlitch.c:696
void Gli_ManSetDataSaved(Gli_Man_t *p, int iBit)
Definition giaGlitch.c:675
void Gli_ManFinalize(Gli_Man_t *p)
Definition giaGlitch.c:221
void Gli_ManSimulateSeqPref(Gli_Man_t *p, int nPref)
Definition giaGlitch.c:635
void Gli_ManSwitching(Gli_Man_t *p)
Definition giaGlitch.c:482
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gli_ManSwitching()

void Gli_ManSwitching ( Gli_Man_t * p)

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

Synopsis [Computes switching activity of each node.]

Description []

SideEffects []

SeeAlso []

Definition at line 482 of file giaGlitch.c.

483{
484 Gli_Obj_t * pThis;
485 int i;
486 Gli_ManForEachNode( p, pThis, i )
487 {
488 if ( ((int)pThis->fPhase) == Gli_NodeComputeValue(pThis) )
489 continue;
490 pThis->fPhase ^= 1;
491 pThis->nSwitches++;
492 }
493}
Here is the caller graph for this function:

◆ Gli_ManVerify()

void Gli_ManVerify ( Gli_Man_t * p)

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

Synopsis [Checks that the resulting values are the same.]

Description []

SideEffects []

SeeAlso []

Definition at line 558 of file giaGlitch.c.

559{
560 Gli_Obj_t * pObj;
561 int i;
562 Gli_ManForEachObj( p, pObj, i )
563 {
564 assert( pObj->fPhase == pObj->fPhase2 );
565 assert( pObj->nGlitches >= pObj->nSwitches );
566 }
567}

◆ Gli_ObjAddFanin()

void Gli_ObjAddFanin ( Gli_Obj_t * pObj,
Gli_Obj_t * pFanin )

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

Synopsis [Creates fanin/fanout pair.]

Description []

SideEffects []

SeeAlso []

Definition at line 246 of file giaGlitch.c.

247{
248 assert( pObj->iFanin < (int)pObj->nFanins );
249 assert( pFanin->iFanout < (int)pFanin->nFanouts );
250 pFanin->Fanios[pFanin->nFanins + pFanin->iFanout++] =
251 pObj->Fanios[pObj->iFanin++] = pObj->Handle - pFanin->Handle;
252}
Here is the caller graph for this function:

◆ Gli_ObjAlloc()

Gli_Obj_t * Gli_ObjAlloc ( Gli_Man_t * p,
int nFanins,
int nFanouts )

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

Synopsis [Allocates object.]

Description []

SideEffects []

SeeAlso []

Definition at line 265 of file giaGlitch.c.

266{
267 Gli_Obj_t * pObj;
268 pObj = Gli_ManObj( p, p->iObjData );
269 pObj->Handle = p->iObjData;
270 pObj->nFanins = nFanins;
271 pObj->nFanouts = nFanouts;
272 p->iObjData += Gli_ObjSize( pObj );
273 p->nObjs++;
274 return pObj;
275}
Here is the caller graph for this function:

◆ Gli_ObjNumGlitches()

int Gli_ObjNumGlitches ( Gli_Man_t * p,
int iNode )

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

Synopsis [Returns the number of glitches of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 409 of file giaGlitch.c.

410{
411 return Gli_ManObj( p, iNode )->nGlitches;
412}
Here is the caller graph for this function:

◆ Gli_ObjNumSwitches()

int Gli_ObjNumSwitches ( Gli_Man_t * p,
int iNode )

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

Synopsis [Returns the number of switches of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 393 of file giaGlitch.c.

394{
395 return Gli_ManObj( p, iNode )->nSwitches;
396}
Here is the caller graph for this function: