58 pNtk = Io_ReadBenchNetwork(
p );
66 printf(
"Io_ReadBench: The network check has failed.\n" );
91 unsigned uTruth[2048];
92 char * pType, ** ppNames, * pString;
93 int iLine, nNames, nDigits, fLutsPresent = 0;
100 vString = Vec_StrAlloc( 100 );
106 if ( vTokens->nSize == 1 )
109 Vec_StrFree( vString );
115 if (
strncmp( (
char *)vTokens->pArray[0],
"INPUT", 5 ) == 0 )
117 else if (
strncmp( (
char *)vTokens->pArray[0],
"OUTPUT", 5 ) == 0 )
122 pType = (
char *)vTokens->pArray[1];
123 if (
strncmp(pType,
"DFF", 3) == 0 )
125 if ( Vec_PtrSize(vTokens) == 6 )
128 char pNetName[1000];
char * pName;
int i;
129 char * pFlopOut = (
char *)vTokens->pArray[0];
131 Abc_Obj_t * pTerm = Abc_NtkCreatePi( pNtk );
136 sprintf( pNetName,
"%s_%s", pFlopOut, pName );
141 pTerm = Abc_NtkCreatePo( pNtk );
148 pNode =
Io_ReadCreateLatch( pNtk, (
char *)vTokens->pArray[2], (
char *)vTokens->pArray[0] );
150 if ( pType[3] ==
'0' )
151 Abc_LatchSetInit0( pNode );
152 else if ( pType[3] ==
'1' )
153 Abc_LatchSetInit1( pNode );
155 Abc_LatchSetInitDc( pNode );
158 else if (
strcmp(pType,
"LUT") == 0 )
161 ppNames = (
char **)vTokens->pArray + 3;
162 nNames = vTokens->nSize - 3;
167 Vec_StrFree( vString );
172 pString = (
char *)vTokens->pArray[2];
173 if (
strncmp( pString,
"0x", 2 ) )
175 printf(
"%s: The LUT signature (%s) does not look like a hexadecimal beginning with \"0x\".\n",
Extra_FileReaderGetFileName(
p), pString );
176 Vec_StrFree( vString );
182 nDigits = (1 << nNames) / 4;
185 if (
strlen(pString) < (
unsigned)nDigits )
187 Vec_StrFill( vString, nDigits -
strlen(pString),
'0' );
188 Vec_StrPrintStr( vString, pString );
189 Vec_StrPush( vString, 0 );
190 pString = Vec_StrArray( vString );
196 Vec_StrFree( vString );
201 if ( Extra_TruthIsConst0(uTruth, nNames) )
206 else if ( Extra_TruthIsConst1(uTruth, nNames) )
218 else if ( pString[0] ==
'2' )
220 else if ( pString[0] ==
'1' )
225 Vec_StrFree( vString );
234 ppNames = (
char **)vTokens->pArray + 2;
235 nNames = vTokens->nSize - 2;
238 if (
strcmp(pType,
"AND") == 0 ||
strcmp(pType,
"and") == 0 )
240 else if (
strcmp(pType,
"OR") == 0 ||
strcmp(pType,
"or") == 0 )
242 else if (
strcmp(pType,
"NAND") == 0 ||
strcmp(pType,
"nand") == 0 )
244 else if (
strcmp(pType,
"NOR") == 0 ||
strcmp(pType,
"nor") == 0 )
246 else if (
strcmp(pType,
"XOR") == 0 ||
strcmp(pType,
"xor") == 0 )
248 else if (
strcmp(pType,
"NXOR") == 0 ||
strcmp(pType,
"XNOR") == 0 ||
strcmp(pType,
"nxor") == 0 ||
strcmp(pType,
"xnor") == 0 )
250 else if (
strncmp(pType,
"BUF", 3) == 0 ||
strcmp(pType,
"buf") == 0 )
252 else if (
strcmp(pType,
"NOT") == 0 ||
strcmp(pType,
"not") == 0 )
254 else if (
strncmp(pType,
"MUX", 3) == 0 ||
strcmp(pType,
"mux") == 0 )
257 else if (
strncmp(pType,
"gnd", 3) == 0 )
259 else if (
strncmp(pType,
"vdd", 3) == 0 )
264 Vec_StrFree( vString );
272 Vec_StrFree( vString );
277 if ( Abc_ObjFaninNum(pNet) == 0 )
282 if ( Abc_ObjFaninNum(pNet) == 0 )
284 printf(
"Io_ReadBenchNetwork(): Adding constant 0 fanin to non-driven net \"1\".\n" );
291 if ( Abc_ObjFaninNum(pNet) == 0 )
296 if ( Abc_ObjFaninNum(pNet) == 0 )
298 printf(
"Io_ReadBenchNetwork(): Adding constant 1 fanin to non-driven net \"2\".\n" );
310 printf(
"Io_ReadBenchNetwork(): Converting to BDD has failed.\n" );
316 printf(
"Io_ReadBenchNetwork(): Converting to SOP has failed.\n" );
343 pFile = fopen( pFileName,
"r" );
346 printf(
"Io_ReadBenchInit(): Failed to open file \"%s\".\n", pFileName );
349 while ( fgets( pBuffer, 999, pFile ) )
351 pToken =
strtok( pBuffer,
" \n\t\r" );
356 printf(
"Io_ReadBenchInit(): Cannot find register with output %s.\n", pToken );
359 pObj = Abc_ObjFanin0( Abc_NtkObj( pNtk, Num ) );
360 if ( !Abc_ObjIsLatch(pObj) )
362 printf(
"Io_ReadBenchInit(): The signal is not a register output %s.\n", pToken );
366 pToken =
strtok( NULL,
" \n\t\r" );
367 if ( pToken[0] ==
'0' )
368 Abc_LatchSetInit0( pObj );
369 else if ( pToken[0] ==
'1' )
370 Abc_LatchSetInit1( pObj );
371 else if ( pToken[0] ==
'2' )
372 Abc_LatchSetInitDc( pObj );
375 printf(
"Io_ReadBenchInit(): The signal %s has unknown initial value (%s).\n",
struct Abc_Obj_t_ Abc_Obj_t
ABC_DLL Abc_Obj_t * Abc_NtkFindOrCreateNet(Abc_Ntk_t *pNtk, char *pName)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL int Abc_NtkCheckRead(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeBuf(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
ABC_DLL char * Abc_SopCreateNxor(Mem_Flex_t *pMan, int nVars)
ABC_DLL int Abc_NtkToBdd(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_SopCreateInv(Mem_Flex_t *pMan)
ABC_DLL char * Abc_SopCreateOr(Mem_Flex_t *pMan, int nVars, int *pfCompl)
ABC_DLL Abc_Ntk_t * Abc_NtkStartRead(char *pName)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkFinalizeRead(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_SopCreateFromTruth(Mem_Flex_t *pMan, int nVars, unsigned *pTruth)
ABC_DLL char * Abc_SopCreateNand(Mem_Flex_t *pMan, int nVars)
ABC_DLL char * Abc_SopCreateAnd(Mem_Flex_t *pMan, int nVars, int *pfCompl)
ABC_DLL int Abc_NtkToSop(Abc_Ntk_t *pNtk, int fMode, int nCubeLimit)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_SopCreateXor(Mem_Flex_t *pMan, int nVars)
ABC_DLL char * Abc_SopCreateNor(Mem_Flex_t *pMan, int nVars)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, const char *pName)
DECLARATIONS ///.
ABC_DLL char * Abc_SopCreateBuf(Mem_Flex_t *pMan)
ABC_DLL Abc_Obj_t * Abc_NtkFindNet(Abc_Ntk_t *pNtk, char *pName)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
struct Vec_Str_t_ Vec_Str_t
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
Abc_Obj_t * Io_ReadCreatePo(Abc_Ntk_t *pNtk, char *pName)
Abc_Obj_t * Io_ReadCreateConst(Abc_Ntk_t *pNtk, char *pName, int fConst1)
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)
void Io_ReadBenchInit(Abc_Ntk_t *pNtk, char *pFileName)
Abc_Ntk_t * Io_ReadBench(char *pFileName, int fCheck)
FUNCTION DEFINITIONS ///.
struct Mem_Flex_t_ Mem_Flex_t
int Nm_ManFindIdByName(Nm_Man_t *p, char *pName, int Type)
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.