summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcAbc8.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/abci/abcAbc8.c')
-rw-r--r--src/base/abci/abcAbc8.c243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/base/abci/abcAbc8.c b/src/base/abci/abcAbc8.c
new file mode 100644
index 00000000..3c60bde0
--- /dev/null
+++ b/src/base/abci/abcAbc8.c
@@ -0,0 +1,243 @@
+/**CFile****************************************************************
+
+ FileName [abcAbc8.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Network and node package.]
+
+ Synopsis []
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - June 20, 2005.]
+
+ Revision [$Id: abcAbc8.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "abc.h"
+#include "nwk.h"
+#include "mfx.h"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Converts old ABC network into new ABC network.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Nwk_Man_t * Abc_NtkToNtkNew( Abc_Ntk_t * pNtk )
+{
+ Vec_Ptr_t * vNodes;
+ Nwk_Man_t * pNtkNew;
+ Nwk_Obj_t * pObjNew;
+ Abc_Obj_t * pObj, * pFanin;
+ int i, k;
+ if ( !Abc_NtkIsLogic(pNtk) )
+ {
+ fprintf( stdout, "Thsi is not a logic network.\n" );
+ return 0;
+ }
+ // convert into the AIG
+ if ( !Abc_NtkToAig(pNtk) )
+ {
+ fprintf( stdout, "Converting to AIGs has failed.\n" );
+ return 0;
+ }
+ assert( Abc_NtkHasAig(pNtk) );
+ // construct the network
+ pNtkNew = Nwk_ManAlloc();
+ pNtkNew->pName = Extra_UtilStrsav( pNtk->pName );
+ pNtkNew->pSpec = Extra_UtilStrsav( pNtk->pSpec );
+ Abc_NtkForEachCi( pNtk, pObj, i )
+ pObj->pCopy = (Abc_Obj_t *)Nwk_ManCreateCi( pNtkNew, Abc_ObjFanoutNum(pObj) );
+ vNodes = Abc_NtkDfs( pNtk, 1 );
+ Vec_PtrForEachEntry( vNodes, pObj, i )
+ {
+ pObjNew = Nwk_ManCreateNode( pNtkNew, Abc_ObjFaninNum(pObj), Abc_ObjFanoutNum(pObj) );
+ Abc_ObjForEachFanin( pObj, pFanin, k )
+ Nwk_ObjAddFanin( pObjNew, (Nwk_Obj_t *)pFanin->pCopy );
+ pObjNew->pFunc = Hop_Transfer( pNtk->pManFunc, pNtkNew->pManHop, pObj->pData, Abc_ObjFaninNum(pObj) );
+ pObj->pCopy = (Abc_Obj_t *)pObjNew;
+ }
+ Vec_PtrFree( vNodes );
+ Abc_NtkForEachCo( pNtk, pObj, i )
+ {
+ pObjNew = Nwk_ManCreateCo( pNtkNew );
+ Nwk_ObjAddFanin( pObjNew, (Nwk_Obj_t *)Abc_ObjFanin0(pObj)->pCopy );
+ }
+// if ( !Nwk_ManCheck( pNtkNew ) )
+// fprintf( stdout, "Abc_NtkToNtkNew(): Network check has failed.\n" );
+ return pNtkNew;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Converts new ABC network into old ABC network.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Abc_NtkFromNtkNew( Abc_Ntk_t * pNtkOld, Nwk_Man_t * pNtk )
+{
+ Vec_Ptr_t * vNodes;
+ Abc_Ntk_t * pNtkNew;
+ Abc_Obj_t * pObjNew, * pFaninNew;
+ Nwk_Obj_t * pObj, * pFanin;
+ int i, k;
+ // construct the network
+ pNtkNew = Abc_NtkAlloc( ABC_NTK_LOGIC, ABC_FUNC_AIG, 1 );
+ pNtkNew->pName = Extra_UtilStrsav( pNtk->pName );
+ pNtkNew->pSpec = Extra_UtilStrsav( pNtk->pSpec );
+ Nwk_ManForEachCi( pNtk, pObj, i )
+ {
+ pObjNew = Abc_NtkCreatePi( pNtkNew );
+ pObj->pCopy = (Nwk_Obj_t *)pObjNew;
+ Abc_ObjAssignName( pObjNew, Abc_ObjName( Abc_NtkCi(pNtkOld, i) ), NULL );
+ }
+ vNodes = Nwk_ManDfs( pNtk );
+ Vec_PtrForEachEntry( vNodes, pObj, i )
+ {
+ if ( !Nwk_ObjIsNode(pObj) )
+ continue;
+ pObjNew = Abc_NtkCreateNode( pNtkNew );
+ Nwk_ObjForEachFanin( pObj, pFanin, k )
+ Abc_ObjAddFanin( pObjNew, pFanin->pCopy );
+ pObjNew->pData = Hop_Transfer( pNtk->pManHop, pNtkNew->pManFunc, pObj->pFunc, Nwk_ObjFaninNum(pObj) );
+ pObj->pCopy = (Nwk_Obj_t *)pObjNew;
+ }
+ Vec_PtrFree( vNodes );
+ Nwk_ManForEachCo( pNtk, pObj, i )
+ {
+ pObjNew = Abc_NtkCreatePo( pNtkNew );
+ if ( pObj->fCompl )
+ pFaninNew = Abc_NtkCreateNodeInv( pNtkNew, Nwk_ObjFanin0(pObj)->pCopy );
+ else
+ pFaninNew = Nwk_ObjFanin0(pObj)->pCopy;
+ Abc_ObjAddFanin( pObjNew, pFaninNew );
+ Abc_ObjAssignName( pObjNew, Abc_ObjName( Abc_NtkCo(pNtkOld, i) ), NULL );
+ }
+ if ( !Abc_NtkCheck( pNtkNew ) )
+ fprintf( stdout, "Abc_NtkFromNtkNew(): Network check has failed.\n" );
+ return pNtkNew;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Abc_NtkNtkTest2( Abc_Ntk_t * pNtk )
+{
+ extern void Abc_NtkSupportSum( Abc_Ntk_t * pNtk );
+ Abc_Ntk_t * pNtkNew;
+ Nwk_Man_t * pMan;
+ int clk;
+
+clk = clock();
+ Abc_NtkSupportSum( pNtk );
+PRT( "Time", clock() - clk );
+
+ pMan = Abc_NtkToNtkNew( pNtk );
+clk = clock();
+ Nwk_ManSupportSum( pMan );
+PRT( "Time", clock() - clk );
+
+ pNtkNew = Abc_NtkFromNtkNew( pNtk, pMan );
+ Nwk_ManFree( pMan );
+ return pNtkNew;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Abc_NtkNtkTest3( Abc_Ntk_t * pNtk )
+{
+ extern void Abc_NtkSupportSum( Abc_Ntk_t * pNtk );
+ extern void * Abc_FrameReadLibLut();
+
+ Abc_Ntk_t * pNtkNew;
+ Nwk_Man_t * pMan;
+ int clk;
+
+clk = clock();
+ printf( "%6.2f\n", Abc_NtkDelayTraceLut( pNtk, 1 ) );
+PRT( "Time", clock() - clk );
+
+ pMan = Abc_NtkToNtkNew( pNtk );
+clk = clock();
+ printf( "%6.2f\n", Nwk_ManDelayTraceLut( pMan, Abc_FrameReadLibLut() ) );
+PRT( "Time", clock() - clk );
+
+ pNtkNew = Abc_NtkFromNtkNew( pNtk, pMan );
+ Nwk_ManFree( pMan );
+ return pNtkNew;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Abc_NtkNtkTest( Abc_Ntk_t * pNtk )
+{
+ extern int Mfx_Perform( Nwk_Man_t * pNtk, Mfx_Par_t * pPars );
+
+ Mfx_Par_t Pars, * pPars = &Pars;
+ Abc_Ntk_t * pNtkNew;
+ Nwk_Man_t * pMan;
+ pMan = Abc_NtkToNtkNew( pNtk );
+
+ Mfx_ParsDefault( pPars );
+ Mfx_Perform( pMan, pPars );
+
+ pNtkNew = Abc_NtkFromNtkNew( pNtk, pMan );
+ Nwk_ManFree( pMan );
+ return pNtkNew;
+}
+
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+