diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2010-11-01 01:35:04 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2010-11-01 01:35:04 -0700 |
commit | 6130e39b18b5f53902e4eab14f6d5cdde5219563 (patch) | |
tree | 0db0628479a1b750e9af1f66cb8379ebd0913d31 /src/base/io/ioReadBlifMv.c | |
parent | f0e77f6797c0504b0da25a56152b707d3357f386 (diff) | |
download | abc-6130e39b18b5f53902e4eab14f6d5cdde5219563.tar.gz abc-6130e39b18b5f53902e4eab14f6d5cdde5219563.tar.bz2 abc-6130e39b18b5f53902e4eab14f6d5cdde5219563.zip |
initial commit of public abc
Diffstat (limited to 'src/base/io/ioReadBlifMv.c')
-rw-r--r-- | src/base/io/ioReadBlifMv.c | 380 |
1 files changed, 293 insertions, 87 deletions
diff --git a/src/base/io/ioReadBlifMv.c b/src/base/io/ioReadBlifMv.c index 2e2388d3..c73f8d92 100644 --- a/src/base/io/ioReadBlifMv.c +++ b/src/base/io/ioReadBlifMv.c @@ -23,6 +23,8 @@ #include "vecPtr.h" #include "ioAbc.h" +ABC_NAMESPACE_IMPL_START + //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// @@ -33,6 +35,8 @@ typedef struct Io_MvVar_t_ Io_MvVar_t; // parsing var typedef struct Io_MvMod_t_ Io_MvMod_t; // parsing model typedef struct Io_MvMan_t_ Io_MvMan_t; // parsing manager +Vec_Ptr_t *vGlobalLtlArray; + struct Io_MvVar_t_ { int nValues; // the number of values @@ -46,12 +50,15 @@ struct Io_MvMod_t_ Vec_Ptr_t * vInputs; // .inputs lines Vec_Ptr_t * vOutputs; // .outputs lines Vec_Ptr_t * vLatches; // .latch lines + Vec_Ptr_t * vFlops; // .flop lines Vec_Ptr_t * vResets; // .reset lines Vec_Ptr_t * vNames; // .names lines Vec_Ptr_t * vSubckts; // .subckt lines Vec_Ptr_t * vShorts; // .short lines Vec_Ptr_t * vOnehots; // .onehot lines Vec_Ptr_t * vMvs; // .mv lines + Vec_Ptr_t * vConstrs; // .constraint lines + Vec_Ptr_t * vLtlProperties; int fBlackBox; // indicates blackbox model // the resulting network Abc_Ntk_t * pNtk; @@ -97,13 +104,16 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ); static int Io_MvParseLineModel( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineInputs( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineOutputs( Io_MvMod_t * p, char * pLine ); +static int Io_MvParseLineConstrs( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ); +static int Io_MvParseLineFlop( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine ); static Vec_Int_t * Io_MvParseLineOnehot( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineNamesMv( Io_MvMod_t * p, char * pLine, int fReset ); static int Io_MvParseLineNamesBlif( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineShortBlif( Io_MvMod_t * p, char * pLine ); +static int Io_MvParseLineLtlProperty( Io_MvMod_t * p, char * pLine ); static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ); static Io_MvVar_t * Abc_NtkMvVarDup( Abc_Ntk_t * pNtk, Io_MvVar_t * pVar ); @@ -135,6 +145,7 @@ Abc_Ntk_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck ) Abc_Lib_t * pDesign = NULL; char * pDesignName; int RetValue, i; + char * pLtlProp; // check that the file is available pFile = fopen( pFileName, "rb" ); @@ -161,10 +172,11 @@ Abc_Ntk_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck ) p->pDesign = Abc_LibCreate( pDesignName ); ABC_FREE( pDesignName ); // free the HOP manager - Hop_ManStop( p->pDesign->pManFunc ); + Hop_ManStop( (Hop_Man_t *)p->pDesign->pManFunc ); p->pDesign->pManFunc = NULL; // prepare the file for parsing Io_MvReadPreparse( p ); + vGlobalLtlArray = Vec_PtrAlloc( 100 ); // parse interfaces of each network and construct the network if ( Io_MvReadInterfaces( p ) ) pDesign = Io_MvParse( p ); @@ -178,7 +190,7 @@ Abc_Ntk_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck ) // make sure that everything is okay with the network structure if ( fCheck ) { - Vec_PtrForEachEntry( pDesign->vModules, pNtk, i ) + Vec_PtrForEachEntry( Abc_Ntk_t *, pDesign->vModules, pNtk, i ) { if ( !Abc_NtkCheckRead( pNtk ) ) { @@ -193,7 +205,7 @@ Abc_Ntk_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck ) // detect top-level model RetValue = Abc_LibFindTopLevelModels( pDesign ); - pNtk = Vec_PtrEntry( pDesign->vTops, 0 ); + pNtk = (Abc_Ntk_t *)Vec_PtrEntry( pDesign->vTops, 0 ); if ( RetValue > 1 ) printf( "Warning: The design has %d root-level modules. The first one (%s) will be used.\n", Vec_PtrSize(pDesign->vTops), pNtk->pName ); @@ -217,6 +229,9 @@ Abc_Ntk_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck ) //Io_WriteBlifMv( pNtk, "_temp_.mv" ); if ( pNtk->pSpec == NULL ) pNtk->pSpec = Extra_UtilStrsav( pFileName ); + + Vec_PtrForEachEntry( char *, vGlobalLtlArray, pLtlProp, i ) + Vec_PtrPush( pNtk->vLtlProperties, pLtlProp ); return pNtk; } @@ -267,7 +282,7 @@ static void Io_MvFree( Io_MvMan_t * p ) Vec_PtrFree( p->vLines ); if ( p->vModels ) { - Vec_PtrForEachEntry( p->vModels, pMod, i ) + Vec_PtrForEachEntry( Io_MvMod_t *, p->vModels, pMod, i ) Io_MvModFree( pMod ); Vec_PtrFree( p->vModels ); } @@ -296,12 +311,15 @@ static Io_MvMod_t * Io_MvModAlloc() p->vInputs = Vec_PtrAlloc( 512 ); p->vOutputs = Vec_PtrAlloc( 512 ); p->vLatches = Vec_PtrAlloc( 512 ); + p->vFlops = Vec_PtrAlloc( 512 ); p->vResets = Vec_PtrAlloc( 512 ); p->vNames = Vec_PtrAlloc( 512 ); p->vSubckts = Vec_PtrAlloc( 512 ); p->vShorts = Vec_PtrAlloc( 512 ); p->vOnehots = Vec_PtrAlloc( 512 ); p->vMvs = Vec_PtrAlloc( 512 ); + p->vConstrs = Vec_PtrAlloc( 512 ); + p->vLtlProperties = Vec_PtrAlloc( 512 ); return p; } @@ -323,12 +341,14 @@ static void Io_MvModFree( Io_MvMod_t * p ) Vec_PtrFree( p->vInputs ); Vec_PtrFree( p->vOutputs ); Vec_PtrFree( p->vLatches ); + Vec_PtrFree( p->vFlops ); Vec_PtrFree( p->vResets ); Vec_PtrFree( p->vNames ); Vec_PtrFree( p->vSubckts ); Vec_PtrFree( p->vShorts ); Vec_PtrFree( p->vOnehots ); Vec_PtrFree( p->vMvs ); + Vec_PtrFree( p->vConstrs ); ABC_FREE( p ); } @@ -484,7 +504,7 @@ static int Io_MvGetLine( Io_MvMan_t * p, char * pToken ) { char * pLine; int i; - Vec_PtrForEachEntry( p->vLines, pLine, i ) + Vec_PtrForEachEntry( char *, p->vLines, pLine, i ) if ( pToken < pLine ) return i; return -1; @@ -570,7 +590,7 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) } // unfold the line extensions and sort lines by directive - Vec_PtrForEachEntry( p->vLines, pCur, i ) + Vec_PtrForEachEntry( char *, p->vLines, pCur, i ) { if ( *pCur == 0 ) continue; @@ -579,7 +599,7 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) if ( !Io_MvCharIsSpace(*pPrev) ) break; // if it is the line extender, overwrite it with spaces - if ( *pPrev == '\\' ) + if ( pPrev >= p->pBuffer && *pPrev == '\\' ) { for ( ; *pPrev; pPrev++ ) *pPrev = ' '; @@ -595,8 +615,12 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) Vec_PtrPush( p->pLatest->vNames, pCur ); else if ( p->fBlifMv && (!strncmp(pCur, "def ", 4) || !strncmp(pCur, "default ", 8)) ) continue; + else if ( !strncmp( pCur, "ltlformula", 10 ) ) + Vec_PtrPush( p->pLatest->vLtlProperties, pCur ); else if ( !strncmp(pCur, "latch", 5) ) Vec_PtrPush( p->pLatest->vLatches, pCur ); + else if ( !strncmp(pCur, "flop", 4) ) + Vec_PtrPush( p->pLatest->vFlops, pCur ); else if ( !strncmp(pCur, "r ", 2) || !strncmp(pCur, "reset ", 6) ) Vec_PtrPush( p->pLatest->vResets, pCur ); else if ( !strncmp(pCur, "inputs", 6) ) @@ -611,6 +635,8 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) Vec_PtrPush( p->pLatest->vOnehots, pCur ); else if ( p->fBlifMv && !strncmp(pCur, "mv", 2) ) Vec_PtrPush( p->pLatest->vMvs, pCur ); + else if ( !strncmp(pCur, "constraint", 10) ) + Vec_PtrPush( p->pLatest->vConstrs, pCur ); else if ( !strncmp(pCur, "blackbox", 8) ) p->pLatest->fBlackBox = 1; else if ( !strncmp(pCur, "model", 5) ) @@ -628,7 +654,10 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) else if ( !strncmp(pCur, "exdc", 4) ) { fprintf( stdout, "Line %d: Skipping EXDC network.\n", Io_MvGetLine(p, pCur) ); - break; +// break; + if ( p->pLatest ) + Vec_PtrPush( p->vModels, p->pLatest ); + p->pLatest = NULL; } else if ( !strncmp(pCur, "attrib", 6) ) {} @@ -640,6 +669,8 @@ static void Io_MvReadPreparse( Io_MvMan_t * p ) {} else if ( !strncmp(pCur, "no_merge", 8) ) {} + else if ( !strncmp(pCur, "wd", 2) ) + {} // else if ( !strncmp(pCur, "inouts", 6) ) // {} else @@ -667,9 +698,9 @@ static int Io_MvReadInterfaces( Io_MvMan_t * p ) { Io_MvMod_t * pMod; char * pLine; - int i, k; + int i, k, nOutsOld; // iterate through the models - Vec_PtrForEachEntry( p->vModels, pMod, i ) + Vec_PtrForEachEntry( Io_MvMod_t *, p->vModels, pMod, i ) { // parse the model if ( !Io_MvParseLineModel( pMod, pMod->pName ) ) @@ -681,13 +712,22 @@ static int Io_MvReadInterfaces( Io_MvMan_t * p ) return 0; } // parse the inputs - Vec_PtrForEachEntry( pMod->vInputs, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vInputs, pLine, k ) if ( !Io_MvParseLineInputs( pMod, pLine ) ) return 0; // parse the outputs - Vec_PtrForEachEntry( pMod->vOutputs, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vOutputs, pLine, k ) if ( !Io_MvParseLineOutputs( pMod, pLine ) ) return 0; + // parse the constraints + nOutsOld = Abc_NtkPoNum(pMod->pNtk); + Vec_PtrForEachEntry( char *, pMod->vConstrs, pLine, k ) + if ( !Io_MvParseLineConstrs( pMod, pLine ) ) + return 0; + pMod->pNtk->nConstrs = Abc_NtkPoNum(pMod->pNtk) - nOutsOld; + Vec_PtrForEachEntry( char *, pMod->vLtlProperties, pLine, k ) + if ( !Io_MvParseLineLtlProperty( pMod, pLine ) ) + return 0; } return 1; } @@ -711,13 +751,13 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) char * pLine; int i, k; // iterate through the models - Vec_PtrForEachEntry( p->vModels, pMod, i ) + Vec_PtrForEachEntry( Io_MvMod_t *, p->vModels, pMod, i ) { // check if there any MV lines if ( Vec_PtrSize(pMod->vMvs) > 0 ) Abc_NtkStartMvVars( pMod->pNtk ); // parse the mv lines - Vec_PtrForEachEntry( pMod->vMvs, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vMvs, pLine, k ) if ( !Io_MvParseLineMv( pMod, pLine ) ) return NULL; // if reset lines are used there should be the same number of them as latches @@ -733,33 +773,37 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) if ( p->fUseReset ) pMod->pResetLatch = Io_ReadCreateResetLatch( pMod->pNtk, p->fBlifMv ); } + // parse the flops + Vec_PtrForEachEntry( char *, pMod->vFlops, pLine, k ) + if ( !Io_MvParseLineFlop( pMod, pLine ) ) + return NULL; // parse the latches - Vec_PtrForEachEntry( pMod->vLatches, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vLatches, pLine, k ) if ( !Io_MvParseLineLatch( pMod, pLine ) ) return NULL; // parse the reset lines if ( p->fUseReset ) - Vec_PtrForEachEntry( pMod->vResets, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vResets, pLine, k ) if ( !Io_MvParseLineNamesMv( pMod, pLine, 1 ) ) return NULL; // parse the nodes if ( p->fBlifMv ) { - Vec_PtrForEachEntry( pMod->vNames, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vNames, pLine, k ) if ( !Io_MvParseLineNamesMv( pMod, pLine, 0 ) ) return NULL; } else { - Vec_PtrForEachEntry( pMod->vNames, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vNames, pLine, k ) if ( !Io_MvParseLineNamesBlif( pMod, pLine ) ) return NULL; - Vec_PtrForEachEntry( pMod->vShorts, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vShorts, pLine, k ) if ( !Io_MvParseLineShortBlif( pMod, pLine ) ) return NULL; } // parse the subcircuits - Vec_PtrForEachEntry( pMod->vSubckts, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vSubckts, pLine, k ) if ( !Io_MvParseLineSubckt( pMod, pLine ) ) return NULL; @@ -768,7 +812,7 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) { if ( pMod->pNtk->ntkFunc == ABC_FUNC_SOP ) { - Extra_MmFlexStop( pMod->pNtk->pManFunc ); + Extra_MmFlexStop( (Extra_MmFlex_t *)pMod->pNtk->pManFunc ); pMod->pNtk->pManFunc = NULL; pMod->pNtk->ntkFunc = ABC_FUNC_BLACKBOX; } @@ -786,7 +830,7 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) pObj->pNext = (Abc_Obj_t *)(ABC_PTRINT_T)k; // derive register pMod->pNtk->vOnehots = Vec_PtrAlloc( Vec_PtrSize(pMod->vOnehots) ); - Vec_PtrForEachEntry( pMod->vOnehots, pLine, k ) + Vec_PtrForEachEntry( char *, pMod->vOnehots, pLine, k ) { vLine = Io_MvParseLineOnehot( pMod, pLine ); if ( vLine == NULL ) @@ -799,7 +843,7 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) pObj->pNext = NULL; // print the result printf( "Parsed %d groups of 1-hot registers: { ", Vec_PtrSize(pMod->pNtk->vOnehots) ); - Vec_PtrForEachEntry( pMod->pNtk->vOnehots, vLine, k ) + Vec_PtrForEachEntry( Vec_Int_t *, pMod->pNtk->vOnehots, vLine, k ) printf( "%d ", Vec_IntSize(vLine) ); printf( "}\n" ); printf( "The total number of 1-hot registers = %d. (%.2f %%)\n", @@ -812,6 +856,12 @@ static Abc_Lib_t * Io_MvParse( Io_MvMan_t * p ) printf( "One-hotness condition is written into file \"%s\".\n", pFileName ); } } + if ( Vec_PtrSize(pMod->vFlops) ) + { + printf( "Warning: The parser converted %d .flop lines into .latch lines\n", Vec_PtrSize(pMod->vFlops) ); + printf( "(information about set, reset, enable of the flops may be lost).\n" ); + } + } if ( p->nNDnodes ) // printf( "Warning: The parser added %d PIs to replace non-deterministic nodes.\n", p->nNDnodes ); @@ -838,7 +888,7 @@ static int Io_MvParseLineModel( Io_MvMod_t * p, char * pLine ) Vec_Ptr_t * vTokens = p->pMan->vTokens; char * pToken, * pPivot; Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); - pToken = Vec_PtrEntry( vTokens, 0 ); + pToken = (char *)Vec_PtrEntry( vTokens, 0 ); assert( !strcmp(pToken, "model") ); if ( Vec_PtrSize(vTokens) != 2 ) { @@ -854,7 +904,7 @@ static int Io_MvParseLineModel( Io_MvMod_t * p, char * pLine ) // for ( pPivot = pToken = Vec_PtrEntry(vTokens, 1); *pToken; pToken++ ) // if ( *pToken == '/' || *pToken == '\\' ) // pPivot = pToken+1; - pPivot = pToken = Vec_PtrEntry(vTokens, 1); + pPivot = pToken = (char *)Vec_PtrEntry(vTokens, 1); p->pNtk->pName = Extra_UtilStrsav( pPivot ); return 1; } @@ -876,9 +926,9 @@ static int Io_MvParseLineInputs( Io_MvMod_t * p, char * pLine ) char * pToken; int i; Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); - pToken = Vec_PtrEntry(vTokens, 0); + pToken = (char *)Vec_PtrEntry(vTokens, 0); assert( !strcmp(pToken, "inputs") ); - Vec_PtrForEachEntryStart( vTokens, pToken, i, 1 ) + Vec_PtrForEachEntryStart( char *, vTokens, pToken, i, 1 ) Io_ReadCreatePi( p->pNtk, pToken ); return 1; } @@ -900,15 +950,82 @@ static int Io_MvParseLineOutputs( Io_MvMod_t * p, char * pLine ) char * pToken; int i; Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); - pToken = Vec_PtrEntry(vTokens, 0); + pToken = (char *)Vec_PtrEntry(vTokens, 0); assert( !strcmp(pToken, "outputs") ); - Vec_PtrForEachEntryStart( vTokens, pToken, i, 1 ) + Vec_PtrForEachEntryStart( char *, vTokens, pToken, i, 1 ) Io_ReadCreatePo( p->pNtk, pToken ); return 1; } /**Function************************************************************* + Synopsis [Parses the outputs line.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +static int Io_MvParseLineConstrs( Io_MvMod_t * p, char * pLine ) +{ + Vec_Ptr_t * vTokens = p->pMan->vTokens; + char * pToken; + int i; + Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); + pToken = (char *)Vec_PtrEntry(vTokens, 0); + assert( !strcmp(pToken, "constraint") ); + Vec_PtrForEachEntryStart( char *, vTokens, pToken, i, 1 ) + Io_ReadCreatePo( p->pNtk, pToken ); + return 1; +} + +/**Function************************************************************* + + Synopsis [Parses the LTL property line.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +static int Io_MvParseLineLtlProperty( Io_MvMod_t * p, char * pLine ) +{ + int i, j; + int quoteBegin, quoteEnd; + char keyWordLtlFormula[11]; + char *actualLtlFormula; + + //checking if the line begins with the keyword "ltlformula" and + //progressing the pointer forword + for( i=0; i<10; i++ ) + keyWordLtlFormula[i] = pLine[i]; + quoteBegin = i; + keyWordLtlFormula[10] = '\0'; + assert( strcmp( "ltlformula", keyWordLtlFormula ) == 0 ); + while( pLine[i] != '"' ) + i++; + quoteBegin = i; + i = strlen( pLine ); + while( pLine[i] != '"' ) + i--; + quoteEnd = i; + actualLtlFormula = (char *)malloc( sizeof(char) * (quoteEnd - quoteBegin) ); + //printf("\nThe input ltl formula = "); + for( i = quoteBegin + 1, j = 0; i<quoteEnd; i++, j++ ) + //printf("%c", pLine[i] ); + actualLtlFormula[j] = pLine[i]; + actualLtlFormula[j] = '\0'; + Vec_PtrPush( vGlobalLtlArray, actualLtlFormula ); + return 1; +} + + +/**Function************************************************************* + Synopsis [Parses the latches line.] Description [] @@ -925,7 +1042,7 @@ static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ) char * pToken; int Init; Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); - pToken = Vec_PtrEntry(vTokens,0); + pToken = (char *)Vec_PtrEntry(vTokens,0); assert( !strcmp(pToken, "latch") ); if ( Vec_PtrSize(vTokens) < 3 ) { @@ -935,7 +1052,7 @@ static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ) // create latch if ( p->pResetLatch == NULL ) { - pObj = Io_ReadCreateLatch( p->pNtk, Vec_PtrEntry(vTokens,1), Vec_PtrEntry(vTokens,2) ); + pObj = Io_ReadCreateLatch( p->pNtk, (char *)Vec_PtrEntry(vTokens,1), (char *)Vec_PtrEntry(vTokens,2) ); // get initial value if ( p->pMan->fBlifMv ) Abc_LatchSetInit0( pObj ); @@ -945,7 +1062,7 @@ static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ) printf( "Warning: Line %d has .latch directive with unrecognized entries (the total of %d entries).\n", Io_MvGetLine(p->pMan, pToken), Vec_PtrSize(vTokens) ); if ( Vec_PtrSize(vTokens) > 3 ) - Init = atoi( Vec_PtrEntryLast(vTokens) ); + Init = atoi( (char *)Vec_PtrEntryLast(vTokens) ); else Init = 2; if ( Init < 0 || Init > 2 ) @@ -964,11 +1081,11 @@ static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ) else { // get the net corresponding to the output of the latch - pNet = Abc_NtkFindOrCreateNet( p->pNtk, Vec_PtrEntry(vTokens,2) ); + pNet = Abc_NtkFindOrCreateNet( p->pNtk, (char *)Vec_PtrEntry(vTokens,2) ); // get the net corresponding to the latch output (feeding into reset MUX) pNet = Abc_NtkFindOrCreateNet( p->pNtk, Abc_ObjNameSuffix(pNet, "_out") ); // create latch - pObj = Io_ReadCreateLatch( p->pNtk, Vec_PtrEntry(vTokens,1), Abc_ObjName(pNet) ); + pObj = Io_ReadCreateLatch( p->pNtk, (char *)Vec_PtrEntry(vTokens,1), Abc_ObjName(pNet) ); // Abc_LatchSetInit0( pObj ); Abc_LatchSetInit0( pObj ); } @@ -977,6 +1094,81 @@ static int Io_MvParseLineLatch( Io_MvMod_t * p, char * pLine ) /**Function************************************************************* + Synopsis [Parses the latches line.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +static int Io_MvParseLineFlop( Io_MvMod_t * p, char * pLine ) +{ + Vec_Ptr_t * vTokens = p->pMan->vTokens; + Abc_Obj_t * pObj; + char * pToken, * pOutput, * pInput; + int i, Init = 2; + assert( !p->pMan->fBlifMv ); + Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); + pToken = (char *)Vec_PtrEntry(vTokens,0); + assert( !strcmp(pToken, "flop") ); + // get flop output + Vec_PtrForEachEntry( char *, vTokens, pToken, i ) + if ( pToken[0] == 'Q' && pToken[1] == '=' ) + break; + if ( i == Vec_PtrSize(vTokens) ) + { + sprintf( p->pMan->sError, "Line %d: Cannot find flop output.", Io_MvGetLine(p->pMan, (char *)Vec_PtrEntry(vTokens,0)) ); + return 0; + } + pOutput = pToken+2; + // get flop input + Vec_PtrForEachEntry( char *, vTokens, pToken, i ) + if ( pToken[0] == 'D' && pToken[1] == '=' ) + break; + if ( i == Vec_PtrSize(vTokens) ) + { + sprintf( p->pMan->sError, "Line %d: Cannot find flop input.", Io_MvGetLine(p->pMan, (char *)Vec_PtrEntry(vTokens,0)) ); + return 0; + } + pInput = pToken+2; + // create latch + pObj = Io_ReadCreateLatch( p->pNtk, pInput, pOutput ); + // get the init value + Vec_PtrForEachEntry( char *, vTokens, pToken, i ) + { + if ( !strncmp( pToken, "init=", 5 ) ) + { + Init = 0; + if ( pToken[5] == '1' ) + Init = 1; + else if ( pToken[5] == '2' ) + Init = 2; + else if ( pToken[5] != '0' ) + { + sprintf( p->pMan->sError, "Line %d: Cannot read flop init value %s.", Io_MvGetLine(p->pMan, pToken), pToken ); + return 0; + } + break; + } + } + if ( Init < 0 || Init > 2 ) + { + sprintf( p->pMan->sError, "Line %d: Initial state of the flop is incorrect \"%s\".", Io_MvGetLine(p->pMan, pToken), (char*)Vec_PtrEntry(vTokens,3) ); + return 0; + } + if ( Init == 0 ) + Abc_LatchSetInit0( pObj ); + else if ( Init == 1 ) + Abc_LatchSetInit1( pObj ); + else // if ( Init == 2 ) + Abc_LatchSetInitDc( pObj ); + return 1; +} + +/**Function************************************************************* + Synopsis [Parses the subckt line.] Description [] @@ -997,11 +1189,19 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine ) // split the line into tokens nEquals = Io_MvCountChars( pLine, '=' ); Io_MvSplitIntoTokensAndClear( vTokens, pLine, '\0', '=' ); - pToken = Vec_PtrEntry(vTokens,0); + pToken = (char *)Vec_PtrEntry(vTokens,0); assert( !strcmp(pToken, "subckt") ); // get the model for this box - pName = Vec_PtrEntry(vTokens,1); + pName = (char *)Vec_PtrEntry(vTokens,1); + // skip instance name for now + for ( pToken = pName; *pToken; pToken++ ) + if ( *pToken == '|' ) + { + *pToken = 0; + break; + } + // find the model pModel = Abc_LibFindModelByName( p->pMan->pDesign, pName ); if ( pModel == NULL ) { @@ -1027,7 +1227,7 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine ) pBox = Abc_NtkCreateWhitebox( p->pNtk ); pBox->pData = pModel; if ( p->pMan->fBlifMv ) - Abc_ObjAssignName( pBox, Vec_PtrEntry(vTokens,2), NULL ); + Abc_ObjAssignName( pBox, (char *)Vec_PtrEntry(vTokens,2), NULL ); // go through formal inputs Abc_NtkForEachPi( pModel, pTerm, i ) { @@ -1047,7 +1247,7 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine ) if ( k == nEquals ) { Abc_Obj_t * pNode = Abc_NtkCreateNode( p->pNtk ); - pNode->pData = Abc_SopRegister( p->pNtk->pManFunc, " 0\n" ); + pNode->pData = Abc_SopRegister( (Extra_MmFlex_t *)p->pNtk->pManFunc, " 0\n" ); pNet = Abc_NtkFindOrCreateNet( p->pNtk, Abc_ObjNameSuffix(pNode, "abc") ); Abc_ObjAddFanin( pNet, pNode ); pTerm = Abc_NtkCreateBi( p->pNtk ); @@ -1110,13 +1310,13 @@ static Vec_Int_t * Io_MvParseLineOnehot( Io_MvMod_t * p, char * pLine ) // split the line into tokens nEquals = Io_MvCountChars( pLine, '=' ); Io_MvSplitIntoTokensAndClear( vTokens, pLine, '\0', '=' ); - pToken = Vec_PtrEntry(vTokens,0); + pToken = (char *)Vec_PtrEntry(vTokens,0); assert( !strcmp(pToken, "onehot") ); // iterate through the register names // vResult = Vec_PtrAlloc( Vec_PtrSize(vTokens) ); vResult = Vec_IntAlloc( Vec_PtrSize(vTokens) ); - Vec_PtrForEachEntryStart( vTokens, pToken, i, 1 ) + Vec_PtrForEachEntryStart( char *, vTokens, pToken, i, 1 ) { // check if this register exists pNet = Abc_NtkFindNet( p->pNtk, pToken ); @@ -1167,7 +1367,7 @@ static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ) // count commas and get the tokens nCommas = Io_MvCountChars( pLine, ',' ); Io_MvSplitIntoTokensAndClear( vTokens, pLine, '\0', ',' ); - pName = Vec_PtrEntry(vTokens,0); + pName = (char *)Vec_PtrEntry(vTokens,0); assert( !strcmp(pName, "mv") ); // get the number of values if ( Vec_PtrSize(vTokens) <= nCommas + 2 ) @@ -1175,7 +1375,7 @@ static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ) sprintf( p->pMan->sError, "Line %d: The number of values in not specified in .mv line.", Io_MvGetLine(p->pMan, pName) ); return 0; } - nValues = atoi( Vec_PtrEntry(vTokens,nCommas+2) ); + nValues = atoi( (char *)Vec_PtrEntry(vTokens,nCommas+2) ); if ( nValues < 2 || nValues > IO_BLIFMV_MAXVALUES ) { sprintf( p->pMan->sError, "Line %d: The number of values (%d) is incorrect (should be >= 2 and <= %d).", @@ -1192,10 +1392,10 @@ static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ) return 0; } // go through variables - pFlex = Abc_NtkMvVarMan( p->pNtk ); + pFlex = (Extra_MmFlex_t *)Abc_NtkMvVarMan( p->pNtk ); for ( i = 0; i <= nCommas; i++ ) { - pName = Vec_PtrEntry( vTokens, i+1 ); + pName = (char *)Vec_PtrEntry( vTokens, i+1 ); pObj = Abc_NtkFindOrCreateNet( p->pNtk, pName ); // allocate variable pVar = (Io_MvVar_t *)Extra_MmFlexEntryFetch( pFlex, sizeof(Io_MvVar_t) ); @@ -1205,7 +1405,7 @@ static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ) if ( Vec_PtrSize(vTokens) > nCommas + 3 ) { pVar->pNames = (char **)Extra_MmFlexEntryFetch( pFlex, sizeof(char *) * nValues ); - Vec_PtrForEachEntryStart( vTokens, pName, k, nCommas + 3 ) + Vec_PtrForEachEntryStart( char *, vTokens, pName, k, nCommas + 3 ) { pVar->pNames[k-(nCommas + 3)] = (char *)Extra_MmFlexEntryFetch( pFlex, strlen(pName) + 1 ); strcpy( pVar->pNames[k-(nCommas + 3)], pName ); @@ -1222,7 +1422,7 @@ static int Io_MvParseLineMv( Io_MvMod_t * p, char * pLine ) for ( k = i+1; k < nValues; k++ ) if ( !strcmp(pVar->pNames[i], pVar->pNames[k]) ) { - pName = Vec_PtrEntry(vTokens,0); + pName = (char *)Vec_PtrEntry(vTokens,0); sprintf( p->pMan->sError, "Line %d: Symbolic value name \"%s\" is repeated in .mv line.", Io_MvGetLine(p->pMan, pName), pVar->pNames[i] ); return 0; @@ -1251,12 +1451,12 @@ static int Io_MvWriteValues( Abc_Obj_t * pNode, Vec_Str_t * vFunc ) Abc_ObjForEachFanin( pNode, pFanin, i ) { sprintf( Buffer, "%d", Abc_ObjMvVarNum(pFanin) ); - Vec_StrAppend( vFunc, Buffer ); + Vec_StrPrintStr( vFunc, Buffer ); Vec_StrPush( vFunc, ' ' ); } // add the node number of values sprintf( Buffer, "%d", Abc_ObjMvVarNum(Abc_ObjFanout0(pNode)) ); - Vec_StrAppend( vFunc, Buffer ); + Vec_StrPrintStr( vFunc, Buffer ); Vec_StrPush( vFunc, '\n' ); return 1; } @@ -1294,18 +1494,18 @@ static int Io_MvParseLiteralMv( Io_MvMod_t * p, Abc_Obj_t * pNode, char * pToken } Vec_StrPush( vFunc, '=' ); sprintf( Buffer, "%d", i ); - Vec_StrAppend( vFunc, Buffer ); + Vec_StrPrintStr( vFunc, Buffer ); Vec_StrPush( vFunc, (char)((iLit == -1)? '\n' : ' ') ); return 1; } // consider regular literal assert( iLit < Abc_ObjFaninNum(pNode) ); pNet = iLit >= 0 ? Abc_ObjFanin(pNode, iLit) : Abc_ObjFanout0(pNode); - pVar = Abc_ObjMvVar( pNet ); + pVar = (Io_MvVar_t *)Abc_ObjMvVar( pNet ); // if the var is absent or has no symbolic values quit if ( pVar == NULL || pVar->pNames == NULL ) { - Vec_StrAppend( vFunc, pToken ); + Vec_StrPrintStr( vFunc, pToken ); Vec_StrPush( vFunc, (char)((iLit == -1)? '\n' : ' ') ); return 1; } @@ -1334,7 +1534,7 @@ static int Io_MvParseLiteralMv( Io_MvMod_t * p, Abc_Obj_t * pNode, char * pToken } // value name is found sprintf( Buffer, "%d", i ); - Vec_StrAppend( vFunc, Buffer ); + Vec_StrPrintStr( vFunc, Buffer ); // update the pointer pCur = pNext - 1; } @@ -1363,12 +1563,12 @@ static char * Io_MvParseTableMv( Io_MvMod_t * p, Abc_Obj_t * pNode, Vec_Ptr_t * // write the number of values // Io_MvWriteValues( pNode, vFunc ); // get the first token - pFirst = Vec_PtrEntry( vTokens2, 0 ); + pFirst = (char *)Vec_PtrEntry( vTokens2, 0 ); if ( pFirst[0] == '.' ) { // write the default literal Vec_StrPush( vFunc, 'd' ); - pToken = Vec_PtrEntry(vTokens2, 1 + iOut); + pToken = (char *)Vec_PtrEntry(vTokens2, 1 + iOut); if ( !Io_MvParseLiteralMv( p, pNode, pToken, vFunc, -1 ) ) return NULL; iStart = 1 + nOutputs; @@ -1381,12 +1581,12 @@ static char * Io_MvParseTableMv( Io_MvMod_t * p, Abc_Obj_t * pNode, Vec_Ptr_t * // input literals for ( i = 0; i < nInputs; i++ ) { - pToken = Vec_PtrEntry( vTokens2, iStart + i ); + pToken = (char *)Vec_PtrEntry( vTokens2, iStart + i ); if ( !Io_MvParseLiteralMv( p, pNode, pToken, vFunc, i ) ) return NULL; } // output literal - pToken = Vec_PtrEntry( vTokens2, iStart + nInputs + iOut ); + pToken = (char *)Vec_PtrEntry( vTokens2, iStart + nInputs + iOut ); if ( !Io_MvParseLiteralMv( p, pNode, pToken, vFunc, -1 ) ) return NULL; // update the counter @@ -1424,7 +1624,7 @@ static Abc_Obj_t * Io_MvParseAddResetCircuit( Io_MvMod_t * p, char * pName ) // duplicate MV variables if ( Abc_NtkMvVar(p->pNtk) ) { - pVar = Abc_ObjMvVar( pOutNet ); + pVar = (Io_MvVar_t *)Abc_ObjMvVar( pOutNet ); Abc_ObjSetMvVar( pData0Net, Abc_NtkMvVarDup(p->pNtk, pVar) ); Abc_ObjSetMvVar( pData1Net, Abc_NtkMvVarDup(p->pNtk, pVar) ); } @@ -1439,10 +1639,10 @@ static Abc_Obj_t * Io_MvParseAddResetCircuit( Io_MvMod_t * p, char * pName ) // int nValues = Abc_ObjMvVarNum(pOutNet); // sprintf( Buffer, "2 %d %d %d\n1 - - =1\n0 - - =2\n", nValues, nValues, nValues ); sprintf( Buffer, "1 - - =1\n0 - - =2\n" ); - pNode->pData = Abc_SopRegister( p->pNtk->pManFunc, Buffer ); + pNode->pData = Abc_SopRegister( (Extra_MmFlex_t *)p->pNtk->pManFunc, Buffer ); } else - pNode->pData = Abc_SopCreateMux( p->pNtk->pManFunc ); + pNode->pData = Abc_SopCreateMux( (Extra_MmFlex_t *)p->pNtk->pManFunc ); // add nets Abc_ObjAddFanin( pNode, pResetLONet ); Abc_ObjAddFanin( pNode, pData1Net ); @@ -1466,7 +1666,7 @@ static int Io_MvParseLineNamesMvOne( Io_MvMod_t * p, Vec_Ptr_t * vTokens, Vec_Pt Abc_Obj_t * pNet, * pNode; char * pName; // get the output name - pName = Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + iOut ); + pName = (char *)Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + iOut ); // create the node if ( fReset ) { @@ -1503,7 +1703,7 @@ static int Io_MvParseLineNamesMvOne( Io_MvMod_t * p, Vec_Ptr_t * vTokens, Vec_Pt pNode->pData = Io_MvParseTableMv( p, pNode, vTokens2, nInputs, nOutputs, iOut ); if ( pNode->pData == NULL ) return 0; - pNode->pData = Abc_SopRegister( p->pNtk->pManFunc, pNode->pData ); + pNode->pData = Abc_SopRegister( (Extra_MmFlex_t *)p->pNtk->pManFunc, (char *)pNode->pData ); //printf( "Finished parsing node \"%s\" with table:\n%s\n", pName, pNode->pData ); return 1; } @@ -1537,9 +1737,9 @@ static int Io_MvParseLineNamesMv( Io_MvMod_t * p, char * pLine, int fReset ) // split names line into tokens Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); if ( fReset ) - assert( !strcmp(Vec_PtrEntry(vTokens,0), "r") || !strcmp(Vec_PtrEntry(vTokens,0), "reset") ); + assert( !strcmp((char *)Vec_PtrEntry(vTokens,0), "r") || !strcmp((char *)Vec_PtrEntry(vTokens,0), "reset") ); else - assert( !strcmp(Vec_PtrEntry(vTokens,0), "names") || !strcmp(Vec_PtrEntry(vTokens,0), "table") ); + assert( !strcmp((char *)Vec_PtrEntry(vTokens,0), "names") || !strcmp((char *)Vec_PtrEntry(vTokens,0), "table") ); // find the number of inputs and outputs nInputs = Vec_PtrSize(vTokens) - 2; nOutputs = 1; @@ -1553,9 +1753,9 @@ static int Io_MvParseLineNamesMv( Io_MvMod_t * p, char * pLine, int fReset ) } } // split table into tokens - pName = Vec_PtrEntryLast( vTokens ); + pName = (char *)Vec_PtrEntryLast( vTokens ); Io_MvSplitIntoTokensMv( vTokens2, pName + strlen(pName) ); - pFirst = Vec_PtrEntry( vTokens2, 0 ); + pFirst = (char *)Vec_PtrEntry( vTokens2, 0 ); if ( pFirst[0] == '.' ) { assert( pFirst[1] == 'd' ); @@ -1576,7 +1776,7 @@ static int Io_MvParseLineNamesMv( Io_MvMod_t * p, char * pLine, int fReset ) // add the outputs to the PIs for ( i = 0; i < nOutputs; i++ ) { - pName = Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + i ); + pName = (char *)Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + i ); // get the net corresponding to this node pNet = Abc_NtkFindOrCreateNet(p->pNtk, pName); if ( fReset ) @@ -1625,19 +1825,19 @@ static char * Io_MvParseTableBlif( Io_MvMod_t * p, char * pTable, int nFanins ) // get the tokens Io_MvSplitIntoTokens( vTokens, pTable, '.' ); if ( Vec_PtrSize(vTokens) == 0 ) - return Abc_SopCreateConst0( p->pNtk->pManFunc ); + return Abc_SopCreateConst0( (Extra_MmFlex_t *)p->pNtk->pManFunc ); if ( Vec_PtrSize(vTokens) == 1 ) { - pOutput = Vec_PtrEntry( vTokens, 0 ); + pOutput = (char *)Vec_PtrEntry( vTokens, 0 ); c = pOutput[0]; if ( (c!='0'&&c!='1'&&c!='x'&&c!='n') || pOutput[1] ) { sprintf( p->pMan->sError, "Line %d: Constant table has wrong output value \"%s\".", Io_MvGetLine(p->pMan, pOutput), pOutput ); return NULL; } - return pOutput[0] == '0' ? Abc_SopCreateConst0(p->pNtk->pManFunc) : Abc_SopCreateConst1(p->pNtk->pManFunc); + return pOutput[0] == '0' ? Abc_SopCreateConst0((Extra_MmFlex_t *)p->pNtk->pManFunc) : Abc_SopCreateConst1((Extra_MmFlex_t *)p->pNtk->pManFunc); } - pProduct = Vec_PtrEntry( vTokens, 0 ); + pProduct = (char *)Vec_PtrEntry( vTokens, 0 ); if ( Vec_PtrSize(vTokens) % 2 == 1 ) { sprintf( p->pMan->sError, "Line %d: Table has odd number of tokens (%d).", Io_MvGetLine(p->pMan, pProduct), Vec_PtrSize(vTokens) ); @@ -1647,8 +1847,8 @@ static char * Io_MvParseTableBlif( Io_MvMod_t * p, char * pTable, int nFanins ) Vec_StrClear( vFunc ); for ( i = 0; i < Vec_PtrSize(vTokens)/2; i++ ) { - pProduct = Vec_PtrEntry( vTokens, 2*i + 0 ); - pOutput = Vec_PtrEntry( vTokens, 2*i + 1 ); + pProduct = (char *)Vec_PtrEntry( vTokens, 2*i + 0 ); + pOutput = (char *)Vec_PtrEntry( vTokens, 2*i + 1 ); if ( strlen(pProduct) != (unsigned)nFanins ) { sprintf( p->pMan->sError, "Line %d: Cube \"%s\" has size different from the fanin count (%d).", Io_MvGetLine(p->pMan, pProduct), pProduct, nFanins ); @@ -1668,7 +1868,7 @@ static char * Io_MvParseTableBlif( Io_MvMod_t * p, char * pTable, int nFanins ) return NULL; } // parse one product - Vec_StrAppend( vFunc, pProduct ); + Vec_StrPrintStr( vFunc, pProduct ); Vec_StrPush( vFunc, ' ' ); Vec_StrPush( vFunc, pOutput[0] ); Vec_StrPush( vFunc, '\n' ); @@ -1696,11 +1896,11 @@ static int Io_MvParseLineNamesBlif( Io_MvMod_t * p, char * pLine ) assert( !p->pMan->fBlifMv ); Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); // parse the mapped node - if ( !strcmp(Vec_PtrEntry(vTokens,0), "gate") ) + if ( !strcmp((char *)Vec_PtrEntry(vTokens,0), "gate") ) return Io_MvParseLineGateBlif( p, vTokens ); // parse the regular name line - assert( !strcmp(Vec_PtrEntry(vTokens,0), "names") ); - pName = Vec_PtrEntryLast( vTokens ); + assert( !strcmp((char *)Vec_PtrEntry(vTokens,0), "names") ); + pName = (char *)Vec_PtrEntryLast( vTokens ); pNet = Abc_NtkFindOrCreateNet( p->pNtk, pName ); if ( Abc_ObjFaninNum(pNet) > 0 ) { @@ -1713,7 +1913,7 @@ static int Io_MvParseLineNamesBlif( Io_MvMod_t * p, char * pLine ) pNode->pData = Io_MvParseTableBlif( p, pName + strlen(pName), Abc_ObjFaninNum(pNode) ); if ( pNode->pData == NULL ) return 0; - pNode->pData = Abc_SopRegister( p->pNtk->pManFunc, pNode->pData ); + pNode->pData = Abc_SopRegister( (Extra_MmFlex_t *)p->pNtk->pManFunc, (char *)pNode->pData ); return 1; } @@ -1737,12 +1937,12 @@ static int Io_MvParseLineShortBlif( Io_MvMod_t * p, char * pLine ) Io_MvSplitIntoTokens( vTokens, pLine, '\0' ); if ( Vec_PtrSize(vTokens) != 3 ) { - sprintf( p->pMan->sError, "Line %d: Expecting three entries in the .short line.", Io_MvGetLine(p->pMan, Vec_PtrEntry(vTokens,0)) ); + sprintf( p->pMan->sError, "Line %d: Expecting three entries in the .short line.", Io_MvGetLine(p->pMan, (char *)Vec_PtrEntry(vTokens,0)) ); return 0; } // parse the regular name line - assert( !strcmp(Vec_PtrEntry(vTokens,0), "short") ); - pName = Vec_PtrEntryLast( vTokens ); + assert( !strcmp((char *)Vec_PtrEntry(vTokens,0), "short") ); + pName = (char *)Vec_PtrEntryLast( vTokens ); pNet = Abc_NtkFindOrCreateNet( p->pNtk, pName ); if ( Abc_ObjFaninNum(pNet) > 0 ) { @@ -1752,7 +1952,7 @@ static int Io_MvParseLineShortBlif( Io_MvMod_t * p, char * pLine ) // create fanins pNode = Io_ReadCreateNode( p->pNtk, pName, (char **)(vTokens->pArray + 1), 1 ); // parse the table of this node - pNode->pData = Abc_SopRegister( p->pNtk->pManFunc, "1 1\n" ); + pNode->pData = Abc_SopRegister( (Extra_MmFlex_t *)p->pNtk->pManFunc, "1 1\n" ); return 1; } @@ -1774,7 +1974,7 @@ Io_MvVar_t * Abc_NtkMvVarDup( Abc_Ntk_t * pNtk, Io_MvVar_t * pVar ) int i; if ( pVar == NULL ) return NULL; - pFlex = Abc_NtkMvVarMan( pNtk ); + pFlex = (Extra_MmFlex_t *)Abc_NtkMvVarMan( pNtk ); assert( pFlex != NULL ); pVarDup = (Io_MvVar_t *)Extra_MmFlexEntryFetch( pFlex, sizeof(Io_MvVar_t) ); pVarDup->nValues = pVar->nValues; @@ -1790,10 +1990,14 @@ Io_MvVar_t * Abc_NtkMvVarDup( Abc_Ntk_t * pNtk, Io_MvVar_t * pVar ) return pVarDup; } +ABC_NAMESPACE_IMPL_END #include "mio.h" #include "main.h" +ABC_NAMESPACE_IMPL_START + + /**Function************************************************************* Synopsis [] @@ -1835,10 +2039,10 @@ static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ) char ** ppNames, * pName; int i, nNames; - pName = vTokens->pArray[0]; + pName = (char *)vTokens->pArray[0]; // check that the library is available - pGenlib = Abc_FrameReadLibGen(); + pGenlib = (Mio_Library_t *)Abc_FrameReadLibGen(); if ( pGenlib == NULL ) { sprintf( p->pMan->sError, "Line %d: The current library is not available.", Io_MvGetLine(p->pMan, pName) ); @@ -1853,7 +2057,7 @@ static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ) } // get the gate - pGate = Mio_LibraryReadGateByName( pGenlib, vTokens->pArray[1] ); + pGate = Mio_LibraryReadGateByName( pGenlib, (char *)vTokens->pArray[1] ); if ( pGate == NULL ) { sprintf( p->pMan->sError, "Line %d: Cannot find gate \"%s\" in the library.", Io_MvGetLine(p->pMan, pName), (char*)vTokens->pArray[1] ); @@ -1865,7 +2069,7 @@ static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ) { assert( p->pNtk->ntkFunc == ABC_FUNC_SOP ); p->pNtk->ntkFunc = ABC_FUNC_MAP; - Extra_MmFlexStop( p->pNtk->pManFunc ); + Extra_MmFlexStop( (Extra_MmFlex_t *)p->pNtk->pManFunc ); p->pNtk->pManFunc = pGenlib; } @@ -1879,7 +2083,7 @@ static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ) // remove the formal parameter names for ( i = 2; i < vTokens->nSize; i++ ) { - vTokens->pArray[i] = Io_ReadBlifCleanName( vTokens->pArray[i] ); + vTokens->pArray[i] = Io_ReadBlifCleanName( (char *)vTokens->pArray[i] ); if ( vTokens->pArray[i] == NULL ) { sprintf( p->pMan->sError, "Line %d: Invalid gate input assignment.", Io_MvGetLine(p->pMan, pName) ); @@ -1902,3 +2106,5 @@ static int Io_MvParseLineGateBlif( Io_MvMod_t * p, Vec_Ptr_t * vTokens ) //////////////////////////////////////////////////////////////////////// +ABC_NAMESPACE_IMPL_END + |