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
b4df114e
Commit
b4df114e
authored
Mar 25, 2012
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Logic sharing for multi-input gates.
parent
309bcf2d
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
101 additions
and
9 deletions
+101
-9
abclib.dsp
+0
-4
src/base/abc/abc.h
+2
-0
src/base/abci/abc.c
+92
-3
src/base/abci/abcExtract.c
+0
-0
src/base/abci/abcShare.c
+0
-0
src/base/abci/abcStrash.c
+7
-2
No files found.
abclib.dsp
View file @
b4df114e
...
@@ -423,10 +423,6 @@ SOURCE=.\src\base\abci\abcSense.c
...
@@ -423,10 +423,6 @@ SOURCE=.\src\base\abci\abcSense.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\src\base\abci\abcShare.c
# End Source File
# Begin Source File
SOURCE=.\src\base\abci\abcSpeedup.c
SOURCE=.\src\base\abci\abcSpeedup.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
...
...
src/base/abc/abc.h
View file @
b4df114e
...
@@ -572,6 +572,7 @@ extern ABC_DLL void Abc_NodeFreeCuts( void * p, Abc_Obj_t * pObj )
...
@@ -572,6 +572,7 @@ extern ABC_DLL void Abc_NodeFreeCuts( void * p, Abc_Obj_t * pObj )
/*=== abcDar.c ============================================================*/
/*=== abcDar.c ============================================================*/
extern
ABC_DLL
int
Abc_NtkPhaseFrameNum
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
int
Abc_NtkPhaseFrameNum
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
int
Abc_NtkDarPrintCone
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
int
Abc_NtkDarPrintCone
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkBalanceExor
(
Abc_Ntk_t
*
pNtk
,
int
fUpdateLevel
,
int
fVerbose
);
/*=== abcDelay.c ==========================================================*/
/*=== abcDelay.c ==========================================================*/
extern
ABC_DLL
float
Abc_NtkDelayTraceLut
(
Abc_Ntk_t
*
pNtk
,
int
fUseLutLib
);
extern
ABC_DLL
float
Abc_NtkDelayTraceLut
(
Abc_Ntk_t
*
pNtk
,
int
fUseLutLib
);
/*=== abcDfs.c ==========================================================*/
/*=== abcDfs.c ==========================================================*/
...
@@ -852,6 +853,7 @@ extern ABC_DLL word Abc_SopToTruth( char * pSop, int nInputs );
...
@@ -852,6 +853,7 @@ extern ABC_DLL word Abc_SopToTruth( char * pSop, int nInputs );
extern
ABC_DLL
void
Abc_SopToTruth7
(
char
*
pSop
,
int
nInputs
,
word
r
[
2
]
);
extern
ABC_DLL
void
Abc_SopToTruth7
(
char
*
pSop
,
int
nInputs
,
word
r
[
2
]
);
extern
ABC_DLL
void
Abc_SopToTruthBig
(
char
*
pSop
,
int
nInputs
,
word
**
pVars
,
word
*
pCube
,
word
*
pRes
);
extern
ABC_DLL
void
Abc_SopToTruthBig
(
char
*
pSop
,
int
nInputs
,
word
**
pVars
,
word
*
pCube
,
word
*
pRes
);
/*=== abcStrash.c ==========================================================*/
/*=== abcStrash.c ==========================================================*/
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkRestrash
(
Abc_Ntk_t
*
pNtk
,
int
fCleanup
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkStrash
(
Abc_Ntk_t
*
pNtk
,
int
fAllNodes
,
int
fCleanup
,
int
fRecord
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkStrash
(
Abc_Ntk_t
*
pNtk
,
int
fAllNodes
,
int
fCleanup
,
int
fRecord
);
extern
ABC_DLL
Abc_Obj_t
*
Abc_NodeStrash
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pNode
,
int
fRecord
);
extern
ABC_DLL
Abc_Obj_t
*
Abc_NodeStrash
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pNode
,
int
fRecord
);
extern
ABC_DLL
int
Abc_NtkAppend
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fAddPos
);
extern
ABC_DLL
int
Abc_NtkAppend
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fAddPos
);
...
...
src/base/abci/abc.c
View file @
b4df114e
...
@@ -115,6 +115,7 @@ static int Abc_CommandRestructure ( Abc_Frame_t * pAbc, int argc, cha
...
@@ -115,6 +115,7 @@ static int Abc_CommandRestructure ( Abc_Frame_t * pAbc, int argc, cha
static
int
Abc_CommandResubstitute
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandResubstitute
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandRr
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandRr
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandCascade
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandCascade
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandExtract
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandLogic
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandLogic
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandComb
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandComb
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
...
@@ -560,6 +561,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
...
@@ -560,6 +561,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd
(
pAbc
,
"Synthesis"
,
"resub"
,
Abc_CommandResubstitute
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Synthesis"
,
"resub"
,
Abc_CommandResubstitute
,
1
);
// Cmd_CommandAdd( pAbc, "Synthesis", "rr", Abc_CommandRr, 1 );
// Cmd_CommandAdd( pAbc, "Synthesis", "rr", Abc_CommandRr, 1 );
Cmd_CommandAdd
(
pAbc
,
"Synthesis"
,
"cascade"
,
Abc_CommandCascade
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Synthesis"
,
"cascade"
,
Abc_CommandCascade
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Synthesis"
,
"extract"
,
Abc_CommandExtract
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"logic"
,
Abc_CommandLogic
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"logic"
,
Abc_CommandLogic
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"comb"
,
Abc_CommandComb
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"comb"
,
Abc_CommandComb
,
1
);
...
@@ -2805,7 +2807,6 @@ int Abc_CommandBalance( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -2805,7 +2807,6 @@ int Abc_CommandBalance( Abc_Frame_t * pAbc, int argc, char ** argv )
int
fUpdateLevel
;
int
fUpdateLevel
;
int
fExor
;
int
fExor
;
int
fVerbose
;
int
fVerbose
;
extern
Abc_Ntk_t
*
Abc_NtkBalanceExor
(
Abc_Ntk_t
*
pNtk
,
int
fUpdateLevel
,
int
fVerbose
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
// set defaults
// set defaults
...
@@ -5381,6 +5382,88 @@ usage:
...
@@ -5381,6 +5382,88 @@ usage:
return
1
;
return
1
;
}
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Abc_CommandExtract
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
extern
Abc_Ntk_t
*
Abc_NtkShareXor
(
Abc_Ntk_t
*
pNtk
,
int
nMultiSize
,
int
fAnd
,
int
fVerbose
);
Abc_Ntk_t
*
pNtk
,
*
pNtkRes
;
int
c
,
nMultiSize
,
fAnd
,
fVerbose
;
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
// set defaults
nMultiSize
=
3
;
fAnd
=
0
;
fVerbose
=
0
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"Kavh"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'K'
:
if
(
globalUtilOptind
>=
argc
)
{
Abc_Print
(
-
1
,
"Command line switch
\"
-K
\"
should be followed by an integer.
\n
"
);
goto
usage
;
}
nMultiSize
=
atoi
(
argv
[
globalUtilOptind
]);
globalUtilOptind
++
;
if
(
nMultiSize
<
0
)
goto
usage
;
break
;
case
'a'
:
fAnd
^=
1
;
break
;
case
'v'
:
fVerbose
^=
1
;
break
;
case
'h'
:
goto
usage
;
default:
goto
usage
;
}
}
if
(
pNtk
==
NULL
)
{
Abc_Print
(
-
1
,
"Empty network.
\n
"
);
return
1
;
}
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
{
Abc_Print
(
-
1
,
"Can only collapse a logic network or an AIG.
\n
"
);
return
1
;
}
// get the new network
pNtkRes
=
Abc_NtkShareXor
(
pNtk
,
nMultiSize
,
fAnd
,
fVerbose
);
if
(
pNtkRes
==
NULL
)
{
Abc_Print
(
-
1
,
"Cascade synthesis has failed.
\n
"
);
return
1
;
}
// replace the current network
Abc_FrameReplaceCurrentNetwork
(
pAbc
,
pNtkRes
);
return
0
;
usage:
Abc_Print
(
-
2
,
"usage: extract [-K <num>] [-vh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
extracts logic sharing from multi-input XOR gates
\n
"
);
Abc_Print
(
-
2
,
"
\t
-K <num> : the min gate size to consider for extraction [default = %d]
\n
"
,
nMultiSize
);
// Abc_Print( -2, "\t-a : toggle multi-input XOR vs multi-input AND [default = %s]\n", fAnd? "AND": "XOR" );
Abc_Print
(
-
2
,
"
\t
-v : toggle verbose printout [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
\n
"
);
return
1
;
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -9020,8 +9103,14 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -9020,8 +9103,14 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
}
}
Aig_ManStop( pAig );
Aig_ManStop( pAig );
*/
*/
extern
void
Abc_NtkShareXor
(
Abc_Ntk_t
*
pNtk
);
/*
Abc_NtkShareXor
(
pNtk
);
extern Abc_Ntk_t * Abc_NtkShareXor( Abc_Ntk_t * pNtk );
Abc_Ntk_t * pNtkRes = Abc_NtkShareXor( pNtk );
if ( pNtkRes == NULL )
printf( "Transformation has failed.\n" );
else
Abc_FrameReplaceCurrentNetwork( pAbc, pNtkRes );
*/
}
}
// Abc2_NtkTestGia( "", 1 );
// Abc2_NtkTestGia( "", 1 );
...
...
src/base/abci/abcExtract.c
View file @
b4df114e
This diff is collapsed.
Click to expand it.
src/base/abci/abcShare.c
deleted
100644 → 0
View file @
309bcf2d
This diff is collapsed.
Click to expand it.
src/base/abci/abcStrash.c
View file @
b4df114e
...
@@ -49,6 +49,7 @@ static void Abc_NtkStrashPerform( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew, int fAl
...
@@ -49,6 +49,7 @@ static void Abc_NtkStrashPerform( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew, int fAl
Abc_Ntk_t
*
Abc_NtkRestrash
(
Abc_Ntk_t
*
pNtk
,
int
fCleanup
)
Abc_Ntk_t
*
Abc_NtkRestrash
(
Abc_Ntk_t
*
pNtk
,
int
fCleanup
)
{
{
// extern int timeRetime;
// extern int timeRetime;
Vec_Ptr_t
*
vNodes
;
Abc_Ntk_t
*
pNtkAig
;
Abc_Ntk_t
*
pNtkAig
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
,
nNodes
;
//, RetValue;
int
i
,
nNodes
;
//, RetValue;
...
@@ -60,8 +61,10 @@ Abc_Ntk_t * Abc_NtkRestrash( Abc_Ntk_t * pNtk, int fCleanup )
...
@@ -60,8 +61,10 @@ Abc_Ntk_t * Abc_NtkRestrash( Abc_Ntk_t * pNtk, int fCleanup )
// start the new network (constants and CIs of the old network will point to the their counterparts in the new network)
// start the new network (constants and CIs of the old network will point to the their counterparts in the new network)
pNtkAig
=
Abc_NtkStartFrom
(
pNtk
,
ABC_NTK_STRASH
,
ABC_FUNC_AIG
);
pNtkAig
=
Abc_NtkStartFrom
(
pNtk
,
ABC_NTK_STRASH
,
ABC_FUNC_AIG
);
// restrash the nodes (assuming a topological order of the old network)
// restrash the nodes (assuming a topological order of the old network)
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
vNodes
=
Abc_NtkDfs
(
pNtk
,
0
);
Vec_PtrForEachEntry
(
Abc_Obj_t
*
,
vNodes
,
pObj
,
i
)
pObj
->
pCopy
=
Abc_AigAnd
(
(
Abc_Aig_t
*
)
pNtkAig
->
pManFunc
,
Abc_ObjChild0Copy
(
pObj
),
Abc_ObjChild1Copy
(
pObj
)
);
pObj
->
pCopy
=
Abc_AigAnd
(
(
Abc_Aig_t
*
)
pNtkAig
->
pManFunc
,
Abc_ObjChild0Copy
(
pObj
),
Abc_ObjChild1Copy
(
pObj
)
);
Vec_PtrFree
(
vNodes
);
// finalize the network
// finalize the network
Abc_NtkFinalize
(
pNtk
,
pNtkAig
);
Abc_NtkFinalize
(
pNtk
,
pNtkAig
);
// print warning about self-feed latches
// print warning about self-feed latches
...
@@ -69,7 +72,9 @@ Abc_Ntk_t * Abc_NtkRestrash( Abc_Ntk_t * pNtk, int fCleanup )
...
@@ -69,7 +72,9 @@ Abc_Ntk_t * Abc_NtkRestrash( Abc_Ntk_t * pNtk, int fCleanup )
// printf( "Warning: The network has %d self-feeding latches.\n", Abc_NtkCountSelfFeedLatches(pNtkAig) );
// printf( "Warning: The network has %d self-feeding latches.\n", Abc_NtkCountSelfFeedLatches(pNtkAig) );
// perform cleanup if requested
// perform cleanup if requested
if
(
fCleanup
&&
(
nNodes
=
Abc_AigCleanup
((
Abc_Aig_t
*
)
pNtkAig
->
pManFunc
))
)
if
(
fCleanup
&&
(
nNodes
=
Abc_AigCleanup
((
Abc_Aig_t
*
)
pNtkAig
->
pManFunc
))
)
printf
(
"Abc_NtkRestrash(): AIG cleanup removed %d nodes (this is a bug).
\n
"
,
nNodes
);
{
// printf( "Abc_NtkRestrash(): AIG cleanup removed %d nodes (this is a bug).\n", nNodes );
}
// duplicate EXDC
// duplicate EXDC
if
(
pNtk
->
pExdc
)
if
(
pNtk
->
pExdc
)
pNtkAig
->
pExdc
=
Abc_NtkDup
(
pNtk
->
pExdc
);
pNtkAig
->
pExdc
=
Abc_NtkDup
(
pNtk
->
pExdc
);
...
...
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