/**CFile**************************************************************** FileName [mvcDivisor.c] PackageName [MVSIS 2.0: Multi-valued logic synthesis system.] Synopsis [Procedures for compute the quick divisor.] Author [MVSIS Group] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - February 1, 2003.] Revision [$Id: mvcDivisor.c,v 1.1 2003/04/03 15:34:08 alanmi Exp $] ***********************************************************************/ #include "mvc.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// static void Mvc_CoverDivisorZeroKernel( Mvc_Cover_t * pCover ); //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Returns the quick divisor of the cover.] Description [Returns NULL, if there is not divisor other than trivial.] SideEffects [] SeeAlso [] ***********************************************************************/ Mvc_Cover_t * Mvc_CoverDivisor( Mvc_Cover_t * pCover ) { Mvc_Cover_t * pKernel; if ( Mvc_CoverReadCubeNum(pCover) <= 1 ) return NULL; // allocate the literal array and count literals if ( Mvc_CoverAnyLiteral( pCover, NULL ) == -1 ) return NULL; // duplicate the cover pKernel = Mvc_CoverDup(pCover); // perform the kerneling Mvc_CoverDivisorZeroKernel( pKernel ); assert( Mvc_CoverReadCubeNum(pKernel) ); return pKernel; } /**Function************************************************************* Synopsis [Computes a level-zero kernel.] Description [Modifies the cover to contain one level-zero kernel.] SideEffects [] SeeAlso [] ***********************************************************************/ void Mvc_CoverDivisorZeroKernel( Mvc_Cover_t * pCover ) { int iLit; // find any literal that occurs at least two times // iLit = Mvc_CoverAnyLiteral( pCover, NULL ); iLit = Mvc_CoverWorstLiteral( pCover, NULL ); // iLit = Mvc_CoverBestLiteral( pCover, NULL ); if ( iLit == -1 ) return; // derive the cube-free quotient Mvc_CoverDivideByLiteralQuo( pCover, iLit ); // the same cover Mvc_CoverMakeCubeFree( pCover ); // the same cover // call recursively Mvc_CoverDivisorZeroKernel( pCover ); // the same cover } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END