1 /**CFile****************************************************************
2
3 FileName [giaSupMin.c]
4
5 SystemName [ABC: Logic synthesis and verification system.]
6
7 PackageName [Scalable AIG package.]
8
9 Synopsis [Support minimization for AIGs with don't-cares.]
10
11 Author [Alan Mishchenko]
12
13 Affiliation [UC Berkeley]
14
15 Date [Ver. 1.0. Started - June 20, 2005.]
16
17 Revision [$Id: giaSupMin.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
18
19 ***********************************************************************/
20
21 #include "gia.h"
22 #include "bool/kit/kit.h"
23
24 ABC_NAMESPACE_IMPL_START
25
26
27 ////////////////////////////////////////////////////////////////////////
28 /// DECLARATIONS ///
29 ////////////////////////////////////////////////////////////////////////
30
31 // decomposition manager
32 typedef struct Gia_ManSup_t_ Gia_ManSup_t;
33 struct Gia_ManSup_t_
34 {
35 int nVarsMax; // the max number of variables
36 int nWordsMax; // the max number of words
37 Vec_Ptr_t * vTruthVars; // elementary truth tables
38 Vec_Ptr_t * vTruthNodes; // internal truth tables
39 // current problem
40 Gia_Man_t * pGia;
41 int iData;
42 int iCare;
43 Vec_Int_t * vConeCare;
44 Vec_Int_t * vConeData;
45 unsigned * pTruthIn;
46 unsigned * pTruthOut;
47 };
48
49 ////////////////////////////////////////////////////////////////////////
50 /// FUNCTION DEFINITIONS ///
51 ////////////////////////////////////////////////////////////////////////
52
53 /**Function*************************************************************
54
55 Synopsis [Starts Decmetry manager.]
56
57 Description []
58
59 SideEffects []
60
61 SeeAlso []
62
63 ***********************************************************************/
Gia_ManSupStart(int nVarsMax)64 Gia_ManSup_t * Gia_ManSupStart( int nVarsMax )
65 {
66 Gia_ManSup_t * p;
67 assert( nVarsMax <= 20 );
68 p = ABC_CALLOC( Gia_ManSup_t, 1 );
69 p->nVarsMax = nVarsMax;
70 p->nWordsMax = Kit_TruthWordNum( p->nVarsMax );
71 p->vTruthVars = Vec_PtrAllocTruthTables( p->nVarsMax );
72 p->vTruthNodes = Vec_PtrAllocSimInfo( 512, p->nWordsMax );
73 p->vConeCare = Vec_IntAlloc( 512 );
74 p->vConeData = Vec_IntAlloc( 512 );
75 p->pTruthIn = ABC_ALLOC( unsigned, p->nWordsMax );
76 p->pTruthOut = ABC_ALLOC( unsigned, p->nWordsMax );
77 return p;
78 }
79
80 /**Function*************************************************************
81
82 Synopsis [Stops Decmetry manager.]
83
84 Description []
85
86 SideEffects []
87
88 SeeAlso []
89
90 ***********************************************************************/
Gia_ManSupStop(Gia_ManSup_t * p)91 void Gia_ManSupStop( Gia_ManSup_t * p )
92 {
93 ABC_FREE( p->pTruthIn );
94 ABC_FREE( p->pTruthOut );
95 Vec_IntFreeP( &p->vConeCare );
96 Vec_IntFreeP( &p->vConeData );
97 Vec_PtrFreeP( &p->vTruthVars );
98 Vec_PtrFreeP( &p->vTruthNodes );
99 ABC_FREE( p );
100 }
101
102 /**Function*************************************************************
103
104 Synopsis []
105
106 Description []
107
108 SideEffects []
109
110 SeeAlso []
111
112 ***********************************************************************/
Gia_ManSupExperimentOne(Gia_ManSup_t * p,Gia_Obj_t * pData,Gia_Obj_t * pCare)113 void Gia_ManSupExperimentOne( Gia_ManSup_t * p, Gia_Obj_t * pData, Gia_Obj_t * pCare )
114 {
115 int iData = Gia_ObjId( p->pGia, Gia_Regular(pData) );
116 int iCare = Gia_ObjId( p->pGia, Gia_Regular(pCare) );
117 if ( !Gia_ObjIsAnd(Gia_Regular(pCare)) )
118 {
119 Abc_Print( 1, "Enable is not an AND.\n" );
120 return;
121 }
122 Abc_Print( 1, "DataSupp = %6d. DataCone = %6d. CareSupp = %6d. CareCone = %6d.",
123 Gia_ManSuppSize( p->pGia, &iData, 1 ),
124 Gia_ManConeSize( p->pGia, &iData, 1 ),
125 Gia_ManSuppSize( p->pGia, &iCare, 1 ),
126 Gia_ManConeSize( p->pGia, &iCare, 1 ) );
127 Abc_Print( 1, "\n" );
128 }
129
130 /**Function*************************************************************
131
132 Synopsis []
133
134 Description []
135
136 SideEffects []
137
138 SeeAlso []
139
140 ***********************************************************************/
Gia_ManSupExperiment(Gia_Man_t * pGia,Vec_Int_t * vPairs)141 void Gia_ManSupExperiment( Gia_Man_t * pGia, Vec_Int_t * vPairs )
142 {
143 Gia_ManSup_t * p;
144 Gia_Obj_t * pData, * pCare;
145 int i;
146 p = Gia_ManSupStart( 16 );
147 p->pGia = pGia;
148 assert( Vec_IntSize(vPairs) % 2 == 0 );
149 for ( i = 0; i < Vec_IntSize(vPairs)/2; i++ )
150 {
151 Abc_Print( 1, "%6d : ", i );
152 pData = Gia_ManPo( pGia, Vec_IntEntry(vPairs, 2*i+0) );
153 pCare = Gia_ManPo( pGia, Vec_IntEntry(vPairs, 2*i+1) );
154 Gia_ManSupExperimentOne( p, Gia_ObjChild0(pData), Gia_ObjChild0(pCare) );
155 }
156 Gia_ManSupStop( p );
157 }
158
159 ////////////////////////////////////////////////////////////////////////
160 /// END OF FILE ///
161 ////////////////////////////////////////////////////////////////////////
162
163
164 ABC_NAMESPACE_IMPL_END
165
166