void Cba_PrsWriteBlifLines( FILE * pFile, Cba_Ntk_t * p ) { Vec_Int_t * vFanins; int Type, Func, i; Cba_NtkForEachObjTypeFuncFanins( p, Type, Func, vFanins, i ) if ( Type == CBA_PRS_NODE ) // .names/assign/box2 (no formal/actual binding) { fprintf( pFile, ".names" ); Cba_PrsWriteBlifArray( pFile, p, vFanins, 1 ); fprintf( pFile, "%s", Cba_NtkFuncStr(p, Func) ); } else if ( Type == CBA_PRS_BOX ) // .names/assign/box2 (no formal/actual binding) { fprintf( pFile, ".subckt" ); fprintf( pFile, " %s", Cba_NtkStr(p, Func) ); Cba_PrsWriteBlifArray2( pFile, p, vFanins ); } else if ( Type == CBA_PRS_LATCH ) // .names/assign/box2 (no formal/actual binding) { fprintf( pFile, ".latch" ); fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 1)) ); fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 0)) ); fprintf( pFile, " %c\n", '0' + Func ); } }
ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Writing parser state into a file.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Cba_PrsWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, int fFirst ) { int NameId, i; Vec_IntForEachEntryStart( vFanins, NameId, i, fFirst ) fprintf( pFile, " %s", Cba_NtkStr(p, NameId) ); if ( fFirst ) fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins,0)) ); fprintf( pFile, "\n" ); }
void Cba_PrsWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins ) { int FormId, NameId, i; assert( Vec_IntSize(vFanins) % 2 == 0 ); Vec_IntForEachEntryDouble( vFanins, FormId, NameId, i ) fprintf( pFile, " %s=%s", Cba_NtkStr(p, FormId), Cba_NtkStr(p, NameId) ); fprintf( pFile, "\n" ); }
void Cba_NtkObjOrder( Cba_Ntk_t * p, Vec_Int_t * vObjs, Vec_Int_t * vNameIds ) { char Buffer[1000], * pName; Vec_Ptr_t * vNames; int i, iObj; if ( Vec_IntSize(vObjs) < 2 ) return; vNames = Vec_PtrAlloc( Vec_IntSize(vObjs) ); Vec_IntForEachEntry( vObjs, iObj, i ) { char * pTypeName = Cba_NtkTypeName( p, Cba_ObjType(p, iObj) ); char * pInstName = vNameIds ? Cba_NtkStr(p, Vec_IntEntry(vNameIds, i)) : Cba_ObjNameStr(p, iObj); sprintf( Buffer, "%s_%s_%d", pTypeName, pInstName, iObj ); Vec_PtrPush( vNames, Abc_UtilStrsav(Buffer) ); }