blob: 248587a073bba39dcce0e1903aa68b55172a0544 [file] [log] [blame]
/**CFile****************************************************************
FileName [giaSupMin.c]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Scalable AIG package.]
Synopsis [Support minimization for AIGs with don't-cares.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - June 20, 2005.]
Revision [$Id: giaSupMin.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
***********************************************************************/
#include "gia.h"
#include "bool/kit/kit.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
// decomposition manager
typedef struct Gia_ManSup_t_ Gia_ManSup_t;
struct Gia_ManSup_t_
{
int nVarsMax; // the max number of variables
int nWordsMax; // the max number of words
Vec_Ptr_t * vTruthVars; // elementary truth tables
Vec_Ptr_t * vTruthNodes; // internal truth tables
// current problem
Gia_Man_t * pGia;
int iData;
int iCare;
Vec_Int_t * vConeCare;
Vec_Int_t * vConeData;
unsigned * pTruthIn;
unsigned * pTruthOut;
};
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis [Starts Decmetry manager.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Gia_ManSup_t * Gia_ManSupStart( int nVarsMax )
{
Gia_ManSup_t * p;
assert( nVarsMax <= 20 );
p = ABC_CALLOC( Gia_ManSup_t, 1 );
p->nVarsMax = nVarsMax;
p->nWordsMax = Kit_TruthWordNum( p->nVarsMax );
p->vTruthVars = Vec_PtrAllocTruthTables( p->nVarsMax );
p->vTruthNodes = Vec_PtrAllocSimInfo( 512, p->nWordsMax );
p->vConeCare = Vec_IntAlloc( 512 );
p->vConeData = Vec_IntAlloc( 512 );
p->pTruthIn = ABC_ALLOC( unsigned, p->nWordsMax );
p->pTruthOut = ABC_ALLOC( unsigned, p->nWordsMax );
return p;
}
/**Function*************************************************************
Synopsis [Stops Decmetry manager.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Gia_ManSupStop( Gia_ManSup_t * p )
{
ABC_FREE( p->pTruthIn );
ABC_FREE( p->pTruthOut );
Vec_IntFreeP( &p->vConeCare );
Vec_IntFreeP( &p->vConeData );
Vec_PtrFreeP( &p->vTruthVars );
Vec_PtrFreeP( &p->vTruthNodes );
ABC_FREE( p );
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Gia_ManSupExperimentOne( Gia_ManSup_t * p, Gia_Obj_t * pData, Gia_Obj_t * pCare )
{
int iData = Gia_ObjId( p->pGia, Gia_Regular(pData) );
int iCare = Gia_ObjId( p->pGia, Gia_Regular(pCare) );
if ( !Gia_ObjIsAnd(Gia_Regular(pCare)) )
{
Abc_Print( 1, "Enable is not an AND.\n" );
return;
}
Abc_Print( 1, "DataSupp = %6d. DataCone = %6d. CareSupp = %6d. CareCone = %6d.",
Gia_ManSuppSize( p->pGia, &iData, 1 ),
Gia_ManConeSize( p->pGia, &iData, 1 ),
Gia_ManSuppSize( p->pGia, &iCare, 1 ),
Gia_ManConeSize( p->pGia, &iCare, 1 ) );
Abc_Print( 1, "\n" );
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Gia_ManSupExperiment( Gia_Man_t * pGia, Vec_Int_t * vPairs )
{
Gia_ManSup_t * p;
Gia_Obj_t * pData, * pCare;
int i;
p = Gia_ManSupStart( 16 );
p->pGia = pGia;
assert( Vec_IntSize(vPairs) % 2 == 0 );
for ( i = 0; i < Vec_IntSize(vPairs)/2; i++ )
{
Abc_Print( 1, "%6d : ", i );
pData = Gia_ManPo( pGia, Vec_IntEntry(vPairs, 2*i+0) );
pCare = Gia_ManPo( pGia, Vec_IntEntry(vPairs, 2*i+1) );
Gia_ManSupExperimentOne( p, Gia_ObjChild0(pData), Gia_ObjChild0(pCare) );
}
Gia_ManSupStop( p );
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END