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

Go to the source code of this file.

Functions

void Vec_WrdDoubleSimInfo (Vec_Wrd_t *p, int nObjs)
 FUNCTION DEFINITIONS ///.
 
void Ssc_GiaResetPiPattern (Gia_Man_t *p, int nWords)
 
void Ssc_GiaSavePiPattern (Gia_Man_t *p, Vec_Int_t *vPat)
 
void Ssc_GiaRandomPiPattern (Gia_Man_t *p, int nWords, Vec_Int_t *vPivot)
 
void Ssc_GiaPrintPiPatterns (Gia_Man_t *p)
 
int Ssc_GiaTransferPiPattern (Gia_Man_t *pAig, Gia_Man_t *pCare, Vec_Int_t *vPivot)
 
void Ssc_GiaResetSimInfo (Gia_Man_t *p)
 
void Ssc_GiaSimRound (Gia_Man_t *p)
 
wordSsc_GiaGetCareMask (Gia_Man_t *p)
 
Vec_Int_tSsc_GiaGetOneSim (Gia_Man_t *p)
 
Vec_Int_tSsc_GiaFindPivotSim (Gia_Man_t *p)
 
int Ssc_GiaCountCaresSim (Gia_Man_t *p)
 
int Ssc_GiaEstimateCare (Gia_Man_t *p, int nWords)
 

Function Documentation

◆ Ssc_GiaCountCaresSim()

