1 /**CFile**************************************************************** 2 3 FileName [lpkMan.c] 4 5 SystemName [ABC: Logic synthesis and verification system.] 6 7 PackageName [Fast Boolean matching for LUT structures.] 8 9 Synopsis [] 10 11 Author [Alan Mishchenko] 12 13 Affiliation [UC Berkeley] 14 15 Date [Ver. 1.0. Started - April 28, 2007.] 16 17 Revision [$Id: lpkMan.c,v 1.00 2007/04/28 00:00:00 alanmi Exp $] 18 19 ***********************************************************************/ 20 21 #include "lpkInt.h" 22 23 ABC_NAMESPACE_IMPL_START 24 25 26 //////////////////////////////////////////////////////////////////////// 27 /// DECLARATIONS /// 28 //////////////////////////////////////////////////////////////////////// 29 30 //////////////////////////////////////////////////////////////////////// 31 /// FUNCTION DEFINITIONS /// 32 //////////////////////////////////////////////////////////////////////// 33 34 /**Function************************************************************* 35 36 Synopsis [] 37 38 Description [] 39 40 SideEffects [] 41 42 SeeAlso [] 43 44 ***********************************************************************/ Lpk_ManStart(Lpk_Par_t * pPars)45Lpk_Man_t * Lpk_ManStart( Lpk_Par_t * pPars ) 46 { 47 Lpk_Man_t * p; 48 int i, nWords; 49 assert( pPars->nLutsMax <= 16 ); 50 assert( pPars->nVarsMax > 0 && pPars->nVarsMax <= 16 ); 51 p = ABC_ALLOC( Lpk_Man_t, 1 ); 52 memset( p, 0, sizeof(Lpk_Man_t) ); 53 p->pPars = pPars; 54 p->nCutsMax = LPK_CUTS_MAX; 55 p->vTtElems = Vec_PtrAllocTruthTables( pPars->nVarsMax ); 56 p->vTtNodes = Vec_PtrAllocSimInfo( 1024, Abc_TruthWordNum(pPars->nVarsMax) ); 57 p->vCover = Vec_IntAlloc( 1 << 12 ); 58 p->vLeaves = Vec_PtrAlloc( 32 ); 59 p->vTemp = Vec_PtrAlloc( 32 ); 60 for ( i = 0; i < 8; i++ ) 61 p->vSets[i] = Vec_IntAlloc(100); 62 p->pDsdMan = Kit_DsdManAlloc( pPars->nVarsMax, 64 ); 63 p->vMemory = Vec_IntAlloc( 1024 * 32 ); 64 p->vBddDir = Vec_IntAlloc( 256 ); 65 p->vBddInv = Vec_IntAlloc( 256 ); 66 // allocate temporary storage for truth tables 67 nWords = Kit_TruthWordNum(pPars->nVarsMax); 68 p->ppTruths[0][0] = ABC_ALLOC( unsigned, 32 * nWords ); 69 p->ppTruths[1][0] = p->ppTruths[0][0] + 1 * nWords; 70 for ( i = 1; i < 2; i++ ) 71 p->ppTruths[1][i] = p->ppTruths[1][0] + i * nWords; 72 p->ppTruths[2][0] = p->ppTruths[1][0] + 2 * nWords; 73 for ( i = 1; i < 4; i++ ) 74 p->ppTruths[2][i] = p->ppTruths[2][0] + i * nWords; 75 p->ppTruths[3][0] = p->ppTruths[2][0] + 4 * nWords; 76 for ( i = 1; i < 8; i++ ) 77 p->ppTruths[3][i] = p->ppTruths[3][0] + i * nWords; 78 p->ppTruths[4][0] = p->ppTruths[3][0] + 8 * nWords; 79 for ( i = 1; i < 16; i++ ) 80 p->ppTruths[4][i] = p->ppTruths[4][0] + i * nWords; 81 return p; 82 } 83 84 /**Function************************************************************* 85 86 Synopsis [] 87 88 Description [] 89 90 SideEffects [] 91 92 SeeAlso [] 93 94 ***********************************************************************/ Lpk_ManStop(Lpk_Man_t * p)95void Lpk_ManStop( Lpk_Man_t * p ) 96 { 97 int i; 98 ABC_FREE( p->ppTruths[0][0] ); 99 Vec_IntFree( p->vBddDir ); 100 Vec_IntFree( p->vBddInv ); 101 Vec_IntFree( p->vMemory ); 102 Kit_DsdManFree( p->pDsdMan ); 103 for ( i = 0; i < 8; i++ ) 104 Vec_IntFree(p->vSets[i]); 105 if ( p->pIfMan ) 106 { 107 void * pPars = p->pIfMan->pPars; 108 If_ManStop( p->pIfMan ); 109 ABC_FREE( pPars ); 110 } 111 if ( p->vLevels ) 112 Vec_VecFree( p->vLevels ); 113 if ( p->vVisited ) 114 Vec_VecFree( p->vVisited ); 115 Vec_PtrFree( p->vLeaves ); 116 Vec_PtrFree( p->vTemp ); 117 Vec_IntFree( p->vCover ); 118 Vec_PtrFree( p->vTtElems ); 119 Vec_PtrFree( p->vTtNodes ); 120 ABC_FREE( p ); 121 } 122 123 //////////////////////////////////////////////////////////////////////// 124 /// END OF FILE /// 125 //////////////////////////////////////////////////////////////////////// 126 127 128 ABC_NAMESPACE_IMPL_END 129 130