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
118776f3
Commit
118776f3
authored
Feb 26, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding switch -x to command &fadds.
parent
13e49cba
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
12 deletions
+21
-12
src/aig/gia/giaFadds.c
+12
-7
src/base/abci/abc.c
+9
-5
No files found.
src/aig/gia/giaFadds.c
View file @
118776f3
...
@@ -765,7 +765,7 @@ int Gia_ObjFanin1CopyCarry( Vec_Int_t * vCarries, Gia_Obj_t * pObj, int Id )
...
@@ -765,7 +765,7 @@ int Gia_ObjFanin1CopyCarry( Vec_Int_t * vCarries, Gia_Obj_t * pObj, int Id )
return
Gia_ObjFanin1Copy
(
pObj
);
return
Gia_ObjFanin1Copy
(
pObj
);
return
Abc_LitNotCond
(
Vec_IntEntry
(
vCarries
,
Gia_ObjFaninId1
(
pObj
,
Id
)),
Gia_ObjFaninC1
(
pObj
)
);
return
Abc_LitNotCond
(
Vec_IntEntry
(
vCarries
,
Gia_ObjFaninId1
(
pObj
,
Id
)),
Gia_ObjFaninC1
(
pObj
)
);
}
}
Gia_Man_t
*
Gia_ManDupWithArtificalFaddBoxes
(
Gia_Man_t
*
p
,
int
fUseFanout
)
Gia_Man_t
*
Gia_ManDupWithArtificalFaddBoxes
(
Gia_Man_t
*
p
,
int
fUseFanout
,
int
fXorTrick
)
{
{
Gia_Man_t
*
pNew
;
Gia_Man_t
*
pNew
;
Gia_Obj_t
*
pObj
;
Gia_Obj_t
*
pObj
;
...
@@ -821,7 +821,7 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxes( Gia_Man_t * p, int fUseFanout )
...
@@ -821,7 +821,7 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxes( Gia_Man_t * p, int fUseFanout )
pObj
->
Value
=
Gia_ManAppendAnd
(
pNew
,
Gia_ObjFanin0Copy
(
pObj
),
Gia_ObjFanin1Copy
(
pObj
)
);
pObj
->
Value
=
Gia_ManAppendAnd
(
pNew
,
Gia_ObjFanin0Copy
(
pObj
),
Gia_ObjFanin1Copy
(
pObj
)
);
else
// AND-gate with chain
else
// AND-gate with chain
{
{
int
iCiLit
,
iOtherLit
,
iLit0
,
iLit1
,
iLit2
;
int
iCiLit
,
iOtherLit
,
iLit0
,
iLit1
,
iLit2
,
iXorLit
;
assert
(
pObj
->
fMark0
!=
pObj
->
fMark1
);
assert
(
pObj
->
fMark0
!=
pObj
->
fMark1
);
iCiLit
=
pObj
->
fMark0
?
Gia_ObjFanin0CopyCarry
(
vCarries
,
pObj
,
i
)
:
Gia_ObjFanin1CopyCarry
(
vCarries
,
pObj
,
i
);
iCiLit
=
pObj
->
fMark0
?
Gia_ObjFanin0CopyCarry
(
vCarries
,
pObj
,
i
)
:
Gia_ObjFanin1CopyCarry
(
vCarries
,
pObj
,
i
);
iOtherLit
=
pObj
->
fMark0
?
Gia_ObjFanin1Copy
(
pObj
)
:
Gia_ObjFanin0Copy
(
pObj
);
iOtherLit
=
pObj
->
fMark0
?
Gia_ObjFanin1Copy
(
pObj
)
:
Gia_ObjFanin0Copy
(
pObj
);
...
@@ -835,14 +835,19 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxes( Gia_Man_t * p, int fUseFanout )
...
@@ -835,14 +835,19 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxes( Gia_Man_t * p, int fUseFanout )
Gia_ManAppendCo
(
pNew
,
iLit1
);
Gia_ManAppendCo
(
pNew
,
iLit1
);
Gia_ManAppendCo
(
pNew
,
iLit2
);
Gia_ManAppendCo
(
pNew
,
iLit2
);
// add CI (unused sum bit)
// add CI (unused sum bit)
Gia_ManAppendCi
(
pNew
);
iXorLit
=
Gia_ManAppendCi
(
pNew
);
// add CI (carry bit)
// add CI (carry bit)
pObj
->
Value
=
Abc_LitNotCond
(
Gia_ManAppendCi
(
pNew
),
Abc_LitIsCompl
(
iCiLit
)
);
pObj
->
Value
=
Abc_LitNotCond
(
Gia_ManAppendCi
(
pNew
),
Abc_LitIsCompl
(
iCiLit
)
);
if
(
vCarries
&&
pObj
->
fPhase
)
if
(
vCarries
&&
pObj
->
fPhase
)
{
{
Vec_IntWriteEntry
(
vCarries
,
i
,
pObj
->
Value
);
Vec_IntWriteEntry
(
vCarries
,
i
,
pObj
->
Value
);
if
(
Gia_ObjRefNum
(
p
,
pObj
)
>
0
)
if
(
Gia_ObjRefNum
(
p
,
pObj
)
>
0
)
pObj
->
Value
=
Gia_ManAppendAnd
(
pNew
,
Gia_ObjFanin0Copy
(
pObj
),
Gia_ObjFanin1Copy
(
pObj
)
);
{
if
(
fXorTrick
)
pObj
->
Value
=
Gia_ManAppendAnd
(
pNew
,
Abc_LitNotCond
(
iXorLit
,
!
Abc_LitIsCompl
(
iCiLit
)),
iOtherLit
);
else
pObj
->
Value
=
Gia_ManAppendAnd
(
pNew
,
Gia_ObjFanin0Copy
(
pObj
),
Gia_ObjFanin1Copy
(
pObj
)
);
}
}
}
nBoxes
++
;
nBoxes
++
;
}
}
...
@@ -877,7 +882,7 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxesTest( Gia_Man_t * p )
...
@@ -877,7 +882,7 @@ Gia_Man_t * Gia_ManDupWithArtificalFaddBoxesTest( Gia_Man_t * p )
}
}
// output new AIG
// output new AIG
pNew
=
Gia_ManDupWithArtificalFaddBoxes
(
p
,
0
);
pNew
=
Gia_ManDupWithArtificalFaddBoxes
(
p
,
0
,
0
);
Gia_ManCleanMark01
(
p
);
Gia_ManCleanMark01
(
p
);
return
pNew
;
return
pNew
;
}
}
...
@@ -1079,7 +1084,7 @@ int Gia_ManIteratePaths( Gia_Man_t * p, int DelayC, int nPathMin, int nPathMax,
...
@@ -1079,7 +1084,7 @@ int Gia_ManIteratePaths( Gia_Man_t * p, int DelayC, int nPathMin, int nPathMax,
return
1
;
return
1
;
}
}
// annotate artificial chains and then put them into boxes
// annotate artificial chains and then put them into boxes
Gia_Man_t
*
Gia_ManDupWithArtificialBoxes
(
Gia_Man_t
*
p
,
int
DelayC
,
int
nPathMin
,
int
nPathMax
,
int
nPathLimit
,
int
fUseFanout
,
int
fIgnoreBoxDelays
,
int
fVerbose
)
Gia_Man_t
*
Gia_ManDupWithArtificialBoxes
(
Gia_Man_t
*
p
,
int
DelayC
,
int
nPathMin
,
int
nPathMax
,
int
nPathLimit
,
int
fUseFanout
,
int
f
XorTrick
,
int
f
IgnoreBoxDelays
,
int
fVerbose
)
{
{
Gia_Man_t
*
pNew
;
Gia_Man_t
*
pNew
;
/*
/*
...
@@ -1090,7 +1095,7 @@ Gia_Man_t * Gia_ManDupWithArtificialBoxes( Gia_Man_t * p, int DelayC, int nPathM
...
@@ -1090,7 +1095,7 @@ Gia_Man_t * Gia_ManDupWithArtificialBoxes( Gia_Man_t * p, int DelayC, int nPathM
}
}
*/
*/
Gia_ManIteratePaths
(
p
,
DelayC
,
nPathMin
,
nPathMax
,
nPathLimit
,
fIgnoreBoxDelays
,
fVerbose
);
Gia_ManIteratePaths
(
p
,
DelayC
,
nPathMin
,
nPathMax
,
nPathLimit
,
fIgnoreBoxDelays
,
fVerbose
);
pNew
=
Gia_ManDupWithArtificalFaddBoxes
(
p
,
fUseFanout
);
pNew
=
Gia_ManDupWithArtificalFaddBoxes
(
p
,
fUseFanout
,
fXorTrick
);
Gia_ManCleanMark01
(
p
);
Gia_ManCleanMark01
(
p
);
return
pNew
;
return
pNew
;
}
}
...
...
src/base/abci/abc.c
View file @
118776f3
...
@@ -36947,12 +36947,12 @@ usage:
...
@@ -36947,12 +36947,12 @@ usage:
int
Abc_CommandAbc9Fadds
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
int
Abc_CommandAbc9Fadds
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
{
extern
Gia_Man_t
*
Gia_ManDupWithNaturalBoxes
(
Gia_Man_t
*
p
,
int
nFaddMin
,
int
fVerbose
);
extern
Gia_Man_t
*
Gia_ManDupWithNaturalBoxes
(
Gia_Man_t
*
p
,
int
nFaddMin
,
int
fVerbose
);
extern
Gia_Man_t
*
Gia_ManDupWithArtificialBoxes
(
Gia_Man_t
*
p
,
int
DelayC
,
int
nPathMin
,
int
nPathMax
,
int
nPathLimit
,
int
fUseFanout
,
int
fIgnoreBoxDelays
,
int
fVerbose
);
extern
Gia_Man_t
*
Gia_ManDupWithArtificialBoxes
(
Gia_Man_t
*
p
,
int
DelayC
,
int
nPathMin
,
int
nPathMax
,
int
nPathLimit
,
int
fUseFanout
,
int
f
XorTrick
,
int
f
IgnoreBoxDelays
,
int
fVerbose
);
Gia_Man_t
*
pTemp
,
*
pTemp2
;
Gia_Man_t
*
pTemp
,
*
pTemp2
;
int
c
,
nFaddMin
=
3
,
fUseNat
=
0
,
fUseArt
=
0
,
fVerbose
=
0
;
int
c
,
nFaddMin
=
3
,
fUseNat
=
0
,
fUseArt
=
0
,
fVerbose
=
0
;
int
DelayC
=
0
,
nPathMin
=
3
,
nPathMax
=
32
,
nPathLimit
=
50
,
fUseFanout
=
0
,
fIgnoreBoxDelays
=
0
;
int
DelayC
=
0
,
nPathMin
=
3
,
nPathMax
=
32
,
nPathLimit
=
50
,
fUseFanout
=
0
,
f
UseXorTrick
=
0
,
f
IgnoreBoxDelays
=
0
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"NBSLPnafbvh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"NBSLPnaf
x
bvh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
...
@@ -37020,6 +37020,9 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -37020,6 +37020,9 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
case
'f'
:
case
'f'
:
fUseFanout
^=
1
;
fUseFanout
^=
1
;
break
;
break
;
case
'x'
:
fUseXorTrick
^=
1
;
break
;
case
'b'
:
case
'b'
:
fIgnoreBoxDelays
^=
1
;
fIgnoreBoxDelays
^=
1
;
break
;
break
;
...
@@ -37045,7 +37048,7 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -37045,7 +37048,7 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
Gia_ManTransferTiming
(
pTemp
,
pAbc
->
pGia
);
Gia_ManTransferTiming
(
pTemp
,
pAbc
->
pGia
);
}
}
if
(
fUseArt
)
if
(
fUseArt
)
pTemp2
=
Gia_ManDupWithArtificialBoxes
(
pTemp
,
DelayC
,
nPathMin
,
nPathMax
,
nPathLimit
,
fUseFanout
,
fIgnoreBoxDelays
,
fVerbose
);
pTemp2
=
Gia_ManDupWithArtificialBoxes
(
pTemp
,
DelayC
,
nPathMin
,
nPathMax
,
nPathLimit
,
fUseFanout
,
f
UseXorTrick
,
f
IgnoreBoxDelays
,
fVerbose
);
else
else
{
{
pTemp2
=
Gia_ManDup
(
pTemp
);
pTemp2
=
Gia_ManDup
(
pTemp
);
...
@@ -37055,7 +37058,7 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -37055,7 +37058,7 @@ int Abc_CommandAbc9Fadds( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_FrameUpdateGia
(
pAbc
,
pTemp2
);
Abc_FrameUpdateGia
(
pAbc
,
pTemp2
);
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: &fadds [-NBSLP num] [-nafvh]
\n
"
);
Abc_Print
(
-
2
,
"usage: &fadds [-NBSLP num] [-naf
x
vh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
detects full-adder chains and puts them into white boxes
\n
"
);
Abc_Print
(
-
2
,
"
\t
detects full-adder chains and puts them into white boxes
\n
"
);
Abc_Print
(
-
2
,
"
\t
-n : toggles detecting natural full-adder chains [default = %s]
\n
"
,
fUseNat
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-n : toggles detecting natural full-adder chains [default = %s]
\n
"
,
fUseNat
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-N num : minimum length of a natural full-adder chain to detect [default = %d]
\n
"
,
nFaddMin
);
Abc_Print
(
-
2
,
"
\t
-N num : minimum length of a natural full-adder chain to detect [default = %d]
\n
"
,
nFaddMin
);
...
@@ -37065,6 +37068,7 @@ usage:
...
@@ -37065,6 +37068,7 @@ usage:
Abc_Print
(
-
2
,
"
\t
-L num : maximum length of an artificial full-adder chain [default = %d]
\n
"
,
nPathMax
);
Abc_Print
(
-
2
,
"
\t
-L num : maximum length of an artificial full-adder chain [default = %d]
\n
"
,
nPathMax
);
Abc_Print
(
-
2
,
"
\t
-P num : maximum number of artificial full-adder chains to detect [default = %d]
\n
"
,
nPathLimit
);
Abc_Print
(
-
2
,
"
\t
-P num : maximum number of artificial full-adder chains to detect [default = %d]
\n
"
,
nPathLimit
);
Abc_Print
(
-
2
,
"
\t
-f : toggles allowing external fanouts in artificial chains [default = %s]
\n
"
,
fUseFanout
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-f : toggles allowing external fanouts in artificial chains [default = %s]
\n
"
,
fUseFanout
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-x : toggles using XOR to generate fanouts in artificial chains [default = %s]
\n
"
,
fUseXorTrick
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-b : toggles ignoring boxes when computing delays [default = %s]
\n
"
,
fIgnoreBoxDelays
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-b : toggles ignoring boxes when computing delays [default = %s]
\n
"
,
fIgnoreBoxDelays
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggles printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggles 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
"
);
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