int Ssc_GiaCountCaresSim ( Gia_Man_t * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 343 of file sscSim.c.

344{
345 word * pRes = Ssc_GiaGetCareMask( p );
346 int nWords = Gia_ObjSimWords( p );
347 int Count = Ssc_SimCountBits( pRes, nWords );
348 ABC_FREE( pRes );
349 return Count;
350}
int nWords
Definition abcNpn.c:127
#define ABC_FREE(obj)
Definition abc_global.h:267
Cube * p
Definition exorList.c:222
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
word * Ssc_GiaGetCareMask(Gia_Man_t *p)
Definition sscSim.c:299
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaEstimateCare()

int Ssc_GiaEstimateCare ( Gia_Man_t * p,
int nWords )

Definition at line 351 of file sscSim.c.

352{
355 return Ssc_GiaCountCaresSim( p );
356}
int Ssc_GiaCountCaresSim(Gia_Man_t *p)
Definition sscSim.c:343
void Ssc_GiaSimRound(Gia_Man_t *p)
Definition sscSim.c:247
void Ssc_GiaRandomPiPattern(Gia_Man_t *p, int nWords, Vec_Int_t *vPivot)
Definition sscSim.c:163
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaFindPivotSim()

Vec_Int_t * Ssc_GiaFindPivotSim ( Gia_Man_t * p)

Definition at line 323 of file sscSim.c.

324{
325 Vec_Int_t * vInit;
326 Ssc_GiaRandomPiPattern( p, 1, NULL );
328 vInit = Ssc_GiaGetOneSim( p );
329 return vInit;
330}
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Vec_Int_t * Ssc_GiaGetOneSim(Gia_Man_t *p)
Definition sscSim.c:308
Here is the call graph for this function:

◆ Ssc_GiaGetCareMask()

word * Ssc_GiaGetCareMask ( Gia_Man_t * p)

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

Synopsis [Returns one SAT assignment of the PIs.]

Description []

SideEffects []

SeeAlso []

Definition at line 299 of file sscSim.c.

300{
301 Gia_Obj_t * pObj;
302 int i, nWords = Gia_ObjSimWords( p );
303 word * pRes = ABC_FALLOC( word, nWords );
304 Gia_ManForEachPo( p, pObj, i )
305 Ssc_SimAnd( pRes, pRes, Gia_ObjSimObj(p, pObj), nWords, 0, 0 );
306 return pRes;
307}
#define ABC_FALLOC(type, num)
Definition abc_global.h:266
#define Gia_ManForEachPo(p, pObj, i)
Definition gia.h:1250
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
Here is the caller graph for this function:

◆ Ssc_GiaGetOneSim()

Vec_Int_t * Ssc_GiaGetOneSim ( Gia_Man_t * p)

Definition at line 308 of file sscSim.c.

309{
310 Vec_Int_t * vInit;
311 Gia_Obj_t * pObj;
312 int i, iBit, nWords = Gia_ObjSimWords( p );
313 word * pRes = Ssc_GiaGetCareMask( p );
314 iBit = Ssc_SimFindBit( pRes, nWords );
315 ABC_FREE( pRes );
316 if ( iBit == -1 )
317 return NULL;
318 vInit = Vec_IntAlloc( 100 );
319 Gia_ManForEachCi( p, pObj, i )
320 Vec_IntPush( vInit, Abc_InfoHasBit((unsigned *)Gia_ObjSimObj(p, pObj), iBit) );
321 return vInit;
322}
#define Gia_ManForEachCi(p, pObj, i)
Definition gia.h:1228
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaPrintPiPatterns()

void Ssc_GiaPrintPiPatterns ( Gia_Man_t * p)

Definition at line 178 of file sscSim.c.

179{
180 Gia_Obj_t * pObj;
181 word * pSimAig;
182 int i;//, nWords = Gia_ObjSimWords( p );
183 Gia_ManForEachCi( p, pObj, i )
184 {
185 pSimAig = Gia_ObjSimObj( p, pObj );
186// Extra_PrintBinary( stdout, pSimAig, 64 * nWords );
187 }
188}

◆ Ssc_GiaRandomPiPattern()

void Ssc_GiaRandomPiPattern ( Gia_Man_t * p,
int nWords,
Vec_Int_t * vPivot )

Definition at line 163 of file sscSim.c.

164{
165 word * pSimPi;
166 int i, w;
168 pSimPi = Gia_ObjSimPi( p, 0 );
169 for ( i = 0; i < Gia_ManPiNum(p); i++, pSimPi += nWords )
170 {
171 pSimPi[0] = vPivot ? Ssc_Random1(Vec_IntEntry(vPivot, i)) : Ssc_Random2();
172 for ( w = 1; w < nWords; w++ )
173 pSimPi[w] = Ssc_Random();
174// if ( i < 10 )
175// Extra_PrintBinary( stdout, (unsigned *)pSimPi, 64 ), printf( "\n" );
176 }
177}
void Ssc_GiaResetPiPattern(Gia_Man_t *p, int nWords)
Definition sscSim.c:141
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaResetPiPattern()

void Ssc_GiaResetPiPattern ( Gia_Man_t * p,
int nWords )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 141 of file sscSim.c.

142{
143 p->iPatsPi = 0;
144 if ( p->vSimsPi == NULL )
145 p->vSimsPi = Vec_WrdStart(0);
146 Vec_WrdFill( p->vSimsPi, nWords * Gia_ManCiNum(p), 0 );
147 assert( nWords == Gia_ObjSimWords( p ) );
148}
#define assert(ex)
Definition util_old.h:213
Here is the caller graph for this function:

◆ Ssc_GiaResetSimInfo()

void Ssc_GiaResetSimInfo ( Gia_Man_t * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 240 of file sscSim.c.

241{
242 assert( Vec_WrdSize(p->vSimsPi) % Gia_ManCiNum(p) == 0 );
243 if ( p->vSims == NULL )
244 p->vSims = Vec_WrdAlloc(0);
245 Vec_WrdFill( p->vSims, Gia_ObjSimWords(p) * Gia_ManObjNum(p), 0 );
246}
Here is the caller graph for this function:

◆ Ssc_GiaSavePiPattern()

void Ssc_GiaSavePiPattern ( Gia_Man_t * p,
Vec_Int_t * vPat )

Definition at line 149 of file sscSim.c.

150{
151 word * pSimPi;
152 int i;
153 assert( Vec_IntSize(vPat) == Gia_ManCiNum(p) );
154 if ( p->iPatsPi == 64 * Gia_ObjSimWords(p) )
155 Vec_WrdDoubleSimInfo( p->vSimsPi, Gia_ManCiNum(p) );
156 assert( p->iPatsPi < 64 * Gia_ObjSimWords(p) );
157 pSimPi = Gia_ObjSimPi( p, 0 );
158 for ( i = 0; i < Gia_ManCiNum(p); i++, pSimPi += Gia_ObjSimWords(p) )
159 if ( Vec_IntEntry(vPat, i) )
160 Abc_InfoSetBit( (unsigned *)pSimPi, p->iPatsPi );
161 p->iPatsPi++;
162}
void Vec_WrdDoubleSimInfo(Vec_Wrd_t *p, int nObjs)
FUNCTION DEFINITIONS ///.
Definition sscSim.c:119
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaSimRound()

void Ssc_GiaSimRound ( Gia_Man_t * p)

Definition at line 247 of file sscSim.c.

248{
249 Gia_Obj_t * pObj;
250 word * pSim, * pSim0, * pSim1;
251 int i, nWords = Gia_ObjSimWords(p);
253 assert( nWords == Vec_WrdSize(p->vSims) / Gia_ManObjNum(p) );
254 // constant node
255 Ssc_SimConst( Gia_ObjSim(p, 0), nWords, 0 );
256 // primary inputs
257 pSim = Gia_ObjSim( p, 1 );
258 pSim0 = Gia_ObjSimPi( p, 0 );
259 Gia_ManForEachCi( p, pObj, i )
260 {
261 assert( pSim == Gia_ObjSimObj( p, pObj ) );
262 Ssc_SimDup( pSim, pSim0, nWords, 0 );
263 pSim += nWords;
264 pSim0 += nWords;
265 }
266 // intermediate nodes
267 pSim = Gia_ObjSim( p, 1+Gia_ManCiNum(p) );
268 Gia_ManForEachAnd( p, pObj, i )
269 {
270 assert( pSim == Gia_ObjSim( p, i ) );
271 pSim0 = pSim - pObj->iDiff0 * nWords;
272 pSim1 = pSim - pObj->iDiff1 * nWords;
273 Ssc_SimAnd( pSim, pSim0, pSim1, nWords, Gia_ObjFaninC0(pObj), Gia_ObjFaninC1(pObj) );
274 pSim += nWords;
275 }
276 // primary outputs
277 pSim = Gia_ObjSim( p, Gia_ManObjNum(p) - Gia_ManPoNum(p) );
278 Gia_ManForEachPo( p, pObj, i )
279 {
280 assert( pSim == Gia_ObjSimObj( p, pObj ) );
281 pSim0 = pSim - pObj->iDiff0 * nWords;
282 Ssc_SimDup( pSim, pSim0, nWords, Gia_ObjFaninC0(pObj) );
283// Extra_PrintBinary( stdout, pSim, 64 ), printf( "\n" );
284 pSim += nWords;
285 }
286}
#define Gia_ManForEachAnd(p, pObj, i)
Definition gia.h:1214
void Ssc_GiaResetSimInfo(Gia_Man_t *p)
Definition sscSim.c:240
unsigned iDiff1
Definition gia.h:84
unsigned iDiff0
Definition gia.h:79
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ssc_GiaTransferPiPattern()

int Ssc_GiaTransferPiPattern ( Gia_Man_t * pAig,
Gia_Man_t * pCare,
Vec_Int_t * vPivot )

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

Synopsis [Transfer the simulation pattern from pCare to pAig.]

Description []

SideEffects []

SeeAlso []

Definition at line 201 of file sscSim.c.

202{
203 extern word * Ssc_GiaGetCareMask( Gia_Man_t * p );
204 Gia_Obj_t * pObj;
205 int i, w, nWords = Gia_ObjSimWords( pCare );
206 word * pCareMask = Ssc_GiaGetCareMask( pCare );
207 int Count = Ssc_SimCountBits( pCareMask, nWords );
208 word * pSimPiCare, * pSimPiAig;
209 if ( Count == 0 )
210 {
211 ABC_FREE( pCareMask );
212 return 0;
213 }
215 Gia_ManForEachCi( pCare, pObj, i )
216 {
217 pSimPiAig = Gia_ObjSimPi( pAig, i );
218 pSimPiCare = Gia_ObjSimObj( pCare, pObj );
219 for ( w = 0; w < nWords; w++ )
220 if ( Vec_IntEntry(vPivot, i) )
221 pSimPiAig[w] = pSimPiCare[w] | ~pCareMask[w];
222 else
223 pSimPiAig[w] = pSimPiCare[w] & pCareMask[w];
224 }
225 ABC_FREE( pCareMask );
226 return Count;
227}
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Vec_WrdDoubleSimInfo()

void Vec_WrdDoubleSimInfo ( Vec_Wrd_t * p,
int nObjs )

FUNCTION DEFINITIONS ///.

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 119 of file sscSim.c.

120{
121 word * pArray = ABC_CALLOC( word, 2 * Vec_WrdSize(p) );
122 int i, nWords = Vec_WrdSize(p) / nObjs;
123 assert( Vec_WrdSize(p) % nObjs == 0 );
124 for ( i = 0; i < nObjs; i++ )
125 memcpy( pArray + 2*i*nWords, p->pArray + i*nWords, sizeof(word) * nWords );
126 ABC_FREE( p->pArray ); p->pArray = pArray;
127 p->nSize = p->nCap = 2*nWords*nObjs;
128}
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
char * memcpy()
Here is the call graph for this function:
Here is the caller graph for this function: