summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaSimBase.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-07-25 14:11:34 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-07-25 14:11:34 -0700
commita162b1f47aa4d3c38439d779c7ad943102c63bc5 (patch)
tree34b94cf9e9322a84fabea7f6a000dfd6df3fed55 /src/aig/gia/giaSimBase.c
parent62180f357678df2be0b678bec33ac8e8b36945b8 (diff)
downloadabc-a162b1f47aa4d3c38439d779c7ad943102c63bc5.tar.gz
abc-a162b1f47aa4d3c38439d779c7ad943102c63bc5.tar.bz2
abc-a162b1f47aa4d3c38439d779c7ad943102c63bc5.zip
Experimental simulation commands.
Diffstat (limited to 'src/aig/gia/giaSimBase.c')
-rw-r--r--src/aig/gia/giaSimBase.c49
1 files changed, 49 insertions, 0 deletions
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 ///
////////////////////////////////////////////////////////////////////////