160 int i, Index, NameId, iObj, iConst0, iTerm;
161 int iNonDriven = -1, nNonDriven = 0;
162 assert( Psr_NtkPioNum(pNtk) == 0 );
164 Bac_NtkStartNames( pNew );
168 if ( Vec_IntEntry(vMap, NameId) != -1 )
169 printf(
"Primary inputs %d and %d have the same name.\n", Vec_IntEntry(vMap, NameId), i );
171 Bac_ObjSetName( pNew, iObj, Abc_Var2Lit2(NameId,
BAC_NAME_BIN) );
172 Vec_IntWriteEntry( vMap, NameId, iObj );
175 Vec_IntClear( vBoxes );
177 if ( !Psr_BoxIsNode(pNtk, iBox) )
179 pNtkBox = Psr_ManNtk( vDes, Psr_BoxNtk(pNtk, iBox)-1 );
180 if ( pNtkBox == NULL )
182 iObj = Bac_BoxAlloc( pNew,
BAC_BOX_GATE, Vec_IntSize(vSigs)/2-1, 1, Psr_BoxNtk(pNtk, iBox) );
183 Bac_ObjSetName( pNew, iObj, Abc_Var2Lit2(Psr_BoxName(pNtk, iBox),
BAC_NAME_BIN) );
185 NameId = Vec_IntEntryLast( vSigs );
186 NameId = Psr_NtkSigName( pNtk, NameId );
187 if ( Vec_IntEntry(vMap, NameId) != -1 )
188 printf(
"Box output name %d is already driven.\n", NameId );
189 iTerm = Bac_BoxBo( pNew, iObj, 0 );
190 Bac_ObjSetName( pNew, iTerm, Abc_Var2Lit2(NameId,
BAC_NAME_BIN) );
191 Vec_IntWriteEntry( vMap, NameId, iTerm );
195 iObj = Bac_BoxAlloc( pNew,
BAC_OBJ_BOX, Psr_NtkPiNum(pNtkBox), Psr_NtkPoNum(pNtkBox), Psr_BoxNtk(pNtk, iBox) );
196 Bac_ObjSetName( pNew, iObj, Abc_Var2Lit2(Psr_BoxName(pNtk, iBox),
BAC_NAME_BIN) );
197 Bac_NtkSetHost( Bac_ManNtk(pNew->
pDesign, Psr_BoxNtk(pNtk, iBox)), Bac_NtkId(pNew), iObj );
201 if ( --Index < Psr_NtkPiNum(pNtkBox) )
203 assert( Index - Psr_NtkPiNum(pNtkBox) < Psr_NtkPoNum(pNtkBox) );
205 NameId = Vec_IntEntry( vSigs, i );
206 NameId = Psr_NtkSigName( pNtk, NameId );
207 if ( Vec_IntEntry(vMap, NameId) != -1 )
208 printf(
"Box output name %d is already driven.\n", NameId );
209 iTerm = Bac_BoxBo( pNew, iObj, Index - Psr_NtkPiNum(pNtkBox) );
210 Bac_ObjSetName( pNew, iTerm, Abc_Var2Lit2(NameId,
BAC_NAME_BIN) );
211 Vec_IntWriteEntry( vMap, NameId, iTerm );
215 Vec_IntPush( vBoxes, iObj );
219 iObj = Bac_BoxAlloc( pNew, (
Bac_ObjType_t)Psr_BoxNtk(pNtk, iBox), Psr_BoxIONum(pNtk, iBox)-1, 1, -1 );
221 NameId = Vec_IntEntryLast( vSigs );
222 NameId = Psr_NtkSigName( pNtk, NameId );
223 if ( Vec_IntEntry(vMap, NameId) != -1 )
224 printf(
"Node output name %d is already driven.\n", NameId );
225 iTerm = Bac_BoxBo( pNew, iObj, 0 );
226 Bac_ObjSetName( pNew, iTerm, Abc_Var2Lit2(NameId,
BAC_NAME_BIN) );
227 Vec_IntWriteEntry( vMap, NameId, iTerm );
229 Vec_IntPush( vBoxes, iObj );
233 if ( !Psr_BoxIsNode(pNtk, iBox) )
235 pNtkBox = Psr_ManNtk( vDes, Psr_BoxNtk(pNtk, iBox)-1 );
236 iObj = Vec_IntEntry( vBoxes, iBox );
237 if ( pNtkBox == NULL )
242 NameId = Vec_IntEntry( vSigs, i );
243 NameId = Psr_NtkSigName( pNtk, NameId );
244 iTerm = Bac_BoxBi( pNew, iObj, i/2 );
245 if ( Vec_IntEntry(vMap, NameId) == -1 )
247 iConst0 = Bac_BoxAlloc( pNew,
BAC_BOX_CF, 0, 1, -1 );
248 Vec_IntWriteEntry( vMap, NameId, iConst0+1 );
249 if ( iNonDriven == -1 )
253 Bac_ObjSetFanin( pNew, iTerm, Vec_IntEntry(vMap, NameId) );
261 if ( --Index >= Psr_NtkPiNum(pNtkBox) )
263 NameId = Vec_IntEntry( vSigs, i );
264 NameId = Psr_NtkSigName( pNtk, NameId );
265 iTerm = Bac_BoxBi( pNew, iObj, Index );
266 if ( Vec_IntEntry(vMap, NameId) == -1 )
268 iConst0 = Bac_BoxAlloc( pNew,
BAC_BOX_CF, 0, 1, -1 );
269 Vec_IntWriteEntry( vMap, NameId, iConst0+1 );
270 if ( iNonDriven == -1 )
274 Bac_ObjSetFanin( pNew, iTerm, Vec_IntEntry(vMap, NameId) );
280 iObj = Vec_IntEntry( vBoxes, iBox );
283 NameId = Vec_IntEntry( vSigs, ++i );
284 NameId = Psr_NtkSigName( pNtk, NameId );
285 iTerm = Bac_BoxBi( pNew, iObj, i/2 );
286 if ( Vec_IntEntry(vMap, NameId) == -1 )
288 iConst0 = Bac_BoxAlloc( pNew,
BAC_BOX_CF, 0, 1, -1 );
289 Vec_IntWriteEntry( vMap, NameId, iConst0+1 );
290 if ( iNonDriven == -1 )
294 Bac_ObjSetFanin( pNew, iTerm, Vec_IntEntry(vMap, NameId) );
299 if ( Vec_IntEntry(vMap, NameId) == -1 )
301 iConst0 = Bac_BoxAlloc( pNew,
BAC_BOX_CF, 0, 1, -1 );
302 Vec_IntWriteEntry( vMap, NameId, iConst0+1 );
303 if ( iNonDriven == -1 )
308 iObj = Bac_ObjAlloc( pNew,
BAC_OBJ_PO, Vec_IntEntry(vMap, NameId) );
310 printf(
"Module %s has %d non-driven nets (for example, %s).\n", Psr_NtkName(pNtk), nNonDriven, Psr_NtkStr(pNtk, iNonDriven) );
314 Bac_NtkAddInfo( pNew, NameId, -1, -1 );