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
8e639c3d
Commit
8e639c3d
authored
May 25, 2013
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New command 'putontop' to concatenate networks for don't-care-based optimization.
parent
94a75fe6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
196 additions
and
7 deletions
+196
-7
src/base/abci/abc.c
+107
-2
src/base/abci/abcMfs.c
+25
-3
src/base/abci/abcPrint.c
+2
-2
src/base/abci/abcStrash.c
+61
-0
src/opt/sfm/sfm.h
+1
-0
No files found.
src/base/abci/abc.c
View file @
8e639c3d
...
@@ -134,6 +134,7 @@ static int Abc_CommandRemovePo ( Abc_Frame_t * pAbc, int argc, cha
...
@@ -134,6 +134,7 @@ static int Abc_CommandRemovePo ( Abc_Frame_t * pAbc, int argc, cha
static
int
Abc_CommandDropSat
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandDropSat
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAddPi
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAddPi
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAppend
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAppend
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandPutOnTop
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandDFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandDFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandSop
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandSop
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
...
@@ -683,6 +684,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
...
@@ -683,6 +684,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"dropsat"
,
Abc_CommandDropSat
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"dropsat"
,
Abc_CommandDropSat
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"addpi"
,
Abc_CommandAddPi
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"addpi"
,
Abc_CommandAddPi
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"append"
,
Abc_CommandAppend
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"append"
,
Abc_CommandAppend
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"putontop"
,
Abc_CommandPutOnTop
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"frames"
,
Abc_CommandFrames
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"frames"
,
Abc_CommandFrames
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"dframes"
,
Abc_CommandDFrames
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"dframes"
,
Abc_CommandDFrames
,
1
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"sop"
,
Abc_CommandSop
,
0
);
Cmd_CommandAdd
(
pAbc
,
"Various"
,
"sop"
,
Abc_CommandSop
,
0
);
...
@@ -4473,7 +4475,7 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -4473,7 +4475,7 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
// set defaults
// set defaults
Sfm_ParSetDefault
(
pPars
);
Sfm_ParSetDefault
(
pPars
);
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"WFDMNCdlaevwh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"WFDMNC
Z
dlaevwh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
...
@@ -4543,6 +4545,17 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -4543,6 +4545,17 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
pPars
->
nBTLimit
<
0
)
if
(
pPars
->
nBTLimit
<
0
)
goto
usage
;
goto
usage
;
break
;
break
;
case
'Z'
:
if
(
globalUtilOptind
>=
argc
)
{
Abc_Print
(
-
1
,
"Command line switch
\"
-Z
\"
should be followed by an integer.
\n
"
);
goto
usage
;
}
pPars
->
nFirstFixed
=
atoi
(
argv
[
globalUtilOptind
]);
globalUtilOptind
++
;
if
(
pPars
->
nFirstFixed
<
0
)
goto
usage
;
break
;
case
'd'
:
case
'd'
:
pPars
->
fRrOnly
^=
1
;
pPars
->
fRrOnly
^=
1
;
break
;
break
;
...
@@ -4591,7 +4604,7 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -4591,7 +4604,7 @@ int Abc_CommandMfs2( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: mfs2 [-WFDMNC <num>] [-dlaevwh]
\n
"
);
Abc_Print
(
-
2
,
"usage: mfs2 [-WFDMNC
Z
<num>] [-dlaevwh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs don't-care-based optimization of logic networks
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs don't-care-based optimization of logic networks
\n
"
);
Abc_Print
(
-
2
,
"
\t
-W <num> : the number of levels in the TFO cone (0 <= num) [default = %d]
\n
"
,
pPars
->
nTfoLevMax
);
Abc_Print
(
-
2
,
"
\t
-W <num> : the number of levels in the TFO cone (0 <= num) [default = %d]
\n
"
,
pPars
->
nTfoLevMax
);
Abc_Print
(
-
2
,
"
\t
-F <num> : the max number of fanouts to skip (1 <= num) [default = %d]
\n
"
,
pPars
->
nFanoutMax
);
Abc_Print
(
-
2
,
"
\t
-F <num> : the max number of fanouts to skip (1 <= num) [default = %d]
\n
"
,
pPars
->
nFanoutMax
);
...
@@ -4599,6 +4612,7 @@ usage:
...
@@ -4599,6 +4612,7 @@ usage:
Abc_Print
(
-
2
,
"
\t
-M <num> : the max node count of windows to consider (0 = no limit) [default = %d]
\n
"
,
pPars
->
nWinSizeMax
);
Abc_Print
(
-
2
,
"
\t
-M <num> : the max node count of windows to consider (0 = no limit) [default = %d]
\n
"
,
pPars
->
nWinSizeMax
);
Abc_Print
(
-
2
,
"
\t
-N <num> : the max number of divisors to consider (0 = no limit) [default = %d]
\n
"
,
pPars
->
nDivNumMax
);
Abc_Print
(
-
2
,
"
\t
-N <num> : the max number of divisors to consider (0 = no limit) [default = %d]
\n
"
,
pPars
->
nDivNumMax
);
Abc_Print
(
-
2
,
"
\t
-C <num> : the max number of conflicts in one SAT run (0 = no limit) [default = %d]
\n
"
,
pPars
->
nBTLimit
);
Abc_Print
(
-
2
,
"
\t
-C <num> : the max number of conflicts in one SAT run (0 = no limit) [default = %d]
\n
"
,
pPars
->
nBTLimit
);
Abc_Print
(
-
2
,
"
\t
-Z <num> : treat the first <num> logic nodes as fixed (0 = none) [default = %d]
\n
"
,
pPars
->
nFirstFixed
);
Abc_Print
(
-
2
,
"
\t
-d : toggle performing redundancy removal [default = %s]
\n
"
,
pPars
->
fRrOnly
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-d : toggle performing redundancy removal [default = %s]
\n
"
,
pPars
->
fRrOnly
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-l : allow logic level to increase [default = %s]
\n
"
,
!
pPars
->
fFixLevel
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-l : allow logic level to increase [default = %s]
\n
"
,
!
pPars
->
fFixLevel
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-a : toggle minimizing area or area+edges [default = %s]
\n
"
,
pPars
->
fArea
?
"area"
:
"area+edges"
);
Abc_Print
(
-
2
,
"
\t
-a : toggle minimizing area or area+edges [default = %s]
\n
"
,
pPars
->
fArea
?
"area"
:
"area+edges"
);
...
@@ -7049,6 +7063,97 @@ usage:
...
@@ -7049,6 +7063,97 @@ usage:
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
int
Abc_CommandPutOnTop
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
extern
Abc_Ntk_t
*
Abc_NtkPutOnTop
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtk2
);
Abc_Ntk_t
*
pNtk
,
*
pNtk2
,
*
pNtkRes
;
char
*
FileName
;
int
fComb
=
0
;
int
c
;
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
// set defaults
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"ch"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'c'
:
fComb
^=
1
;
break
;
default:
goto
usage
;
}
}
// get the second network
if
(
argc
!=
globalUtilOptind
+
1
)
{
Abc_Print
(
-
1
,
"The network to append is not given.
\n
"
);
return
1
;
}
if
(
!
Abc_NtkIsLogic
(
pNtk
)
)
{
Abc_Print
(
-
1
,
"The base network should be in the logic form.
\n
"
);
return
1
;
}
// check if the second network is combinational
if
(
Abc_NtkLatchNum
(
pNtk
)
)
{
Abc_Print
(
-
1
,
"The current network has latches. This command does not work for such networks.
\n
"
);
return
0
;
}
// read the second network
FileName
=
argv
[
globalUtilOptind
];
pNtk2
=
Io_Read
(
FileName
,
Io_ReadFileType
(
FileName
),
1
);
if
(
pNtk2
==
NULL
)
return
1
;
// check if the second network is combinational
if
(
Abc_NtkLatchNum
(
pNtk2
)
)
{
Abc_NtkDelete
(
pNtk2
);
Abc_Print
(
-
1
,
"The second network has latches. This command does not work for such networks.
\n
"
);
return
0
;
}
// compare inputs/outputs
if
(
Abc_NtkPoNum
(
pNtk
)
!=
Abc_NtkPiNum
(
pNtk2
)
)
{
Abc_NtkDelete
(
pNtk2
);
Abc_Print
(
-
1
,
"The PO count (%d) of the first network is not equal to PI count (%d) of the second network.
\n
"
,
Abc_NtkPoNum
(
pNtk
),
Abc_NtkPiNum
(
pNtk2
)
);
return
0
;
}
// get the new network
pNtkRes
=
Abc_NtkPutOnTop
(
pNtk
,
pNtk2
);
Abc_NtkDelete
(
pNtk2
);
// replace the current network
Abc_FrameReplaceCurrentNetwork
(
pAbc
,
pNtkRes
);
return
0
;
usage:
Abc_Print
(
-
2
,
"usage: putontop [-h] <file>
\n
"
);
Abc_Print
(
-
2
,
"
\t
connects PIs of network in <file> to POs of current network
\n
"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
<file> : file name with the second network
\n
"
);
return
1
;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Abc_CommandFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
int
Abc_CommandFrames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
{
Abc_Ntk_t
*
pNtk
,
*
pNtkTemp
,
*
pNtkRes
;
Abc_Ntk_t
*
pNtk
,
*
pNtkTemp
,
*
pNtkRes
;
src/base/abci/abcMfs.c
View file @
8e639c3d
...
@@ -63,6 +63,24 @@ Vec_Ptr_t * Abc_NtkAssignIDs( Abc_Ntk_t * pNtk )
...
@@ -63,6 +63,24 @@ Vec_Ptr_t * Abc_NtkAssignIDs( Abc_Ntk_t * pNtk )
pObj
->
iTemp
=
Abc_NtkPiNum
(
pNtk
)
+
Vec_PtrSize
(
vNodes
)
+
i
;
pObj
->
iTemp
=
Abc_NtkPiNum
(
pNtk
)
+
Vec_PtrSize
(
vNodes
)
+
i
;
return
vNodes
;
return
vNodes
;
}
}
Vec_Ptr_t
*
Abc_NtkAssignIDs2
(
Abc_Ntk_t
*
pNtk
)
{
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
;
int
i
;
Abc_NtkCleanCopy
(
pNtk
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
pObj
->
iTemp
=
i
;
vNodes
=
Vec_PtrAlloc
(
Abc_NtkNodeNum
(
pNtk
)
);
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
{
Vec_PtrPush
(
vNodes
,
pObj
);
pObj
->
iTemp
=
Abc_NtkPiNum
(
pNtk
)
+
i
;
}
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
pObj
->
iTemp
=
Abc_NtkPiNum
(
pNtk
)
+
Vec_PtrSize
(
vNodes
)
+
i
;
return
vNodes
;
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -75,7 +93,7 @@ Vec_Ptr_t * Abc_NtkAssignIDs( Abc_Ntk_t * pNtk )
...
@@ -75,7 +93,7 @@ Vec_Ptr_t * Abc_NtkAssignIDs( Abc_Ntk_t * pNtk )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Sfm_Ntk_t
*
Abc_NtkExtractMfs
(
Abc_Ntk_t
*
pNtk
)
Sfm_Ntk_t
*
Abc_NtkExtractMfs
(
Abc_Ntk_t
*
pNtk
,
int
nFirstFixed
)
{
{
Vec_Ptr_t
*
vNodes
;
Vec_Ptr_t
*
vNodes
;
Vec_Wec_t
*
vFanins
;
Vec_Wec_t
*
vFanins
;
...
@@ -84,7 +102,7 @@ Sfm_Ntk_t * Abc_NtkExtractMfs( Abc_Ntk_t * pNtk )
...
@@ -84,7 +102,7 @@ Sfm_Ntk_t * Abc_NtkExtractMfs( Abc_Ntk_t * pNtk )
Vec_Int_t
*
vArray
;
Vec_Int_t
*
vArray
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
,
k
,
nObjs
;
int
i
,
k
,
nObjs
;
vNodes
=
Abc_NtkAssignIDs
(
pNtk
);
vNodes
=
nFirstFixed
?
Abc_NtkAssignIDs2
(
pNtk
)
:
Abc_NtkAssignIDs
(
pNtk
);
nObjs
=
Abc_NtkPiNum
(
pNtk
)
+
Vec_PtrSize
(
vNodes
)
+
Abc_NtkPoNum
(
pNtk
);
nObjs
=
Abc_NtkPiNum
(
pNtk
)
+
Vec_PtrSize
(
vNodes
)
+
Abc_NtkPoNum
(
pNtk
);
vFanins
=
Vec_WecStart
(
nObjs
);
vFanins
=
Vec_WecStart
(
nObjs
);
vFixed
=
Vec_StrStart
(
nObjs
);
vFixed
=
Vec_StrStart
(
nObjs
);
...
@@ -105,6 +123,10 @@ Sfm_Ntk_t * Abc_NtkExtractMfs( Abc_Ntk_t * pNtk )
...
@@ -105,6 +123,10 @@ Sfm_Ntk_t * Abc_NtkExtractMfs( Abc_Ntk_t * pNtk )
Vec_IntPush
(
vArray
,
pFanin
->
iTemp
);
Vec_IntPush
(
vArray
,
pFanin
->
iTemp
);
}
}
Vec_PtrFree
(
vNodes
);
Vec_PtrFree
(
vNodes
);
// update fixed
assert
(
nFirstFixed
>=
0
&&
nFirstFixed
<
Abc_NtkNodeNum
(
pNtk
)
);
for
(
i
=
Abc_NtkPiNum
(
pNtk
);
i
<
Abc_NtkPiNum
(
pNtk
)
+
nFirstFixed
;
i
++
)
Vec_StrWriteEntry
(
vFixed
,
i
,
(
char
)
1
);
return
Sfm_NtkConstruct
(
vFanins
,
Abc_NtkPiNum
(
pNtk
),
Abc_NtkPoNum
(
pNtk
),
vFixed
,
vTruths
);
return
Sfm_NtkConstruct
(
vFanins
,
Abc_NtkPiNum
(
pNtk
),
Abc_NtkPoNum
(
pNtk
),
vFixed
,
vTruths
);
}
}
...
@@ -193,7 +215,7 @@ int Abc_NtkPerformMfs( Abc_Ntk_t * pNtk, Sfm_Par_t * pPars )
...
@@ -193,7 +215,7 @@ int Abc_NtkPerformMfs( Abc_Ntk_t * pNtk, Sfm_Par_t * pPars )
return
0
;
return
0
;
}
}
// collect information
// collect information
p
=
Abc_NtkExtractMfs
(
pNtk
);
p
=
Abc_NtkExtractMfs
(
pNtk
,
pPars
->
nFirstFixed
);
// perform optimization
// perform optimization
nNodes
=
Sfm_NtkPerform
(
p
,
pPars
);
nNodes
=
Sfm_NtkPerform
(
p
,
pPars
);
// call the fast extract procedure
// call the fast extract procedure
...
...
src/base/abci/abcPrint.c
View file @
8e639c3d
...
@@ -212,8 +212,8 @@ void Abc_NtkPrintStats( Abc_Ntk_t * pNtk, int fFactored, int fSaveBest, int fDum
...
@@ -212,8 +212,8 @@ void Abc_NtkPrintStats( Abc_Ntk_t * pNtk, int fFactored, int fSaveBest, int fDum
Abc_Print
(
1
,
" i/o =%5d/%5d"
,
Abc_NtkPiNum
(
pNtk
),
Abc_NtkPoNum
(
pNtk
)
);
Abc_Print
(
1
,
" i/o =%5d/%5d"
,
Abc_NtkPiNum
(
pNtk
),
Abc_NtkPoNum
(
pNtk
)
);
if
(
Abc_NtkConstrNum
(
pNtk
)
)
if
(
Abc_NtkConstrNum
(
pNtk
)
)
Abc_Print
(
1
,
"(c=%d)"
,
Abc_NtkConstrNum
(
pNtk
)
);
Abc_Print
(
1
,
"(c=%d)"
,
Abc_NtkConstrNum
(
pNtk
)
);
if
(
pNtk
->
nRealPos
)
//
if ( pNtk->nRealPos )
Abc_Print
(
1
,
"(p=%d)"
,
Abc_NtkPoNum
(
pNtk
)
-
pNtk
->
nRealPos
);
//
Abc_Print( 1,"(p=%d)", Abc_NtkPoNum(pNtk) - pNtk->nRealPos );
Abc_Print
(
1
,
" lat =%5d"
,
Abc_NtkLatchNum
(
pNtk
)
);
Abc_Print
(
1
,
" lat =%5d"
,
Abc_NtkLatchNum
(
pNtk
)
);
if
(
Abc_NtkIsNetlist
(
pNtk
)
)
if
(
Abc_NtkIsNetlist
(
pNtk
)
)
{
{
...
...
src/base/abci/abcStrash.c
View file @
8e639c3d
...
@@ -770,6 +770,67 @@ void Abc_NtkWriteAig( Abc_Ntk_t * pNtk, char * pFileName )
...
@@ -770,6 +770,67 @@ void Abc_NtkWriteAig( Abc_Ntk_t * pNtk, char * pFileName )
Vec_IntFree
(
vId2Num
);
Vec_IntFree
(
vId2Num
);
}
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Abc_Ntk_t
*
Abc_NtkPutOnTop
(
Abc_Ntk_t
*
pNtk
,
Abc_Ntk_t
*
pNtk2
)
{
Vec_Ptr_t
*
vNodes
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
,
k
;
assert
(
Abc_NtkIsLogic
(
pNtk
)
);
assert
(
Abc_NtkIsLogic
(
pNtk2
)
);
assert
(
Abc_NtkPoNum
(
pNtk
)
==
Abc_NtkPiNum
(
pNtk2
)
);
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtk
);
Abc_NtkCleanCopy
(
pNtk2
);
// duplicate the name and the spec
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// clone CIs/CIs/boxes
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
// add internal nodes
vNodes
=
Abc_NtkDfs
(
pNtk
,
0
);
Vec_PtrForEachEntry
(
Abc_Obj_t
*
,
vNodes
,
pObj
,
i
)
{
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
}
Vec_PtrFree
(
vNodes
);
// transfer to the POs
Abc_NtkForEachPi
(
pNtk2
,
pObj
,
i
)
pObj
->
pCopy
=
Abc_ObjChild0Copy
(
Abc_NtkPo
(
pNtk
,
i
)
);
// add internal nodes
vNodes
=
Abc_NtkDfs
(
pNtk2
,
0
);
Vec_PtrForEachEntry
(
Abc_Obj_t
*
,
vNodes
,
pObj
,
i
)
{
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
}
Vec_PtrFree
(
vNodes
);
// clone CIs/CIs/boxes
Abc_NtkForEachPo
(
pNtk2
,
pObj
,
i
)
{
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_ObjChild0Copy
(
pObj
)
);
}
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
fprintf
(
stdout
,
"Abc_NtkPutOnTop(): Network check has failed.
\n
"
);
return
pNtkNew
;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
...
...
src/opt/sfm/sfm.h
View file @
8e639c3d
...
@@ -48,6 +48,7 @@ struct Sfm_Par_t_
...
@@ -48,6 +48,7 @@ struct Sfm_Par_t_
int
nWinSizeMax
;
// the maximum window size
int
nWinSizeMax
;
// the maximum window size
int
nDivNumMax
;
// the maximum number of divisors
int
nDivNumMax
;
// the maximum number of divisors
int
nBTLimit
;
// the maximum number of conflicts in one SAT run
int
nBTLimit
;
// the maximum number of conflicts in one SAT run
int
nFirstFixed
;
// the number of first nodes to be treated as fixed
int
fFixLevel
;
// does not allow level to increase
int
fFixLevel
;
// does not allow level to increase
int
fRrOnly
;
// perform redundance removal
int
fRrOnly
;
// perform redundance removal
int
fArea
;
// performs optimization for area
int
fArea
;
// performs optimization for area
...
...
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