ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
abcMini.c
Go to the documentation of this file.
1
20
21#include "base/abc/abc.h"
22#include "base/main/main.h"
23#include "aig/miniaig/miniaig.h"
24
26
27
31
35
36
49{
50 int Lit = Mini_AigNodeFanin0( p, Id );
51 int AbcLit = Abc_LitNotCond( Vec_IntEntry(vCopies, Abc_Lit2Var(Lit)), Abc_LitIsCompl(Lit) );
52 return Abc_ObjFromLit( pNtk, AbcLit );
53}
55{
56 int Lit = Mini_AigNodeFanin1( p, Id );
57 int AbcLit = Abc_LitNotCond( Vec_IntEntry(vCopies, Abc_Lit2Var(Lit)), Abc_LitIsCompl(Lit) );
58 return Abc_ObjFromLit( pNtk, AbcLit );
59}
61{
62 Abc_Ntk_t * pNtk;
63 Abc_Obj_t * pObj = NULL;
64 Vec_Int_t * vCopies;
65 int i, nNodes;
66 // get the number of nodes
67 nNodes = Mini_AigNodeNum(p);
68 // create ABC network
70 pNtk->pName = Abc_UtilStrsav( "MiniAig" );
71 // create mapping from MiniAIG objects into ABC objects
72 vCopies = Vec_IntAlloc( nNodes );
73 Vec_IntPush( vCopies, Abc_LitNot(Abc_ObjToLit(Abc_AigConst1(pNtk))) );
74 // iterate through the objects
75 for ( i = 1; i < nNodes; i++ )
76 {
77 if ( Mini_AigNodeIsPi( p, i ) )
78 pObj = Abc_NtkCreatePi(pNtk);
79 else if ( Mini_AigNodeIsPo( p, i ) )
80 Abc_ObjAddFanin( (pObj = Abc_NtkCreatePo(pNtk)), Abc_NodeFanin0Copy(pNtk, vCopies, p, i) );
81 else if ( Mini_AigNodeIsAnd( p, i ) )
82 pObj = Abc_AigAnd((Abc_Aig_t *)pNtk->pManFunc, Abc_NodeFanin0Copy(pNtk, vCopies, p, i), Abc_NodeFanin1Copy(pNtk, vCopies, p, i));
83 else assert( 0 );
84 Vec_IntPush( vCopies, Abc_ObjToLit(pObj) );
85 }
86 assert( Vec_IntSize(vCopies) == nNodes );
88 Vec_IntFree( vCopies );
91 if ( !Abc_NtkCheck( pNtk ) )
92 fprintf( stdout, "Abc_NtkFromMini(): Network check has failed.\n" );
93 // add latches
94 if ( Mini_AigRegNum(p) > 0 )
95 {
96 extern Abc_Ntk_t * Abc_NtkRestrashWithLatches( Abc_Ntk_t * pNtk, int nLatches );
97 Abc_Ntk_t * pTemp;
98 pNtk = Abc_NtkRestrashWithLatches( pTemp = pNtk, Mini_AigRegNum(p) );
99 Abc_NtkDelete( pTemp );
100 }
101 return pNtk;
102}
103
116{
117 return Abc_LitNotCond( Abc_ObjFanin0(pObj)->iTemp, Abc_ObjFaninC0(pObj) );
118}
120{
121 return Abc_LitNotCond( Abc_ObjFanin1(pObj)->iTemp, Abc_ObjFaninC1(pObj) );
122}
124{
125 Mini_Aig_t * p;
126 Abc_Obj_t * pObj = NULL;
127 int i;
128 assert( Abc_NtkIsStrash(pNtk) );
129 // create the manager
130 p = Mini_AigStart();
131 // create mapping from MiniAIG into ABC objects
132 Abc_NtkCleanCopy( pNtk );
133 Abc_AigConst1(pNtk)->iTemp = Mini_AigLitConst1();
134 // create primary inputs
135 Abc_NtkForEachCi( pNtk, pObj, i )
136 pObj->iTemp = Mini_AigCreatePi(p);
137 // create internal nodes
138 Abc_NtkForEachNode( pNtk, pObj, i )
139 pObj->iTemp = Mini_AigAnd( p, Abc_NodeFanin0Copy2(pObj), Abc_NodeFanin1Copy2(pObj) );
140 // create primary outputs
141 Abc_NtkForEachCo( pNtk, pObj, i )
142 pObj->iTemp = Mini_AigCreatePo( p, Abc_NodeFanin0Copy2(pObj) );
143 // set registers
144 Mini_AigSetRegNum( p, Abc_NtkLatchNum(pNtk) );
145 return p;
146}
148{
149 Abc_Ntk_t *pNtkRes = NULL;
150 Mini_Aig_t *pAig;
151 if (!Abc_NtkIsStrash(pNtk)) {
152 pNtk = pNtkRes = Abc_NtkStrash( pNtk, 0, 1, 0 );
153 if ( pNtkRes == NULL )
154 {
155 printf("Strashing has failed.\n" );
156 return NULL;
157 }
158 }
159 pAig = Abc_NtkToMiniAig(pNtk);
160 if (pNtkRes) Abc_NtkDelete(pNtkRes);
161 return pAig;
162}
163
175void Abc_NtkInputMiniAig( Abc_Frame_t * pAbc, void * p )
176{
177 Abc_Ntk_t * pNtk;
178 if ( pAbc == NULL )
179 printf( "ABC framework is not initialized by calling Abc_Start()\n" );
180 pNtk = Abc_NtkFromMiniAig( (Mini_Aig_t *)p );
181 Abc_FrameReplaceCurrentNetwork( pAbc, pNtk );
182// Abc_NtkDelete( pNtk );
183}
185{
186 Abc_Ntk_t * pNtk;
187 if ( pAbc == NULL )
188 printf( "ABC framework is not initialized by calling Abc_Start()\n" );
189 pNtk = Abc_FrameReadNtk( pAbc );
190 if ( pNtk == NULL )
191 printf( "Current network in ABC framework is not defined.\n" );
192 return Abc_NtkToMiniAig( pNtk );
193}
194void Abc_NtkSetFlopNum( Abc_Frame_t * pAbc, int nFlops )
195{
196 extern void Abc_NtkMakeSeq( Abc_Ntk_t * pNtk, int nFlops );
197 Abc_Ntk_t * pNtk;
198 if ( pAbc == NULL )
199 printf( "ABC framework is not initialized by calling Abc_Start()\n" );
200 pNtk = Abc_FrameReadNtk( pAbc );
201 if ( pNtk == NULL )
202 printf( "Current network in ABC framework is not defined.\n" );
203 Abc_NtkMakeSeq( pNtk, nFlops );
204}
205
218{
219 Abc_Ntk_t * pNtkNew;
220 Mini_Aig_t * p;
221 p = Abc_NtkToMiniAig( pNtk );
222 pNtkNew = Abc_NtkFromMiniAig( p );
223 Mini_AigStop( p );
224 Abc_NtkPrintStats( pNtkNew, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
225 Abc_NtkDelete( pNtkNew );
226
227 // test dumping
228 p = Abc_NtkToMiniAig( pNtk );
229 Mini_AigDump( p, "miniaig.data" );
230 Mini_AigPrintStats( p );
231 Mini_AigStop( p );
232
233 p = Mini_AigLoad( "miniaig.data" );
234 Mini_AigPrintStats( p );
235 Mini_AigStop( p );
236}
237
238/*
239 if ( pNtk )
240 {
241 extern void Abc_NtkMiniAigTest( Abc_Ntk_t * pNtk );
242 Abc_NtkMiniAigTest( pNtk );
243
244 }
245*/
246
250
251
253
Mini_Aig_t * Abc_NtkToMiniAig(Abc_Ntk_t *pNtk)
Definition abcMini.c:123
Abc_Ntk_t * Abc_NtkFromMiniAig(Mini_Aig_t *p)
Definition abcMini.c:60
int Abc_NodeFanin1Copy2(Abc_Obj_t *pObj)
Definition abcMini.c:119
void * Abc_NtkOutputMiniAig(Abc_Frame_t *pAbc)
Definition abcMini.c:184
void Abc_NtkMiniAigTest(Abc_Ntk_t *pNtk)
Definition abcMini.c:217
void Abc_NtkSetFlopNum(Abc_Frame_t *pAbc, int nFlops)
Definition abcMini.c:194
ABC_NAMESPACE_IMPL_START Abc_Obj_t * Abc_NodeFanin0Copy(Abc_Ntk_t *pNtk, Vec_Int_t *vCopies, Mini_Aig_t *p, int Id)
DECLARATIONS ///.
Definition abcMini.c:48
int Abc_NodeFanin0Copy2(Abc_Obj_t *pObj)
Definition abcMini.c:115
void Abc_NtkInputMiniAig(Abc_Frame_t *pAbc, void *p)
Definition abcMini.c:175
Abc_Obj_t * Abc_NodeFanin1Copy(Abc_Ntk_t *pNtk, Vec_Int_t *vCopies, Mini_Aig_t *p, int Id)
Definition abcMini.c:54
Mini_Aig_t * Abc_MiniAigFromNtk(Abc_Ntk_t *pNtk)
Definition abcMini.c:147
Abc_Ntk_t * Abc_NtkRestrashWithLatches(Abc_Ntk_t *pNtk, int nLatches)
Definition abcNtk.c:634
void Abc_NtkMakeSeq(Abc_Ntk_t *pNtk, int nLatchesToAdd)
Definition abcNtk.c:1729
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachCo(pNtk, pCo, i)
Definition abc.h:522
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
Definition abcNtk.c:53
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
Definition abcFanio.c:84
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Definition abcCheck.c:64
struct Abc_Aig_t_ Abc_Aig_t
Definition abc.h:117
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL void Abc_NtkPrintStats(Abc_Ntk_t *pNtk, int fFactored, int fSaveBest, int fDumpResult, int fUseLutLib, int fPrintMuxes, int fPower, int fGlitch, int fSkipBuf, int fSkipSmall, int fPrintMem)
Definition abcPrint.c:269
@ ABC_NTK_STRASH
Definition abc.h:58
ABC_DLL void Abc_NtkAddDummyPoNames(Abc_Ntk_t *pNtk)
Definition abcNames.c:521
ABC_DLL int Abc_AigCleanup(Abc_Aig_t *pMan)
Definition abcAig.c:194
ABC_DLL Abc_Obj_t * Abc_AigAnd(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
Definition abcAig.c:700
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
Definition abcStrash.c:265
#define Abc_NtkForEachCi(pNtk, pCi, i)
Definition abc.h:518
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Definition abcNtk.c:1421
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
Definition abcUtil.c:540
@ ABC_FUNC_AIG
Definition abc.h:67
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
Definition abcAig.c:683
ABC_DLL void Abc_NtkAddDummyPiNames(Abc_Ntk_t *pNtk)
Definition abcNames.c:495
#define Abc_NtkForEachNode(pNtk, pNode, i)
Definition abc.h:464
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Abc_Frame_t_ Abc_Frame_t
INCLUDES ///.
Definition abcapis.h:38
ABC_DLL Abc_Ntk_t * Abc_FrameReadNtk(Abc_Frame_t *p)
Definition mainFrame.c:327
ABC_DLL void Abc_FrameReplaceCurrentNetwork(Abc_Frame_t *p, Abc_Ntk_t *pNet)
Definition mainFrame.c:538
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
struct Mini_Aig_t_ Mini_Aig_t
BASIC TYPES ///.
Definition miniaig.h:48
char * pName
Definition abc.h:158
void * pManFunc
Definition abc.h:191
int iTemp
Definition abc.h:149
#define assert(ex)
Definition util_old.h:213