summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcFxu.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2007-09-30 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2007-09-30 08:01:00 -0700
commite54d9691616b9a0326e2fdb3156bb4eeb8abfcd7 (patch)
treede3ffe87c3e17950351e3b7d97fa18318bd5ea9a /src/base/abci/abcFxu.c
parent7d7e60f2dc84393cd4c5db22d2eaf7b1fb1a79b2 (diff)
downloadabc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.gz
abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.bz2
abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.zip
Version abc70930
Diffstat (limited to 'src/base/abci/abcFxu.c')
-rw-r--r--src/base/abci/abcFxu.c260
1 files changed, 0 insertions, 260 deletions
diff --git a/src/base/abci/abcFxu.c b/src/base/abci/abcFxu.c
deleted file mode 100644
index 45515dd1..00000000
--- a/src/base/abci/abcFxu.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/**CFile****************************************************************
-
- FileName [abcFxu.c]
-
- SystemName [ABC: Logic synthesis and verification system.]
-
- PackageName [Network and node package.]
-
- Synopsis [Interface with the fast extract package.]
-
- Author [Alan Mishchenko]
-
- Affiliation [UC Berkeley]
-
- Date [Ver. 1.0. Started - June 20, 2005.]
-
- Revision [$Id: abcFxu.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
-
-***********************************************************************/
-
-#include "abc.h"
-#include "fxu.h"
-
-////////////////////////////////////////////////////////////////////////
-/// DECLARATIONS ///
-////////////////////////////////////////////////////////////////////////
-
-static bool Abc_NtkFxuCheck( Abc_Ntk_t * pNtk );
-static void Abc_NtkFxuCollectInfo( Abc_Ntk_t * pNtk, Fxu_Data_t * p );
-static void Abc_NtkFxuReconstruct( Abc_Ntk_t * pNtk, Fxu_Data_t * p );
-
-////////////////////////////////////////////////////////////////////////
-/// FUNCTION DEFINITIONS ///
-////////////////////////////////////////////////////////////////////////
-
-
-/**Function*************************************************************
-
- Synopsis [Performs fast_extract on the current network.]
-
- Description [Takes the network and the maximum number of nodes to extract.
- Uses the concurrent double-cube and single cube divisor extraction procedure.
- Modifies the network in the end, after extracting all nodes. Note that
- Ntk_NetworkSweep() may increase the performance of this procedure because
- the single-literal nodes will not be created in the sparse matrix. Returns 1
- if the network has been changed.]
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-bool Abc_NtkFastExtract( Abc_Ntk_t * pNtk, Fxu_Data_t * p )
-{
- assert( Abc_NtkIsLogic(pNtk) );
- // if the network is already in the SOP form, it may come from BLIF file
- // and it may not be SCC-free, in which case FXU will not work correctly
- if ( Abc_NtkIsSopLogic(pNtk) )
- { // to make sure the SOPs are SCC-free
-// Abc_NtkSopToBdd(pNtk);
-// Abc_NtkBddToSop(pNtk);
- }
- // get the network in the SOP form
- if ( !Abc_NtkToSop(pNtk, 0) )
- {
- printf( "Abc_NtkFastExtract(): Converting to SOPs has failed.\n" );
- return 0;
- }
- // check if the network meets the requirements
- if ( !Abc_NtkFxuCheck(pNtk) )
- {
- printf( "Abc_NtkFastExtract: Nodes have duplicated or complemented fanins. FXU is not performed.\n" );
- return 0;
- }
- // sweep removes useless nodes
- Abc_NtkCleanup( pNtk, 0 );
- // collect information about the covers
- Abc_NtkFxuCollectInfo( pNtk, p );
- // call the fast extract procedure
- if ( Fxu_FastExtract(p) > 0 )
- {
- // update the network
- Abc_NtkFxuReconstruct( pNtk, p );
- // make sure everything is okay
- if ( !Abc_NtkCheck( pNtk ) )
- printf( "Abc_NtkFastExtract: The network check has failed.\n" );
- return 1;
- }
- else
- printf( "Warning: The network has not been changed by \"fx\".\n" );
- return 0;
-}
-
-
-/**Function*************************************************************
-
- Synopsis [Makes sure the nodes do not have complemented and duplicated fanins.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-bool Abc_NtkFxuCheck( Abc_Ntk_t * pNtk )
-{
- Abc_Obj_t * pNode, * pFanin1, * pFanin2;
- int n, i, k;
- Abc_NtkForEachNode( pNtk, pNode, n )
- {
- Abc_ObjForEachFanin( pNode, pFanin1, i )
- {
- if ( i < 2 && Abc_ObjFaninC(pNode, i) )
- return 0;
- Abc_ObjForEachFanin( pNode, pFanin2, k )
- {
- if ( i == k )
- continue;
- if ( pFanin1 == pFanin2 )
- return 0;
- }
- }
- }
- return 1;
-}
-
-/**Function*************************************************************
-
- Synopsis [Collect information about the network for fast_extract.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-void Abc_NtkFxuCollectInfo( Abc_Ntk_t * pNtk, Fxu_Data_t * p )
-{
- Abc_Obj_t * pNode;
- int i;
- // add information to the manager
- p->pManSop = pNtk->pManFunc;
- p->vSops = Vec_PtrAlloc(0);
- p->vFanins = Vec_PtrAlloc(0);
- p->vSopsNew = Vec_PtrAlloc(0);
- p->vFaninsNew = Vec_PtrAlloc(0);
- Vec_PtrFill( p->vSops, Abc_NtkObjNumMax(pNtk), NULL );
- Vec_PtrFill( p->vFanins, Abc_NtkObjNumMax(pNtk), NULL );
- Vec_PtrFill( p->vSopsNew, Abc_NtkObjNumMax(pNtk) + p->nNodesExt, NULL );
- Vec_PtrFill( p->vFaninsNew, Abc_NtkObjNumMax(pNtk) + p->nNodesExt, NULL );
- // add SOPs and fanin array
- Abc_NtkForEachNode( pNtk, pNode, i )
- {
- if ( Abc_SopGetVarNum(pNode->pData) < 2 )
- continue;
- if ( Abc_SopGetCubeNum(pNode->pData) < 1 )
- continue;
- p->vSops->pArray[i] = pNode->pData;
- p->vFanins->pArray[i] = &pNode->vFanins;
- }
- p->nNodesOld = Abc_NtkObjNumMax(pNtk);
-}
-
-/**Function*************************************************************
-
- Synopsis []
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-void Abc_NtkFxuFreeInfo( Fxu_Data_t * p )
-{
- int i;
- // free the arrays of new fanins
- if ( p->vFaninsNew )
- for ( i = 0; i < p->vFaninsNew->nSize; i++ )
- if ( p->vFaninsNew->pArray[i] )
- Vec_IntFree( p->vFaninsNew->pArray[i] );
- // free the arrays
- if ( p->vSops ) Vec_PtrFree( p->vSops );
- if ( p->vSopsNew ) Vec_PtrFree( p->vSopsNew );
- if ( p->vFanins ) Vec_PtrFree( p->vFanins );
- if ( p->vFaninsNew ) Vec_PtrFree( p->vFaninsNew );
- FREE( p );
-}
-
-/**Function*************************************************************
-
- Synopsis [Recostructs the network after FX.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-void Abc_NtkFxuReconstruct( Abc_Ntk_t * pNtk, Fxu_Data_t * p )
-{
- Vec_Int_t * vFanins;
- Abc_Obj_t * pNode, * pFanin;
- int i, k;
-
- assert( p->vFanins->nSize < p->vFaninsNew->nSize );
- // create the new nodes
- for ( i = p->vFanins->nSize; i < p->vFanins->nSize + p->nNodesNew; i++ )
- {
- // start the node
- pNode = Abc_NtkCreateNode( pNtk );
- assert( i == (int)pNode->Id );
- }
- // update the old nodes
- for ( i = 0; i < p->vFanins->nSize; i++ )
- {
- // the new array of fanins
- vFanins = p->vFaninsNew->pArray[i];
- if ( vFanins == NULL )
- continue;
- // remove old fanins
- pNode = Abc_NtkObj( pNtk, i );
- Abc_ObjRemoveFanins( pNode );
- // add new fanins
- vFanins = p->vFaninsNew->pArray[i];
- for ( k = 0; k < vFanins->nSize; k++ )
- {
- pFanin = Abc_NtkObj( pNtk, vFanins->pArray[k] );
- Abc_ObjAddFanin( pNode, pFanin );
- }
- pNode->pData = p->vSopsNew->pArray[i];
- assert( pNode->pData != NULL );
- }
- // set up the new nodes
- for ( i = p->vFanins->nSize; i < p->vFanins->nSize + p->nNodesNew; i++ )
- {
- // get the new node
- pNode = Abc_NtkObj( pNtk, i );
- // add the fanins
- vFanins = p->vFaninsNew->pArray[i];
- for ( k = 0; k < vFanins->nSize; k++ )
- {
- pFanin = Abc_NtkObj( pNtk, vFanins->pArray[k] );
- Abc_ObjAddFanin( pNode, pFanin );
- }
- pNode->pData = p->vSopsNew->pArray[i];
- assert( pNode->pData != NULL );
- }
-}
-
-
-////////////////////////////////////////////////////////////////////////
-/// END OF FILE ///
-////////////////////////////////////////////////////////////////////////
-
-