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)45 Lpk_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)95 void 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