blob: fee9aa400ce42da91e326523439711442f1e70e6 [file] [log] [blame]
/**CFile****************************************************************
FileName [giaProp.c]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Scalable AIG package.]
Synopsis [Constraint propagation on the AIG.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - June 20, 2005.]
Revision [$Id: giaProp.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
***********************************************************************/
#include "gia.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
#define GIA_SAT_SHIFT 12
#define GIA_ROOT_MASK
#define GIA_PATH00_MASK
#define GIA_PATH10_MASK
#define GIA_PATH20_MASK
#define GIA_PATH30_MASK
#define GIA_PATH00_MASK
#define GIA_PATH10_MASK
#define GIA_PATH20_MASK
#define GIA_PATH30_MASK
static inline int Gia_SatObjIsRoot( Gia_Obj_t * p ) { return 0; }
static inline int Gia_SatObjXorRoot( Gia_Obj_t * p ) { return 0; }
static inline int Gia_SatObjIsAssigned( Gia_Obj_t * p ) { return 0; }
static inline int Gia_SatObjIsHeld( Gia_Obj_t * p ) { return 0; }
static inline int Gia_SatObjValue( Gia_Obj_t * p ) { return 0; }
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis [Checks if the give cut is satisfied.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Gia_SatPathCheckCutSat_rec( Gia_Obj_t * p, int fCompl )
{
if ( Gia_SatObjIsRoot(p) )
return Gia_ObjIsAssigned(p) && Gia_SatObjValue(p) == fCompl;
if ( Gia_SatObjPath0(p) && !Gia_SatPathCheckCutSat_rec( Gia_ObjFanin0(p), fCompl ^ Gia_ObjFaninC0(p) ) )
return 0;
if ( Gia_SatObjPath1(p) && !Gia_SatPathCheckCutSat_rec( Gia_ObjFanin1(p), fCompl ^ Gia_ObjFaninC1(p) ) )
return 0;
return 1;
}
/**Function*************************************************************
Synopsis [Checks if the give cut is satisfied.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Gia_SatPathCheckCutSat( Gia_Obj_t * p )
{
int RetValue;
assert( Gia_SatObjIsRoot(p) );
Gia_SatObjXorRoot(p);
RetValue = Gia_SatPathCheckCutSat_rec( p );
Gia_SatObjXorRoot(p);
return RetValue;
}
/**Function*************************************************************
Synopsis [Unbinds literals on the path.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Gia_SatPathUnbind_rec( Gia_Obj_t * p )
{
}
/**Function*************************************************************
Synopsis [Creates a feasible path from the node to a terminal.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Gia_SatPathStart_rec( Gia_Obj_t * p, int fDiffs, int fCompl )
{
if ( Gia_SatObjIsRoot(p) )
return fDiffs && (!Gia_ObjIsAssigned(p) || Gia_SatObjValue(p) != fCompl);
if ( fCompl == 0 )
{
if ( Gia_SatPathStart_rec( Gia_ObjFanin0(p), fDiffs + !Gia_SatObjPath0(p), fCompl ^ Gia_ObjFaninC0(p) ) &&
Gia_SatPathStart_rec( Gia_ObjFanin1(p), fDiffs + !Gia_SatObjPath1(p), fCompl ^ Gia_ObjFaninC1(p) ) )
return Gia_ObjSetDraftPath0(p) + Gia_ObjSetDraftPath1(p);
}
else
{
if ( Gia_SatPathStart_rec( Gia_ObjFanin0(p), fDiffs + !Gia_SatObjPath0(p), fCompl ^ Gia_ObjFaninC0(p) ) )
{
Gia_ObjUnsetDraftPath1(p);
return Gia_ObjSetDraftPath0(p);
}
if ( Gia_SatPathStart_rec( Gia_ObjFanin1(p), fDiffs + !Gia_SatObjPath1(p), fCompl ^ Gia_ObjFaninC1(p) ) )
{
Gia_ObjUnsetDraftPath0(p);
return Gia_ObjSetDraftPath1(p);
}
}
return 0;
}
/**Function*************************************************************
Synopsis [Creates a feasible path from the node to a terminal.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Gia_SatPathStart( Gia_Obj_t * p )
{
int RetValue;
assert( Gia_SatObjIsRoot(p) );
Gia_SatObjXorRoot(p);
RetValue = Gia_SatPathStart_rec( p, 0, 0 );
Gia_SatObjXorRoot(p);
return RetValue;
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END