Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abc
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
abc
Commits
7b1c2508
Commit
7b1c2508
authored
Feb 01, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements and tuning of CBA.
parent
a704e9c9
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
65 additions
and
64 deletions
+65
-64
src/base/abci/abcDar.c
+1
-1
src/base/cba/cba.h
+11
-3
src/base/cba/cbaBlast.c
+14
-40
src/base/cba/cbaCom.c
+14
-8
src/base/cba/cbaNtk.c
+1
-1
src/base/cba/cbaWriteVer.c
+14
-1
src/bool/dec/decFactor.c
+8
-10
src/map/scl/sclBuffer.c
+2
-0
No files found.
src/base/abci/abcDar.c
View file @
7b1c2508
...
@@ -871,7 +871,7 @@ static inline Abc_Obj_t * Abc_NtkFromCellRead( Abc_Ntk_t * p, Vec_Int_t * vCopyL
...
@@ -871,7 +871,7 @@ static inline Abc_Obj_t * Abc_NtkFromCellRead( Abc_Ntk_t * p, Vec_Int_t * vCopyL
}
}
Abc_Ntk_t
*
Abc_NtkFromCellMappedGia
(
Gia_Man_t
*
p
)
Abc_Ntk_t
*
Abc_NtkFromCellMappedGia
(
Gia_Man_t
*
p
)
{
{
int
fFixDrivers
=
0
;
int
fFixDrivers
=
1
;
int
fDuplicate
=
1
;
int
fDuplicate
=
1
;
int
fVerbose
=
1
;
int
fVerbose
=
1
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Ntk_t
*
pNtkNew
;
...
...
src/base/cba/cba.h
View file @
7b1c2508
...
@@ -194,6 +194,8 @@ static inline int Cba_NtkPiNumAlloc( Cba_Ntk_t * p ) { r
...
@@ -194,6 +194,8 @@ static inline int Cba_NtkPiNumAlloc( Cba_Ntk_t * p ) { r
static
inline
int
Cba_NtkPoNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkPoNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkBiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BI
);
}
static
inline
int
Cba_NtkBiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BI
);
}
static
inline
int
Cba_NtkBoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BO
);
}
static
inline
int
Cba_NtkBoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BO
);
}
static
inline
int
Cba_NtkCiNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPiNum
(
p
)
+
Cba_NtkBoNum
(
p
);
}
static
inline
int
Cba_NtkCoNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPoNum
(
p
)
+
Cba_NtkBiNum
(
p
);
}
static
inline
int
Cba_NtkBoxNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkObjNum
(
p
)
-
Vec_StrCountSmaller
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkBoxNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkObjNum
(
p
)
-
Vec_StrCountSmaller
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkPrimNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountLarger
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkPrimNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountLarger
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkUserNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkUserNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
...
@@ -241,7 +243,7 @@ static inline int Cba_ObjCopy( Cba_Ntk_t * p, int i ) { r
...
@@ -241,7 +243,7 @@ static inline int Cba_ObjCopy( Cba_Ntk_t * p, int i ) { r
static
inline
char
*
Cba_ObjNameStr
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_NtkStr
(
p
,
Cba_ObjName
(
p
,
i
));
}
static
inline
char
*
Cba_ObjNameStr
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_NtkStr
(
p
,
Cba_ObjName
(
p
,
i
));
}
static
inline
char
*
Cba_ObjRangeStr
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_NtkStr
(
p
,
Cba_ObjRange
(
p
,
i
));
}
static
inline
char
*
Cba_ObjRangeStr
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_NtkStr
(
p
,
Cba_ObjRange
(
p
,
i
));
}
static
inline
void
Cba_ObjSetFanin
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjFanin
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vFanin
,
i
,
x
);
}
static
inline
void
Cba_ObjSetFanin
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjFanin
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vFanin
,
i
,
x
);
}
static
inline
void
Cba_ObjSetName
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
/*assert(Cba_ObjName(p, i) == 0);*/
Vec_IntWriteEntry
(
&
p
->
vName
,
i
,
x
);
}
static
inline
void
Cba_ObjSetName
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjName
(
p
,
i
)
==
0
);
Vec_IntWriteEntry
(
&
p
->
vName
,
i
,
x
);
}
static
inline
void
Cba_ObjSetRange
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjRange
(
p
,
i
)
==
0
);
Vec_IntWriteEntry
(
&
p
->
vRange
,
i
,
x
);
}
static
inline
void
Cba_ObjSetRange
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjRange
(
p
,
i
)
==
0
);
Vec_IntWriteEntry
(
&
p
->
vRange
,
i
,
x
);
}
static
inline
void
Cba_ObjSetCopy
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjCopy
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vCopy
,
i
,
x
);
}
static
inline
void
Cba_ObjSetCopy
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjCopy
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vCopy
,
i
,
x
);
}
...
@@ -445,7 +447,7 @@ static inline void Cba_NtkDupUserBoxes( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
...
@@ -445,7 +447,7 @@ static inline void Cba_NtkDupUserBoxes( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
{
{
int
i
,
iObj
;
int
i
,
iObj
;
assert
(
pNew
!=
p
);
assert
(
pNew
!=
p
);
Cba_NtkAlloc
(
pNew
,
Cba_NtkNameId
(
p
),
Cba_NtkPiNum
(
p
),
Cba_NtkPoNum
(
p
),
Cba_NtkObjNum
(
p
)
);
Cba_NtkAlloc
(
pNew
,
Cba_NtkNameId
(
p
),
Cba_NtkPiNum
(
p
),
Cba_NtkPoNum
(
p
),
Cba_NtkObjNum
(
p
)
+
3
*
Cba_NtkCoNum
(
p
)
);
Cba_NtkStartCopies
(
p
);
Cba_NtkStartCopies
(
p
);
if
(
Cba_NtkHasNames
(
p
)
)
if
(
Cba_NtkHasNames
(
p
)
)
Cba_NtkStartNames
(
pNew
);
Cba_NtkStartNames
(
pNew
);
...
@@ -455,6 +457,12 @@ static inline void Cba_NtkDupUserBoxes( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
...
@@ -455,6 +457,12 @@ static inline void Cba_NtkDupUserBoxes( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
Cba_ObjDup
(
pNew
,
p
,
iObj
);
Cba_ObjDup
(
pNew
,
p
,
iObj
);
Cba_NtkForEachBoxUser
(
p
,
iObj
)
Cba_NtkForEachBoxUser
(
p
,
iObj
)
Cba_BoxDup
(
pNew
,
p
,
iObj
);
Cba_BoxDup
(
pNew
,
p
,
iObj
);
// connect feed-throughs
Cba_NtkForEachCo
(
p
,
iObj
)
if
(
Cba_ObjCopy
(
p
,
iObj
)
>=
0
&&
Cba_ObjCopy
(
p
,
Cba_ObjFanin
(
p
,
iObj
))
>=
0
&&
Cba_ObjName
(
p
,
iObj
)
==
Cba_ObjName
(
p
,
Cba_ObjFanin
(
p
,
iObj
))
)
Cba_ObjSetFanin
(
pNew
,
Cba_ObjCopy
(
p
,
iObj
),
Cba_ObjCopy
(
p
,
Cba_ObjFanin
(
p
,
iObj
))
);
}
}
static
inline
void
Cba_NtkFree
(
Cba_Ntk_t
*
p
)
static
inline
void
Cba_NtkFree
(
Cba_Ntk_t
*
p
)
{
{
...
@@ -627,7 +635,7 @@ static inline void Cba_ManPrintStats( Cba_Man_t * p, int nModules, int fVerbose
...
@@ -627,7 +635,7 @@ static inline void Cba_ManPrintStats( Cba_Man_t * p, int nModules, int fVerbose
Cba_Ntk_t
*
pRoot
=
Cba_ManRoot
(
p
);
Cba_Ntk_t
*
pRoot
=
Cba_ManRoot
(
p
);
printf
(
"%-12s : "
,
Cba_ManName
(
p
)
);
printf
(
"%-12s : "
,
Cba_ManName
(
p
)
);
printf
(
"pi =%5d "
,
Cba_NtkPiNum
(
pRoot
)
);
printf
(
"pi =%5d "
,
Cba_NtkPiNum
(
pRoot
)
);
printf
(
"p
i
=%5d "
,
Cba_NtkPoNum
(
pRoot
)
);
printf
(
"p
o
=%5d "
,
Cba_NtkPoNum
(
pRoot
)
);
printf
(
"mod =%6d "
,
Cba_ManNtkNum
(
p
)
);
printf
(
"mod =%6d "
,
Cba_ManNtkNum
(
p
)
);
printf
(
"box =%7d "
,
Cba_ManNodeNum
(
p
)
);
printf
(
"box =%7d "
,
Cba_ManNodeNum
(
p
)
);
printf
(
"obj =%7d "
,
Cba_ManObjNum
(
p
)
);
printf
(
"obj =%7d "
,
Cba_ManObjNum
(
p
)
);
...
...
src/base/cba/cbaBlast.c
View file @
7b1c2508
...
@@ -143,6 +143,10 @@ int Cba_ManExtract_rec( Gia_Man_t * pNew, Cba_Ntk_t * p, int i, int fBuffers, Ve
...
@@ -143,6 +143,10 @@ int Cba_ManExtract_rec( Gia_Man_t * pNew, Cba_Ntk_t * p, int i, int fBuffers, Ve
Dec_Graph_t
*
pGraph
=
(
Dec_Graph_t
*
)
p
->
pDesign
->
ppGraphs
[
Cba_BoxNtkId
(
p
,
iBox
)];
Dec_Graph_t
*
pGraph
=
(
Dec_Graph_t
*
)
p
->
pDesign
->
ppGraphs
[
Cba_BoxNtkId
(
p
,
iBox
)];
Vec_Int_t
Leaves
=
{
nLits
,
nLits
,
pLits
};
Vec_Int_t
Leaves
=
{
nLits
,
nLits
,
pLits
};
assert
(
pGraph
!=
NULL
);
assert
(
pGraph
!=
NULL
);
if
(
pGraph
->
nLeaves
==
0
)
{
int
s
=
0
;
}
return
Gia_ManFactorGraph
(
pNew
,
pGraph
,
&
Leaves
);
return
Gia_ManFactorGraph
(
pNew
,
pGraph
,
&
Leaves
);
}
}
else
else
...
@@ -298,23 +302,17 @@ void Cba_ManRemapBarbufs( Cba_Man_t * pNew, Cba_Man_t * p )
...
@@ -298,23 +302,17 @@ void Cba_ManRemapBarbufs( Cba_Man_t * pNew, Cba_Man_t * p )
void
Cba_NtkCreateAndConnectBuffer
(
Gia_Man_t
*
pGia
,
Gia_Obj_t
*
pObj
,
Cba_Ntk_t
*
p
,
int
iTerm
)
void
Cba_NtkCreateAndConnectBuffer
(
Gia_Man_t
*
pGia
,
Gia_Obj_t
*
pObj
,
Cba_Ntk_t
*
p
,
int
iTerm
)
{
{
int
iObj
;
int
iObj
;
// Vec_IntWriteEntry( &p->vTypes, p->nObjs, CBA_OBJ_NODE );
if
(
pGia
&&
Gia_ObjFaninId0p
(
pGia
,
pObj
)
>
0
)
if
(
pGia
&&
Gia_ObjFaninId0p
(
pGia
,
pObj
)
>
0
)
{
{
// Vec_IntWriteEntry( &p->vFuncs, p->nObjs, Gia_ObjFaninC0(pObj) ? CBA_BOX_INV : CBA_BOX_BUF );
assert
(
Cba_ObjName
(
p
,
Gia_ObjFanin0
(
pObj
)
->
Value
)
!=
Cba_ObjName
(
p
,
iTerm
)
);
// not a feedthrough
// Vec_IntWriteEntry( &p->vFanins, p->nObjs, Cba_ManHandleBuffer(p->pDesign, Gia_ObjFanin0(pObj)->Value) );
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
Gia_ObjFanin0
(
pObj
)
->
Value
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
Gia_ObjFanin0
(
pObj
)
->
Value
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
Gia_ObjFanin0
(
pObj
)
->
Value
)
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
Gia_ObjFanin0
(
pObj
)
->
Value
)
);
Cba_ObjAlloc
(
p
,
Gia_ObjFaninC0
(
pObj
)
?
CBA_BOX_INV
:
CBA_BOX_BUF
,
-
1
,
-
1
);
Cba_ObjAlloc
(
p
,
Gia_ObjFaninC0
(
pObj
)
?
CBA_BOX_INV
:
CBA_BOX_BUF
,
-
1
,
-
1
);
}
}
else
else
{
{
// Vec_IntWriteEntry( &p->vFuncs, p->nObjs, pGia && Gia_ObjFaninC0(pObj) ? CBA_BOX_C1 : CBA_BOX_C0 );
// Vec_IntWriteEntry( &p->vFanins, p->nObjs, Cba_ManHandleBuffer(p->pDesign, -1) );
Cba_ObjAlloc
(
p
,
pGia
&&
Gia_ObjFaninC0
(
pObj
)
?
CBA_BOX_C1
:
CBA_BOX_C0
,
-
1
,
-
1
);
Cba_ObjAlloc
(
p
,
pGia
&&
Gia_ObjFaninC0
(
pObj
)
?
CBA_BOX_C1
:
CBA_BOX_C0
,
-
1
,
-
1
);
}
}
// Vec_IntWriteEntry( &p->vNameIds, p->nObjs, Cba_ObjNameId(p, iTerm) );
// Vec_IntWriteEntry( &p->vFanins, iTerm, p->nObjs++ );
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
Cba_ObjSetFanin
(
p
,
iTerm
,
iObj
);
Cba_ObjSetFanin
(
p
,
iTerm
,
iObj
);
...
@@ -335,6 +333,7 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -335,6 +333,7 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pNtk
,
iTerm
)
);
assert
(
Cba_ObjIsCo
(
pNtk
,
iTerm
)
);
if
(
Cba_ObjFanin
(
pNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
// prepare leaf
// prepare leaf
pObj
->
Value
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
pObj
->
Value
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
...
@@ -357,13 +356,6 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -357,13 +356,6 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
else
else
Type
=
CBA_BOX_AND
;
Type
=
CBA_BOX_AND
;
// create box
// create box
/*
Vec_IntFillTwo( vTemp, 2, iLit0, iLit1 );
Vec_IntWriteEntry( &pNtk->vTypes, pNtk->nObjs, CBA_OBJ_NODE );
Vec_IntWriteEntry( &pNtk->vFuncs, pNtk->nObjs, Type );
Vec_IntWriteEntry( &pNtk->vFanins, pNtk->nObjs, Cba_ManHandleArray(p, vTemp) );
pNtk->nObjs++;
*/
iTerm
=
Cba_ObjAlloc
(
pNtk
,
CBA_OBJ_BI
,
1
,
iLit1
);
iTerm
=
Cba_ObjAlloc
(
pNtk
,
CBA_OBJ_BI
,
1
,
iLit1
);
Cba_ObjSetName
(
pNtk
,
iTerm
,
Cba_ObjName
(
pNtk
,
iLit1
)
);
Cba_ObjSetName
(
pNtk
,
iTerm
,
Cba_ObjName
(
pNtk
,
iLit1
)
);
iTerm
=
Cba_ObjAlloc
(
pNtk
,
CBA_OBJ_BI
,
0
,
iLit0
);
iTerm
=
Cba_ObjAlloc
(
pNtk
,
CBA_OBJ_BI
,
0
,
iLit0
);
...
@@ -387,6 +379,7 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -387,6 +379,7 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
}
}
// create node and connect POs
// create node and connect POs
Gia_ManForEachPo
(
pGia
,
pObj
,
i
)
Gia_ManForEachPo
(
pGia
,
pObj
,
i
)
if
(
Cba_ObjFanin
(
pRoot
,
Cba_NtkPo
(
pRoot
,
i
))
==
-
1
)
// not a feedthrough
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
}
}
Cba_Man_t
*
Cba_ManInsertGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
)
Cba_Man_t
*
Cba_ManInsertGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
)
...
@@ -461,33 +454,22 @@ void Cba_ManMarkNodesAbc( Cba_Man_t * p, Abc_Ntk_t * pNtk )
...
@@ -461,33 +454,22 @@ void Cba_ManMarkNodesAbc( Cba_Man_t * p, Abc_Ntk_t * pNtk )
void
Cba_NtkCreateOrConnectFanin
(
Abc_Obj_t
*
pFanin
,
Cba_Ntk_t
*
p
,
int
iTerm
)
void
Cba_NtkCreateOrConnectFanin
(
Abc_Obj_t
*
pFanin
,
Cba_Ntk_t
*
p
,
int
iTerm
)
{
{
int
iObj
;
int
iObj
;
if
(
pFanin
&&
Abc_NodeIsSeriousGate
(
pFanin
)
)
if
(
pFanin
&&
Abc_NodeIsSeriousGate
(
pFanin
)
&&
Cba_ObjName
(
p
,
pFanin
->
iTemp
)
==
-
1
)
// gate without name
{
{
// Vec_IntWriteEntry( &p->vNameIds, pFanin->iTemp, Cba_ObjNameId(p, iTerm) );
// Vec_IntWriteEntry( &p->vFanins, iTerm, pFanin->iTemp );
iObj
=
pFanin
->
iTemp
;
iObj
=
pFanin
->
iTemp
;
}
}
else
if
(
pFanin
&&
(
Abc_ObjIsPi
(
pFanin
)
||
Abc_ObjIsBarBuf
(
pFanin
)
)
)
else
if
(
pFanin
&&
(
Abc_ObjIsPi
(
pFanin
)
||
Abc_ObjIsBarBuf
(
pFanin
)
||
Abc_NodeIsSeriousGate
(
pFanin
))
)
// PI/BO or gate with name
{
{
// Vec_IntWriteEntry( &p->vTypes, p->nObjs, CBA_OBJ_NODE );
assert
(
Cba_ObjName
(
p
,
pFanin
->
iTemp
)
!=
Cba_ObjName
(
p
,
iTerm
)
);
// not a feedthrough
// Vec_IntWriteEntry( &p->vFuncs, p->nObjs, 3 ); // assuming elem gates are added first
// Vec_IntWriteEntry( &p->vFanins, p->nObjs, Cba_ManHandleBuffer(p->pDesign, pFanin->iTemp) );
// Vec_IntWriteEntry( &p->vNameIds, p->nObjs, Cba_ObjNameId(p, iTerm) );
// Vec_IntWriteEntry( &p->vFanins, iTerm, p->nObjs++ );
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
pFanin
->
iTemp
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
pFanin
->
iTemp
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
pFanin
->
iTemp
)
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
pFanin
->
iTemp
)
);
Cba_ObjAlloc
(
p
,
CBA_BOX_GATE
,
p
->
pDesign
->
ElemGates
[
2
],
-
1
);
Cba_ObjAlloc
(
p
,
CBA_BOX_GATE
,
p
->
pDesign
->
ElemGates
[
2
],
-
1
);
// buffer
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
}
}
else
else
{
{
assert
(
!
pFanin
||
Abc_NodeIsConst0
(
pFanin
)
||
Abc_NodeIsConst1
(
pFanin
)
);
assert
(
!
pFanin
||
Abc_NodeIsConst0
(
pFanin
)
||
Abc_NodeIsConst1
(
pFanin
)
);
// Vec_IntWriteEntry( &p->vTypes, p->nObjs, CBA_OBJ_NODE );
Cba_ObjAlloc
(
p
,
CBA_BOX_GATE
,
p
->
pDesign
->
ElemGates
[(
pFanin
&&
Abc_NodeIsConst1
(
pFanin
))],
-
1
);
// const 0/1
// Vec_IntWriteEntry( &p->vFuncs, p->nObjs, pFanin && Abc_NodeIsConst1(pFanin) ? 2 : 1 ); // assuming elem gates are added first
// Vec_IntWriteEntry( &p->vFanins, p->nObjs, Cba_ManHandleBuffer(p->pDesign, -1) );
// Vec_IntWriteEntry( &p->vNameIds, p->nObjs, Cba_ObjNameId(p, iTerm) );
// Vec_IntWriteEntry( &p->vFanins, iTerm, p->nObjs++ );
Cba_ObjAlloc
(
p
,
CBA_BOX_GATE
,
p
->
pDesign
->
ElemGates
[(
pFanin
&&
Abc_NodeIsConst1
(
pFanin
))],
-
1
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
}
}
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
...
@@ -530,22 +512,13 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
...
@@ -530,22 +512,13 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
pCbaNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
pCbaNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pCbaNtk
,
iTerm
)
);
assert
(
Cba_ObjIsCo
(
pCbaNtk
,
iTerm
)
);
if
(
Cba_ObjFanin
(
pCbaNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
// prepare leaf
// prepare leaf
pObj
->
iTemp
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
pObj
->
iTemp
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
}
}
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
{
{
/*
Vec_IntClear( vTemp );
Abc_ObjForEachFanin( pObj, pFanin, k )
Vec_IntPush( vTemp, pFanin->iTemp );
pCbaNtk = Cba_ManNtk( p, pObj->iTemp );
Vec_IntWriteEntry( &pCbaNtk->vTypes, pCbaNtk->nObjs, CBA_OBJ_NODE );
Vec_IntWriteEntry( &pCbaNtk->vFuncs, pCbaNtk->nObjs, Abc_NamStrFind(p->pMods, Mio_GateReadName((Mio_Gate_t *)pObj->pData)) );
Vec_IntWriteEntry( &pCbaNtk->vFanins, pCbaNtk->nObjs, Cba_ManHandleArray(p, vTemp) );
pObj->iTemp = pCbaNtk->nObjs++;
*/
pCbaNtk
=
Cba_ManNtk
(
p
,
pObj
->
iTemp
);
pCbaNtk
=
Cba_ManNtk
(
p
,
pObj
->
iTemp
);
for
(
k
=
Abc_ObjFaninNum
(
pObj
)
-
1
;
k
>=
0
;
k
--
)
for
(
k
=
Abc_ObjFaninNum
(
pObj
)
-
1
;
k
>=
0
;
k
--
)
{
{
...
@@ -571,6 +544,7 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
...
@@ -571,6 +544,7 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
}
}
// create node and connect POs
// create node and connect POs
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
if
(
Cba_ObjFanin
(
pRoot
,
Cba_NtkPo
(
pRoot
,
i
))
==
-
1
)
// not a feedthrough
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
}
}
void
*
Cba_ManInsertAbc
(
Cba_Man_t
*
p
,
void
*
pAbc
)
void
*
Cba_ManInsertAbc
(
Cba_Man_t
*
p
,
void
*
pAbc
)
...
...
src/base/cba/cbaCom.c
View file @
7b1c2508
...
@@ -196,12 +196,14 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -196,12 +196,14 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"blif"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"blif"
)
)
{
{
vDes
=
Prs_ManReadBlif
(
pFileName
);
vDes
=
Prs_ManReadBlif
(
pFileName
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
{
{
vDes
=
Prs_ManReadVerilog
(
pFileName
);
vDes
=
Prs_ManReadVerilog
(
pFileName
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
...
@@ -352,12 +354,15 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -352,12 +354,15 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
{
{
Cba_Man_t
*
p
=
Cba_AbcGetMan
(
pAbc
);
Cba_Man_t
*
p
=
Cba_AbcGetMan
(
pAbc
);
Gia_Man_t
*
pGia
=
NULL
;
Gia_Man_t
*
pGia
=
NULL
;
int
c
,
fVerbose
=
0
;
int
c
,
f
BarBufs
=
1
,
f
Verbose
=
0
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"
b
vh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
case
'b'
:
fBarBufs
^=
1
;
break
;
case
'v'
:
case
'v'
:
fVerbose
^=
1
;
fVerbose
^=
1
;
break
;
break
;
...
@@ -372,7 +377,7 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -372,7 +377,7 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print
(
1
,
"Cba_CommandPut(): There is no current design.
\n
"
);
Abc_Print
(
1
,
"Cba_CommandPut(): There is no current design.
\n
"
);
return
0
;
return
0
;
}
}
pGia
=
Cba_ManExtract
(
p
,
1
,
0
);
pGia
=
Cba_ManExtract
(
p
,
fBarBufs
,
fVerbose
);
if
(
pGia
==
NULL
)
if
(
pGia
==
NULL
)
{
{
Abc_Print
(
1
,
"Cba_CommandPut(): Conversion to AIG has failed.
\n
"
);
Abc_Print
(
1
,
"Cba_CommandPut(): Conversion to AIG has failed.
\n
"
);
...
@@ -381,8 +386,9 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -381,8 +386,9 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_FrameUpdateGia
(
pAbc
,
pGia
);
Abc_FrameUpdateGia
(
pAbc
,
pGia
);
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: @put [-mvh]
\n
"
);
Abc_Print
(
-
2
,
"usage: @put [-bvh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
extracts AIG with barrier buffers from the hierarchical design
\n
"
);
Abc_Print
(
-
2
,
"
\t
extracts AIG from the hierarchical design
\n
"
);
Abc_Print
(
-
2
,
"
\t
-b : toggle using barrier buffers [default = %s]
\n
"
,
fBarBufs
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
return
1
;
return
1
;
...
@@ -517,7 +523,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -517,7 +523,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
Cec_ParCec_t
ParsCec
,
*
pPars
=
&
ParsCec
;
Cec_ParCec_t
ParsCec
,
*
pPars
=
&
ParsCec
;
Vec_Ptr_t
*
vDes
;
Vec_Ptr_t
*
vDes
;
char
*
FileName
,
*
pStr
,
**
pArgvNew
;
char
*
FileName
,
*
pStr
,
**
pArgvNew
;
int
c
,
nArgcNew
,
fDumpMiter
=
0
,
fVerbose
=
0
;
int
c
,
nArgcNew
,
fDumpMiter
=
0
;
FILE
*
pFile
;
FILE
*
pFile
;
Cec_ManCecSetDefaultParams
(
pPars
);
Cec_ManCecSetDefaultParams
(
pPars
);
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
...
@@ -526,7 +532,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -526,7 +532,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
switch
(
c
)
switch
(
c
)
{
{
case
'v'
:
case
'v'
:
fVerbose
^=
1
;
pPars
->
fVerbose
^=
1
;
break
;
break
;
case
'h'
:
case
'h'
:
goto
usage
;
goto
usage
;
...
@@ -608,7 +614,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -608,7 +614,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
usage:
usage:
Abc_Print
(
-
2
,
"usage: @cec [-vh]
\n
"
);
Abc_Print
(
-
2
,
"usage: @cec [-vh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
combinational equivalence checking
\n
"
);
Abc_Print
(
-
2
,
"
\t
combinational equivalence checking
\n
"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
pPars
->
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
return
1
;
return
1
;
}
}
...
...
src/base/cba/cbaNtk.c
View file @
7b1c2508
...
@@ -77,7 +77,7 @@ void Cba_ManAssignInternNamesNtk( Cba_Ntk_t * p )
...
@@ -77,7 +77,7 @@ void Cba_ManAssignInternNamesNtk( Cba_Ntk_t * p )
continue
;
continue
;
sprintf
(
Buffer
,
"%s%0*d"
,
"_n_"
,
nDigits
,
iTerm
);
sprintf
(
Buffer
,
"%s%0*d"
,
"_n_"
,
nDigits
,
iTerm
);
NameId
=
Abc_NamStrFindOrAdd
(
p
->
pDesign
->
pStrs
,
Buffer
,
&
fFound
);
NameId
=
Abc_NamStrFindOrAdd
(
p
->
pDesign
->
pStrs
,
Buffer
,
&
fFound
);
assert
(
!
fFound
);
//
assert( !fFound );
Cba_ObjSetName
(
p
,
iTerm
,
NameId
);
Cba_ObjSetName
(
p
,
iTerm
,
NameId
);
}
}
// transfer names for prim BI
// transfer names for prim BI
...
...
src/base/cba/cbaWriteVer.c
View file @
7b1c2508
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include "cba.h"
#include "cba.h"
#include "cbaPrs.h"
#include "cbaPrs.h"
#include "map/mio/mio.h"
#include "base/main/main.h"
#include "base/main/main.h"
ABC_NAMESPACE_IMPL_START
ABC_NAMESPACE_IMPL_START
...
@@ -260,7 +261,19 @@ void Cba_ManWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p )
...
@@ -260,7 +261,19 @@ void Cba_ManWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p )
fprintf
(
pFile
,
"%s.%s(%s)"
,
k
?
", "
:
""
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_BoxBi
(
p
,
i
,
k
))
);
fprintf
(
pFile
,
"%s.%s(%s)"
,
k
?
", "
:
""
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_BoxBi
(
p
,
i
,
k
))
);
Cba_NtkForEachPo
(
pModel
,
iTerm
,
k
)
Cba_NtkForEachPo
(
pModel
,
iTerm
,
k
)
fprintf
(
pFile
,
"%s.%s(%s)"
,
Cba_NtkPiNum
(
pModel
)
?
", "
:
""
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_BoxBo
(
p
,
i
,
k
))
);
fprintf
(
pFile
,
"%s.%s(%s)"
,
Cba_NtkPiNum
(
pModel
)
?
", "
:
""
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_BoxBo
(
p
,
i
,
k
))
);
fprintf
(
pFile
,
")
\n
"
);
fprintf
(
pFile
,
");
\n
"
);
}
else
if
(
Cba_ObjIsGate
(
p
,
i
)
)
{
char
*
pGateName
=
Abc_NamStr
(
p
->
pDesign
->
pMods
,
Cba_BoxNtkId
(
p
,
i
));
Mio_Library_t
*
pLib
=
(
Mio_Library_t
*
)
Abc_FrameReadLibGen
(
Abc_FrameGetGlobalFrame
()
);
Mio_Gate_t
*
pGate
=
Mio_LibraryReadGateByName
(
pLib
,
pGateName
,
NULL
);
fprintf
(
pFile
,
" %s ("
,
pGateName
);
Cba_BoxForEachBi
(
p
,
i
,
iTerm
,
k
)
fprintf
(
pFile
,
"%s.%s(%s)"
,
k
?
", "
:
""
,
Mio_GateReadPinName
(
pGate
,
k
),
Cba_ObjNameStr
(
p
,
iTerm
)
);
Cba_BoxForEachBo
(
p
,
i
,
iTerm
,
k
)
fprintf
(
pFile
,
"%s.%s(%s)"
,
Cba_BoxBiNum
(
p
,
i
)
?
", "
:
""
,
Mio_GateReadOutName
(
pGate
),
Cba_ObjNameStr
(
p
,
iTerm
)
);
fprintf
(
pFile
,
");
\n
"
);
}
}
else
else
{
{
...
...
src/bool/dec/decFactor.c
View file @
7b1c2508
...
@@ -57,23 +57,20 @@ Dec_Graph_t * Dec_Factor( char * pSop )
...
@@ -57,23 +57,20 @@ Dec_Graph_t * Dec_Factor( char * pSop )
Mvc_Cover_t
*
pCover
;
Mvc_Cover_t
*
pCover
;
Dec_Graph_t
*
pFForm
;
Dec_Graph_t
*
pFForm
;
Dec_Edge_t
eRoot
;
Dec_Edge_t
eRoot
;
if
(
Abc_SopIsConst0
(
pSop
)
)
return
Dec_GraphCreateConst0
();
if
(
Abc_SopIsConst1
(
pSop
)
)
return
Dec_GraphCreateConst1
();
// derive the cover from the SOP representation
// derive the cover from the SOP representation
pCover
=
Dec_ConvertSopToMvc
(
pSop
);
pCover
=
Dec_ConvertSopToMvc
(
pSop
);
// make sure the cover is CCS free (should be done before CST)
// make sure the cover is CCS free (should be done before CST)
Mvc_CoverContain
(
pCover
);
Mvc_CoverContain
(
pCover
);
// check for trivial functions
// check for trivial functions
if
(
Mvc_CoverIsEmpty
(
pCover
)
)
assert
(
!
Mvc_CoverIsEmpty
(
pCover
)
);
{
assert
(
!
Mvc_CoverIsTautology
(
pCover
)
);
Mvc_CoverFree
(
pCover
);
return
Dec_GraphCreateConst0
();
}
if
(
Mvc_CoverIsTautology
(
pCover
)
)
{
Mvc_CoverFree
(
pCover
);
return
Dec_GraphCreateConst1
();
}
// perform CST
// perform CST
Mvc_CoverInverse
(
pCover
);
// CST
Mvc_CoverInverse
(
pCover
);
// CST
...
@@ -334,6 +331,7 @@ Mvc_Cover_t * Dec_ConvertSopToMvc( char * pSop )
...
@@ -334,6 +331,7 @@ Mvc_Cover_t * Dec_ConvertSopToMvc( char * pSop )
// start the cover
// start the cover
nVars
=
Abc_SopGetVarNum
(
pSop
);
nVars
=
Abc_SopGetVarNum
(
pSop
);
assert
(
nVars
>
0
);
pMvc
=
Mvc_CoverAlloc
(
pMem
,
nVars
*
2
);
pMvc
=
Mvc_CoverAlloc
(
pMem
,
nVars
*
2
);
// check the logic function of the node
// check the logic function of the node
Abc_SopForEachCube
(
pSop
,
nVars
,
pCube
)
Abc_SopForEachCube
(
pSop
,
nVars
,
pCube
)
...
...
src/map/scl/sclBuffer.c
View file @
7b1c2508
...
@@ -296,6 +296,8 @@ int Abc_SclCheckNtk( Abc_Ntk_t * p, int fVerbose )
...
@@ -296,6 +296,8 @@ int Abc_SclCheckNtk( Abc_Ntk_t * p, int fVerbose )
if
(
!
Abc_NodeIsTravIdCurrent
(
pFanin
)
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pFanin
)
)
printf
(
"obj %d and its fanin %d are not in the topo order
\n
"
,
Abc_ObjId
(
pObj
),
Abc_ObjId
(
pFanin
)
),
fFlag
=
0
;
printf
(
"obj %d and its fanin %d are not in the topo order
\n
"
,
Abc_ObjId
(
pObj
),
Abc_ObjId
(
pFanin
)
),
fFlag
=
0
;
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NodeSetTravIdCurrent
(
pObj
);
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
continue
;
if
(
Abc_ObjFanoutNum
(
pObj
)
==
0
)
if
(
Abc_ObjFanoutNum
(
pObj
)
==
0
)
printf
(
"node %d has no fanout
\n
"
,
Abc_ObjId
(
pObj
)
),
fFlag
=
0
;
printf
(
"node %d has no fanout
\n
"
,
Abc_ObjId
(
pObj
)
),
fFlag
=
0
;
if
(
!
fFlag
)
if
(
!
fFlag
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment