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

📄 encntk.c

📁 主要进行大规模的电路综合
💻 C
字号:
/**CFile****************************************************************  FileName    [encNtk.c]  PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]  Synopsis    []  Author      [MVSIS Group]    Affiliation [UC Berkeley]  Date        [Ver. 1.0. Started - February 1, 2003.]  Revision    [$Id: encNtk.c,v 1.4 2003/05/27 23:15:31 alanmi Exp $]***********************************************************************/#include "encInt.h"/*---------------------------------------------------------------------------*//* Constant declarations                                                     *//*---------------------------------------------------------------------------*//**AutomaticStart*************************************************************//*---------------------------------------------------------------------------*//* Static function prototypes                                                *//*---------------------------------------------------------------------------*/static void EncNetworkEncodeNode( Ntk_Network_t *pNet, Ntk_Node_t *pNode, Enc_Info_t *pInfo); /**AutomaticEnd***************************************************************//*---------------------------------------------------------------------------*//* Definition of exported functions                                          *//*---------------------------------------------------------------------------*//**Function********************************************************************  Synopsis    []  Description []  SideEffects []  SeeAlso     []******************************************************************************/void Enc_NetworkEncode(     Ntk_Network_t * pNet,     int nNodes,     Enc_Info_t *pInfo){    Ntk_Node_t ** ppNodes;    Ntk_Node_t * pNode;    int i;    // collect nodes into the list    if (nNodes == 0) {          // encode all internal nodes	nNodes = Ntk_NetworkReadNodeIntNum(pNet);        Ntk_NetworkDfs(pNet, pInfo->fFromOutputs);    }    if (nNodes == 0)        ppNodes = NULL;    else        ppNodes = ALLOC( Ntk_Node_t *, nNodes );    i = 0;    Ntk_NetworkForEachNodeSpecial( pNet, pNode ) {        if ( !Ntk_NodeIsInternal(pNode) )	    continue;        if ( Ntk_NodeReadValueNum(pNode) > 2) {	    (void) Ntk_NodeGetFuncMvr(pNode);  // enforce mvr to exist            ppNodes[i++] = pNode;	}	else {	    nNodes--;	}    }    assert( i == nNodes );            // encode nodes one by one    for ( i = 0; i < nNodes; i++ ) {        if ( !Enc_NodeCanBeEncoded( ppNodes[i] ) ) {            printf( "Ntk_NetworkEncode(): Cannot encode node \"%s\".\n",                     Ntk_NodeGetNamePrintable(ppNodes[i]) );            continue;        }	        EncNetworkEncodeNode( pNet, ppNodes[i], pInfo );    }    if( nNodes )        FREE( ppNodes );    if ( !Ntk_NetworkCheck( pNet ) )        printf( "Ntk_NetworkEncode(): Network check has failed.\n" );}/*---------------------------------------------------------------------------*//* Definition of internal functions                                          *//*---------------------------------------------------------------------------*//*---------------------------------------------------------------------------*//* Definition of static functions                                            *//*---------------------------------------------------------------------------*//**Function********************************************************************  Synopsis    []  Description []  SideEffects []  SeeAlso     []******************************************************************************/static voidEncNetworkEncodeNode(    Ntk_Network_t *pNet,     Ntk_Node_t *pNode,    Enc_Info_t *pInfo) {    int i;    Enc_Code_t *  pCode;    Ntk_Pin_t  *  pPin, * pPin2;    Ntk_Node_t *  pFanout, * pDecoder;    Ntk_Node_t ** ppBinNodes;        if(Ntk_NodeReadValueNum(pNode) <= 2)      return;            // get coding    pCode = Enc_NodeComputeCode(pNet, pNode, pInfo);    if(pInfo->verbose) {        for(i=0;i<pCode->numValues;i++){            int j;            printf("value %d:  ",i);            for(j=0;j<pCode->codeLength;j++)	        printf("%d ",pCode->codeArray[i*pCode->codeLength+j]);            printf("\n");        }        for(i=0;i<pCode->numCodes;i++)            printf("(%d,%d)\t",i,pCode->assignArray[i]);        printf("\n");    }     // create new binary nodes    ppBinNodes = ALLOC(Ntk_Node_t *, pCode->codeLength);    Ntk_NodeCreateEncoded(pNode, ppBinNodes, pCode->codeLength,                          pCode->assignArray, pCode->numCodes,                          pCode->numValues);        // add new binary nodes to the network    for (i = 0; i < pCode->codeLength; i++)        Ntk_NetworkAddNode(pNet, ppBinNodes[i], TRUE);    // create decoder    pDecoder = Ntk_NodeCreateDecoderGeneral( ppBinNodes,                                              pCode->codeLength,                                             pCode->assignArray,                                              pCode->numCodes,					     pCode->numValues );    Ntk_NodeMakeMinimumBase(pDecoder);    // replace the original node    Ntk_NodeReplace(pNode, pDecoder); // disposes of pDecoder    //update fanouts (keep CIs and COs multi-valued)    Ntk_NodeForEachFanoutSafe(pNode, pPin, pPin2, pFanout){        if (!Ntk_NodeIsCo(pFanout))            Ntk_NetworkCollapseNodes(pFanout, pNode);         }    if (Ntk_NodeReadFanoutNum(pNode) == 0)        Ntk_NetworkDeleteNode( pNet, pNode, 1, 1 );    Enc_CodeFree(pCode);    FREE(ppBinNodes);}

⌨️ 快捷键说明

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