116 printf(
"Io_ReadBlif: The network check has failed.\n" );
140 if ( p->vTokens == NULL ||
strcmp( (
char *)p->vTokens->pArray[0],
".model" ) )
143 sprintf( p->sError,
"Wrong input file format." );
156 if ( p->vTokens &&
strcmp((
char *)p->vTokens->pArray[0],
".exdc") == 0 )
159 if ( pNtk->
pExdc == NULL )
164 if ( pNtkMaster == NULL )
166 p->pNtkMaster = pNtkMaster = pNtk;
221 int iLine, fTokensReady, fStatus;
224 assert( p->vTokens != NULL );
229 if (
strcmp( (
char *)p->vTokens->pArray[0],
".model" ) == 0 )
231 char * pToken, * pPivot;
235 sprintf( p->sError,
"The .model line does not have exactly two entries." );
239 for ( pPivot = pToken = (
char *)
Vec_PtrEntry(p->vTokens, 1); *pToken; pToken++ )
240 if ( *pToken ==
'/' || *pToken ==
'\\' )
244 else if (
strcmp( (
char *)p->vTokens->pArray[0],
".exdc" ) != 0 )
246 printf(
"%s: File parsing skipped after line %d (\"%s\").\n", p->pFileName,
254 if ( p->pNtkMaster == NULL )
256 fTokensReady = fStatus = 0;
259 if ( p->pNtkMaster == NULL && iLine % 1000 == 0 )
264 pDirective = (
char *)p->vTokens->pArray[0];
265 if ( !
strcmp( pDirective,
".names" ) )
267 else if ( !
strcmp( pDirective,
".gate" ) )
269 else if ( !
strcmp( pDirective,
".latch" ) )
271 else if ( !
strcmp( pDirective,
".inputs" ) )
273 else if ( !
strcmp( pDirective,
".outputs" ) )
275 else if ( !
strcmp( pDirective,
".input_arrival" ) )
277 else if ( !
strcmp( pDirective,
".output_required" ) )
279 else if ( !
strcmp( pDirective,
".default_input_arrival" ) )
281 else if ( !
strcmp( pDirective,
".default_output_required" ) )
283 else if ( !
strcmp( pDirective,
".input_drive" ) )
285 else if ( !
strcmp( pDirective,
".output_load" ) )
287 else if ( !
strcmp( pDirective,
".default_input_drive" ) )
289 else if ( !
strcmp( pDirective,
".default_output_load" ) )
291 else if ( !
strcmp( pDirective,
".and_gate_delay" ) )
295 else if ( !
strcmp( pDirective,
".exdc" ) )
297 else if ( !
strcmp( pDirective,
".end" ) )
302 else if ( !
strcmp( pDirective,
".blackbox" ) )
310 printf(
"%s (line %d): Skipping directive \"%s\".\n", p->pFileName,
312 if ( p->vTokens == NULL )
321 if ( p->pNtkMaster == NULL )
340 for ( i = 1; i < vTokens->nSize; i++ )
359 for ( i = 1; i < vTokens->nSize; i++ )
380 if ( vTokens->nSize < 3 )
383 sprintf( p->sError,
"The .latch line does not have enough tokens." );
388 pLatch =
Io_ReadCreateLatch( pNtk, (
char *)vTokens->pArray[1], (
char *)vTokens->pArray[2] );
390 if ( vTokens->nSize == 3 )
394 ResetValue = atoi((
char *)vTokens->pArray[vTokens->nSize-1]);
395 if ( ResetValue != 0 && ResetValue != 1 && ResetValue != 2 )
398 sprintf( p->sError,
"The .latch line has an unknown reset value (%s).", (
char*)vTokens->pArray[3] );
402 if ( ResetValue == 0 )
404 else if ( ResetValue == 1 )
406 else if ( ResetValue == 2 )
428 char * pToken,
Char, ** ppNames;
432 if ( vTokens->nSize < 2 )
435 sprintf( p->sError,
"The .names line has less than two tokens." );
441 ppNames = (
char **)vTokens->pArray + 1;
442 nNames = vTokens->nSize - 2;
446 p->vCubes->nSize = 0;
447 nFanins = vTokens->nSize - 2;
452 pToken = (
char *)vTokens->pArray[0];
453 if ( pToken[0] ==
'.' )
456 if ( vTokens->nSize != 1 )
459 sprintf( p->sError,
"The number of tokens in the constant cube is wrong." );
464 Char = ((
char *)vTokens->pArray[0])[0];
474 pToken = (
char *)vTokens->pArray[0];
475 if ( pToken[0] ==
'.' )
478 if ( vTokens->nSize != 2 )
481 sprintf( p->sError,
"The number of tokens in the cube is wrong." );
488 Char = ((
char *)vTokens->pArray[1])[0];
489 if ( Char !=
'0' && Char !=
'1' && Char !=
'x' && Char !=
'n' )
492 sprintf( p->sError,
"The output character in the constant cube is wrong." );
502 if ( p->vCubes->nSize == 0 )
518 sprintf( p->sError,
"The number of fanins (%d) of node %s is different from SOP size (%d).",
543 char * pName, * pNamePin;
544 int i, k, nSize, Length;
560 Length =
strlen(pNamePin);
562 if ( !
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=' )
574 Length =
strlen(pNamePin);
575 for ( k = 2; k < nSize; k++ )
578 if ( !
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=' )
586 Length =
strlen(pNamePin);
587 for ( k = 2; k < nSize; k++ )
590 if ( !
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=' )
610 Length =
strlen(pNamePin);
612 if ( !
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=' )
618 Length =
strlen(pNamePin);
620 if ( !
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=' )
632 Length =
strlen(pNamePin);
634 if ( !(!
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=') )
637 Length =
strlen(pNamePin);
639 if ( !(!
strncmp( pNamePin, pName, Length ) && pName[Length] ==
'=') )
669 if ( pGenlib == NULL )
672 sprintf( p->sError,
"The current library is not available." );
678 if ( vTokens->nSize < 2 )
681 sprintf( p->sError,
"The .gate line has less than two tokens." );
691 sprintf( p->sError,
"Cannot find gate \"%s\" in the library.", (
char*)vTokens->pArray[1] );
702 p->pNtkCur->pManFunc = pGenlib;
709 sprintf( p->sError,
"Mismatch in the fanins of gate \"%s\".", (
char*)vTokens->pArray[1] );
716 for ( i = 2; i < vTokens->nSize; i++ )
719 if ( vTokens->pArray[i] == NULL )
722 sprintf( p->sError,
"Invalid gate input assignment." );
731 nNames = vTokens->nSize - 3;
732 ppNames = (
char **)vTokens->pArray + 2;
738 nNames = vTokens->nSize - 4;
739 ppNames = (
char **)vTokens->pArray + 2;
740 assert( ppNames[nNames] != NULL || ppNames[nNames+1] != NULL );
741 if ( ppNames[nNames] )
746 if ( ppNames[nNames+1] )
774 if ( vTokens->nSize < 3 )
777 sprintf( p->sError,
"The .subcircuit line has less than three tokens." );
812 for ( i = 0; i < Length; i++ )
813 if ( pName[i] ==
'=' )
814 return pName + i + 1;
832 char * pFoo1, * pFoo2;
833 double TimeRise, TimeFall;
836 assert(
strncmp( (
char *)vTokens->pArray[0],
".input_arrival", 14 ) == 0 );
837 if ( vTokens->nSize != 4 )
840 sprintf( p->sError,
"Wrong number of arguments on .input_arrival line." );
848 sprintf( p->sError,
"Cannot find object corresponding to %s on .input_arrival line.", (
char*)vTokens->pArray[1] );
852 TimeRise = strtod( (
char *)vTokens->pArray[2], &pFoo1 );
853 TimeFall = strtod( (
char *)vTokens->pArray[3], &pFoo2 );
854 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
857 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .input_arrival line.", (
char*)vTokens->pArray[2], (
char*)vTokens->pArray[3] );
880 char * pFoo1, * pFoo2;
881 double TimeRise, TimeFall;
884 assert(
strncmp( (
char *)vTokens->pArray[0],
".output_required", 16 ) == 0 );
885 if ( vTokens->nSize != 4 )
888 sprintf( p->sError,
"Wrong number of arguments on .output_required line." );
896 sprintf( p->sError,
"Cannot find object corresponding to %s on .output_required line.", (
char*)vTokens->pArray[1] );
900 TimeRise = strtod( (
char *)vTokens->pArray[2], &pFoo1 );
901 TimeFall = strtod( (
char *)vTokens->pArray[3], &pFoo2 );
902 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
905 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .output_required line.", (
char*)vTokens->pArray[2], (
char*)vTokens->pArray[3] );
927 char * pFoo1, * pFoo2;
928 double TimeRise, TimeFall;
931 assert(
strncmp( (
char *)vTokens->pArray[0],
".default_input_arrival", 23 ) == 0 );
932 if ( vTokens->nSize != 3 )
935 sprintf( p->sError,
"Wrong number of arguments on .default_input_arrival line." );
939 TimeRise = strtod( (
char *)vTokens->pArray[1], &pFoo1 );
940 TimeFall = strtod( (
char *)vTokens->pArray[2], &pFoo2 );
941 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
944 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .default_input_arrival line.", (
char*)vTokens->pArray[1], (
char*)vTokens->pArray[2] );
966 char * pFoo1, * pFoo2;
967 double TimeRise, TimeFall;
970 assert(
strncmp( (
char *)vTokens->pArray[0],
".default_output_required", 25 ) == 0 );
971 if ( vTokens->nSize != 3 )
974 sprintf( p->sError,
"Wrong number of arguments on .default_output_required line." );
978 TimeRise = strtod( (
char *)vTokens->pArray[1], &pFoo1 );
979 TimeFall = strtod( (
char *)vTokens->pArray[2], &pFoo2 );
980 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
983 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .default_output_required line.", (
char*)vTokens->pArray[1], (
char*)vTokens->pArray[2] );
1009 if ( pTemp == pObj )
1016 char * pFoo1, * pFoo2;
1017 double TimeRise, TimeFall;
1020 assert(
strncmp( (
char *)vTokens->pArray[0],
".input_drive", 12 ) == 0 );
1021 if ( vTokens->nSize != 4 )
1024 sprintf( p->sError,
"Wrong number of arguments on .input_drive line." );
1032 sprintf( p->sError,
"Cannot find object corresponding to %s on .input_drive line.", (
char*)vTokens->pArray[1] );
1036 TimeRise = strtod( (
char *)vTokens->pArray[2], &pFoo1 );
1037 TimeFall = strtod( (
char *)vTokens->pArray[3], &pFoo2 );
1038 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
1041 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .input_drive line.", (
char*)vTokens->pArray[2], (
char*)vTokens->pArray[3] );
1066 if ( pTemp == pObj )
1073 char * pFoo1, * pFoo2;
1074 double TimeRise, TimeFall;
1077 assert(
strncmp( (
char *)vTokens->pArray[0],
".output_load", 12 ) == 0 );
1078 if ( vTokens->nSize != 4 )
1081 sprintf( p->sError,
"Wrong number of arguments on .output_load line." );
1089 sprintf( p->sError,
"Cannot find object corresponding to %s on .output_load line.", (
char*)vTokens->pArray[1] );
1093 TimeRise = strtod( (
char *)vTokens->pArray[2], &pFoo1 );
1094 TimeFall = strtod( (
char *)vTokens->pArray[3], &pFoo2 );
1095 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
1098 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .output_load line.", (
char*)vTokens->pArray[2], (
char*)vTokens->pArray[3] );
1120 char * pFoo1, * pFoo2;
1121 double TimeRise, TimeFall;
1124 assert(
strncmp( (
char *)vTokens->pArray[0],
".default_input_drive", 21 ) == 0 );
1125 if ( vTokens->nSize != 3 )
1128 sprintf( p->sError,
"Wrong number of arguments on .default_input_drive line." );
1132 TimeRise = strtod( (
char *)vTokens->pArray[1], &pFoo1 );
1133 TimeFall = strtod( (
char *)vTokens->pArray[2], &pFoo2 );
1134 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
1137 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .default_input_drive line.", (
char*)vTokens->pArray[1], (
char*)vTokens->pArray[2] );
1159 char * pFoo1, * pFoo2;
1160 double TimeRise, TimeFall;
1163 assert(
strncmp( (
char *)vTokens->pArray[0],
".default_output_load", 21 ) == 0 );
1164 if ( vTokens->nSize != 3 )
1167 sprintf( p->sError,
"Wrong number of arguments on .default_output_load line." );
1171 TimeRise = strtod( (
char *)vTokens->pArray[1], &pFoo1 );
1172 TimeFall = strtod( (
char *)vTokens->pArray[2], &pFoo2 );
1173 if ( *pFoo1 !=
'\0' || *pFoo2 !=
'\0' )
1176 sprintf( p->sError,
"Bad value (%s %s) for rise or fall time on .default_output_load line.", (
char*)vTokens->pArray[1], (
char*)vTokens->pArray[2] );
1199 double AndGateDelay;
1202 assert(
strncmp( (
char *)vTokens->pArray[0],
".and_gate_delay", 25 ) == 0 );
1203 if ( vTokens->nSize != 2 )
1206 sprintf( p->sError,
"Wrong number of arguments (%d) on .and_gate_delay line (should be 1).", vTokens->nSize-1 );
1210 AndGateDelay = strtod( (
char *)vTokens->pArray[1], &pFoo1 );
1211 if ( *pFoo1 !=
'\0' )
1214 sprintf( p->sError,
"Bad value (%s) for AND gate delay in on .and_gate_delay line line.", (
char*)vTokens->pArray[1] );
1219 p->pNtkCur->AndGateDelay = (float)AndGateDelay;
1237 if ( p->LineCur == 0 )
1238 fprintf( p->Output,
"%s: %s\n", p->pFileName, p->sError );
1240 fprintf( p->Output,
"%s (line %d): %s\n", p->pFileName, p->LineCur, p->sError );
1261 if ( p->vNewTokens->nSize > 0 )
1263 for ( i = 0; i < p->vNewTokens->nSize; i++ )
1264 ABC_FREE( p->vNewTokens->pArray[i] );
1265 p->vNewTokens->nSize = 0;
1270 if ( vTokens == NULL )
1274 pLastToken = (
char *)vTokens->pArray[vTokens->nSize - 1];
1275 if ( pLastToken[
strlen(pLastToken)-1 ] !=
'\\' )
1279 pLastToken[
strlen(pLastToken)-1 ] = 0;
1280 if ( pLastToken[0] == 0 )
1283 for ( i = 0; i < vTokens->nSize; i++ )
1291 if ( vTokens->nSize == 0 )
1292 return p->vNewTokens;
1294 pLastToken = (
char *)vTokens->pArray[vTokens->nSize - 1];
1295 if ( pLastToken[
strlen(pLastToken)-1 ] ==
'\\' )
1298 pLastToken[
strlen(pLastToken)-1 ] = 0;
1299 if ( pLastToken[0] == 0 )
1302 for ( i = 0; i < vTokens->nSize; i++ )
1307 for ( i = 0; i < vTokens->nSize; i++ )
1311 return p->vNewTokens;
1333 if ( pReader == NULL )
1339 p->pFileName = pFileName;
1340 p->pReader = pReader;
1383 char * pName = NULL, * pActual;
1384 int i, Length, Start = -1;
1390 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1391 sprintf( p->sError,
"Cannot find the model for subcircuit %s.", (
char*)
Vec_PtrEntry(pNames, 0) );
1406 if ( pActual == NULL )
1408 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1409 sprintf( p->sError,
"Cannot parse formal/actual name pair \"%s\".", pName );
1413 Length = pActual - pName - 1;
1419 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1420 sprintf( p->sError,
"Cannot find formal input \"%s\" as an PI of model \"%s\".", pName, (
char*)
Vec_PtrEntry(pNames, 0) );
1429 pName[Length] =
'=';
1434 if ( pObj->
pCopy != NULL )
1436 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1437 sprintf( p->sError,
"Formal input \"%s\" is used more than once.", pName );
1453 pActual = (
char *)pObj->
pCopy;
1454 if ( pActual == NULL )
1456 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1457 sprintf( p->sError,
"Formal input \"%s\" of model %s is not driven.", pName, (
char*)
Vec_PtrEntry(pNames, 0) );
1473 if ( pActual == NULL )
1475 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1476 sprintf( p->sError,
"Cannot parse formal/actual name pair \"%s\".", pName );
1480 Length = pActual - pName - 1;
1486 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1487 sprintf( p->sError,
"Cannot find formal output \"%s\" as an PO of model \"%s\".", pName, (
char*)
Vec_PtrEntry(pNames, 0) );
1493 if ( pObj->
pCopy != NULL )
1495 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1496 sprintf( p->sError,
"Formal output \"%s\" is used more than once.", pName );
1505 pActual = (
char *)pObj->
pCopy;
1506 if ( pActual == NULL )
1508 p->LineCur = (int)(ABC_PTRINT_T)pBox->
pCopy;
1509 sprintf( p->sError,
"Formal output \"%s\" of model %s is not driven.", pName, (
char*)
Vec_PtrEntry(pNames, 0) );
1523 pBox->
pData = pNtkModel;
Mio_Gate_t * Mio_LibraryReadGateByName(Mio_Library_t *pLib, char *pName, char *pOutName)
static Io_ReadBlif_t * Io_ReadBlifFile(char *pFileName)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
ABC_DLL void * Abc_FrameReadLibGen()
static int Io_ReadBlifNetworkOutputLoad(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
Mio_Pin_t * Mio_GateReadPins(Mio_Gate_t *pGate)
ABC_DLL void Abc_NtkTimeSetArrival(Abc_Ntk_t *pNtk, int ObjId, float Rise, float Fall)
int Io_ReadFindCoId(Abc_Ntk_t *pNtk, Abc_Obj_t *pObj)
static int Abc_ObjFaninNum(Abc_Obj_t *pObj)
static Vec_Ptr_t * Io_ReadBlifGetTokens(Io_ReadBlif_t *p)
char * Mio_GateReadOutName(Mio_Gate_t *pGate)
ABC_DLL void Abc_NtkTimeSetDefaultArrival(Abc_Ntk_t *pNtk, float Rise, float Fall)
char * Mio_PinReadName(Mio_Pin_t *pPin)
static int Abc_ObjIsPi(Abc_Obj_t *pObj)
int Io_ReadFindCiId(Abc_Ntk_t *pNtk, Abc_Obj_t *pObj)
static void Vec_PtrPush(Vec_Ptr_t *p, void *Entry)
#define ABC_ALLOC(type, num)
static Vec_Str_t * Vec_StrAlloc(int nCap)
static void Vec_StrPush(Vec_Str_t *p, char Entry)
static int Io_ReadBlifNetworkAndGateDelay(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
ABC_DLL void Abc_NtkFinalizeRead(Abc_Ntk_t *pNtk)
static Abc_Obj_t * Abc_NtkObj(Abc_Ntk_t *pNtk, int i)
Mio_Pin_t * Mio_PinReadNext(Mio_Pin_t *pPin)
static int Vec_PtrSize(Vec_Ptr_t *p)
static void * Vec_PtrPop(Vec_Ptr_t *p)
static void Abc_LatchSetInitDc(Abc_Obj_t *pLatch)
static Abc_Obj_t * Abc_ObjFanin0(Abc_Obj_t *pObj)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
static void Abc_ObjSetData(Abc_Obj_t *pObj, void *pData)
static int Io_ReadBlifNetworkDefaultOutputLoad(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
static int Io_ReadBlifNetworkLatch(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
Abc_Ntk_t * Io_ReadBlif(char *pFileName, int fCheck)
FUNCTION DEFINITIONS ///.
int Mio_GateReadPinNum(Mio_Gate_t *pGate)
static char * Io_ReadBlifCleanName(char *pName)
static int Abc_NtkNodeNum(Abc_Ntk_t *pNtk)
static void Io_ReadBlifFree(Io_ReadBlif_t *p)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, char *pName)
DECLARATIONS ///.
static int Io_ReadBlifNetworkNames(Io_ReadBlif_t *p, Vec_Ptr_t **pvTokens)
Abc_Obj_t * Io_ReadCreatePi(Abc_Ntk_t *pNtk, char *pName)
static int Io_ReadBlifNetworkOutputRequired(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
int stmm_lookup(stmm_table *table, char *key, char **value)
static void Vec_StrFree(Vec_Str_t *p)
static void Io_ReadBlifPrintErrorMessage(Io_ReadBlif_t *p)
ABC_DLL int Abc_NtkCheckRead(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachBlackbox(pNtk, pObj, i)
#define ABC_NAMESPACE_IMPL_END
ABC_DLL Abc_Obj_t * Abc_NtkFindNet(Abc_Ntk_t *pNtk, char *pName)
static int Io_ReadBlifNetworkInputs(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
ABC_DLL void Abc_NtkTimeInitialize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkOld)
STRUCTURE DEFINITIONS ///.
static int Io_ReadBlifNetworkSubcircuit(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
static Abc_Obj_t * Abc_NtkCreateBlackbox(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkTimeSetDefaultRequired(Abc_Ntk_t *pNtk, float Rise, float Fall)
static Abc_Ntk_t * Io_ReadBlifNetwork(Io_ReadBlif_t *p)
ABC_DLL Abc_Obj_t * Abc_NtkFindOrCreateNet(Abc_Ntk_t *pNtk, char *pName)
int Io_ReadBlifNetworkConnectBoxesOneBox(Io_ReadBlif_t *p, Abc_Obj_t *pBox, stmm_table *tName2Model)
typedefABC_NAMESPACE_IMPL_START struct Io_ReadBlif_t_ Io_ReadBlif_t
DECLARATIONS ///.
Abc_Obj_t * Io_ReadCreateLatch(Abc_Ntk_t *pNtk, char *pNetLI, char *pNetLO)
static void Vec_PtrWriteEntry(Vec_Ptr_t *p, int i, void *Entry)
void Mem_FlexStop(Mem_Flex_t *p, int fVerbose)
Extra_FileReader_t * pReader
#define ABC_NAMESPACE_IMPL_START
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
static void Abc_LatchSetInit1(Abc_Obj_t *pLatch)
Mio_Gate_t * Mio_GateReadTwin(Mio_Gate_t *pGate)
int Io_ReadBlifReorderFormalNames(Vec_Ptr_t *vTokens, Mio_Gate_t *pGate, Mio_Gate_t *pTwin)
static int Io_ReadBlifNetworkDefaultInputDrive(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
static int Io_ReadBlifNetworkInputDrive(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
#define Abc_NtkForEachCi(pNtk, pCi, i)
static Vec_Ptr_t * Vec_PtrAlloc(int nCap)
FUNCTION DEFINITIONS ///.
ABC_DLL void Abc_NtkTimeSetRequired(Abc_Ntk_t *pNtk, int ObjId, float Rise, float Fall)
static int Io_ReadBlifNetworkGate(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
static int Abc_NtkPiNum(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
static int Io_ReadBlifNetworkConnectBoxes(Io_ReadBlif_t *p, Abc_Ntk_t *pNtkMaster)
ABC_DLL int Abc_SopGetVarNum(char *pSop)
static int Io_ReadBlifNetworkDefaultOutputRequired(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
Abc_Obj_t * Io_ReadCreateNode(Abc_Ntk_t *pNtk, char *pNameOut, char *pNamesIn[], int nInputs)
static void * Abc_ObjData(Abc_Obj_t *pObj)
ABC_DLL void Abc_NtkTimeSetDefaultOutputLoad(Abc_Ntk_t *pNtk, float Rise, float Fall)
static void Vec_StrPrintStr(Vec_Str_t *p, const char *pStr)
static Abc_Ntk_t * Io_ReadBlifNetworkOne(Io_ReadBlif_t *p)
#define stmm_foreach_item(table, gen, key, value)
#define Abc_NtkForEachPo(pNtk, pPo, i)
static Abc_Obj_t * Abc_ObjFanout(Abc_Obj_t *pObj, int i)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Abc_Obj_t * Io_ReadCreatePo(Abc_Ntk_t *pNtk, char *pName)
static void Vec_PtrShrink(Vec_Ptr_t *p, int nSizeNew)
static int Io_ReadBlifNetworkDefaultInputArrival(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
int Io_ReadBlifNetworkConnectBoxesOne(Io_ReadBlif_t *p, Abc_Ntk_t *pNtk, stmm_table *tName2Model)
static void Abc_LatchSetInit0(Abc_Obj_t *pLatch)
ABC_DLL void Abc_NtkTimeSetInputDrive(Abc_Ntk_t *pNtk, int PiNum, float Rise, float Fall)
ABC_DLL void Abc_NtkTimeSetOutputLoad(Abc_Ntk_t *pNtk, int PoNum, float Rise, float Fall)
static int Io_ReadBlifNetworkOutputs(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
static int Io_ReadBlifNetworkInputArrival(Io_ReadBlif_t *p, Vec_Ptr_t *vTokens)
static Abc_Obj_t * Abc_ObjFanout0(Abc_Obj_t *pObj)
ABC_DLL void Abc_NtkTimeSetDefaultInputDrive(Abc_Ntk_t *pNtk, float Rise, float Fall)
#define Abc_NtkForEachPi(pNtk, pPi, i)
static void Vec_PtrFree(Vec_Ptr_t *p)