diff options
Diffstat (limited to 'src/base/abc/abcLib.c')
| -rw-r--r-- | src/base/abc/abcLib.c | 454 | 
1 files changed, 0 insertions, 454 deletions
diff --git a/src/base/abc/abcLib.c b/src/base/abc/abcLib.c deleted file mode 100644 index feff1478..00000000 --- a/src/base/abc/abcLib.c +++ /dev/null @@ -1,454 +0,0 @@ -/**CFile**************************************************************** - -  FileName    [abcLib.c] - -  SystemName  [ABC: Logic synthesis and verification system.] - -  PackageName [Network and node package.] - -  Synopsis    [Functions to manipulate verilog libraries.] - -  Author      [Alan Mishchenko] -   -  Affiliation [UC Berkeley] - -  Date        [Ver. 1.0. Started - June 20, 2005.] - -  Revision    [$Id: abcLib.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "abc.h" - -//////////////////////////////////////////////////////////////////////// -///                        DECLARATIONS                              /// -//////////////////////////////////////////////////////////////////////// -  -//////////////////////////////////////////////////////////////////////// -///                     FUNCTION DEFINITIONS                         /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - -  Synopsis    [Create the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_Lib_t * Abc_LibCreate( char * pName ) -{ -    Abc_Lib_t * p; -    p = ALLOC( Abc_Lib_t, 1 ); -    memset( p, 0, sizeof(Abc_Lib_t) ); -    p->pName    = Extra_UtilStrsav( pName ); -    p->tModules = st_init_table( strcmp, st_strhash ); -    p->vTops    = Vec_PtrAlloc( 100 ); -    p->vModules = Vec_PtrAlloc( 100 ); -    p->pManFunc = Hop_ManStart(); -    p->pLibrary = NULL; -    return p; -} - -/**Function************************************************************* - -  Synopsis    [Frees the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_LibFree( Abc_Lib_t * pLib, Abc_Ntk_t * pNtkSave ) -{ -    Abc_Ntk_t * pNtk; -    int i; -    if ( pLib->pName ) -        free( pLib->pName ); -    if ( pLib->pManFunc ) -        Hop_ManStop( pLib->pManFunc ); -    if ( pLib->tModules ) -        st_free_table( pLib->tModules ); -    if ( pLib->vModules ) -    { -        Vec_PtrForEachEntry( pLib->vModules, pNtk, i ) -        { -            if ( pNtk == pNtkSave ) -                continue; -//            pNtk->pManFunc = NULL; -            pNtk->pDesign = NULL; -            Abc_NtkDelete( pNtk ); -        } -        Vec_PtrFree( pLib->vModules ); -    } -    if ( pLib->vTops ) -        Vec_PtrFree( pLib->vTops ); -    free( pLib ); -} - -/**Function************************************************************* - -  Synopsis    [Frees the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_Lib_t * Abc_LibDupBlackboxes( Abc_Lib_t * pLib, Abc_Ntk_t * pNtkSave ) -{ -    Abc_Lib_t * pLibNew; -    Abc_Ntk_t * pNtkTemp; -    int i; -    assert( Vec_PtrSize(pLib->vTops) > 0 ); -    assert( Vec_PtrSize(pLib->vModules) > 1 ); -    pLibNew = Abc_LibCreate( pLib->pName ); -//    pLibNew->pManFunc = pNtkSave->pManFunc; -    Vec_PtrPush( pLibNew->vTops, pNtkSave ); -    Vec_PtrPush( pLibNew->vModules, pNtkSave ); -    Vec_PtrForEachEntry( pLib->vModules, pNtkTemp, i ) -        if ( Abc_NtkHasBlackbox( pNtkTemp ) ) -            Vec_PtrPush( pLibNew->vModules, Abc_NtkDup(pNtkTemp) ); -    return pLibNew; -} - - -/**Function************************************************************* - -  Synopsis    [Prints the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_LibPrint( Abc_Lib_t * pLib ) -{ -    Abc_Ntk_t * pNtk; -    Abc_Obj_t * pObj; -    int i, k; -    printf( "Models of design %s:\n", pLib->pName ); -    Vec_PtrForEachEntry( pLib->vModules, pNtk, i ) -    { -        printf( "%2d : %20s   ", i+1, pNtk->pName ); -        printf( "nd = %6d   lat = %6d   whitebox = %3d   blackbox = %3d\n",  -            Abc_NtkNodeNum(pNtk), Abc_NtkLatchNum(pNtk),  -            Abc_NtkWhiteboxNum(pNtk), Abc_NtkBlackboxNum(pNtk) ); -        if ( Abc_NtkBlackboxNum(pNtk) == 0 ) -            continue; -        Abc_NtkForEachWhitebox( pNtk, pObj, k ) -            printf( "     %20s (whitebox)\n", Abc_NtkName(pObj->pData) ); -        Abc_NtkForEachBlackbox( pNtk, pObj, k ) -            printf( "     %20s (blackbox)\n", Abc_NtkName(pObj->pData) ); -    } -} - -/**Function************************************************************* - -  Synopsis    [Create the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -int Abc_LibAddModel( Abc_Lib_t * pLib, Abc_Ntk_t * pNtk ) -{ -    if ( st_is_member( pLib->tModules, (char *)pNtk->pName ) ) -        return 0; -    st_insert( pLib->tModules, (char *)pNtk->pName, (char *)pNtk ); -    Vec_PtrPush( pLib->vModules, pNtk ); -    pNtk->pDesign = pLib; -    return 1; -} - -/**Function************************************************************* - -  Synopsis    [Create the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_Ntk_t * Abc_LibFindModelByName( Abc_Lib_t * pLib, char * pName ) -{ -    Abc_Ntk_t * pNtk; -    if ( !st_is_member( pLib->tModules, (char *)pName ) ) -        return NULL; -    st_lookup( pLib->tModules, (char *)pName, (char **)&pNtk ); -    return pNtk; -} - -/**Function************************************************************* - -  Synopsis    [Frees the library.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_Ntk_t * Abc_LibDeriveRoot( Abc_Lib_t * pLib ) -{ -    Abc_Ntk_t * pNtk; -    if ( Vec_PtrSize(pLib->vModules) > 1 ) -    { -        printf( "The design includes more than one module and is currently not used.\n" ); -        return NULL; -    } -    pNtk = Vec_PtrEntry( pLib->vModules, 0 );  Vec_PtrClear( pLib->vModules ); -    pNtk->pManFunc = pLib->pManFunc;           pLib->pManFunc = NULL; -    return pNtk; -} - -/**Function************************************************************* - -  Synopsis    [Detects the top-level models.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -int Abc_LibFindTopLevelModels( Abc_Lib_t * pLib ) -{ -    Abc_Ntk_t * pNtk, * pNtkBox; -    Abc_Obj_t * pObj; -    int i, k; -    assert( Vec_PtrSize( pLib->vModules ) > 0 ); -    // clear the models -    Vec_PtrForEachEntry( pLib->vModules, pNtk, i ) -        pNtk->fHieVisited = 0; -    // mark all the models reachable from other models -    Vec_PtrForEachEntry( pLib->vModules, pNtk, i ) -    { -        Abc_NtkForEachBox( pNtk, pObj, k ) -        { -            if ( Abc_ObjIsLatch(pObj) ) -                continue; -            if ( pObj->pData == NULL ) -                continue; -            pNtkBox = pObj->pData; -            pNtkBox->fHieVisited = 1; -        } -    } -    // collect the models that are not marked -    Vec_PtrClear( pLib->vTops ); -    Vec_PtrForEachEntry( pLib->vModules, pNtk, i ) -    { -        if ( pNtk->fHieVisited == 0 ) -            Vec_PtrPush( pLib->vTops, pNtk ); -        else -            pNtk->fHieVisited = 0; -    } -    return Vec_PtrSize( pLib->vTops ); -} - - -/**Function************************************************************* - -  Synopsis    [Surround boxes without content (black boxes) with BIs/BOs.] - -  Description [Returns the number of black boxes converted.] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -int Abc_LibDeriveBlackBoxes( Abc_Ntk_t * pNtk, Abc_Lib_t * pLib ) -{ -/* -    Abc_Obj_t * pObj, * pFanin, * pFanout; -    int i, k; -    assert( Abc_NtkIsNetlist(pNtk) ); -    // collect blackbox nodes -    assert( Vec_PtrSize(pNtk->vBoxes) == 0 ); -    Vec_PtrClear( pNtk->vBoxes ); -    Abc_NtkForEachBox( pNtk, pObj, i ) -        if ( Abc_NtkNodeNum(pObj->pData) == 0 ) -            Vec_PtrPush( pNtk->vBoxes, pObj ); -    // return if there is no black boxes without content -    if ( Vec_PtrSize(pNtk->vBoxes) == 0 ) -        return 0; -    // print the boxes -    printf( "Black boxes are: " ); -    Abc_NtkForEachBox( pNtk, pObj, i ) -        printf( " %s", ((Abc_Ntk_t *)pObj->pData)->pName ); -    printf( "\n" ); -    // iterate through the boxes and add BIs/BOs -    Abc_NtkForEachBox( pNtk, pObj, i ) -    { -        // go through the fanin nets -        Abc_ObjForEachFanin( pObj, pFanin, k ) -            Abc_ObjInsertBetween( pFanin, pObj, ABC_OBJ_BI ); -        // go through the fanout nets -        Abc_ObjForEachFanout( pObj, pFanout, k ) -        { -            Abc_ObjInsertBetween( pObj, pFanout, ABC_OBJ_BO ); -            // if the name is not given assign name -            if ( pFanout->pData == NULL ) -            { -                pFanout->pData = Abc_ObjName( pFanout ); -                Nm_ManStoreIdName( pNtk->pManName, pFanout->Id, pFanout->pData, NULL ); -            } -        } -    } -    return Vec_PtrSize(pNtk->vBoxes); -*/ -    return 0; -} - -/**Function************************************************************* - -  Synopsis    [Derive the AIG of the logic in the netlist.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_NodeStrashUsingNetwork_rec( Abc_Ntk_t * pNtkAig, Abc_Obj_t * pObj ) -{ -    Abc_Obj_t * pFanin; -    int i; -    assert( !Abc_ObjIsNet(pObj) ); -    if ( pObj->pCopy ) -        return; -    // call for the fanins -    Abc_ObjForEachFanin( pObj, pFanin, i ) -        Abc_NodeStrashUsingNetwork_rec( pNtkAig, Abc_ObjFanin0Ntk(Abc_ObjFanin0(pObj)) ); -    // compute for the node -    pObj->pCopy = Abc_NodeStrash( pNtkAig, pObj, 0 ); -    // set for the fanout net -    Abc_ObjFanout0(pObj)->pCopy = pObj->pCopy; -} - -/**Function************************************************************* - -  Synopsis    [Derive the AIG of the logic in the netlist.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_NodeStrashUsingNetwork( Abc_Ntk_t * pNtkAig, Abc_Obj_t * pBox ) -{  -    Abc_Ntk_t * pNtkGate; -    Abc_Obj_t * pObj; -    unsigned * pPolarity; -    int i, fCompl; -    assert( Abc_ObjIsBox(pBox) ); -    pNtkGate = pBox->pData; -    pPolarity = (unsigned *)pBox->pNext; -    assert( Abc_NtkIsNetlist(pNtkGate) ); -    assert( Abc_NtkLatchNum(pNtkGate) == 0 ); -    Abc_NtkCleanCopy( pNtkGate ); -    // set the PI values -    Abc_NtkForEachPi( pNtkGate, pObj, i ) -    { -        fCompl = (pPolarity && Abc_InfoHasBit(pPolarity, i)); -        pObj->pCopy = Abc_ObjNotCond( Abc_ObjFanin(pBox,i)->pCopy, fCompl ); -        Abc_ObjFanout0(pObj)->pCopy = pObj->pCopy; -    } -    // build recursively and set the PO values -    Abc_NtkForEachPo( pNtkGate, pObj, i ) -    { -        Abc_NodeStrashUsingNetwork_rec( pNtkAig, Abc_ObjFanin0Ntk(Abc_ObjFanin0(pObj)) ); -        Abc_ObjFanout(pBox,i)->pCopy = Abc_ObjFanin0(pObj)->pCopy; -    } -//printf( "processing %d\n", pBox->Id ); -} - -/**Function************************************************************* - -  Synopsis    [Derive the AIG of the logic in the netlist.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_Ntk_t * Abc_LibDeriveAig( Abc_Ntk_t * pNtk, Abc_Lib_t * pLib ) -{ -    ProgressBar * pProgress; -    Vec_Ptr_t * vNodes; -    Abc_Ntk_t * pNtkAig; -    Abc_Obj_t * pObj; -    int i, nBoxes; -    // explicitly derive black boxes -    assert( Abc_NtkIsNetlist(pNtk) ); -    nBoxes = Abc_LibDeriveBlackBoxes( pNtk, pLib ); -    if ( nBoxes ) -        printf( "Detected and transformed %d black boxes.\n", nBoxes ); -    // create the new network with black boxes in place -    pNtkAig = Abc_NtkStartFrom( pNtk, ABC_NTK_STRASH, ABC_FUNC_AIG ); -    // transer to the nets -    Abc_NtkForEachCi( pNtk, pObj, i ) -        Abc_ObjFanout0(pObj)->pCopy = pObj->pCopy; -    // build the AIG for the remaining logic in the netlist -    vNodes = Abc_NtkDfs( pNtk, 0 ); -    pProgress = Extra_ProgressBarStart( stdout, Vec_PtrSize(vNodes) ); -    Vec_PtrForEachEntry( vNodes, pObj, i ) -    { -        Extra_ProgressBarUpdate( pProgress, i, NULL ); -        if ( Abc_ObjIsNode(pObj) ) -        { -            pObj->pCopy = Abc_NodeStrash( pNtkAig, pObj, 0 ); -            Abc_ObjFanout0(pObj)->pCopy = pObj->pCopy; -            continue; -        } -        Abc_NodeStrashUsingNetwork( pNtkAig, pObj ); -    } -    Extra_ProgressBarStop( pProgress ); -    Vec_PtrFree( vNodes ); -    // deallocate memory manager, which remembers the phase -    if ( pNtk->pData ) -    { -        Extra_MmFlexStop( pNtk->pData ); -        pNtk->pData = NULL; -    } -    // set the COs -//    Abc_NtkFinalize( pNtk, pNtkAig ); -    Abc_NtkForEachCo( pNtk, pObj, i ) -        Abc_ObjAddFanin( pObj->pCopy, Abc_ObjFanin0(pObj)->pCopy ); -    Abc_AigCleanup( pNtkAig->pManFunc ); -    // make sure that everything is okay -    if ( !Abc_NtkCheck( pNtkAig ) ) -    { -        printf( "Abc_LibDeriveAig: The network check has failed.\n" ); -        return 0; -    } -    return pNtkAig; -} - -//////////////////////////////////////////////////////////////////////// -///                       END OF FILE                                /// -//////////////////////////////////////////////////////////////////////// - -  | 
