⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mvccontain.c

📁 主要进行大规模的电路综合
💻 C
字号:
/**CFile****************************************************************  FileName    [mvcContain.c]  PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]  Synopsis    [Making the cover single-cube containment free.]  Author      [MVSIS Group]    Affiliation [UC Berkeley]  Date        [Ver. 1.0. Started - February 1, 2003.]  Revision    [$Id: mvcContain.c,v 1.7 2003/05/27 23:15:11 alanmi Exp $]***********************************************************************/#include "mvc.h"///////////////////////////////////////////////////////////////////////////                        DECLARATIONS                              ///////////////////////////////////////////////////////////////////////////static void Mvc_CoverRemoveDuplicates( Mvc_Cover_t * pCover );static void Mvc_CoverRemoveContained( Mvc_Cover_t * pCover );///////////////////////////////////////////////////////////////////////////                     FUNCTION DEFITIONS                           ////////////////////////////////////////////////////////////////////////////**Function*************************************************************  Synopsis    [Removes the contained cubes.]  Description [Returns 1 if the cover has been changed.]                 SideEffects []  SeeAlso     []***********************************************************************/bool Mvc_CoverContain( Mvc_Cover_t * pCover ){    int nCubes;    nCubes = Mvc_CoverReadCubeNum( pCover );    if ( nCubes < 2 )        return 0;    Mvc_CoverSetCubeSizes(pCover);    Mvc_CoverSort( pCover, NULL, Mvc_CubeCompareSizeAndInt );    Mvc_CoverRemoveDuplicates( pCover );    if ( nCubes > 1 )        Mvc_CoverRemoveContained( pCover );    return (nCubes != Mvc_CoverReadCubeNum(pCover));}/**Function*************************************************************  Synopsis    [Removes adjacent duplicated cubes from the cube list.]  Description []                 SideEffects []  SeeAlso     []***********************************************************************/void Mvc_CoverRemoveDuplicates( Mvc_Cover_t * pCover ){    Mvc_Cube_t * pPrev, * pCube, * pCube2;    bool fEqual;    // set the first cube of the cover    pPrev = Mvc_CoverReadCubeHead(pCover);    // go through all the cubes after this one    Mvc_CoverForEachCubeStartSafe( Mvc_CubeReadNext(pPrev), pCube, pCube2 )    {        // compare the current cube with the prev cube        Mvc_CubeBitEqual( fEqual, pPrev, pCube );        if ( fEqual )        { // they are equal - remove the current cube            Mvc_CoverDeleteCube( pCover, pPrev, pCube );            Mvc_CubeFree( pCover, pCube );            // don't change the previous cube cube        }        else        { // they are not equal - update the previous cube            pPrev = pCube;        }    }}/**Function*************************************************************  Synopsis    [Removes contained cubes from the sorted cube list.]  Description []                 SideEffects []  SeeAlso     []***********************************************************************/void Mvc_CoverRemoveContained( Mvc_Cover_t * pCover ){    Mvc_Cube_t * pCubeBeg, * pCubeEnd, * pCubeLarge;    Mvc_Cube_t * pCube, * pCube2, * pPrev;    unsigned sizeCur;    bool Result;    // since the cubes are sorted by size, it is sufficient     // to compare each cube with other cubes that have larger sizes    // if the given cube implies a larger cube, the larger cube is removed    pCubeBeg = Mvc_CoverReadCubeHead(pCover);    do    {        // get the current cube size        sizeCur = Mvc_CubeReadSize(pCubeBeg);        // initialize the end of the given size group        pCubeEnd = pCubeBeg;        // find the beginning of the next size group        Mvc_CoverForEachCubeStart( Mvc_CubeReadNext(pCubeBeg), pCube )        {            if ( sizeCur == Mvc_CubeReadSize(pCube) )                 pCubeEnd = pCube;            else // pCube is the first cube in the new size group                break;        }        // if we could not find the next size group        // the containment check is finished        if ( pCube == NULL )            break;        // otherwise, pCubeBeg/pCubeEnd are the first/last cubes of the group        // go through all the cubes between pCubeBeg and pCubeEnd, inclusive,        // and for each of them, try removing cubes after pCubeEnd        Mvc_CoverForEachCubeStart( pCubeBeg, pCubeLarge )        {            pPrev = pCubeEnd;            Mvc_CoverForEachCubeStartSafe( Mvc_CubeReadNext(pCubeEnd), pCube, pCube2 )            {                // check containment                Mvc_CubeBitNotImpl( Result, pCube, pCubeLarge );                if ( !Result )                { // pCubeLarge implies pCube - remove pCube                    Mvc_CoverDeleteCube( pCover, pPrev, pCube );                    Mvc_CubeFree( pCover, pCube );                    // don't update the previous cube                }                else                {   // update the previous cube                    pPrev = pCube;                }            }            // quit, if the main cube was the last one of this size            if ( pCubeLarge == pCubeEnd )                break;        }        // set the beginning of the next group        pCubeBeg = Mvc_CubeReadNext(pCubeEnd);    }    while ( pCubeBeg );}///////////////////////////////////////////////////////////////////////////                       END OF FILE                                ///////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -