/**CFile**************************************************************** FileName [mvcProc.c] PackageName [MVSIS 2.0: Multi-valued logic synthesis system.] Synopsis [Various boolean procedures working with covers.] Author [MVSIS Group] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - February 1, 2003.] Revision [\$Id: mvcOpBool.c,v 1.4 2003/04/16 01:55:37 alanmi Exp \$] ***********************************************************************/ #include "mvc.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ Mvc_Cover_t * Mvc_CoverBooleanOr( Mvc_Cover_t * pCover1, Mvc_Cover_t * pCover2 ) { Mvc_Cover_t * pCover; Mvc_Cube_t * pCube, * pCubeCopy; // make sure the covers are compatible assert( pCover1->nBits == pCover2->nBits ); // clone the cover pCover = Mvc_CoverClone( pCover1 ); // create the cubes by making pair-wise products // of cubes in pCover1 and pCover2 Mvc_CoverForEachCube( pCover1, pCube ) { pCubeCopy = Mvc_CubeDup( pCover, pCube ); Mvc_CoverAddCubeTail( pCover, pCubeCopy ); } Mvc_CoverForEachCube( pCover2, pCube ) { pCubeCopy = Mvc_CubeDup( pCover, pCube ); Mvc_CoverAddCubeTail( pCover, pCubeCopy ); } return pCover; } #if 0 /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ Mvc_Cover_t * Mvc_CoverBooleanAnd( Mvc_Data_t * p, Mvc_Cover_t * pCover1, Mvc_Cover_t * pCover2 ) { Mvc_Cover_t * pCover; Mvc_Cube_t * pCube1, * pCube2, * pCubeCopy; // make sure the covers are compatible assert( pCover1->nBits == pCover2->nBits ); // clone the cover pCover = Mvc_CoverClone( pCover1 ); // create the cubes by making pair-wise products // of cubes in pCover1 and pCover2 Mvc_CoverForEachCube( pCover1, pCube1 ) { Mvc_CoverForEachCube( pCover2, pCube2 ) { if ( Mvc_CoverDist0Cubes( p, pCube1, pCube2 ) ) { pCubeCopy = Mvc_CubeAlloc( pCover ); Mvc_CubeBitAnd( pCubeCopy, pCube1, pCube2 ); Mvc_CoverAddCubeTail( pCover, pCubeCopy ); } } // if the number of cubes in the new cover is too large // try compressing them if ( Mvc_CoverReadCubeNum( pCover ) > 500 ) Mvc_CoverContain( pCover ); } return pCover; } /**Function************************************************************* Synopsis [Returns 1 if the two covers are equal.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ int Mvc_CoverBooleanEqual( Mvc_Data_t * p, Mvc_Cover_t * pCover1, Mvc_Cover_t * pCover2 ) { Mvc_Cover_t * pSharp; pSharp = Mvc_CoverSharp( p, pCover1, pCover2 ); if ( Mvc_CoverReadCubeNum( pSharp ) ) { Mvc_CoverContain( pSharp ); printf( "Sharp \n" ); Mvc_CoverPrint( pSharp ); Mvc_CoverFree( pSharp ); return 0; } Mvc_CoverFree( pSharp ); pSharp = Mvc_CoverSharp( p, pCover2, pCover1 ); if ( Mvc_CoverReadCubeNum( pSharp ) ) { Mvc_CoverContain( pSharp ); printf( "Sharp \n" ); Mvc_CoverPrint( pSharp ); Mvc_CoverFree( pSharp ); return 0; } Mvc_CoverFree( pSharp ); return 1; } #endif //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END