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
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
71 additions
and
70 deletions
+71
-70
src/base/abci/abcDar.c
+1
-1
src/base/cba/cba.h
+11
-3
src/base/cba/cbaBlast.c
+18
-44
src/base/cba/cbaCom.c
+16
-10
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
}
Abc_Ntk_t
*
Abc_NtkFromCellMappedGia
(
Gia_Man_t
*
p
)
{
int
fFixDrivers
=
0
;
int
fFixDrivers
=
1
;
int
fDuplicate
=
1
;
int
fVerbose
=
1
;
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
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_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_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
);
}
...
...
@@ -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_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_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_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 )
{
int
i
,
iObj
;
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
);
if
(
Cba_NtkHasNames
(
p
)
)
Cba_NtkStartNames
(
pNew
);
...
...
@@ -455,6 +457,12 @@ static inline void Cba_NtkDupUserBoxes( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
Cba_ObjDup
(
pNew
,
p
,
iObj
);
Cba_NtkForEachBoxUser
(
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
)
{
...
...
@@ -627,7 +635,7 @@ static inline void Cba_ManPrintStats( Cba_Man_t * p, int nModules, int fVerbose
Cba_Ntk_t
*
pRoot
=
Cba_ManRoot
(
p
);
printf
(
"%-12s : "
,
Cba_ManName
(
p
)
);
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
(
"box =%7d "
,
Cba_ManNodeNum
(
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
Dec_Graph_t
*
pGraph
=
(
Dec_Graph_t
*
)
p
->
pDesign
->
ppGraphs
[
Cba_BoxNtkId
(
p
,
iBox
)];
Vec_Int_t
Leaves
=
{
nLits
,
nLits
,
pLits
};
assert
(
pGraph
!=
NULL
);
if
(
pGraph
->
nLeaves
==
0
)
{
int
s
=
0
;
}
return
Gia_ManFactorGraph
(
pNew
,
pGraph
,
&
Leaves
);
}
else
...
...
@@ -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
)
{
int
iObj
;
// Vec_IntWriteEntry( &p->vTypes, p->nObjs, CBA_OBJ_NODE );
if
(
pGia
&&
Gia_ObjFaninId0p
(
pGia
,
pObj
)
>
0
)
{
// Vec_IntWriteEntry( &p->vFuncs, p->nObjs, Gia_ObjFaninC0(pObj) ? CBA_BOX_INV : CBA_BOX_BUF );
// Vec_IntWriteEntry( &p->vFanins, p->nObjs, Cba_ManHandleBuffer(p->pDesign, Gia_ObjFanin0(pObj)->Value) );
assert
(
Cba_ObjName
(
p
,
Gia_ObjFanin0
(
pObj
)
->
Value
)
!=
Cba_ObjName
(
p
,
iTerm
)
);
// not a feedthrough
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
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
);
}
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
);
}
// 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
);
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
Cba_ObjSetFanin
(
p
,
iTerm
,
iObj
);
...
...
@@ -335,7 +333,8 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pNtk
,
iTerm
)
);
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
if
(
Cba_ObjFanin
(
pNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
// prepare leaf
pObj
->
Value
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
}
...
...
@@ -357,13 +356,6 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
else
Type
=
CBA_BOX_AND
;
// 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
);
Cba_ObjSetName
(
pNtk
,
iTerm
,
Cba_ObjName
(
pNtk
,
iLit1
)
);
iTerm
=
Cba_ObjAlloc
(
pNtk
,
CBA_OBJ_BI
,
0
,
iLit0
);
...
...
@@ -387,7 +379,8 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
}
// create node and connect POs
Gia_ManForEachPo
(
pGia
,
pObj
,
i
)
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
if
(
Cba_ObjFanin
(
pRoot
,
Cba_NtkPo
(
pRoot
,
i
))
==
-
1
)
// not a feedthrough
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
}
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 )
void
Cba_NtkCreateOrConnectFanin
(
Abc_Obj_t
*
pFanin
,
Cba_Ntk_t
*
p
,
int
iTerm
)
{
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
;
}
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 );
// 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++ );
assert
(
Cba_ObjName
(
p
,
pFanin
->
iTemp
)
!=
Cba_ObjName
(
p
,
iTerm
)
);
// not a feedthrough
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BI
,
0
,
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
);
}
else
{
assert
(
!
pFanin
||
Abc_NodeIsConst0
(
pFanin
)
||
Abc_NodeIsConst1
(
pFanin
)
);
// Vec_IntWriteEntry( &p->vTypes, p->nObjs, CBA_OBJ_NODE );
// 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
);
Cba_ObjAlloc
(
p
,
CBA_BOX_GATE
,
p
->
pDesign
->
ElemGates
[(
pFanin
&&
Abc_NodeIsConst1
(
pFanin
))],
-
1
);
// const 0/1
iObj
=
Cba_ObjAlloc
(
p
,
CBA_OBJ_BO
,
0
,
-
1
);
}
Cba_ObjSetName
(
p
,
iObj
,
Cba_ObjName
(
p
,
iTerm
)
);
...
...
@@ -530,22 +512,13 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
pCbaNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pCbaNtk
,
iTerm
)
);
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
if
(
Cba_ObjFanin
(
pCbaNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
// prepare leaf
pObj
->
iTemp
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
}
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
);
for
(
k
=
Abc_ObjFaninNum
(
pObj
)
-
1
;
k
>=
0
;
k
--
)
{
...
...
@@ -571,7 +544,8 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
}
// create node and connect POs
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
if
(
Cba_ObjFanin
(
pRoot
,
Cba_NtkPo
(
pRoot
,
i
))
==
-
1
)
// not a feedthrough
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pRoot
,
Cba_NtkPo
(
pRoot
,
i
)
);
}
void
*
Cba_ManInsertAbc
(
Cba_Man_t
*
p
,
void
*
pAbc
)
{
...
...
src/base/cba/cbaCom.c
View file @
7b1c2508
...
...
@@ -196,13 +196,15 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"blif"
)
)
{
vDes
=
Prs_ManReadBlif
(
pFileName
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
{
vDes
=
Prs_ManReadVerilog
(
pFileName
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
}
else
assert
(
0
);
...
...
@@ -352,12 +354,15 @@ int Cba_CommandPut( Abc_Frame_t * pAbc, int argc, char ** argv )
{
Cba_Man_t
*
p
=
Cba_AbcGetMan
(
pAbc
);
Gia_Man_t
*
pGia
=
NULL
;
int
c
,
fVerbose
=
0
;
int
c
,
f
BarBufs
=
1
,
f
Verbose
=
0
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"
b
vh"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'b'
:
fBarBufs
^=
1
;
break
;
case
'v'
:
fVerbose
^=
1
;
break
;
...
...
@@ -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
"
);
return
0
;
}
pGia
=
Cba_ManExtract
(
p
,
1
,
0
);
pGia
=
Cba_ManExtract
(
p
,
fBarBufs
,
fVerbose
);
if
(
pGia
==
NULL
)
{
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 )
Abc_FrameUpdateGia
(
pAbc
,
pGia
);
return
0
;
usage:
Abc_Print
(
-
2
,
"usage: @put [-mvh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
extracts AIG with barrier buffers from the hierarchical design
\n
"
);
Abc_Print
(
-
2
,
"usage: @put [-bvh]
\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
-h : print the command usage
\n
"
);
return
1
;
...
...
@@ -517,7 +523,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
Cec_ParCec_t
ParsCec
,
*
pPars
=
&
ParsCec
;
Vec_Ptr_t
*
vDes
;
char
*
FileName
,
*
pStr
,
**
pArgvNew
;
int
c
,
nArgcNew
,
fDumpMiter
=
0
,
fVerbose
=
0
;
int
c
,
nArgcNew
,
fDumpMiter
=
0
;
FILE
*
pFile
;
Cec_ManCecSetDefaultParams
(
pPars
);
Extra_UtilGetoptReset
();
...
...
@@ -526,7 +532,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
switch
(
c
)
{
case
'v'
:
fVerbose
^=
1
;
pPars
->
fVerbose
^=
1
;
break
;
case
'h'
:
goto
usage
;
...
...
@@ -608,7 +614,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
usage:
Abc_Print
(
-
2
,
"usage: @cec [-vh]
\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
"
);
return
1
;
}
...
...
src/base/cba/cbaNtk.c
View file @
7b1c2508
...
...
@@ -77,7 +77,7 @@ void Cba_ManAssignInternNamesNtk( Cba_Ntk_t * p )
continue
;
sprintf
(
Buffer
,
"%s%0*d"
,
"_n_"
,
nDigits
,
iTerm
);
NameId
=
Abc_NamStrFindOrAdd
(
p
->
pDesign
->
pStrs
,
Buffer
,
&
fFound
);
assert
(
!
fFound
);
//
assert( !fFound );
Cba_ObjSetName
(
p
,
iTerm
,
NameId
);
}
// transfer names for prim BI
...
...
src/base/cba/cbaWriteVer.c
View file @
7b1c2508
...
...
@@ -20,6 +20,7 @@
#include "cba.h"
#include "cbaPrs.h"
#include "map/mio/mio.h"
#include "base/main/main.h"
ABC_NAMESPACE_IMPL_START
...
...
@@ -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
))
);
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
,
")
\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
{
...
...
src/bool/dec/decFactor.c
View file @
7b1c2508
...
...
@@ -57,23 +57,20 @@ Dec_Graph_t * Dec_Factor( char * pSop )
Mvc_Cover_t
*
pCover
;
Dec_Graph_t
*
pFForm
;
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
pCover
=
Dec_ConvertSopToMvc
(
pSop
);
// make sure the cover is CCS free (should be done before CST)
Mvc_CoverContain
(
pCover
);
// check for trivial functions
if
(
Mvc_CoverIsEmpty
(
pCover
)
)
{
Mvc_CoverFree
(
pCover
);
return
Dec_GraphCreateConst0
();
}
if
(
Mvc_CoverIsTautology
(
pCover
)
)
{
Mvc_CoverFree
(
pCover
);
return
Dec_GraphCreateConst1
();
}
assert
(
!
Mvc_CoverIsEmpty
(
pCover
)
);
assert
(
!
Mvc_CoverIsTautology
(
pCover
)
);
// perform CST
Mvc_CoverInverse
(
pCover
);
// CST
...
...
@@ -334,6 +331,7 @@ Mvc_Cover_t * Dec_ConvertSopToMvc( char * pSop )
// start the cover
nVars
=
Abc_SopGetVarNum
(
pSop
);
assert
(
nVars
>
0
);
pMvc
=
Mvc_CoverAlloc
(
pMem
,
nVars
*
2
);
// check the logic function of the node
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 )
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
;
Abc_NodeSetTravIdCurrent
(
pObj
);
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
continue
;
if
(
Abc_ObjFanoutNum
(
pObj
)
==
0
)
printf
(
"node %d has no fanout
\n
"
,
Abc_ObjId
(
pObj
)
),
fFlag
=
0
;
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