summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2022-08-30 13:19:14 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2022-08-30 13:19:14 -0700
commit138c381f76bcc1106a2fd3dcd40fcaee89c84e81 (patch)
tree80412f2c853d99aeed3445a22a45363a6de8da6f
parent34d571a562dffbec17c97c788bcfaede5b8734f8 (diff)
downloadabc-138c381f76bcc1106a2fd3dcd40fcaee89c84e81.tar.gz
abc-138c381f76bcc1106a2fd3dcd40fcaee89c84e81.tar.bz2
abc-138c381f76bcc1106a2fd3dcd40fcaee89c84e81.zip
Testing utility code.
-rw-r--r--src/aig/gia/giaUtil.c31
-rw-r--r--src/base/abc/abcUtil.c85
-rw-r--r--src/base/abci/abc.c7
3 files changed, 122 insertions, 1 deletions
diff --git a/src/aig/gia/giaUtil.c b/src/aig/gia/giaUtil.c
index d8130550..dfddc693 100644
--- a/src/aig/gia/giaUtil.c
+++ b/src/aig/gia/giaUtil.c
@@ -3130,6 +3130,37 @@ void Gia_ManWriteResub( Gia_Man_t * p, char * pFileName )
}
}
+
+/**Function*************************************************************
+
+ Synopsis [Transform flops.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Gia_ManPrintArray( Gia_Man_t * p )
+{
+ Gia_Obj_t * pObj; int i, nSize = Gia_ManObjNum(p);
+ printf( "static int s_ArraySize = %d;\n", nSize );
+ printf( "static int s_ArrayData[%d] = {\n", 2*nSize );
+ printf( " 0, 0," );
+ printf( "\n " );
+ Gia_ManForEachCi( p, pObj, i )
+ printf( "0, 0, " );
+ printf( "\n " );
+ Gia_ManForEachAnd( p, pObj, i )
+ printf( "%d, %d, ", Gia_ObjFaninLit0p(p, pObj), Gia_ObjFaninLit1p(p, pObj) );
+ printf( "\n " );
+ Gia_ManForEachCo( p, pObj, i )
+ printf( "%d, %d, ", Gia_ObjFaninLit0p(p, pObj), Gia_ObjFaninLit0p(p, pObj) );
+ printf( "\n" );
+ printf( "};\n" );
+
+}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/base/abc/abcUtil.c b/src/base/abc/abcUtil.c
index 29753210..88a16e7b 100644
--- a/src/base/abc/abcUtil.c
+++ b/src/base/abc/abcUtil.c
@@ -3267,6 +3267,91 @@ Gia_Man_t * Abc_SopSynthesizeOne( char * pSop, int fClp )
return Abc_NtkStrashToGia( pNtkNew );
}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static int s_ArraySize = 145;
+static int s_ArrayData[290] = {
+ 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 6, 14, 12, 10, 2, 22, 20, 2, 24, 16, 4, 28, 18, 16, 10, 8, 4, 34, 32, 30, 36, 38, 26, 16, 6, 36, 20, 44, 42, 46, 40, 42, 44, 14, 6, 52, 34, 32, 54, 56, 50, 58, 48, 32, 24, 20, 2, 12, 6, 66, 34, 68, 64, 62, 70, 28, 68, 74, 72, 76, 58, 70, 62, 80, 78, 68, 28, 84, 74, 4, 2, 88, 20, 64, 90, 92, 86, 66, 32, 18, 96, 98, 56, 100, 94, 52, 36, 104, 38, 90, 42, 36, 2, 108, 110, 112, 106, 114, 100, 102, 116, 118, 82, 116, 60, 120, 122, 124, 60, 118, 60, 102, 82, 128, 130, 132, 82, 134, 126, 82, 116, 122, 138, 122, 118, 142, 140, 60, 102, 130, 146, 130, 118, 150, 148, 152, 144, 154, 136, 18, 156, 144, 126, 68, 160, 32, 136, 164, 162, 166, 158, 28, 160, 70, 126, 90, 144, 174, 172, 176, 170, 152, 134, 36, 180, 2, 134, 184, 182, 186, 178, 188, 168, 64, 144, 164, 158, 194, 192, 96, 156, 44, 154, 200, 170, 202, 198, 204, 176, 206, 196, 204, 168, 62, 126, 212, 186, 24, 134, 108, 152, 218, 192, 220, 216, 222, 214, 224, 210, 220, 194, 110, 152, 30, 180, 232, 230, 184, 172, 236, 234, 238, 228, 234, 182, 242, 220, 244, 168, 42, 154, 248, 202, 54, 136, 252, 164, 254, 214, 256, 250, 218, 194, 252, 198, 262, 242, 264, 260, 232, 220, 268, 262, 270, 168,
+ 191, 191, 209, 209, 226, 226, 240, 240, 246, 246, 259, 259, 267, 267, 272, 272,
+};
+int Abc_NtkHasConstNode()
+{
+ int i;
+ for ( i = 1; i < s_ArraySize; i++ )
+ if ( s_ArrayData[2*i] || s_ArrayData[2*i+1] )
+ break;
+ for ( ; i < s_ArraySize; i++ )
+ if ( s_ArrayData[2*i] < 2 && s_ArrayData[2*i+1] < 2 )
+ return 1;
+ return 0;
+}
+Abc_Ntk_t * Abc_NtkFromArray()
+{
+ Vec_Ptr_t * vNodes = Vec_PtrAlloc( s_ArraySize ); int i, nPos = 0;
+ Abc_Ntk_t * pNtkNew = Abc_NtkAlloc( ABC_NTK_LOGIC, ABC_FUNC_SOP, 1 );
+ Abc_Obj_t * pObjNew = Abc_NtkHasConstNode() ? Abc_NtkCreateNode(pNtkNew) : NULL;
+ if ( pObjNew ) pObjNew->pData = Abc_SopCreateConst0((Mem_Flex_t *)pNtkNew->pManFunc);
+ Vec_PtrPush( vNodes, pObjNew );
+ for ( i = 1; i < s_ArraySize; i++ )
+ if ( !s_ArrayData[2*i] && !s_ArrayData[2*i+1] )
+ Vec_PtrPush( vNodes, Abc_NtkCreatePi(pNtkNew) );
+ else
+ break;
+ for ( ; i < s_ArraySize; i++ )
+ {
+ char * pSop = NULL;
+ if ( s_ArrayData[2*i] > s_ArrayData[2*i+1] )
+ pSop = Abc_SopCreateXor( (Mem_Flex_t *)pNtkNew->pManFunc, 2 );
+ else if ( s_ArrayData[2*i] < s_ArrayData[2*i+1] )
+ pSop = Abc_SopCreateAnd( (Mem_Flex_t *)pNtkNew->pManFunc, 2, NULL );
+ else
+ break;
+ pObjNew = Abc_NtkCreateNode( pNtkNew );
+ Abc_ObjAddFanin( pObjNew, (Abc_Obj_t *)Vec_PtrEntry(vNodes, Abc_Lit2Var(s_ArrayData[2*i])) );
+ Abc_ObjAddFanin( pObjNew, (Abc_Obj_t *)Vec_PtrEntry(vNodes, Abc_Lit2Var(s_ArrayData[2*i+1])) );
+ if ( Abc_LitIsCompl(s_ArrayData[2*i]) ) Abc_SopComplementVar( pSop, 0 );
+ if ( Abc_LitIsCompl(s_ArrayData[2*i+1]) ) Abc_SopComplementVar( pSop, 1 );
+ pObjNew->pData = pSop;
+ Vec_PtrPush( vNodes, pObjNew );
+ }
+ for ( ; i < s_ArraySize; i++ )
+ {
+ char * pSop = NULL;
+ assert( s_ArrayData[2*i] == s_ArrayData[2*i+1] );
+ pObjNew = Abc_NtkCreateNode( pNtkNew );
+ Abc_ObjAddFanin( pObjNew, (Abc_Obj_t *)Vec_PtrEntry(vNodes, Abc_Lit2Var(s_ArrayData[2*i])) );
+ if ( Abc_LitIsCompl(s_ArrayData[2*i]) )
+ pSop = Abc_SopCreateInv( (Mem_Flex_t *)pNtkNew->pManFunc );
+ else
+ pSop = Abc_SopCreateBuf( (Mem_Flex_t *)pNtkNew->pManFunc );
+ pObjNew->pData = pSop;
+ Vec_PtrPush( vNodes, pObjNew );
+ nPos++;
+ }
+ for ( i = 0; i < nPos; i++ )
+ Abc_ObjAddFanin( Abc_NtkCreatePo(pNtkNew), (Abc_Obj_t *)Vec_PtrEntry(vNodes, s_ArraySize-nPos+i) );
+ Vec_PtrFree( vNodes );
+ pNtkNew->pName = Extra_UtilStrsav("test");
+ Abc_NtkAddDummyPiNames( pNtkNew );
+ Abc_NtkAddDummyPoNames( pNtkNew );
+ Abc_NtkAddDummyBoxNames( pNtkNew );
+ if ( !Abc_NtkCheck( pNtkNew ) )
+ Abc_Print( 1, "Abc_NtkFromArray(): Network check has failed.\n" );
+ return pNtkNew;
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c
index 0c1407eb..56f91670 100644
--- a/src/base/abci/abc.c
+++ b/src/base/abci/abc.c
@@ -14097,6 +14097,10 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
//Extra_SimulationTest( nDivMax, nNumOnes, fNewOrder );
//Mnist_ExperimentWithScaling( nDecMax );
//Gyx_ProblemSolveTest();
+ {
+ Abc_Ntk_t * pNtkRes = Abc_NtkFromArray();
+ Abc_FrameReplaceCurrentNetwork( pAbc, pNtkRes );
+ }
return 0;
usage:
Abc_Print( -2, "usage: test [-CKDNM] [-aovwh] <file_name>\n" );
@@ -50273,7 +50277,8 @@ int Abc_CommandAbc9Test( Abc_Frame_t * pAbc, int argc, char ** argv )
Gia_ManStop( pTemp );
return 0;
}
- Abc_FrameUpdateGia( pAbc, Gia_ManPerformNewResub(pAbc->pGia, 100, 6, 1, 1) );
+ //Abc_FrameUpdateGia( pAbc, Gia_ManPerformNewResub(pAbc->pGia, 100, 6, 1, 1) );
+ Gia_ManPrintArray( pAbc->pGia );
// printf( "AIG in \"%s\" has the sum of output support sizes equal to %d.\n", pAbc->pGia->pSpec, Gia_ManSumTotalOfSupportSizes(pAbc->pGia) );
return 0;
usage: