ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
ioReadEdif.c
Go to the documentation of this file.
1
20
21#include "ioAbc.h"
22
24
25
29
30static Abc_Ntk_t * Io_ReadEdifNetwork( Extra_FileReader_t * p );
31
35
47Abc_Ntk_t * Io_ReadEdif( char * pFileName, int fCheck )
48{
50 Abc_Ntk_t * pNtk;
51
52 printf( "Currently this parser does not work!\n" );
53 return NULL;
54
55 // start the file
56 p = Extra_FileReaderAlloc( pFileName, "#", "\n\r", " \t()" );
57 if ( p == NULL )
58 return NULL;
59
60 // read the network
61 pNtk = Io_ReadEdifNetwork( p );
63 if ( pNtk == NULL )
64 return NULL;
65
66 // make sure that everything is okay with the network structure
67 if ( fCheck && !Abc_NtkCheckRead( pNtk ) )
68 {
69 printf( "Io_ReadEdif: The network check has failed.\n" );
70 Abc_NtkDelete( pNtk );
71 return NULL;
72 }
73 return pNtk;
74}
75
86Abc_Ntk_t * Io_ReadEdifNetwork( Extra_FileReader_t * p )
87{
88 ProgressBar * pProgress;
89 Vec_Ptr_t * vTokens;
90 Abc_Ntk_t * pNtk;
91 Abc_Obj_t * pNet, * pObj, * pFanout;
92 char * pGateName, * pNetName;
93 int fTokensReady, iLine, i;
94
95 // read the first line
97 if ( strcmp( (char *)vTokens->pArray[0], "edif" ) != 0 )
98 {
99 printf( "%s: Wrong input file format.\n", Extra_FileReaderGetFileName(p) );
100 return NULL;
101 }
102
103 // allocate the empty network
105
106 // go through the lines of the file
107 fTokensReady = 0;
109 for ( iLine = 1; fTokensReady || (vTokens = (Vec_Ptr_t *)Extra_FileReaderGetTokens(p)); iLine++ )
110 {
111 Extra_ProgressBarUpdate( pProgress, Extra_FileReaderGetCurPosition(p), NULL );
112
113 // get the type of the line
114 fTokensReady = 0;
115 if ( strcmp( (char *)vTokens->pArray[0], "instance" ) == 0 )
116 {
117 pNetName = (char *)vTokens->pArray[1];
118 pNet = Abc_NtkFindOrCreateNet( pNtk, pNetName );
121 pGateName = (char *)vTokens->pArray[1];
122 if ( strncmp( pGateName, "Flip", 4 ) == 0 )
123 {
124 pObj = Abc_NtkCreateLatch( pNtk );
125 Abc_LatchSetInit0( pObj );
126 }
127 else
128 {
129 pObj = Abc_NtkCreateNode( pNtk );
130// pObj->pData = Abc_NtkRegisterName( pNtk, pGateName );
131 pObj->pData = Extra_UtilStrsav( pGateName ); // memory leak!!!
132 }
133 Abc_ObjAddFanin( pNet, pObj );
134 }
135 else if ( strcmp( (char *)vTokens->pArray[0], "net" ) == 0 )
136 {
137 pNetName = (char *)vTokens->pArray[1];
138 if ( strcmp( pNetName, "CK" ) == 0 || strcmp( pNetName, "RESET" ) == 0 )
139 continue;
140 if ( strcmp( pNetName + strlen(pNetName) - 4, "_out" ) == 0 )
141 pNetName[strlen(pNetName) - 4] = 0;
142 pNet = Abc_NtkFindNet( pNtk, pNetName );
143 assert( pNet );
147 while ( strcmp( (char *)vTokens->pArray[0], "portRef" ) == 0 )
148 {
149 if ( strcmp( pNetName, (char *)vTokens->pArray[3] ) != 0 )
150 {
151 pFanout = Abc_NtkFindNet( pNtk, (char *)vTokens->pArray[3] );
152 Abc_ObjAddFanin( Abc_ObjFanin0(pFanout), pNet );
153 }
155 }
156 fTokensReady = 1;
157 }
158 else if ( strcmp( (char *)vTokens->pArray[0], "library" ) == 0 )
159 {
165 while ( strcmp( (char *)vTokens->pArray[0], "port" ) == 0 )
166 {
167 pNetName = (char *)vTokens->pArray[1];
168 if ( strcmp( pNetName, "CK" ) == 0 || strcmp( pNetName, "RESET" ) == 0 )
169 {
171 continue;
172 }
173 if ( strcmp( pNetName + strlen(pNetName) - 3, "_PO" ) == 0 )
174 pNetName[strlen(pNetName) - 3] = 0;
175 if ( strcmp( (char *)vTokens->pArray[3], "INPUT" ) == 0 )
176 Io_ReadCreatePi( pNtk, (char *)vTokens->pArray[1] );
177 else if ( strcmp( (char *)vTokens->pArray[3], "OUTPUT" ) == 0 )
178 Io_ReadCreatePo( pNtk, (char *)vTokens->pArray[1] );
179 else
180 {
181 printf( "%s (line %d): Wrong interface specification.\n", Extra_FileReaderGetFileName(p), iLine );
182 Abc_NtkDelete( pNtk );
183 return NULL;
184 }
186 }
187 }
188 else if ( strcmp( (char *)vTokens->pArray[0], "design" ) == 0 )
189 {
190 ABC_FREE( pNtk->pName );
191 pNtk->pName = (char *)Extra_UtilStrsav( (char *)vTokens->pArray[3] );
192 break;
193 }
194 }
195 Extra_ProgressBarStop( pProgress );
196
197 // assign logic functions
198 Abc_NtkForEachNode( pNtk, pObj, i )
199 {
200 if ( strncmp( (char *)pObj->pData, "And", 3 ) == 0 )
201 Abc_ObjSetData( pObj, Abc_SopCreateAnd((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj), NULL) );
202 else if ( strncmp( (char *)pObj->pData, "Or", 2 ) == 0 )
203 Abc_ObjSetData( pObj, Abc_SopCreateOr((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj), NULL) );
204 else if ( strncmp( (char *)pObj->pData, "Nand", 4 ) == 0 )
205 Abc_ObjSetData( pObj, Abc_SopCreateNand((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
206 else if ( strncmp( (char *)pObj->pData, "Nor", 3 ) == 0 )
207 Abc_ObjSetData( pObj, Abc_SopCreateNor((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
208 else if ( strncmp( (char *)pObj->pData, "Exor", 4 ) == 0 )
209 Abc_ObjSetData( pObj, Abc_SopCreateXor((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
210 else if ( strncmp( (char *)pObj->pData, "Exnor", 5 ) == 0 )
211 Abc_ObjSetData( pObj, Abc_SopCreateNxor((Mem_Flex_t *)pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
212 else if ( strncmp( (char *)pObj->pData, "Inv", 3 ) == 0 )
213 Abc_ObjSetData( pObj, Abc_SopCreateInv((Mem_Flex_t *)pNtk->pManFunc) );
214 else if ( strncmp( (char *)pObj->pData, "Buf", 3 ) == 0 )
215 Abc_ObjSetData( pObj, Abc_SopCreateBuf((Mem_Flex_t *)pNtk->pManFunc) );
216 else
217 {
218 printf( "%s: Unknown gate type \"%s\".\n", Extra_FileReaderGetFileName(p), (char*)pObj->pData );
219 Abc_NtkDelete( pNtk );
220 return NULL;
221 }
222 }
223 // check if constants have been added
224// if ( pNet = Abc_NtkFindNet( pNtk, "VDD" ) )
225// Io_ReadCreateConst( pNtk, "VDD", 1 );
226// if ( pNet = Abc_NtkFindNet( pNtk, "GND" ) )
227// Io_ReadCreateConst( pNtk, "GND", 0 );
228
229 Abc_NtkFinalizeRead( pNtk );
230 return pNtk;
231}
232
236
237
238
240
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
ABC_DLL Abc_Obj_t * Abc_NtkFindOrCreateNet(Abc_Ntk_t *pNtk, char *pName)
Definition abcObj.c:587
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
Definition abcFanio.c:84
ABC_DLL int Abc_NtkCheckRead(Abc_Ntk_t *pNtk)
Definition abcCheck.c:80
ABC_DLL char * Abc_SopCreateNxor(Mem_Flex_t *pMan, int nVars)
Definition abcSop.c:317
ABC_DLL char * Abc_SopCreateInv(Mem_Flex_t *pMan)
Definition abcSop.c:351
ABC_DLL char * Abc_SopCreateOr(Mem_Flex_t *pMan, int nVars, int *pfCompl)
Definition abcSop.c:212
ABC_DLL Abc_Ntk_t * Abc_NtkStartRead(char *pName)
Definition abcNtk.c:386
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL void Abc_NtkFinalizeRead(Abc_Ntk_t *pNtk)
Definition abcNtk.c:413
ABC_DLL char * Abc_SopCreateNand(Mem_Flex_t *pMan, int nVars)
Definition abcSop.c:190
ABC_DLL char * Abc_SopCreateAnd(Mem_Flex_t *pMan, int nVars, int *pfCompl)
Definition abcSop.c:168
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Definition abcNtk.c:1421
ABC_DLL char * Abc_SopCreateXor(Mem_Flex_t *pMan, int nVars)
Definition abcSop.c:280
ABC_DLL char * Abc_SopCreateNor(Mem_Flex_t *pMan, int nVars)
Definition abcSop.c:259
ABC_DLL char * Abc_SopCreateBuf(Mem_Flex_t *pMan)
Definition abcSop.c:367
ABC_DLL Abc_Obj_t * Abc_NtkFindNet(Abc_Ntk_t *pNtk, char *pName)
Definition abcObj.c:515
#define Abc_NtkForEachNode(pNtk, pNode, i)
Definition abc.h:464
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
Definition bbrNtbdd.c:27
Cube * p
Definition exorList.c:222
void Extra_ProgressBarStop(ProgressBar *p)
char * Extra_FileReaderGetFileName(Extra_FileReader_t *p)
void * Extra_FileReaderGetTokens(Extra_FileReader_t *p)
Extra_FileReader_t * Extra_FileReaderAlloc(char *pFileName, char *pCharsComment, char *pCharsStop, char *pCharsClean)
FUNCTION DEFINITIONS ///.
char * Extra_UtilStrsav(const char *s)
struct Extra_FileReader_t_ Extra_FileReader_t
Definition extra.h:135
int Extra_FileReaderGetCurPosition(Extra_FileReader_t *p)
ProgressBar * Extra_ProgressBarStart(FILE *pFile, int nItemsTotal)
FUNCTION DEFINITIONS ///.
int Extra_FileReaderGetFileSize(Extra_FileReader_t *p)
void Extra_FileReaderFree(Extra_FileReader_t *p)
Abc_Obj_t * Io_ReadCreatePo(Abc_Ntk_t *pNtk, char *pName)
Definition ioUtil.c:644
Abc_Obj_t * Io_ReadCreatePi(Abc_Ntk_t *pNtk, char *pName)
Definition ioUtil.c:619
Abc_Ntk_t * Io_ReadEdif(char *pFileName, int fCheck)
FUNCTION DEFINITIONS ///.
Definition ioReadEdif.c:47
struct Mem_Flex_t_ Mem_Flex_t
Definition mem.h:34
char * pName
Definition abc.h:158
void * pManFunc
Definition abc.h:191
void * pData
Definition abc.h:145
#define assert(ex)
Definition util_old.h:213
int strncmp()
int strlen()
int strcmp()
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42