summaryrefslogtreecommitdiffstats
path: root/src/aig
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig')
-rw-r--r--src/aig/gia/giaSim.c68
-rw-r--r--src/aig/gia/giaSimBase.c49
2 files changed, 116 insertions, 1 deletions
diff --git a/src/aig/gia/giaSim.c b/src/aig/gia/giaSim.c
index a0a65112..ecad182f 100644
--- a/src/aig/gia/giaSim.c
+++ b/src/aig/gia/giaSim.c
@@ -1246,11 +1246,17 @@ void Gia_ManSimOneBit( Gia_Man_t * p, Vec_Int_t * vValues )
Gia_ManForEachCo( p, pObj, k )
pObj->fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
- Gia_ManForEachCo( p, pObj, k )
+ Gia_ManForEachCi( p, pObj, k )
printf( "%d", k % 10 );
printf( "\n" );
+ Gia_ManForEachCi( p, pObj, k )
+ printf( "%d", Vec_IntEntry(vValues, k) );
+ printf( "\n" );
Gia_ManForEachCo( p, pObj, k )
+ printf( "%d", k % 10 );
+ printf( "\n" );
+ Gia_ManForEachCo( p, pObj, k )
printf( "%d", pObj->fMark0 );
printf( "\n" );
printf( "\n" );
@@ -1309,6 +1315,66 @@ void Gia_ManSimOneBitTest2( Gia_Man_t * p )
Vec_IntFree( vValues );
}
+void Gia_ManSimOneBitTest3( Gia_Man_t * p )
+{
+ Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(p) );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Vec_IntWriteEntry( vValues, 1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2+2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -1, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-3, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -3, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2-3, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -2, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p) -3, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntFree( vValues );
+}
+
+
void Gia_ManSimOneBitTest( Gia_Man_t * p )
{
Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(p) );
diff --git a/src/aig/gia/giaSimBase.c b/src/aig/gia/giaSimBase.c
index ee6b1ff0..79377310 100644
--- a/src/aig/gia/giaSimBase.c
+++ b/src/aig/gia/giaSimBase.c
@@ -2348,6 +2348,55 @@ void Gia_ManSimGen( Gia_Man_t * pGia )
fclose( pFile );
}
+
+/**Function*************************************************************
+
+ Synopsis [Trying vectorized simulation.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Gia_ManSimTwo( Gia_Man_t * p0, Gia_Man_t * p1, int nWords, int nRounds, int fVerbose )
+{
+ Vec_Wrd_t * vSim0, * vSim1, * vSim2;
+ abctime clk = Abc_Clock();
+ int n, i, RetValue = 1;
+ printf( "Simulating %d round with %d machine words.\n", nRounds, nWords );
+ Abc_RandomW(0);
+ for ( n = 0; RetValue && n < nRounds; n++ )
+ {
+ vSim0 = Vec_WrdStartRandom( Gia_ManCiNum(p0) * nWords );
+ p0->vSimsPi = vSim0;
+ p1->vSimsPi = vSim0;
+ vSim1 = Gia_ManSimPatSim( p0 );
+ vSim2 = Gia_ManSimPatSim( p1 );
+ for ( i = 0; i < Gia_ManCoNum(p0); i++ )
+ {
+ word * pSim1 = Vec_WrdEntryP(vSim1, Gia_ObjId(p0, Gia_ManCo(p0, i))*nWords);
+ word * pSim2 = Vec_WrdEntryP(vSim2, Gia_ObjId(p1, Gia_ManCo(p1, i))*nWords);
+ if ( memcmp(pSim1, pSim2, sizeof(word)*nWords) )
+ {
+ printf( "Output %d failed simulation at round %d. ", i, n );
+ RetValue = 0;
+ break;
+ }
+ }
+ Vec_WrdFree( vSim1 );
+ Vec_WrdFree( vSim2 );
+ Vec_WrdFree( vSim0 );
+ p0->vSimsPi = NULL;
+ p1->vSimsPi = NULL;
+ }
+ if ( RetValue == 1 )
+ printf( "Simulation did not detect a bug. " );
+ Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ return RetValue;
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////