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
3459683e
Commit
3459683e
authored
Aug 16, 2013
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Extending 'permute' to handle user-specified flop permutation.
parent
7013e0b6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
84 additions
and
16 deletions
+84
-16
src/aig/saig/saigIso.c
+1
-1
src/base/abc/abc.h
+1
-1
src/base/abc/abcNtk.c
+59
-2
src/base/abci/abc.c
+21
-10
src/map/mpm/mpmPre.c
+2
-2
No files found.
src/aig/saig/saigIso.c
View file @
3459683e
...
@@ -600,7 +600,7 @@ Aig_Man_t * Iso_ManTest888( Aig_Man_t * pAig1, int fVerbose )
...
@@ -600,7 +600,7 @@ Aig_Man_t * Iso_ManTest888( Aig_Man_t * pAig1, int fVerbose )
Vec_Int_t
*
vMap
;
Vec_Int_t
*
vMap
;
pNtk
=
Abc_NtkFromAigPhase
(
pAig1
);
pNtk
=
Abc_NtkFromAigPhase
(
pAig1
);
Abc_NtkPermute
(
pNtk
,
1
,
0
,
1
);
Abc_NtkPermute
(
pNtk
,
1
,
0
,
1
,
NULL
);
pAig2
=
Abc_NtkToDar
(
pNtk
,
0
,
1
);
pAig2
=
Abc_NtkToDar
(
pNtk
,
0
,
1
);
Abc_NtkDelete
(
pNtk
);
Abc_NtkDelete
(
pNtk
);
...
...
src/base/abc/abc.h
View file @
3459683e
...
@@ -737,7 +737,7 @@ extern ABC_DLL Abc_Ntk_t * Abc_NtkCreateWithNode( char * pSop );
...
@@ -737,7 +737,7 @@ extern ABC_DLL Abc_Ntk_t * Abc_NtkCreateWithNode( char * pSop );
extern
ABC_DLL
void
Abc_NtkDelete
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkDelete
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkFixNonDrivenNets
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkFixNonDrivenNets
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkMakeComb
(
Abc_Ntk_t
*
pNtk
,
int
fRemoveLatches
);
extern
ABC_DLL
void
Abc_NtkMakeComb
(
Abc_Ntk_t
*
pNtk
,
int
fRemoveLatches
);
extern
ABC_DLL
void
Abc_NtkPermute
(
Abc_Ntk_t
*
pNtk
,
int
fInputs
,
int
fOutputs
,
int
fFlops
);
extern
ABC_DLL
void
Abc_NtkPermute
(
Abc_Ntk_t
*
pNtk
,
int
fInputs
,
int
fOutputs
,
int
fFlops
,
char
*
pFlopPermFile
);
extern
ABC_DLL
void
Abc_NtkUnpermute
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkUnpermute
(
Abc_Ntk_t
*
pNtk
);
/*=== abcObj.c ==========================================================*/
/*=== abcObj.c ==========================================================*/
extern
ABC_DLL
Abc_Obj_t
*
Abc_ObjAlloc
(
Abc_Ntk_t
*
pNtk
,
Abc_ObjType_t
Type
);
extern
ABC_DLL
Abc_Obj_t
*
Abc_ObjAlloc
(
Abc_Ntk_t
*
pNtk
,
Abc_ObjType_t
Type
);
...
...
src/base/abc/abcNtk.c
View file @
3459683e
...
@@ -1878,15 +1878,72 @@ void Abc_NtkRemovePo( Abc_Ntk_t * pNtk, int iOutput, int fRemoveConst0 )
...
@@ -1878,15 +1878,72 @@ void Abc_NtkRemovePo( Abc_Ntk_t * pNtk, int iOutput, int fRemoveConst0 )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkPermute
(
Abc_Ntk_t
*
pNtk
,
int
fInputs
,
int
fOutputs
,
int
fFlops
)
Vec_Int_t
*
Abc_NtkReadFlopPerm
(
char
*
pFileName
,
int
nFlops
)
{
char
Buffer
[
1000
];
FILE
*
pFile
;
Vec_Int_t
*
vFlops
;
int
iFlop
;
pFile
=
fopen
(
pFileName
,
"rb"
);
if
(
pFile
==
NULL
)
{
printf
(
"Cannot open input file
\"
%s
\"
.
\n
"
,
pFileName
);
return
NULL
;
}
vFlops
=
Vec_IntAlloc
(
nFlops
);
while
(
fgets
(
Buffer
,
1000
,
pFile
)
!=
NULL
)
{
if
(
Buffer
[
0
]
==
' '
||
Buffer
[
0
]
==
'\r'
||
Buffer
[
0
]
==
'\n'
)
continue
;
iFlop
=
atoi
(
Buffer
);
if
(
iFlop
<
0
||
iFlop
>=
nFlops
)
{
printf
(
"Flop ID (%d) is out of range.
\n
"
,
iFlop
);
fclose
(
pFile
);
Vec_IntFree
(
vFlops
);
return
NULL
;
}
Vec_IntPush
(
vFlops
,
iFlop
);
}
fclose
(
pFile
);
if
(
Vec_IntSize
(
vFlops
)
!=
nFlops
)
{
printf
(
"The number of flops read in from file (%d) is different from the number of flops in the circuit (%d).
\n
"
,
iFlop
,
nFlops
);
Vec_IntFree
(
vFlops
);
return
NULL
;
}
return
vFlops
;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkPermute
(
Abc_Ntk_t
*
pNtk
,
int
fInputs
,
int
fOutputs
,
int
fFlops
,
char
*
pFlopPermFile
)
{
{
Abc_Obj_t
*
pTemp
;
Abc_Obj_t
*
pTemp
;
Vec_Int_t
*
vInputs
,
*
vOutputs
,
*
vFlops
,
*
vTemp
;
Vec_Int_t
*
vInputs
,
*
vOutputs
,
*
vFlops
,
*
vTemp
;
int
i
,
k
,
Entry
;
int
i
,
k
,
Entry
;
// start permutation arrays
// start permutation arrays
if
(
pFlopPermFile
)
{
vFlops
=
Abc_NtkReadFlopPerm
(
pFlopPermFile
,
Abc_NtkLatchNum
(
pNtk
)
);
if
(
vFlops
==
NULL
)
return
;
fInputs
=
0
;
fOutputs
=
0
;
fFlops
=
0
;
}
else
vFlops
=
Vec_IntStartNatural
(
Abc_NtkLatchNum
(
pNtk
)
);
vInputs
=
Vec_IntStartNatural
(
Abc_NtkPiNum
(
pNtk
)
);
vInputs
=
Vec_IntStartNatural
(
Abc_NtkPiNum
(
pNtk
)
);
vOutputs
=
Vec_IntStartNatural
(
Abc_NtkPoNum
(
pNtk
)
);
vOutputs
=
Vec_IntStartNatural
(
Abc_NtkPoNum
(
pNtk
)
);
vFlops
=
Vec_IntStartNatural
(
Abc_NtkLatchNum
(
pNtk
)
);
// permute inputs
// permute inputs
if
(
fInputs
)
if
(
fInputs
)
for
(
i
=
0
;
i
<
Abc_NtkPiNum
(
pNtk
);
i
++
)
for
(
i
=
0
;
i
<
Abc_NtkPiNum
(
pNtk
);
i
++
)
...
...
src/base/abci/abc.c
View file @
3459683e
...
@@ -19404,16 +19404,26 @@ int Abc_CommandPermute( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -19404,16 +19404,26 @@ int Abc_CommandPermute( Abc_Frame_t * pAbc, int argc, char ** argv )
{
{
extern
Abc_Ntk_t
*
Abc_NtkRestrashRandom
(
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_NtkRestrashRandom
(
Abc_Ntk_t
*
pNtk
);
Abc_Ntk_t
*
pNtk
=
pAbc
->
pNtkCur
,
*
pNtkRes
=
NULL
;
Abc_Ntk_t
*
pNtk
=
pAbc
->
pNtkCur
,
*
pNtkRes
=
NULL
;
char
*
pFlopPermFile
=
NULL
;
int
fInputs
=
1
;
int
fInputs
=
1
;
int
fOutputs
=
1
;
int
fOutputs
=
1
;
int
fFlops
=
1
;
int
fFlops
=
1
;
int
fNodes
=
1
;
int
fNodes
=
1
;
int
c
;
int
c
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"iofnh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"
F
iofnh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
case
'F'
:
if
(
globalUtilOptind
>=
argc
)
{
Abc_Print
(
-
1
,
"Command line switch
\"
-F
\"
should be followed by a file name.
\n
"
);
goto
usage
;
}
pFlopPermFile
=
argv
[
globalUtilOptind
];
globalUtilOptind
++
;
break
;
case
'i'
:
case
'i'
:
fInputs
^=
1
;
fInputs
^=
1
;
break
;
break
;
...
@@ -19452,18 +19462,19 @@ int Abc_CommandPermute( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -19452,18 +19462,19 @@ int Abc_CommandPermute( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print
(
-
1
,
"Command
\"
permute
\"
has failed.
\n
"
);
Abc_Print
(
-
1
,
"Command
\"
permute
\"
has failed.
\n
"
);
return
1
;
return
1
;
}
}
Abc_NtkPermute
(
pNtkRes
,
fInputs
,
fOutputs
,
fFlops
);
Abc_NtkPermute
(
pNtkRes
,
fInputs
,
fOutputs
,
fFlops
,
pFlopPermFile
);
Abc_FrameReplaceCurrentNetwork
(
pAbc
,
pNtkRes
);
Abc_FrameReplaceCurrentNetwork
(
pAbc
,
pNtkRes
);
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: permute [-iofnh]
\n
"
);
Abc_Print
(
-
2
,
"usage: permute [-iofnh] [-F filename]
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs random permutation of inputs/outputs/flops
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs random permutation of inputs/outputs/flops
\n
"
);
Abc_Print
(
-
2
,
"
\t
-i : toggle permuting primary inputs [default = %s]
\n
"
,
fInputs
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-i : toggle permuting primary inputs [default = %s]
\n
"
,
fInputs
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-o : toggle permuting primary outputs [default = %s]
\n
"
,
fOutputs
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-o : toggle permuting primary outputs [default = %s]
\n
"
,
fOutputs
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-f : toggle permuting flip-flops [default = %s]
\n
"
,
fFlops
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-f : toggle permuting flip-flops [default = %s]
\n
"
,
fFlops
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-n : toggle deriving new topological ordering of nodes [default = %s]
\n
"
,
fNodes
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-n : toggle deriving new topological ordering of nodes [default = %s]
\n
"
,
fNodes
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
-F <filename> : (optional) file with the flop permutation
\n
"
);
return
1
;
return
1
;
}
}
...
@@ -23227,7 +23238,7 @@ int Abc_CommandBm2( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -23227,7 +23238,7 @@ int Abc_CommandBm2( Abc_Frame_t * pAbc, int argc, char ** argv )
return
1
;
return
1
;
}
}
Abc_NtkPermute
(
pNtk2
,
1
,
1
,
0
);
Abc_NtkPermute
(
pNtk2
,
1
,
1
,
0
,
NULL
);
Abc_NtkShortNames
(
pNtk2
);
Abc_NtkShortNames
(
pNtk2
);
Abc_NtkForEachCi
(
pNtk1
,
pObj
,
i
)
{
Abc_NtkForEachCi
(
pNtk1
,
pObj
,
i
)
{
src/map/mpm/mpmPre.c
View file @
3459683e
...
@@ -894,7 +894,7 @@ void Ifd_ComputeSignature( word uTruth, int pCounts[6] )
...
@@ -894,7 +894,7 @@ void Ifd_ComputeSignature( word uTruth, int pCounts[6] )
}
}
Vec_IntSelectSort
(
pCounts
,
6
);
Vec_IntSelectSort
(
pCounts
,
6
);
}
}
int
Ifd_ManDsdTest
()
int
Ifd_ManDsdTest
33
()
{
{
int
nVars
=
6
;
int
nVars
=
6
;
Vec_Wrd_t
*
vTruths
=
Ifd_ManDsdTruths
(
nVars
);
Vec_Wrd_t
*
vTruths
=
Ifd_ManDsdTruths
(
nVars
);
...
@@ -926,7 +926,7 @@ int Ifd_ManDsdTest()
...
@@ -926,7 +926,7 @@ int Ifd_ManDsdTest()
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
int
Ifd_ManDsdTest
33
()
int
Ifd_ManDsdTest
()
{
{
int
nVars
=
6
;
int
nVars
=
6
;
FILE
*
pFile
;
FILE
*
pFile
;
...
...
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