33#define IO_BLIFMV_MAXVALUES 256
102static char * Io_MvLoadFile(
char * pFileName );
106static int Io_MvParseLineModel(
Io_MvMod_t *
p,
char * pLine );
107static int Io_MvParseLineInputs(
Io_MvMod_t *
p,
char * pLine );
108static int Io_MvParseLineOutputs(
Io_MvMod_t *
p,
char * pLine );
109static int Io_MvParseLineConstrs(
Io_MvMod_t *
p,
char * pLine );
110static int Io_MvParseLineLatch(
Io_MvMod_t *
p,
char * pLine );
111static int Io_MvParseLineFlop(
Io_MvMod_t *
p,
char * pLine );
112static int Io_MvParseLineSubckt(
Io_MvMod_t *
p,
char * pLine );
114static int Io_MvParseLineMv(
Io_MvMod_t *
p,
char * pLine );
115static int Io_MvParseLineNamesMv(
Io_MvMod_t *
p,
char * pLine,
int fReset );
116static int Io_MvParseLineNamesBlif(
Io_MvMod_t *
p,
char * pLine );
117static int Io_MvParseLineShortBlif(
Io_MvMod_t *
p,
char * pLine );
118static int Io_MvParseLineLtlProperty(
Io_MvMod_t *
p,
char * pLine );
122static int Io_MvCharIsSpace(
char s ) {
return s ==
' ' || s ==
'\t' || s ==
'\r' || s ==
'\n'; }
123static int Io_MvCharIsMvSymb(
char s ) {
return s ==
'(' || s ==
')' || s ==
'{' || s ==
'}' || s ==
'-' || s ==
',' || s ==
'!'; }
153 pFile = fopen( pFileName,
"rb" );
156 printf(
"Io_ReadBlifMv(): The file is unavailable (absent or open).\n" );
163 p->fBlifMv = fBlifMv;
165 p->pFileName = pFileName;
166 p->pBuffer = Io_MvLoadFile( pFileName );
167 if (
p->pBuffer == NULL )
178 p->pDesign->pManFunc = NULL;
180 Io_MvReadPreparse(
p );
182 if ( Io_MvReadInterfaces(
p ) )
183 pDesign = Io_MvParse(
p );
185 fprintf( stdout,
"%s\n",
p->sError );
187 if ( pDesign == NULL )
198 printf(
"Io_ReadBlifMv: The network check has failed for model %s.\n", pNtk->
pName );
208 if ( Vec_PtrSize(pDesign->
vModules) > 1 )
216 Vec_PtrRemove(pDesign->
vModules, pExdc);
228 printf(
"Warning: The design has %d root-level modules. The first one (%s) will be used.\n",
237 if ( Vec_PtrSize(pDesign->
vModules) == 1 )
248 if ( pNtk->
pSpec == NULL )
274 p->vLines = Vec_PtrAlloc( 512 );
275 p->vModels = Vec_PtrAlloc( 512 );
276 p->vTokens = Vec_PtrAlloc( 512 );
277 p->vTokens2 = Vec_PtrAlloc( 512 );
278 p->vFunc = Vec_StrAlloc( 512 );
302 Vec_PtrFree(
p->vLines );
306 Io_MvModFree( pMod );
307 Vec_PtrFree(
p->vModels );
309 Vec_PtrFree(
p->vTokens );
310 Vec_PtrFree(
p->vTokens2 );
311 Vec_StrFree(
p->vFunc );
331 p->vInputs = Vec_PtrAlloc( 512 );
332 p->vOutputs = Vec_PtrAlloc( 512 );
333 p->vLatches = Vec_PtrAlloc( 512 );
334 p->vFlops = Vec_PtrAlloc( 512 );
335 p->vResets = Vec_PtrAlloc( 512 );
336 p->vNames = Vec_PtrAlloc( 512 );
337 p->vSubckts = Vec_PtrAlloc( 512 );
338 p->vShorts = Vec_PtrAlloc( 512 );
339 p->vOnehots = Vec_PtrAlloc( 512 );
340 p->vMvs = Vec_PtrAlloc( 512 );
341 p->vConstrs = Vec_PtrAlloc( 512 );
342 p->vLtlProperties = Vec_PtrAlloc( 512 );
361 Vec_PtrFree(
p->vLtlProperties );
362 Vec_PtrFree(
p->vInputs );
363 Vec_PtrFree(
p->vOutputs );
364 Vec_PtrFree(
p->vLatches );
365 Vec_PtrFree(
p->vFlops );
366 Vec_PtrFree(
p->vResets );
367 Vec_PtrFree(
p->vNames );
368 Vec_PtrFree(
p->vSubckts );
369 Vec_PtrFree(
p->vShorts );
370 Vec_PtrFree(
p->vOnehots );
371 Vec_PtrFree(
p->vMvs );
372 Vec_PtrFree(
p->vConstrs );
389static int Io_MvCountChars(
char * pLine,
char Char )
393 for ( pCur = pLine; *pCur; pCur++ )
410static char * Io_MvFindArrow(
char * pLine )
413 for ( pCur = pLine; *(pCur+1); pCur++ )
414 if ( *pCur ==
'-' && *(pCur+1) ==
'>' )
434static void Io_MvCollectTokens(
Vec_Ptr_t * vTokens,
char * pInput,
char * pOutput )
437 Vec_PtrClear( vTokens );
438 for ( pCur = pInput; pCur < pOutput; pCur++ )
442 Vec_PtrPush( vTokens, pCur );
458static void Io_MvSplitIntoTokens(
Vec_Ptr_t * vTokens,
char * pLine,
char Stop )
462 for ( pCur = pLine; *pCur != Stop; pCur++ )
463 if ( Io_MvCharIsSpace(*pCur) )
466 Io_MvCollectTokens( vTokens, pLine, pCur );
480static void Io_MvSplitIntoTokensMv(
Vec_Ptr_t * vTokens,
char * pLine )
484 for ( pCur = pLine; *pCur !=
'.' || *(pCur+1) ==
'd'; pCur++ )
485 if ( Io_MvCharIsSpace(*pCur) )
488 Io_MvCollectTokens( vTokens, pLine, pCur );
502static void Io_MvSplitIntoTokensAndClear(
Vec_Ptr_t * vTokens,
char * pLine,
char Stop,
char Char )
506 for ( pCur = pLine; *pCur != Stop; pCur++ )
507 if ( Io_MvCharIsSpace(*pCur) || *pCur ==
Char )
510 Io_MvCollectTokens( vTokens, pLine, pCur );
524static int Io_MvGetLine(
Io_MvMan_t *
p,
char * pToken )
529 if ( pToken < pLine )
557 int bzError, RetValue;
561 pFile = fopen( pFileName,
"rb" );
564 Abc_Print( -1,
"Io_MvLoadFileBz2(): The file is unavailable (absent or open).\n" );
568 if (bzError !=
BZ_OK) {
569 Abc_Print( -1,
"Io_MvLoadFileBz2(): BZ2_bzReadOpen() failed with error %d.\n",bzError );
579 }
while (bzError ==
BZ_OK);
585 p = pContents =
ABC_ALLOC(
char, nFileSize + 10 );
593 }
while((
buf = pNext));
598 nFileSize = ftell( pFile );
599 if ( nFileSize == 0 )
601 Abc_Print( -1,
"Io_MvLoadFileBz2(): The file is empty.\n" );
604 pContents =
ABC_ALLOC(
char, nFileSize + 10 );
606 RetValue = fread( pContents, nFileSize, 1, pFile );
609 Abc_Print( -1,
"Io_MvLoadFileBz2(): Unable to read the compressed BLIF.\n" );
615 strcpy( pContents + nFileSize,
"\n.end\n" );
616 *pnFileSize = nFileSize;
631static char * Io_MvLoadFileGz(
char * pFileName,
long * pnFileSize )
633 const int READ_BLOCK_SIZE = 100000;
636 long amtRead, readBlock, nFileSize = READ_BLOCK_SIZE;
637 pFile =
gzopen( pFileName,
"rb" );
638 pContents =
ABC_ALLOC(
char, nFileSize );
640 while ((amtRead =
gzread(pFile, pContents + readBlock * READ_BLOCK_SIZE, READ_BLOCK_SIZE)) == READ_BLOCK_SIZE) {
642 nFileSize += READ_BLOCK_SIZE;
643 pContents =
ABC_REALLOC(
char, pContents, nFileSize);
648 nFileSize -= (READ_BLOCK_SIZE - amtRead);
650 *pnFileSize = nFileSize;
665static char * Io_MvLoadFile(
char * pFileName )
674 return Io_MvLoadFileGz( pFileName, &nFileSize );
675 pFile = fopen( pFileName,
"rb" );
678 printf(
"Io_MvLoadFile(): The file is unavailable (absent or open).\n" );
682 nFileSize = ftell( pFile );
683 if ( nFileSize == 0 )
686 printf(
"Io_MvLoadFile(): The file is empty.\n" );
689 pContents =
ABC_ALLOC(
char, nFileSize + 10 );
691 RetValue = fread( pContents, nFileSize, 1, pFile );
695 strcpy( pContents + nFileSize,
"\n.end\n" );
714 char * q, * pNext, * pShort = (
char *)
".short";
int i;
715 for ( q =
p; *q && (pNext =
strstr(q,
".names")); q = pNext ) {
716 for ( i = 0; i < 6; i++ )
717 pNext[i] = pShort[i];
718 while ( *pNext && *pNext++ !=
'\n' );
721 while ( *pNext && *pNext !=
'\n' )
747 char * pCur, * pPrev;
752 Vec_PtrPush(
p->vLines,
p->pBuffer );
753 for ( pCur =
p->pBuffer; *pCur; pCur++ )
761 Vec_PtrPush(
p->vLines, pCur + 1 );
763 else if ( *pCur ==
'#' )
776 for ( pPrev = pCur - 2; pPrev >=
p->pBuffer; pPrev-- )
777 if ( !Io_MvCharIsSpace(*pPrev) )
780 if ( pPrev >=
p->pBuffer && *pPrev ==
'\\' )
782 for ( ; *pPrev; pPrev++ )
788 while ( Io_MvCharIsSpace(*pCur++) );
790 if ( *(pCur-1) !=
'.' )
793 Vec_PtrPush(
p->pLatest->vNames, pCur );
794 else if (
p->fBlifMv && (!
strncmp(pCur,
"def ", 4) || !
strncmp(pCur,
"default ", 8)) )
796 else if ( !
strncmp( pCur,
"ltlformula", 10 ) )
797 Vec_PtrPush(
p->pLatest->vLtlProperties, pCur );
798 else if ( !
strncmp(pCur,
"latch", 5) )
799 Vec_PtrPush(
p->pLatest->vLatches, pCur );
800 else if ( !
strncmp(pCur,
"flop", 4) )
801 Vec_PtrPush(
p->pLatest->vFlops, pCur );
802 else if ( !
strncmp(pCur,
"r ", 2) || !
strncmp(pCur,
"reset ", 6) )
803 Vec_PtrPush(
p->pLatest->vResets, pCur );
804 else if ( !
strncmp(pCur,
"inputs", 6) )
805 Vec_PtrPush(
p->pLatest->vInputs, pCur );
806 else if ( !
strncmp(pCur,
"outputs", 7) )
807 Vec_PtrPush(
p->pLatest->vOutputs, pCur );
808 else if ( !
strncmp(pCur,
"subckt", 6) )
809 Vec_PtrPush(
p->pLatest->vSubckts, pCur );
810 else if ( !
strncmp(pCur,
"short", 5) )
811 Vec_PtrPush(
p->pLatest->vShorts, pCur );
812 else if ( !
strncmp(pCur,
"onehot", 6) )
813 Vec_PtrPush(
p->pLatest->vOnehots, pCur );
814 else if (
p->fBlifMv && !
strncmp(pCur,
"mv", 2) )
815 Vec_PtrPush(
p->pLatest->vMvs, pCur );
816 else if ( !
strncmp(pCur,
"constraint", 10) )
817 Vec_PtrPush(
p->pLatest->vConstrs, pCur );
818 else if ( !
strncmp(pCur,
"blackbox", 8) )
819 p->pLatest->fBlackBox = 1;
820 else if ( !
strncmp(pCur,
"model", 5) )
822 p->pLatest = Io_MvModAlloc();
823 p->pLatest->pName = pCur;
824 p->pLatest->pMan =
p;
826 else if ( !
strncmp(pCur,
"end", 3) )
829 Vec_PtrPush(
p->vModels,
p->pLatest );
832 else if ( !
strncmp(pCur,
"exdc", 4) )
835 fprintf( stdout,
"Warning: The design contains EXDC network.\n" );
837 Vec_PtrPush(
p->vModels,
p->pLatest );
838 p->pLatest = Io_MvModAlloc();
839 p->pLatest->pName = NULL;
840 p->pLatest->pMan =
p;
842 else if ( !
strncmp(pCur,
"attrib", 6) )
844 else if ( !
strncmp(pCur,
"delay", 5) )
846 else if ( !
strncmp(pCur,
"input_", 6) )
848 else if ( !
strncmp(pCur,
"output_", 7) )
850 else if ( !
strncmp(pCur,
"no_merge", 8) )
852 else if ( !
strncmp(pCur,
"wd", 2) )
859 if ( pCur[
strlen(pCur)-1] ==
'\r' )
861 fprintf( stdout,
"Line %d: Skipping line \"%s\".\n", Io_MvGetLine(
p, pCur), pCur );
886 if ( !Io_MvParseLineModel( pMod, pMod->
pName ) )
891 sprintf(
p->sError,
"Line %d: Model %s is defined twice.", Io_MvGetLine(
p, pMod->
pName), pMod->
pName );
896 if ( !Io_MvParseLineInputs( pMod, pLine ) )
900 if ( !Io_MvParseLineOutputs( pMod, pLine ) )
903 nOutsOld = Abc_NtkPoNum(pMod->
pNtk);
905 if ( !Io_MvParseLineConstrs( pMod, pLine ) )
909 if ( !Io_MvParseLineLtlProperty( pMod, pLine ) )
912#ifdef IO_VERBOSE_OUTPUT
913 if ( Vec_PtrSize(
p->vModels) > 1 )
914 printf(
"Parsed %-32s: PI =%6d PO =%6d ND =%8d FF =%6d B =%6d\n",
943#ifdef IO_VERBOSE_OUTPUT
944 if ( Vec_PtrSize(
p->vModels) > 1 )
945 printf(
"Parsing model %s...\n", pMod->
pNtk->
pName );
949 if ( Vec_PtrSize(pMod->
vMvs) > 0 )
953 if ( !Io_MvParseLineMv( pMod, pLine ) )
956 if ( Vec_PtrSize(pMod->
vResets) > 0 )
960 sprintf(
p->sError,
"Line %d: Model %s has different number of latches (%d) and reset nodes (%d).",
970 if ( !Io_MvParseLineFlop( pMod, pLine ) )
974 if ( !Io_MvParseLineLatch( pMod, pLine ) )
979 if ( !Io_MvParseLineNamesMv( pMod, pLine, 1 ) )
985 if ( !Io_MvParseLineNamesMv( pMod, pLine, 0 ) )
991 if ( !Io_MvParseLineNamesBlif( pMod, pLine ) )
994 if ( !Io_MvParseLineShortBlif( pMod, pLine ) )
999 if ( !Io_MvParseLineSubckt( pMod, pLine ) )
1003 if ( Abc_NtkLatchNum(pMod->
pNtk) == 0 && Abc_NtkNodeNum(pMod->
pNtk) == 0 && Abc_NtkBoxNum(pMod->
pNtk) == 0 )
1016 if ( Vec_PtrSize(pMod->
vOnehots) > 0 )
1027 vLine = Io_MvParseLineOnehot( pMod, pLine );
1028 if ( vLine == NULL )
1037 printf(
"Parsed %d groups of 1-hot registers: { ", Vec_PtrSize(pMod->
pNtk->
vOnehots) );
1039 printf(
"%d ", Vec_IntSize(vLine) );
1041 printf(
"The total number of 1-hot registers = %d. (%.2f %%)\n",
1048 printf(
"One-hotness condition is written into file \"%s\".\n", pFileName );
1051 if ( Vec_PtrSize(pMod->
vFlops) )
1053 printf(
"Warning: The parser converted %d .flop lines into .latch lines\n", Vec_PtrSize(pMod->
vFlops) );
1054 printf(
"(information about set, reset, enable of the flops may be lost).\n" );
1060 printf(
"Warning: The parser added %d constant 0 nodes to replace non-deterministic nodes.\n",
p->nNDnodes );
1062 pDesign =
p->pDesign;
1078static int Io_MvParseLineModel(
Io_MvMod_t *
p,
char * pLine )
1081 char * pToken, * pPivot;
1082 if ( pLine == NULL )
1088 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1089 pToken = (
char *)Vec_PtrEntry( vTokens, 0 );
1091 if ( Vec_PtrSize(vTokens) != 2 )
1093 sprintf(
p->pMan->sError,
"Line %d: Model line has %d entries while it should have 2.", Io_MvGetLine(
p->pMan, pToken), Vec_PtrSize(vTokens) );
1098 else if (
p->pMan->fBlifMv )
1105 pPivot = pToken = (
char *)Vec_PtrEntry(vTokens, 1);
1121static int Io_MvParseLineInputs(
Io_MvMod_t *
p,
char * pLine )
1126 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1127 pToken = (
char *)Vec_PtrEntry(vTokens, 0);
1145static
int Io_MvParseLineOutputs(
Io_MvMod_t *
p,
char * pLine )
1150 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1151 pToken = (
char *)Vec_PtrEntry(vTokens, 0);
1169static
int Io_MvParseLineConstrs(
Io_MvMod_t *
p,
char * pLine )
1174 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1175 pToken = (
char *)Vec_PtrEntry(vTokens, 0);
1193static
int Io_MvParseLineLtlProperty(
Io_MvMod_t *
p,
char * pLine )
1196 int quoteBegin, quoteEnd;
1197 char keyWordLtlFormula[11];
1198 char *actualLtlFormula;
1202 for( i=0; i<10; i++ )
1203 keyWordLtlFormula[i] = pLine[i];
1205 keyWordLtlFormula[10] =
'\0';
1206 assert(
strcmp(
"ltlformula", keyWordLtlFormula ) == 0 );
1207 while( pLine[i] !=
'"' )
1211 while( pLine[i] !=
'"' )
1214 actualLtlFormula = (
char *)
malloc(
sizeof(
char) * (quoteEnd - quoteBegin) );
1216 for( i = quoteBegin + 1, j = 0; i<quoteEnd; i++, j++ )
1218 actualLtlFormula[j] = pLine[i];
1219 actualLtlFormula[j] =
'\0';
1236static int Io_MvParseLineLatch(
Io_MvMod_t *
p,
char * pLine )
1242 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1243 pToken = (
char *)Vec_PtrEntry(vTokens,0);
1245 if ( Vec_PtrSize(vTokens) < 3 )
1247 sprintf(
p->pMan->sError,
"Line %d: Latch does not have input name and output name.", Io_MvGetLine(
p->pMan, pToken) );
1251 if (
p->pResetLatch == NULL )
1253 pObj =
Io_ReadCreateLatch(
p->pNtk, (
char *)Vec_PtrEntry(vTokens,1), (
char *)Vec_PtrEntry(vTokens,2) );
1255 if (
p->pMan->fBlifMv )
1256 Abc_LatchSetInit0( pObj );
1259 if ( Vec_PtrSize(vTokens) > 6 )
1260 printf(
"Warning: Line %d has .latch directive with unrecognized entries (the total of %d entries).\n",
1261 Io_MvGetLine(
p->pMan, pToken), Vec_PtrSize(vTokens) );
1262 if ( Vec_PtrSize(vTokens) > 3 )
1263 Init = atoi( (
char *)Vec_PtrEntryLast(vTokens) );
1266 if ( Init < 0 || Init > 3 )
1268 sprintf(
p->pMan->sError,
"Line %d: Initial state of the latch is incorrect \"%s\".", Io_MvGetLine(
p->pMan, pToken), (
char*)Vec_PtrEntry(vTokens,3) );
1272 Abc_LatchSetInit0( pObj );
1273 else if ( Init == 1 )
1274 Abc_LatchSetInit1( pObj );
1276 Abc_LatchSetInitDc( pObj );
1288 Abc_LatchSetInit0( pObj );
1304static int Io_MvParseLineFlop(
Io_MvMod_t *
p,
char * pLine )
1308 char * pToken, * pOutput, * pInput;
1311 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1312 pToken = (
char *)Vec_PtrEntry(vTokens,0);
1316 if ( pToken[0] ==
'Q' && pToken[1] ==
'=' )
1318 if ( i == Vec_PtrSize(vTokens) )
1320 sprintf(
p->pMan->sError,
"Line %d: Cannot find flop output.", Io_MvGetLine(
p->pMan, (
char *)Vec_PtrEntry(vTokens,0)) );
1326 if ( pToken[0] ==
'D' && pToken[1] ==
'=' )
1328 if ( i == Vec_PtrSize(vTokens) )
1330 sprintf(
p->pMan->sError,
"Line %d: Cannot find flop input.", Io_MvGetLine(
p->pMan, (
char *)Vec_PtrEntry(vTokens,0)) );
1339 if ( !
strncmp( pToken,
"init=", 5 ) )
1342 if ( pToken[5] ==
'1' )
1344 else if ( pToken[5] ==
'2' )
1346 else if ( pToken[5] !=
'0' )
1348 sprintf(
p->pMan->sError,
"Line %d: Cannot read flop init value %s.", Io_MvGetLine(
p->pMan, pToken), pToken );
1354 if ( Init < 0 || Init > 2 )
1356 sprintf(
p->pMan->sError,
"Line %d: Initial state of the flop is incorrect \"%s\".", Io_MvGetLine(
p->pMan, pToken), (
char*)Vec_PtrEntry(vTokens,3) );
1360 Abc_LatchSetInit0( pObj );
1361 else if ( Init == 1 )
1362 Abc_LatchSetInit1( pObj );
1364 Abc_LatchSetInitDc( pObj );
1379static int Io_MvParseLineSubckt(
Io_MvMod_t *
p,
char * pLine )
1384 char * pToken, * pName, * pName2, ** ppNames;
1389 nEquals = Io_MvCountChars( pLine,
'=' );
1390 Io_MvSplitIntoTokensAndClear( vTokens, pLine,
'\0',
'=' );
1391 pToken = (
char *)Vec_PtrEntry(vTokens,0);
1396 pName = (
char *)Vec_PtrEntry(vTokens,1);
1398 for ( pToken = pName; *pToken; pToken++ )
1399 if ( *pToken ==
'|' )
1406 if ( pModel == NULL )
1408 sprintf(
p->pMan->sError,
"Line %d: Cannot find the model for subcircuit %s.", Io_MvGetLine(
p->pMan, pToken), pName );
1421 ppNames = (
char **)Vec_PtrArray(vTokens) + 2 +
p->pMan->fBlifMv;
1424 if ( Abc_NtkHasBlackbox(pModel) )
1425 pBox = Abc_NtkCreateBlackbox(
p->pNtk );
1427 pBox = Abc_NtkCreateWhitebox(
p->pNtk );
1428 pBox->
pData = pModel;
1429 if (
p->pMan->fBlifMv )
1438 for ( k = 0; k < nEquals; k++ )
1439 if ( !
strcmp( ppNames[2*(
int)((k+Last)%nEquals)], pName ) )
1441 pName2 = ppNames[2*(int)((k+Last)%nEquals)+1];
1448 sprintf(
p->pMan->sError,
"Line %d: Cannot find PI \"%s\" of the model \"%s\" as a formal input of the subcircuit.",
1449 Io_MvGetLine(
p->pMan, pToken), pName, Abc_NtkName(pModel) );
1453 if ( pName2 == NULL )
1459 pTerm = Abc_NtkCreateBi(
p->pNtk );
1464 assert( pName2 != NULL );
1468 pTerm = Abc_NtkCreateBi(
p->pNtk );
1479 for ( k = 0; k < nEquals; k++ )
1480 if ( !
strcmp( ppNames[2*((k+Last)%nEquals)], pName ) )
1482 pName2 = ppNames[2*((k+Last)%nEquals)+1];
1496 pTerm = Abc_NtkCreateBo(
p->pNtk );
1525 nEquals = Io_MvCountChars( pLine,
'=' );
1526 Io_MvSplitIntoTokensAndClear( vTokens, pLine,
'\0',
'=' );
1527 pToken = (
char *)Vec_PtrEntry(vTokens,0);
1532 vResult = Vec_IntAlloc( Vec_PtrSize(vTokens) );
1539 sprintf(
p->pMan->sError,
"Line %d: Signal with name \"%s\" does not exist in the model \"%s\".",
1540 Io_MvGetLine(
p->pMan, pToken), pToken, Abc_NtkName(
p->pNtk) );
1544 pTerm = Abc_ObjFanin0( pNet );
1545 if ( pTerm == NULL || Abc_ObjFanin0(pTerm) == NULL || !Abc_ObjIsLatch(Abc_ObjFanin0(pTerm)) )
1547 sprintf(
p->pMan->sError,
"Line %d: Signal with name \"%s\" is not a register in the model \"%s\".",
1548 Io_MvGetLine(
p->pMan, pToken), pToken, Abc_NtkName(
p->pNtk) );
1553 Vec_IntPush( vResult, (
int)(ABC_PTRINT_T)Abc_ObjFanin0(pTerm)->pNext );
1555 printf(
"%d", ((
int)(ABC_PTRINT_T)Abc_ObjFanin0(pTerm)->pData)-1 );
1573static int Io_MvParseLineMv(
Io_MvMod_t *
p,
char * pLine )
1580 int nCommas, nValues, i, k;
1582 nCommas = Io_MvCountChars( pLine,
',' );
1583 Io_MvSplitIntoTokensAndClear( vTokens, pLine,
'\0',
',' );
1584 pName = (
char *)Vec_PtrEntry(vTokens,0);
1587 if ( Vec_PtrSize(vTokens) <= nCommas + 2 )
1589 sprintf(
p->pMan->sError,
"Line %d: The number of values in not specified in .mv line.", Io_MvGetLine(
p->pMan, pName) );
1592 nValues = atoi( (
char *)Vec_PtrEntry(vTokens,nCommas+2) );
1595 sprintf(
p->pMan->sError,
"Line %d: The number of values (%d) is incorrect (should be >= 2 and <= %d).",
1600 if ( nValues == 2 && Vec_PtrSize(vTokens) == nCommas + 3 )
1602 if ( Vec_PtrSize(vTokens) > nCommas + 3 && Vec_PtrSize(vTokens) - (nCommas + 3) != nValues )
1604 sprintf(
p->pMan->sError,
"Line %d: Wrong number (%d) of symbolic value names (should be %d).",
1605 Io_MvGetLine(
p->pMan, pName), Vec_PtrSize(vTokens) - (nCommas + 3), nValues );
1610 for ( i = 0; i <= nCommas; i++ )
1612 pName = (
char *)Vec_PtrEntry( vTokens, i+1 );
1619 if ( Vec_PtrSize(vTokens) > nCommas + 3 )
1629 Abc_ObjSetMvVar( pObj, pVar );
1635 for ( i = 0; i < nValues; i++ )
1636 for ( k = i+1; k < nValues; k++ )
1639 pName = (
char *)Vec_PtrEntry(vTokens,0);
1640 sprintf(
p->pMan->sError,
"Line %d: Symbolic value name \"%s\" is repeated in .mv line.",
1641 Io_MvGetLine(
p->pMan, pName), pVar->
pNames[i] );
1667 sprintf( Buffer,
"%d", Abc_ObjMvVarNum(pFanin) );
1668 Vec_StrPrintStr( vFunc, Buffer );
1669 Vec_StrPush( vFunc,
' ' );
1672 sprintf( Buffer,
"%d", Abc_ObjMvVarNum(Abc_ObjFanout0(pNode)) );
1673 Vec_StrPrintStr( vFunc, Buffer );
1674 Vec_StrPush( vFunc,
'\n' );
1694 char * pCur, * pNext;
1697 if ( pToken[0] ==
'=' )
1703 if ( i == Abc_ObjFaninNum(pNode) )
1705 sprintf(
p->pMan->sError,
"Line %d: Node name in the table \"%s\" cannot be found on .names line.",
1706 Io_MvGetLine(
p->pMan, pToken), pToken + 1 );
1709 Vec_StrPush( vFunc,
'=' );
1711 Vec_StrPrintStr( vFunc, Buffer );
1712 Vec_StrPush( vFunc, (
char)((iLit == -1)?
'\n' :
' ') );
1716 assert( iLit < Abc_ObjFaninNum(pNode) );
1717 pNet = iLit >= 0 ? Abc_ObjFanin(pNode, iLit) : Abc_ObjFanout0(pNode);
1720 if ( pVar == NULL || pVar->
pNames == NULL )
1722 Vec_StrPrintStr( vFunc, pToken );
1723 Vec_StrPush( vFunc, (char)((iLit == -1)?
'\n' :
' ') );
1727 for ( pCur = pToken; *pCur; pCur++ )
1729 if ( Io_MvCharIsMvSymb(*pCur) )
1731 Vec_StrPush( vFunc, *pCur );
1735 for ( pNext = pCur+1; *pNext; pNext++ )
1736 if ( Io_MvCharIsMvSymb(*pNext) )
1739 for ( i = 0; i < pVar->
nValues; i++ )
1745 sprintf(
p->pMan->sError,
"Line %d: Cannot find value name \"%s\" among the value names of variable \"%s\".",
1746 Io_MvGetLine(
p->pMan, pToken), pCur,
Abc_ObjName(pNet) );
1751 Vec_StrPrintStr( vFunc, Buffer );
1755 Vec_StrPush( vFunc, (
char)((iLit == -1)?
'\n' :
' ') );
1773 char * pFirst, * pToken;
1776 Vec_StrClear( vFunc );
1780 pFirst = (
char *)Vec_PtrEntry( vTokens2, 0 );
1781 if ( pFirst[0] ==
'.' )
1784 Vec_StrPush( vFunc,
'd' );
1785 pToken = (
char *)Vec_PtrEntry(vTokens2, 1 + iOut);
1786 if ( !Io_MvParseLiteralMv(
p, pNode, pToken, vFunc, -1 ) )
1788 iStart = 1 + nOutputs;
1793 while ( iStart < Vec_PtrSize(vTokens2) )
1796 for ( i = 0; i < nInputs; i++ )
1798 pToken = (
char *)Vec_PtrEntry( vTokens2, iStart + i );
1799 if ( !Io_MvParseLiteralMv(
p, pNode, pToken, vFunc, i ) )
1803 pToken = (
char *)Vec_PtrEntry( vTokens2, iStart + nInputs + iOut );
1804 if ( !Io_MvParseLiteralMv(
p, pNode, pToken, vFunc, -1 ) )
1807 iStart += nInputs + nOutputs;
1809 Vec_StrPush( vFunc,
'\0' );
1810 return Vec_StrArray( vFunc );
1827 Abc_Obj_t * pNode, * pData0Net, * pData1Net, * pResetLONet, * pOutNet;
1830 assert(
p->pResetLatch != NULL );
1832 pResetLONet = Abc_ObjFanout0(Abc_ObjFanout0(
p->pResetLatch));
1839 if ( Abc_NtkMvVar(
p->pNtk) )
1841 pVar = (
Io_MvVar_t *)Abc_ObjMvVar( pOutNet );
1842 Abc_ObjSetMvVar( pData0Net, Abc_NtkMvVarDup(
p->pNtk, pVar) );
1843 Abc_ObjSetMvVar( pData1Net, Abc_NtkMvVarDup(
p->pNtk, pVar) );
1846 pNode = Abc_NtkCreateNode(
p->pNtk );
1850 if (
p->pMan->fBlifMv )
1855 sprintf( Buffer,
"1 - - =1\n0 - - =2\n" );
1878static int Io_MvParseLineNamesMvOne(
Io_MvMod_t *
p,
Vec_Ptr_t * vTokens,
Vec_Ptr_t * vTokens2,
int nInputs,
int nOutputs,
int iOut,
int fReset )
1883 pName = (
char *)Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + iOut );
1890 sprintf(
p->pMan->sError,
"Line %d: Latch with output signal \"%s\" does not exist.", Io_MvGetLine(
p->pMan, pName), pName );
1901 pNet = Io_MvParseAddResetCircuit(
p, pName );
1904 assert( nInputs == Vec_PtrSize(vTokens) - 2 );
1909 if ( Abc_ObjFaninNum(pNet) > 0 )
1911 sprintf(
p->pMan->sError,
"Line %d: Signal \"%s\" is defined more than once.", Io_MvGetLine(
p->pMan, pName), pName );
1914 pNode =
Io_ReadCreateNode(
p->pNtk, pName, (
char **)(vTokens->pArray + 1), nInputs );
1917 pNode->
pData = Io_MvParseTableMv(
p, pNode, vTokens2, nInputs, nOutputs, iOut );
1918 if ( pNode->
pData == NULL )
1936static int Io_MvParseLineNamesMv(
Io_MvMod_t *
p,
char * pLine,
int fReset )
1941 char * pName, * pFirst, * pArrow;
1942 int nInputs, nOutputs, nLiterals, nLines, i;
1945 pArrow = Io_MvFindArrow( pLine );
1946 if ( !
p->pMan->fBlifMv && pArrow )
1948 sprintf(
p->pMan->sError,
"Line %d: Multi-output node symbol (->) in binary BLIF file.", Io_MvGetLine(
p->pMan, pLine) );
1952 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
1954 assert( !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"r") || !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"reset") );
1956 assert( !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"names") || !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"table") );
1958 nInputs = Vec_PtrSize(vTokens) - 2;
1960 if ( pArrow != NULL )
1962 for ( i = Vec_PtrSize(vTokens) - 2; i >= 1; i-- )
1963 if ( pArrow < (
char*)Vec_PtrEntry(vTokens,i) )
1970 pName = (
char *)Vec_PtrEntryLast( vTokens );
1971 Io_MvSplitIntoTokensMv( vTokens2, pName +
strlen(pName) );
1972 pFirst = (
char *)Vec_PtrEntry( vTokens2, 0 );
1973 if ( pFirst[0] ==
'.' )
1975 assert( pFirst[1] ==
'd' );
1976 nLiterals = Vec_PtrSize(vTokens2) - 1 - nOutputs;
1979 nLiterals = Vec_PtrSize(vTokens2);
1981 if ( nLiterals % (nInputs + nOutputs) != 0 )
1983 sprintf(
p->pMan->sError,
"Line %d: Wrong number of literals in the table of node \"%s\". (Spaces inside literals are not allowed.)", Io_MvGetLine(
p->pMan, pFirst), pName );
1987 nLines = nLiterals / (nInputs + nOutputs);
1988 if ( nInputs == 0 && nLines > 1 )
1991 for ( i = 0; i < nOutputs; i++ )
1993 pName = (
char *)Vec_PtrEntry( vTokens, Vec_PtrSize(vTokens) - nOutputs + i );
1998 assert(
p->pResetLatch != NULL );
2000 pNet = Io_MvParseAddResetCircuit(
p, pName );
2005 p->pMan->nNDnodes++;
2011 for ( i = 0; i < nOutputs; i++ )
2013 if ( !Io_MvParseLineNamesMvOne(
p, vTokens, vTokens2, nInputs, nOutputs, i, fReset ) )
2031static char * Io_MvParseTableBlif(
Io_MvMod_t *
p,
char * pTable,
int nFanins )
2035 char * pProduct, * pOutput, c;
2036 int i, Polarity = -1;
2038 p->pMan->nTablesRead++;
2040 Io_MvSplitIntoTokens( vTokens, pTable,
'.' );
2041 if ( Vec_PtrSize(vTokens) == 0 )
2043 if ( Vec_PtrSize(vTokens) == 1 )
2045 pOutput = (
char *)Vec_PtrEntry( vTokens, 0 );
2047 if ( (c!=
'0'&&c!=
'1'&&c!=
'x'&&c!=
'n') || pOutput[1] )
2049 sprintf(
p->pMan->sError,
"Line %d: Constant table has wrong output value \"%s\".", Io_MvGetLine(
p->pMan, pOutput), pOutput );
2054 pProduct = (
char *)Vec_PtrEntry( vTokens, 0 );
2055 if ( Vec_PtrSize(vTokens) % 2 == 1 )
2057 sprintf(
p->pMan->sError,
"Line %d: Table has odd number of tokens (%d).", Io_MvGetLine(
p->pMan, pProduct), Vec_PtrSize(vTokens) );
2061 Vec_StrClear( vFunc );
2062 for ( i = 0; i < Vec_PtrSize(vTokens)/2; i++ )
2064 pProduct = (
char *)Vec_PtrEntry( vTokens, 2*i + 0 );
2065 pOutput = (
char *)Vec_PtrEntry( vTokens, 2*i + 1 );
2066 if (
strlen(pProduct) != (
unsigned)nFanins )
2068 sprintf(
p->pMan->sError,
"Line %d: Cube \"%s\" has size different from the fanin count (%d).", Io_MvGetLine(
p->pMan, pProduct), pProduct, nFanins );
2072 if ( (c!=
'0'&&c!=
'1'&&c!=
'x'&&c!=
'n') || pOutput[1] )
2074 sprintf(
p->pMan->sError,
"Line %d: Output value \"%s\" is incorrect.", Io_MvGetLine(
p->pMan, pProduct), pOutput );
2077 if ( Polarity == -1 )
2078 Polarity = (c==
'1' || c==
'x');
2079 else if ( Polarity != (c==
'1' || c==
'x') )
2081 sprintf(
p->pMan->sError,
"Line %d: Output value \"%s\" differs from the value in the first line of the table (%d).", Io_MvGetLine(
p->pMan, pProduct), pOutput, Polarity );
2085 Vec_StrPrintStr( vFunc, pProduct );
2086 Vec_StrPush( vFunc,
' ' );
2087 Vec_StrPush( vFunc, pOutput[0] );
2088 Vec_StrPush( vFunc,
'\n' );
2090 Vec_StrPush( vFunc,
'\0' );
2091 return Vec_StrArray( vFunc );
2105static int Io_MvParseLineNamesBlif(
Io_MvMod_t *
p,
char * pLine )
2111 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
2113 if ( !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"gate") )
2114 return Io_MvParseLineGateBlif(
p, vTokens );
2116 assert( !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"names") );
2117 pName = (
char *)Vec_PtrEntryLast( vTokens );
2119 if ( Abc_ObjFaninNum(pNet) > 0 )
2121 sprintf(
p->pMan->sError,
"Line %d: Signal \"%s\" is defined more than once.", Io_MvGetLine(
p->pMan, pName), pName );
2125 pNode =
Io_ReadCreateNode(
p->pNtk, pName, (
char **)(vTokens->pArray + 1), Vec_PtrSize(vTokens) - 2 );
2127 pNode->
pData = Io_MvParseTableBlif(
p, pName +
strlen(pName), Abc_ObjFaninNum(pNode) );
2128 if ( pNode->
pData == NULL )
2153static int Io_MvParseLineShortBlif(
Io_MvMod_t *
p,
char * pLine )
2159 Io_MvSplitIntoTokens( vTokens, pLine,
'\0' );
2160 if ( Vec_PtrSize(vTokens) != 3 )
2162 sprintf(
p->pMan->sError,
"Line %d: Expecting three entries in the .short line.", Io_MvGetLine(
p->pMan, (
char *)Vec_PtrEntry(vTokens,0)) );
2166 assert( !
strcmp((
char *)Vec_PtrEntry(vTokens,0),
"short") );
2167 pName = (
char *)Vec_PtrEntryLast( vTokens );
2169 if ( Abc_ObjFaninNum(pNet) > 0 )
2171 sprintf(
p->pMan->sError,
"Line %d: Signal \"%s\" is defined more than once.", Io_MvGetLine(
p->pMan, pName), pName );
2183 if ( pGenlib == NULL )
2185 sprintf(
p->pMan->sError,
"Line %d: The current library is not available.", Io_MvGetLine(
p->pMan, pName) );
2190 if ( pGate == NULL )
2192 sprintf(
p->pMan->sError,
"Line %d: Cannot find buffer gate in the library.", Io_MvGetLine(
p->pMan, pName) );
2195 Abc_ObjSetData( pNode, pGate );
2220 pFlex = (
Mem_Flex_t *)Abc_NtkMvVarMan( pNtk );
2225 if ( pVar->
pNames == NULL )
2228 for ( i = 0; i < pVar->
nValues; i++ )
2247static char * Io_ReadBlifCleanName(
char * pName )
2251 for ( i = 0; i < Length; i++ )
2252 if ( pName[i] ==
'=' )
2253 return pName + i + 1;
2274 char ** ppNames, * pName;
2277 pName = (
char *)vTokens->pArray[0];
2281 if ( pGenlib == NULL )
2283 sprintf(
p->pMan->sError,
"Line %d: The current library is not available.", Io_MvGetLine(
p->pMan, pName) );
2288 if ( vTokens->nSize < 2 )
2290 sprintf(
p->pMan->sError,
"Line %d: The .gate line has less than two tokens.", Io_MvGetLine(
p->pMan, pName) );
2296 if ( pGate == NULL )
2298 sprintf(
p->pMan->sError,
"Line %d: Cannot find gate \"%s\" in the library.", Io_MvGetLine(
p->pMan, pName), (
char*)vTokens->pArray[1] );
2303 if ( Abc_NtkNodeNum(
p->pNtk) == 0 &&
p->pNtk->ntkFunc ==
ABC_FUNC_SOP )
2308 p->pNtk->pManFunc = pGenlib;
2309 if (
p->pMan &&
p->pMan->pDesign && Vec_PtrSize(
p->pMan->pDesign->vModules) > 0 )
2314 if ( pModel ==
p->pNtk )
2327 sprintf(
p->pMan->sError,
"Line %d: Mismatch in the fanins of gate \"%s\".", Io_MvGetLine(
p->pMan, pName), (
char*)vTokens->pArray[1] );
2332 for ( i = 2; i < vTokens->nSize; i++ )
2334 if ( vTokens->pArray[i] == NULL )
2336 vTokens->pArray[i] = Io_ReadBlifCleanName( (
char *)vTokens->pArray[i] );
2337 if ( vTokens->pArray[i] == NULL )
2339 sprintf(
p->pMan->sError,
"Line %d: Invalid gate input assignment.", Io_MvGetLine(
p->pMan, pName) );
2347 nNames = vTokens->nSize - 3;
2348 ppNames = (
char **)vTokens->pArray + 2;
2350 Abc_ObjSetData( pNode, pGate );
2354 nNames = vTokens->nSize - 4;
2355 ppNames = (
char **)vTokens->pArray + 2;
2356 assert( ppNames[nNames] != NULL || ppNames[nNames+1] != NULL );
2357 if ( ppNames[nNames] )
2360 Abc_ObjSetData( pNode, pGate );
2362 if ( ppNames[nNames+1] )
2386 pNode = (
Abc_Obj_t *)Vec_PtrEntry(vDrivers, Id+2);
2387 Vec_IntWriteEntry( vMapIn, Abc_ObjId(Abc_ObjFanin0(Abc_ObjFanin0(pNode))), Id );
2388 pNode = (
Abc_Obj_t *)Vec_PtrEntry(vDrivers, Id+4);
2389 Vec_IntWriteEntry( vMapOut, Abc_ObjId(Abc_ObjFanin0(Abc_ObjFanin0(pNode))), Id );
2394 return Vec_IntEntry( vMapIn, Abc_ObjId(Abc_ObjFanin0(Abc_ObjFanin0(pNode))) );
2399 return Vec_IntEntry( vMapOut, Abc_ObjId(Abc_ObjFanin0(Abc_ObjFanin0(pNode))) );
void Abc_GenOneHotIntervals(char *pFileName, int nPis, int nRegs, Vec_Ptr_t *vOnehots)
struct Abc_Obj_t_ Abc_Obj_t
ABC_DLL Abc_Obj_t * Abc_NtkFindOrCreateNet(Abc_Ntk_t *pNtk, char *pName)
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL int Abc_DesFindTopLevelModels(Abc_Des_t *p)
#define Abc_NtkForEachPo(pNtk, pPo, i)
ABC_DLL int Abc_NtkCheckRead(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_DesFree(Abc_Des_t *p, Abc_Ntk_t *pNtk)
#define Abc_NtkForEachLatch(pNtk, pObj, i)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst0(Abc_Ntk_t *pNtk)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
ABC_DLL char * Abc_SopCreateConst1(Mem_Flex_t *pMan)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
ABC_DLL void Abc_NtkFinalizeRead(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Des_t * Abc_DesCreate(char *pName)
DECLARATIONS ///.
struct Abc_Des_t_ Abc_Des_t
BASIC TYPES ///.
ABC_DLL Abc_Ntk_t * Abc_DesFindModelByName(Abc_Des_t *p, char *pName)
ABC_DLL char * Abc_ObjNameSuffix(Abc_Obj_t *pObj, char *pSuffix)
#define Abc_NtkForEachPi(pNtk, pPi, i)
ABC_DLL int Abc_DesAddModel(Abc_Des_t *p, Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkIsAcyclicHierarchy(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_SopCreateConst0(Mem_Flex_t *pMan)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, const char *pName)
DECLARATIONS ///.
ABC_DLL Abc_Obj_t * Abc_NtkFindNet(Abc_Ntk_t *pNtk, char *pName)
ABC_DLL char * Abc_SopCreateMux(Mem_Flex_t *pMan)
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL void * Abc_FrameReadLibGen()
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
void BZ_API BZ2_bzReadClose(int *bzerror, BZFILE *b)
BZFILE *BZ_API BZ2_bzReadOpen(int *bzerror, FILE *f, int verbosity, int small, void *unused, int nUnused)
int BZ_API BZ2_bzRead(int *bzerror, BZFILE *b, void *buf, int len)
#define BZ_DATA_ERROR_MAGIC
ABC_NAMESPACE_IMPL_START int ZEXPORT gzclose(gzFile file)
gzFile ZEXPORT gzopen(const char *path, const char *mode)
int ZEXPORT gzread(gzFile file, voidp buf, unsigned len)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
void Hop_ManStop(Hop_Man_t *p)
Abc_Obj_t * Io_ReadCreateResetLatch(Abc_Ntk_t *pNtk, int fBlifMv)
Abc_Obj_t * Io_ReadCreatePo(Abc_Ntk_t *pNtk, char *pName)
Abc_Obj_t * Io_ReadCreatePi(Abc_Ntk_t *pNtk, char *pName)
Abc_Obj_t * Io_ReadCreateLatch(Abc_Ntk_t *pNtk, char *pNetLI, char *pNetLO)
Abc_Obj_t * Io_ReadCreateNode(Abc_Ntk_t *pNtk, char *pNameOut, char *pNamesIn[], int nInputs)
Abc_Ntk_t * Io_ReadBlifMv(char *pFileName, int fBlifMv, int fCheck)
FUNCTION DEFINITIONS ///.
#define IO_BLIFMV_MAXVALUES
DECLARATIONS ///.
Vec_Ptr_t * vGlobalLtlArray
struct Io_MvMod_t_ Io_MvMod_t
struct Io_MvMan_t_ Io_MvMan_t
char * Io_MvLoadFileBz2(char *pFileName, long *pnFileSize)
struct Io_MvVar_t_ Io_MvVar_t
void Io_MvReplaceBuffersByShorts(char *p)
void Abc_NtkStartMvVars(Abc_Ntk_t *pNtk)
DECLARATIONS ///.
int Io_ReadBlifReorderFormalNames(Vec_Ptr_t *vTokens, Mio_Gate_t *pGate, Mio_Gate_t *pTwin)
unsigned __int64 word
DECLARATIONS ///.
char * Mem_FlexEntryFetch(Mem_Flex_t *p, int nBytes)
void Mem_FlexStop(Mem_Flex_t *p, int fVerbose)
struct Mio_LibraryStruct_t_ Mio_Library_t
Mio_Gate_t * Mio_GateReadTwin(Mio_Gate_t *pGate)
Mio_Gate_t * Mio_LibraryReadGateByName(Mio_Library_t *pLib, char *pName, char *pOutName)
struct Mio_GateStruct_t_ Mio_Gate_t
Mio_Gate_t * Mio_LibraryReadBuf(Mio_Library_t *pLib)
struct Mem_Flex_t_ Mem_Flex_t
for(p=first;p->value< newval;p=p->next)
Vec_Ptr_t * vLtlProperties
Vec_Ptr_t * vLtlProperties
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.