@@ -852,7 +852,7 @@ Vec_Int_t * Abc_NtkWriteMiniMapping( Abc_Ntk_t * pNtk )
852852 // write the numbers of CI/CO/Node/FF
853853 Vec_IntPush ( vMapping , Abc_NtkCiNum (pNtk ) );
854854 Vec_IntPush ( vMapping , Abc_NtkCoNum (pNtk ) );
855- Vec_IntPush ( vMapping , Abc_NtkNodeNum ( pNtk ) );
855+ Vec_IntPush ( vMapping , Vec_PtrSize ( vNodes ) );
856856 Vec_IntPush ( vMapping , Abc_NtkLatchNum (pNtk ) );
857857 // write the nodes
858858 vGates = Vec_StrAlloc ( 10000 );
@@ -868,6 +868,15 @@ Vec_Int_t * Abc_NtkWriteMiniMapping( Abc_Ntk_t * pNtk )
868868 // write the COs literals
869869 Abc_NtkForEachCo ( pNtk , pObj , i )
870870 Vec_IntPush ( vMapping , Abc_ObjFanin0 (pObj )-> iTemp );
871+ // write signal names
872+ Abc_NtkForEachCi ( pNtk , pObj , i ) {
873+ Vec_StrPrintStr ( vGates , Abc_ObjName (pObj ) );
874+ Vec_StrPush ( vGates , '\0' );
875+ }
876+ Abc_NtkForEachCo ( pNtk , pObj , i ) {
877+ Vec_StrPrintStr ( vGates , Abc_ObjName (pObj ) );
878+ Vec_StrPush ( vGates , '\0' );
879+ }
871880 // finish off the array
872881 nExtra = 4 - Vec_StrSize (vGates ) % 4 ;
873882 for ( i = 0 ; i < nExtra ; i ++ )
@@ -913,19 +922,23 @@ Abc_Ntk_t * Abc_NtkFromMiniMapping( int *pArray )
913922 int i , k , nLeaves , Pos = 4 ;
914923 char * pBuffer , * pName ;
915924 Mio_Gate_t * pGate ;
925+ Abc_Obj_t * pObj ;
916926 nCis = pArray [0 ];
917927 nCos = pArray [1 ];
918928 nNodes = pArray [2 ];
919929 nFlops = pArray [3 ];
920- // create pi
921- for ( i = 0 ; i < nCis ; i ++ )
930+ // create pis
931+ for ( i = 0 ; i < nCis - nFlops ; i ++ )
922932 Abc_NtkCreatePi ( pNtkMapped );
933+ // create pos
934+ for ( i = 0 ; i < nCos - nFlops ; i ++ )
935+ Abc_NtkCreatePo ( pNtkMapped );
936+ // create flops
937+ for ( i = 0 ; i < nFlops ; i ++ )
938+ Abc_NtkAddLatch ( pNtkMapped , NULL , ABC_INIT_ZERO );
923939 // create nodes
924940 for ( i = 0 ; i < nNodes ; i ++ )
925941 Abc_NtkCreateNode ( pNtkMapped );
926- // create po
927- for ( i = 0 ; i < nCos ; i ++ )
928- Abc_NtkCreatePo ( pNtkMapped );
929942 // connect nodes
930943 for ( i = 0 ; i < nNodes ; i ++ )
931944 {
@@ -944,26 +957,21 @@ Abc_Ntk_t * Abc_NtkFromMiniMapping( int *pArray )
944957 pGate = Mio_LibraryReadGateByName ( pLib , pName , NULL );
945958 Abc_NtkObj ( pNtkMapped , nCis + i + 1 )-> pData = pGate ;
946959 }
947- Abc_NtkAddDummyPiNames ( pNtkMapped );
948- Abc_NtkAddDummyPoNames ( pNtkMapped );
949960
950- // decouple the PO driver nodes to reduce the number of levels
951- int fFixDrivers = 1 , fUseBuffs = 1 , fVerbose = 1 ;
952- if ( fFixDrivers )
953- {
954- int nDupGates = Abc_NtkLogicMakeSimpleCos ( pNtkMapped , !fUseBuffs );
955- if ( fVerbose && nDupGates && !Abc_FrameReadFlag ("silentmode" ) )
956- {
957- if ( fUseBuffs )
958- printf ( "Added %d buffers/inverters to decouple the CO drivers.\n" , nDupGates );
959- else
960- printf ( "Duplicated %d gates to decouple the CO drivers.\n" , nDupGates );
961- }
961+ assert ( Abc_NtkCiNum (pNtkMapped ) == nCis );
962+ Abc_NtkForEachCi ( pNtkMapped , pObj , i ) {
963+ pName = pBuffer ;
964+ pBuffer += strlen (pName ) + 1 ;
965+ Abc_ObjAssignName ( pObj , pName , NULL );
966+ }
967+ assert ( Abc_NtkCoNum (pNtkMapped ) == nCos );
968+ Abc_NtkForEachCo ( pNtkMapped , pObj , i ) {
969+ pName = pBuffer ;
970+ pBuffer += strlen (pName ) + 1 ;
971+ Abc_ObjAssignName ( pObj , pName , NULL );
962972 }
963973
964974 if ( !Abc_NtkCheck ( pNtkMapped ) ) {
965- //extern void Abc_NtkPrintMiniMapping( int * pArray );
966- //Abc_NtkPrintMiniMapping( pArray );
967975 fprintf ( stdout , "Abc_NtkFromMiniMapping(): Network check has failed.\n" );
968976 }
969977
@@ -987,11 +995,11 @@ Abc_Ntk_t * Abc_NtkReadFromFile( char * pFileName )
987995 if ( nSize == 0 )
988996 return NULL ;
989997 FILE * pFile = fopen ( pFileName , "rb" );
990- int * pArray = ABC_ALLOC ( int , nSize );
998+ char * pArray = ABC_ALLOC ( char , nSize );
991999 int nSize2 = fread ( pArray , sizeof (char ), nSize , pFile );
9921000 assert ( nSize2 == nSize );
9931001 fclose ( pFile );
994- Abc_Ntk_t * pNtk = Abc_NtkFromMiniMapping ( pArray );
1002+ Abc_Ntk_t * pNtk = Abc_NtkFromMiniMapping ( ( int * ) pArray );
9951003 ABC_FREE ( pArray );
9961004 return pNtk ;
9971005}
@@ -1032,8 +1040,8 @@ void Abc_NtkPrintMiniMapping( int * pArray )
10321040 printf ( "The first %d object IDs (from 0 to %d) are reserved for the CIs.\n" , nCis , nCis - 1 );
10331041 for ( i = 0 ; i < nNodes ; i ++ )
10341042 {
1035- printf ( "Node %d has fanins {" , nCis + i );
10361043 nLeaves = pArray [Pos ++ ];
1044+ printf ( "Node %d has %d fanins {" , nCis + i , nLeaves );
10371045 for ( k = 0 ; k < nLeaves ; k ++ )
10381046 printf ( " %d" , pArray [Pos ++ ] );
10391047 printf ( " }\n" );
@@ -1047,6 +1055,18 @@ void Abc_NtkPrintMiniMapping( int * pArray )
10471055 pBuffer += strlen (pName ) + 1 ;
10481056 printf ( "Node %d has gate \"%s\"\n" , nCis + i , pName );
10491057 }
1058+ for ( i = 0 ; i < nCis ; i ++ )
1059+ {
1060+ pName = pBuffer ;
1061+ pBuffer += strlen (pName ) + 1 ;
1062+ printf ( "CI %d has name \"%s\"\n" , i , pName );
1063+ }
1064+ for ( i = 0 ; i < nCos ; i ++ )
1065+ {
1066+ pName = pBuffer ;
1067+ pBuffer += strlen (pName ) + 1 ;
1068+ printf ( "CO %d has name \"%s\"\n" , i , pName );
1069+ }
10501070}
10511071
10521072/**Function*************************************************************
0 commit comments