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
610a3d3f
Commit
610a3d3f
authored
May 15, 2021
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding switch muxes -a to create networks of ADDs.
parent
ed13c6d4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
15 deletions
+38
-15
src/base/abc/abc.h
+1
-1
src/base/abci/abc.c
+8
-4
src/base/abci/abcNtbdd.c
+28
-9
src/bdd/llb/llb4Nonlin.c
+1
-1
No files found.
src/base/abc/abc.h
View file @
610a3d3f
...
...
@@ -762,7 +762,7 @@ extern ABC_DLL Abc_Ntk_t * Abc_NtkToNetlist( Abc_Ntk_t * pNtk );
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkToNetlistBench
(
Abc_Ntk_t
*
pNtk
);
/*=== abcNtbdd.c ==========================================================*/
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkDeriveFromBdd
(
void
*
dd
,
void
*
bFunc
,
char
*
pNamePo
,
Vec_Ptr_t
*
vNamesPi
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
,
int
fUseAdd
);
extern
ABC_DLL
void
*
Abc_NtkBuildGlobalBdds
(
Abc_Ntk_t
*
pNtk
,
int
fBddSizeMax
,
int
fDropInternal
,
int
fReorder
,
int
fReverse
,
int
fVerbose
);
extern
ABC_DLL
void
*
Abc_NtkFreeGlobalBdds
(
Abc_Ntk_t
*
pNtk
,
int
fFreeMan
);
extern
ABC_DLL
int
Abc_NtkSizeOfGlobalBdds
(
Abc_Ntk_t
*
pNtk
);
...
...
src/base/abci/abc.c
View file @
610a3d3f
...
...
@@ -11111,11 +11111,11 @@ usage:
int
Abc_CommandMuxes
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
Abc_Ntk_t
*
pNtk
,
*
pNtkRes
;
int
c
,
fGlobal
=
0
,
Limit
=
1000000
;
int
c
,
fGlobal
=
0
,
fUseAdd
=
0
,
Limit
=
1000000
;
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
// set defaults
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"Bgh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"Bg
a
h"
)
)
!=
EOF
)
{
switch
(
c
)
{
...
...
@@ -11133,6 +11133,9 @@ int Abc_CommandMuxes( Abc_Frame_t * pAbc, int argc, char ** argv )
case
'g'
:
fGlobal
^=
1
;
break
;
case
'a'
:
fUseAdd
^=
1
;
break
;
case
'h'
:
goto
usage
;
default:
...
...
@@ -11164,7 +11167,7 @@ int Abc_CommandMuxes( Abc_Frame_t * pAbc, int argc, char ** argv )
}
// get the new network
pNtkRes
=
Abc_NtkBddToMuxes
(
pNtk
,
fGlobal
,
Limit
);
pNtkRes
=
Abc_NtkBddToMuxes
(
pNtk
,
fGlobal
,
Limit
,
fUseAdd
);
if
(
pNtkRes
==
NULL
)
{
Abc_Print
(
0
,
"Converting to MUXes has failed.
\n
"
);
...
...
@@ -11175,11 +11178,12 @@ int Abc_CommandMuxes( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
usage:
Abc_Print
(
-
2
,
"usage: muxes [-B num] [-gh]
\n
"
);
Abc_Print
(
-
2
,
"usage: muxes [-B num] [-g
a
h]
\n
"
);
Abc_Print
(
-
2
,
"
\t
converts the current network into a network derived by
\n
"
);
Abc_Print
(
-
2
,
"
\t
replacing all nodes by DAGs isomorphic to the local BDDs
\n
"
);
Abc_Print
(
-
2
,
"
\t
-B <num>: limit on live BDD nodes during collapsing [default = %d]
\n
"
,
Limit
);
Abc_Print
(
-
2
,
"
\t
-g : toggle visualizing the global BDDs of primary outputs [default = %s].
\n
"
,
fGlobal
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-a : toggle using ADDs instead of BDDs [default = %s].
\n
"
,
fUseAdd
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
return
1
;
}
src/base/abci/abcNtbdd.c
View file @
610a3d3f
...
...
@@ -34,7 +34,7 @@ ABC_NAMESPACE_IMPL_START
#ifdef ABC_USE_CUDD
int
Abc_NtkBddToMuxesPerformGlo
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtkNew
,
int
Limit
,
int
fReorder
);
int
Abc_NtkBddToMuxesPerformGlo
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtkNew
,
int
Limit
,
int
fReorder
,
int
fUseAdd
);
static
void
Abc_NtkBddToMuxesPerform
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtkNew
);
static
Abc_Obj_t
*
Abc_NodeBddToMuxes
(
Abc_Obj_t
*
pNodeOld
,
Abc_Ntk_t
*
pNtkNew
);
static
Abc_Obj_t
*
Abc_NodeBddToMuxes_rec
(
DdManager
*
dd
,
DdNode
*
bFunc
,
Abc_Ntk_t
*
pNtkNew
,
st__table
*
tBdd2Node
);
...
...
@@ -129,13 +129,13 @@ Abc_Ntk_t * Abc_NtkDeriveFromBdd( void * dd0, void * bFunc, char * pNamePo, Vec_
SeeAlso []
***********************************************************************/
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
)
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
,
int
fUseAdd
)
{
Abc_Ntk_t
*
pNtkNew
;
pNtkNew
=
Abc_NtkStartFrom
(
pNtk
,
ABC_NTK_LOGIC
,
ABC_FUNC_SOP
);
if
(
fGlobal
)
{
if
(
!
Abc_NtkBddToMuxesPerformGlo
(
pNtk
,
pNtkNew
,
Limit
,
0
)
)
if
(
!
Abc_NtkBddToMuxesPerformGlo
(
pNtk
,
pNtkNew
,
Limit
,
0
,
fUseAdd
)
)
{
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
...
...
@@ -237,8 +237,10 @@ Abc_Obj_t * Abc_NodeBddToMuxes_rec( DdManager * dd, DdNode * bFunc, Abc_Ntk_t *
{
Abc_Obj_t
*
pNodeNew
,
*
pNodeNew0
,
*
pNodeNew1
,
*
pNodeNewC
;
assert
(
!
Cudd_IsComplement
(
bFunc
)
);
if
(
bFunc
==
b1
)
if
(
bFunc
==
b1
||
bFunc
==
a1
)
return
Abc_NtkCreateNodeConst1
(
pNtkNew
);
if
(
bFunc
==
a0
)
return
Abc_NtkCreateNodeConst0
(
pNtkNew
);
if
(
st__lookup
(
tBdd2Node
,
(
char
*
)
bFunc
,
(
char
**
)
&
pNodeNew
)
)
return
pNodeNew
;
// solve for the children nodes
...
...
@@ -265,9 +267,10 @@ Abc_Obj_t * Abc_NodeBddToMuxes_rec( DdManager * dd, DdNode * bFunc, Abc_Ntk_t *
SeeAlso []
***********************************************************************/
int
Abc_NtkBddToMuxesPerformGlo
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtkNew
,
int
Limit
,
int
fReorder
)
int
Abc_NtkBddToMuxesPerformGlo
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtkNew
,
int
Limit
,
int
fReorder
,
int
fUseAdd
)
{
DdManager
*
dd
;
Vec_Ptr_t
*
vAdds
=
fUseAdd
?
Vec_PtrAlloc
(
100
)
:
NULL
;
Abc_Obj_t
*
pObj
,
*
pObjNew
;
int
i
;
st__table
*
tBdd2Node
;
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
...
...
@@ -287,15 +290,31 @@ int Abc_NtkBddToMuxesPerformGlo( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew, int Limi
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
{
DdNode
*
bFunc
=
(
DdNode
*
)
Abc_ObjGlobalBdd
(
pObj
);
pObjNew
=
Abc_NodeBddToMuxes_rec
(
dd
,
Cudd_Regular
(
bFunc
),
pNtkNew
,
tBdd2Node
);
if
(
Cudd_IsComplement
(
bFunc
)
)
pObjNew
=
Abc_NtkCreateNodeInv
(
pNtkNew
,
pObjNew
);
if
(
fUseAdd
)
{
DdNode
*
aFunc
=
Cudd_BddToAdd
(
dd
,
bFunc
);
Cudd_Ref
(
aFunc
);
pObjNew
=
Abc_NodeBddToMuxes_rec
(
dd
,
aFunc
,
pNtkNew
,
tBdd2Node
);
Vec_PtrPush
(
vAdds
,
aFunc
);
}
else
{
pObjNew
=
Abc_NodeBddToMuxes_rec
(
dd
,
Cudd_Regular
(
bFunc
),
pNtkNew
,
tBdd2Node
);
if
(
Cudd_IsComplement
(
bFunc
)
)
pObjNew
=
Abc_NtkCreateNodeInv
(
pNtkNew
,
pObjNew
);
}
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pObjNew
);
}
// cleanup
st__free_table
(
tBdd2Node
);
Abc_NtkFreeGlobalBdds
(
pNtk
,
0
);
if
(
vAdds
)
{
DdNode
*
aTemp
;
Vec_PtrForEachEntry
(
DdNode
*
,
vAdds
,
aTemp
,
i
)
Cudd_RecursiveDeref
(
dd
,
aTemp
);
Vec_PtrFree
(
vAdds
);
}
Extra_StopManager
(
dd
);
Abc_NtkCleanCopy
(
pNtk
);
return
1
;
...
...
@@ -663,7 +682,7 @@ ABC_PRT( "Time", Abc_Clock() - clk );
#else
double
Abc_NtkSpacePercentage
(
Abc_Obj_t
*
pNode
)
{
return
0
.
0
;
}
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
)
{
return
NULL
;
}
Abc_Ntk_t
*
Abc_NtkBddToMuxes
(
Abc_Ntk_t
*
pNtk
,
int
fGlobal
,
int
Limit
,
int
fUseAdd
)
{
return
NULL
;
}
#endif
...
...
src/bdd/llb/llb4Nonlin.c
View file @
610a3d3f
...
...
@@ -1156,7 +1156,7 @@ Aig_Man_t * Llb_ReachableStates( Aig_Man_t * pAig )
Cudd_Quit
(
dd
);
// convert
pNtkMuxes
=
Abc_NtkBddToMuxes
(
pNtk
,
0
,
1000000
);
pNtkMuxes
=
Abc_NtkBddToMuxes
(
pNtk
,
0
,
1000000
,
0
);
Abc_NtkDelete
(
pNtk
);
pNtk
=
Abc_NtkStrash
(
pNtkMuxes
,
0
,
1
,
0
);
Abc_NtkDelete
(
pNtkMuxes
);
...
...
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