DECLARATIONS ///.
Date [Ver. 1.0. Started - June 20, 2005.]
] FUNCTION DEFINITIONS /// Function*************************************************************
48{
49 word uTruth, * pTruth, uTruths6[6] = {
56 };
68 int nRealPis = nBoxes ?
Tim_ManPiNum(pManTime) : Gia_ManPiNum(
p);
69 int nRealPos = nBoxes ?
Tim_ManPoNum(pManTime) : Gia_ManPoNum(
p);
70 int i, j, k, curCi, curCo, nBoxIns, nBoxOuts, w,
nWords;
71 int Id, iFan, nMfsVars, nBbIns = 0, nBbOuts = 0, Counter = 0;
73 nLutSizeMax = Abc_MaxInt( nLutSizeMax, 6 );
74 assert( nLutSizeMax < 16 );
75
77
78 Counter += nBbOuts;
79
80 nMfsVars = Gia_ManCiNum(
p) + 1 +
Gia_ManLutNum(
p) + Gia_ManCoNum(
p) + nBbIns + nBbOuts;
81 vFanins = Vec_WecStart( nMfsVars );
82 vFixed = Vec_StrStart( nMfsVars );
83 vEmpty = Vec_StrStart( nMfsVars );
84 vTruths = Vec_WrdStart( nMfsVars );
85 vStarts = Vec_IntStart( nMfsVars );
86 vTruths2 = Vec_WrdAlloc( 10000 );
87
88 Gia_ManCleanCopyArray(
p );
90 Gia_ObjSetCopyArray(
p, Id, Counter++ );
91
92 Vec_StrWriteEntry( vFixed, Counter, (char)1 );
93 Vec_WrdWriteEntry( vTruths, Counter, (
word)0 );
94 Gia_ObjSetCopyArray(
p, 0, Counter++ );
95
96 vLeaves = Vec_IntAlloc( nLutSizeMax );
99 {
100 Vec_IntClear( vLeaves );
101 vArray = Vec_WecEntry( vFanins, Counter );
102 Vec_IntGrow( vArray, Gia_ObjLutSize(
p, Id) );
104 {
105 assert( Gia_ObjCopyArray(
p, iFan) >= 0 );
106 Vec_IntPush( vArray, Gia_ObjCopyArray(
p, iFan) );
107 Vec_IntPush( vLeaves, iFan );
108 }
109 assert( Vec_IntSize(vLeaves) < 16 );
110 assert( Vec_IntSize(vLeaves) == Gia_ObjLutSize(
p, Id) );
111
112
114 nVars = Abc_TtMinBase( pTruth, Vec_IntArray(vArray), Vec_IntSize(vArray), Vec_IntSize(vLeaves) );
115 Vec_IntShrink( vArray, nVars );
116 Vec_WrdWriteEntry( vTruths, Counter, pTruth[0] );
117 nWords = Abc_Truth6WordNum( nVars );
118 Vec_IntWriteEntry( vStarts, Counter, Vec_WrdSize(vTruths2) );
119 for ( w = 0; w <
nWords; w++ )
120 Vec_WrdPush( vTruths2, pTruth[w] );
121 if ( Gia_ObjLutIsMux(
p, Id) )
122 {
123 Vec_StrWriteEntry( vFixed, Counter, (char)1 );
124 Vec_StrWriteEntry( vEmpty, Counter, (char)1 );
125 }
126 Gia_ObjSetCopyArray(
p, Id, Counter++ );
127 }
129
131 {
132 iFan = Gia_ObjFaninId0p(
p, pObj );
133 assert( Gia_ObjCopyArray(
p, iFan) >= 0 );
134 vArray = Vec_WecEntry( vFanins, Counter );
135 Vec_IntFill( vArray, 1, Gia_ObjCopyArray(
p, iFan) );
136 if ( i < Gia_ManCoNum(
p) - nRealPos )
137 {
138 Vec_StrWriteEntry( vFixed, Counter, (char)1 );
139 Vec_StrWriteEntry( vEmpty, Counter, (char)1 );
140 uTruth = Gia_ObjFaninC0(pObj) ? ~uTruths6[0]: uTruths6[0];
141 Vec_WrdWriteEntry( vTruths, Counter, uTruth );
142 Vec_IntWriteEntry( vStarts, Counter, Vec_WrdSize(vTruths2) );
143 Vec_WrdPush( vTruths2, uTruth );
144 }
145 Gia_ObjSetCopyArray(
p, Gia_ObjId(
p, pObj), Counter++ );
146 }
147
148 Counter += nBbIns;
149 assert( Counter == nMfsVars );
150
152 {
153 int iBbIn = 0, iBbOut = 0;
154 assert( Gia_ManCiNum(
p->pAigExtra) < 16 );
156 curCi = nRealPis;
157 curCo = 0;
158 for ( k = 0; k < nBoxes; k++ )
159 {
162
164 {
165
166 Vec_IntClear( vLeaves );
167 for ( i = 0; i < nBoxIns; i++ )
168 Vec_IntPush( vLeaves, Gia_ObjId(
p->pAigExtra, Gia_ManCi(
p->pAigExtra, i)) );
169 for ( j = 0; j < nBoxOuts; j++ )
170 {
171
172 pObj = Gia_ManCi(
p, curCi + j );
173 Counter = Gia_ObjCopyArray(
p, Gia_ObjId(
p, pObj) );
174
175 vArray = Vec_WecEntry( vFanins, Counter );
176 Vec_IntGrow( vArray, nBoxIns );
177 for ( i = 0; i < nBoxIns; i++ )
178 {
179 iFan = Gia_ObjId(
p, Gia_ManCo(
p, curCo + i) );
180 assert( Gia_ObjCopyArray(
p, iFan) >= 0 );
181 Vec_IntPush( vArray, Gia_ObjCopyArray(
p, iFan) );
182 }
183 Vec_StrWriteEntry( vFixed, Counter, (char)1 );
184
185 pObjExtra = Gia_ManCo(
p->pAigExtra, curCi - nRealPis + j );
186
187 pTruth = NULL;
188 if ( Gia_ObjFaninId0p(
p->pAigExtra, pObjExtra) == 0 )
189 {
190 uTruth = 0;
191 uTruth = Gia_ObjFaninC0(pObjExtra) ? ~uTruth : uTruth;
192 pTruth = &uTruth;
193 }
194 else if ( Gia_ObjIsCi(Gia_ObjFanin0(pObjExtra)) )
195 {
196 uTruth = uTruths6[Gia_ObjCioId(Gia_ObjFanin0(pObjExtra))];
197 uTruth = Gia_ObjFaninC0(pObjExtra) ? ~uTruth : uTruth;
198 pTruth = &uTruth;
199 }
200 else
201 {
203 if ( Gia_ObjFaninC0(pObjExtra) )
204 Abc_TtNot( pTruth, Abc_Truth6WordNum(Vec_IntSize(vLeaves)) );
205 }
206
207
208
209 nVars = Abc_TtMinBase( pTruth, Vec_IntArray(vArray), Vec_IntSize(vArray), Vec_IntSize(vLeaves) );
210 Vec_IntShrink( vArray, nVars );
211 if ( nVars <= 6 )
212 Vec_WrdWriteEntry( vTruths, Counter, pTruth[0] );
213 else
214 {
215 int w,
nWords = Abc_Truth6WordNum( nVars );
216 Vec_IntWriteEntry( vStarts, Counter, Vec_WrdSize(vTruths2) );
217 for ( w = 0; w <
nWords; w++ )
218 Vec_WrdPush( vTruths2, pTruth[w] );
219 }
220 }
221 }
222 else
223 {
224 for ( j = 0; j < nBoxOuts; j++ )
225 {
226
227 pObj = Gia_ManCi(
p, curCi + j );
228 Counter = Gia_ObjCopyArray(
p, Gia_ObjId(
p, pObj) );
229
230 vArray = Vec_WecEntry( vFanins, Counter );
231 assert( Vec_IntSize(vArray) == 0 );
232 Vec_IntFill( vArray, 1, iBbOut++ );
233 Vec_StrWriteEntry( vFixed, Counter, (char)1 );
234 Vec_StrWriteEntry( vEmpty, Counter, (char)1 );
235 Vec_WrdWriteEntry( vTruths, Counter, uTruths6[0] );
236 }
237 for ( i = 0; i < nBoxIns; i++ )
238 {
239
240 pObj = Gia_ManCo(
p, curCo + i );
241 Counter = Gia_ObjCopyArray(
p, Gia_ObjId(
p, pObj) );
242
243 vArray = Vec_WecEntry( vFanins, nMfsVars - nBbIns + iBbIn++ );
244 assert( Vec_IntSize(vArray) == 0 );
245 Vec_IntFill( vArray, 1, Counter );
246 }
247 }
248
249 for ( i = 0; i < nBoxIns; i++ )
250 {
251 pObj = Gia_ManCo(
p, curCo + i );
252 if ( !Gia_ObjIsCi( Gia_ObjFanin0(pObj) ) )
253 continue;
254 Counter = Gia_ObjCopyArray(
p, Gia_ObjFaninId0p(
p, pObj) );
255 Vec_StrWriteEntry( vEmpty, Counter, (char)1 );
256 }
257 curCo += nBoxIns;
258 curCi += nBoxOuts;
259 }
260 curCo += nRealPos;
262
263 assert( curCi == Gia_ManCiNum(
p) );
264 assert( curCo == Gia_ManCoNum(
p) );
265 assert( curCi - nRealPis == Gia_ManCoNum(
p->pAigExtra) );
266 assert( iBbIn == nBbIns );
267 assert( iBbOut == nBbOuts );
268 }
269
270 Vec_IntFree( vLeaves );
271 return Sfm_NtkConstruct( vFanins, nBbOuts + nRealPis, nRealPos + nBbIns, vFixed, vEmpty, vTruths, vStarts, vTruths2 );
272}
#define ABC_CONST(number)
PARAMETERS ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
word * Gia_ObjComputeTruthTableCut(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vLeaves)
#define Gia_ManForEachLut(p, i)
int Gia_ManBoxNum(Gia_Man_t *p)
DECLARATIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
#define Gia_LutForEachFanin(p, i, iFan, k)
void Gia_ObjComputeTruthTableStart(Gia_Man_t *p, int nVarsMax)
int Gia_ManLutSizeMax(Gia_Man_t *p)
int Gia_ManLutNum(Gia_Man_t *p)
void Gia_ObjComputeTruthTableStop(Gia_Man_t *p)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCiId(p, Id, i)
unsigned __int64 word
DECLARATIONS ///.
Sfm_Ntk_t * Sfm_NtkConstruct(Vec_Wec_t *vFanins, int nPis, int nPos, Vec_Str_t *vFixed, Vec_Str_t *vEmpty, Vec_Wrd_t *vTruths, Vec_Int_t *vStarts, Vec_Wrd_t *vTruths2)
int Tim_ManBoxIsBlack(Tim_Man_t *p, int iBox)
int Tim_ManBoxOutputNum(Tim_Man_t *p, int iBox)
void Tim_ManBlackBoxIoNum(Tim_Man_t *p, int *pnBbIns, int *pnBbOuts)
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
int Tim_ManPoNum(Tim_Man_t *p)
int Tim_ManBoxInputNum(Tim_Man_t *p, int iBox)
int Tim_ManPiNum(Tim_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.