| /**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 |
| |