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
6e5a797a
Commit
6e5a797a
authored
Jul 16, 2021
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Command to move CI/CO names.
parent
d9aeaade
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
237 additions
and
7 deletions
+237
-7
src/aig/gia/giaMinLut.c
+2
-1
src/base/abci/abc.c
+63
-0
src/base/wlc/wlc.c
+172
-6
No files found.
src/aig/gia/giaMinLut.c
View file @
6e5a797a
...
...
@@ -138,6 +138,7 @@ Gia_Man_t * Vec_WrdReadTest( char * pFileName )
Vec_Wec_t
*
vRes
=
Vec_WrdReadLayerText
(
pFileName
,
&
nIns
,
&
nOuts
);
int
nBitsI
=
vRes
?
Vec_WecMaxLevelSize
(
vRes
)
:
0
;
int
nBitsO
=
vRes
?
nOuts
/
Vec_WecSize
(
vRes
)
:
0
;
int
nWords
=
Abc_TtWordNum
(
nBitsI
);
word
*
pFuncs
=
vRes
?
Vec_WrdReadTruthText
(
pFileName
,
nBitsI
,
nBitsO
,
Vec_WecSize
(
vRes
)
)
:
NULL
;
Vec_Int_t
*
vPart
,
*
vLits
=
Vec_IntAlloc
(
nOuts
);
if
(
vRes
==
NULL
||
pFuncs
==
NULL
)
...
...
@@ -157,7 +158,7 @@ Gia_Man_t * Vec_WrdReadTest( char * pFileName )
Vec_WecForEachLevel
(
vRes
,
vPart
,
i
)
{
assert
(
Vec_IntSize
(
vPart
)
<=
nBitsI
);
pPart
=
Gia_TryPermOptCare
(
pFuncs
+
i
*
nBitsO
,
nBitsI
,
nBitsO
,
Abc_TtWordNum
(
nBitsI
)
,
10
,
0
);
pPart
=
Gia_TryPermOptCare
(
pFuncs
+
i
*
nBitsO
*
nWords
,
nBitsI
,
nBitsO
,
nWords
,
10
,
0
);
Gia_ManFillValue
(
pPart
);
Gia_ManConst0
(
pPart
)
->
Value
=
0
;
Gia_ManForEachCi
(
pPart
,
pObj
,
k
)
...
...
src/base/abci/abc.c
View file @
6e5a797a
...
...
@@ -379,6 +379,7 @@ static int Abc_CommandAbcLoad ( Abc_Frame_t * pAbc, int argc, cha
static
int
Abc_CommandAbc9Get
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAbc9Put
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAbc9MoveNames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAbc9Save
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAbc9Save2
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
Abc_CommandAbc9SaveAig
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
...
...
@@ -1107,6 +1108,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&get"
,
Abc_CommandAbc9Get
,
0
);
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&put"
,
Abc_CommandAbc9Put
,
0
);
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&move_names"
,
Abc_CommandAbc9MoveNames
,
0
);
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&save"
,
Abc_CommandAbc9Save
,
0
);
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&save2"
,
Abc_CommandAbc9Save2
,
0
);
Cmd_CommandAdd
(
pAbc
,
"ABC9"
,
"&saveaig"
,
Abc_CommandAbc9SaveAig
,
0
);
...
...
@@ -30733,6 +30735,67 @@ usage:
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Abc_CommandAbc9MoveNames
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
int
c
,
fVerbose
=
0
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"nvh"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'v'
:
fVerbose
^=
1
;
break
;
default:
goto
usage
;
}
}
if
(
pAbc
->
pNtkCur
==
NULL
)
{
Abc_Print
(
-
1
,
"There is no current network
\n
"
);
return
1
;
}
if
(
pAbc
->
pGia
==
NULL
)
{
Abc_Print
(
-
1
,
"There is no current AIG.
\n
"
);
return
1
;
}
if
(
Gia_ManCiNum
(
pAbc
->
pGia
)
!=
Abc_NtkCiNum
(
pAbc
->
pNtkCur
)
)
{
Abc_Print
(
-
1
,
"The number of CIs does not match.
\n
"
);
return
1
;
}
if
(
Gia_ManCoNum
(
pAbc
->
pGia
)
!=
Abc_NtkCoNum
(
pAbc
->
pNtkCur
)
)
{
Abc_Print
(
-
1
,
"The number of COs does not match.
\n
"
);
return
1
;
}
if
(
pAbc
->
pGia
->
vNamesIn
)
Vec_PtrFreeFree
(
pAbc
->
pGia
->
vNamesIn
);
if
(
pAbc
->
pGia
->
vNamesOut
)
Vec_PtrFreeFree
(
pAbc
->
pGia
->
vNamesOut
);
pAbc
->
pGia
->
vNamesIn
=
Abc_NtkCollectCiNames
(
pAbc
->
pNtkCur
);
pAbc
->
pGia
->
vNamesOut
=
Abc_NtkCollectCoNames
(
pAbc
->
pNtkCur
);
return
0
;
usage:
Abc_Print
(
-
2
,
"usage: &move_names [-vh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
move CI/CO names
\n
"
);
Abc_Print
(
-
2
,
"
\t
-v : toggles additional verbose output [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
<file> : the file name
\n
"
);
return
1
;
}
/**Function*************************************************************
Synopsis [Compares to versions of the design and finds the best.]
Description []
src/base/wlc/wlc.c
View file @
6e5a797a
...
...
@@ -286,14 +286,14 @@ Vec_Int_t * Wlc_ManGenAdderN( Gia_Man_t * p, int nLits, int * pLitsA, int * pLit
pRes
[
nLits
]
=
Carry
;
return
vRes
;
}
Vec_Int_t
*
Wlc_ManGenAdder_rec
(
Gia_Man_t
*
p
,
int
nLits
,
int
*
pLitsA
,
int
*
pLitsB
,
int
Carry
,
int
Size
)
Vec_Int_t
*
Wlc_ManGenAdder
2
_rec
(
Gia_Man_t
*
p
,
int
nLits
,
int
*
pLitsA
,
int
*
pLitsB
,
int
Carry
,
int
Size
)
{
Vec_Int_t
*
vRes
,
*
vRes0
,
*
vRes1
,
*
vRes2
;
int
i
,
iCtrl
;
if
(
nLits
==
Size
)
return
Wlc_ManGenAdderN
(
p
,
nLits
,
pLitsA
,
pLitsB
,
Carry
);
vRes0
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
2
,
pLitsA
,
pLitsB
,
Carry
,
Size
);
vRes1
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
2
,
pLitsA
+
nLits
/
2
,
pLitsB
+
nLits
/
2
,
0
,
Size
);
vRes2
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
2
,
pLitsA
+
nLits
/
2
,
pLitsB
+
nLits
/
2
,
1
,
Size
);
vRes0
=
Wlc_ManGenAdder
2
_rec
(
p
,
nLits
/
2
,
pLitsA
,
pLitsB
,
Carry
,
Size
);
vRes1
=
Wlc_ManGenAdder
2
_rec
(
p
,
nLits
/
2
,
pLitsA
+
nLits
/
2
,
pLitsB
+
nLits
/
2
,
0
,
Size
);
vRes2
=
Wlc_ManGenAdder
2
_rec
(
p
,
nLits
/
2
,
pLitsA
+
nLits
/
2
,
pLitsB
+
nLits
/
2
,
1
,
Size
);
vRes
=
Vec_IntAlloc
(
nLits
+
1
);
Vec_IntAppend
(
vRes
,
vRes0
);
iCtrl
=
Vec_IntPop
(
vRes
);
...
...
@@ -305,7 +305,7 @@ Vec_Int_t * Wlc_ManGenAdder_rec( Gia_Man_t * p, int nLits, int * pLitsA, int * p
Vec_IntFree
(
vRes2
);
return
vRes
;
}
Gia_Man_t
*
Wlc_ManGenAdder
(
int
nBits
,
int
Size
,
int
fSigned
)
Gia_Man_t
*
Wlc_ManGenAdder
2
(
int
nBits
,
int
Size
,
int
fSigned
)
{
Gia_Man_t
*
pTemp
,
*
pNew
;
int
n
,
i
,
iLit
,
nBitsAll
;
Vec_Int_t
*
vOuts
,
*
vLits
=
Vec_IntAlloc
(
1000
);
...
...
@@ -321,7 +321,7 @@ Gia_Man_t * Wlc_ManGenAdder( int nBits, int Size, int fSigned )
Vec_IntPush
(
vLits
,
fSigned
?
Vec_IntEntry
(
vLits
,
nBits
-
1
)
:
0
);
}
Gia_ManHashAlloc
(
pNew
);
vOuts
=
Wlc_ManGenAdder_rec
(
pNew
,
nBitsAll
,
Vec_IntEntryP
(
vLits
,
0
),
Vec_IntEntryP
(
vLits
,
Vec_IntSize
(
vLits
)
/
2
),
0
,
Size
);
vOuts
=
Wlc_ManGenAdder
2
_rec
(
pNew
,
nBitsAll
,
Vec_IntEntryP
(
vLits
,
0
),
Vec_IntEntryP
(
vLits
,
Vec_IntSize
(
vLits
)
/
2
),
0
,
Size
);
Gia_ManHashStop
(
pNew
);
Vec_IntForEachEntry
(
vOuts
,
iLit
,
i
)
Gia_ManAppendCo
(
pNew
,
iLit
);
...
...
@@ -332,6 +332,172 @@ Gia_Man_t * Wlc_ManGenAdder( int nBits, int Size, int fSigned )
return
pNew
;
}
Vec_Int_t
*
Wlc_ManGenAdder_rec
(
Gia_Man_t
*
p
,
int
nLits
,
int
*
pLitsA
,
int
*
pLitsB
,
int
Carry
,
int
Size
)
{
Vec_Int_t
*
vRes
,
*
vRes0
,
*
vRes1
,
*
vRes2
,
*
vRes3
,
*
vRes4
;
int
i
,
iCtrl
;
if
(
nLits
==
Size
)
return
Wlc_ManGenAdderN
(
p
,
nLits
,
pLitsA
,
pLitsB
,
Carry
);
assert
(
nLits
%
3
==
0
);
vRes0
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
3
,
pLitsA
+
0
*
nLits
/
3
,
pLitsB
+
0
*
nLits
/
3
,
Carry
,
Size
);
vRes1
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
3
,
pLitsA
+
1
*
nLits
/
3
,
pLitsB
+
1
*
nLits
/
3
,
0
,
Size
);
vRes2
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
3
,
pLitsA
+
1
*
nLits
/
3
,
pLitsB
+
1
*
nLits
/
3
,
1
,
Size
);
vRes3
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
3
,
pLitsA
+
2
*
nLits
/
3
,
pLitsB
+
2
*
nLits
/
3
,
0
,
Size
);
vRes4
=
Wlc_ManGenAdder_rec
(
p
,
nLits
/
3
,
pLitsA
+
2
*
nLits
/
3
,
pLitsB
+
2
*
nLits
/
3
,
1
,
Size
);
vRes
=
Vec_IntAlloc
(
nLits
+
1
);
Vec_IntAppend
(
vRes
,
vRes0
);
iCtrl
=
Vec_IntPop
(
vRes
);
for
(
i
=
0
;
i
<=
nLits
/
3
;
i
++
)
Vec_IntPush
(
vRes
,
Gia_ManHashMux
(
p
,
iCtrl
,
Vec_IntEntry
(
vRes2
,
i
),
Vec_IntEntry
(
vRes1
,
i
))
);
iCtrl
=
Vec_IntPop
(
vRes
);
for
(
i
=
0
;
i
<=
nLits
/
3
;
i
++
)
Vec_IntPush
(
vRes
,
Gia_ManHashMux
(
p
,
iCtrl
,
Vec_IntEntry
(
vRes4
,
i
),
Vec_IntEntry
(
vRes3
,
i
))
);
assert
(
Vec_IntSize
(
vRes
)
==
nLits
+
1
);
Vec_IntFree
(
vRes0
);
Vec_IntFree
(
vRes1
);
Vec_IntFree
(
vRes2
);
Vec_IntFree
(
vRes3
);
Vec_IntFree
(
vRes4
);
return
vRes
;
}
Gia_Man_t
*
Wlc_ManGenAdder
(
int
nBits
)
{
Gia_Man_t
*
pTemp
,
*
pNew
;
int
n
,
i
,
iLit
,
nBitsAll
;
Vec_Int_t
*
vOuts
,
*
vLits
=
Vec_IntAlloc
(
1000
);
pNew
=
Gia_ManStart
(
1000
);
pNew
->
pName
=
Abc_UtilStrsav
(
"adder"
);
for
(
nBitsAll
=
3
;
nBitsAll
<
nBits
;
nBitsAll
*=
3
)
;
for
(
n
=
0
;
n
<
2
;
n
++
)
{
for
(
i
=
0
;
i
<
nBits
;
i
++
)
Vec_IntPush
(
vLits
,
Gia_ManAppendCi
(
pNew
)
);
for
(
;
i
<
nBitsAll
;
i
++
)
Vec_IntPush
(
vLits
,
0
);
}
Gia_ManHashAlloc
(
pNew
);
vOuts
=
Wlc_ManGenAdder_rec
(
pNew
,
nBitsAll
,
Vec_IntEntryP
(
vLits
,
0
),
Vec_IntEntryP
(
vLits
,
Vec_IntSize
(
vLits
)
/
2
),
0
,
3
);
Gia_ManHashStop
(
pNew
);
Vec_IntForEachEntryStop
(
vOuts
,
iLit
,
i
,
nBits
+
1
)
Gia_ManAppendCo
(
pNew
,
iLit
);
Vec_IntFree
(
vLits
);
Vec_IntFree
(
vOuts
);
pNew
=
Gia_ManCleanup
(
pTemp
=
pNew
);
Gia_ManStop
(
pTemp
);
return
pNew
;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Vec_Wec_t
*
Wlc_ManGenTree_iter
(
Gia_Man_t
*
p
,
Vec_Wec_t
*
vBits
,
int
*
pCounter
)
{
Vec_Wec_t
*
vBitsNew
=
Vec_WecStart
(
Vec_WecSize
(
vBits
)
);
int
i
,
k
,
Count
=
0
;
for
(
i
=
0
;
i
<
Vec_WecSize
(
vBits
)
-
1
;
i
++
)
{
Vec_Int_t
*
vBits0
=
Vec_WecEntry
(
vBits
,
i
);
Vec_Int_t
*
vBits1
=
Vec_WecEntry
(
vBits
,
i
+
1
);
if
(
i
==
0
)
{
int
s
=
0
;
}
while
(
Vec_IntSize
(
vBits0
)
>=
6
)
{
for
(
k
=
0
;
k
<
6
;
k
++
)
Vec_IntPop
(
vBits0
);
Vec_WecPush
(
vBitsNew
,
i
+
0
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
1
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
2
,
0
);
Count
+=
3
;
}
if
(
Vec_IntSize
(
vBits0
)
==
4
||
Vec_IntSize
(
vBits0
)
==
5
)
{
Vec_IntClear
(
vBits0
);
if
(
Vec_IntSize
(
vBits1
)
>
0
)
Vec_IntPop
(
vBits1
);
Vec_WecPush
(
vBitsNew
,
i
+
0
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
1
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
2
,
0
);
Count
+=
3
;
}
//if ( (Vec_IntSize(vBits0) == 2 && Vec_IntSize(vBits1) > 1) || (Vec_IntSize(vBits0) == 3 && Vec_IntSize(vBits1) > 0) )
if
(
Vec_IntSize
(
vBits0
)
==
3
&&
Vec_IntSize
(
vBits1
)
>
0
)
{
Vec_IntClear
(
vBits0
);
Vec_IntPop
(
vBits1
);
if
(
Vec_IntSize
(
vBits1
)
>
0
)
Vec_IntPop
(
vBits1
);
if
(
Vec_IntSize
(
vBits1
)
>
0
)
Vec_IntPop
(
vBits1
);
Vec_WecPush
(
vBitsNew
,
i
+
0
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
1
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
2
,
0
);
Count
+=
3
;
}
if
(
Vec_IntSize
(
vBits0
)
==
3
&&
Vec_IntSize
(
vBits1
)
==
0
)
{
Vec_IntClear
(
vBits0
);
Vec_WecPush
(
vBitsNew
,
i
+
0
,
0
);
Vec_WecPush
(
vBitsNew
,
i
+
1
,
0
);
Count
+=
2
;
}
/*
if ( Vec_IntSize(vBits0) == 1 && Vec_IntSize(vBits1) > 2 )
{
Vec_IntClear( vBits0 );
Vec_IntPop( vBits1 );
Vec_IntPop( vBits1 );
Vec_IntPop( vBits1 );
Vec_WecPush( vBitsNew, i+0, 0 );
Vec_WecPush( vBitsNew, i+1, 0 );
Vec_WecPush( vBitsNew, i+2, 0 );
}
*/
for
(
k
=
0
;
k
<
Vec_IntSize
(
vBits0
);
k
++
)
Vec_WecPush
(
vBitsNew
,
i
,
0
);
Vec_IntClear
(
vBits0
);
}
if
(
pCounter
)
*
pCounter
+=
Count
;
return
vBitsNew
;
}
Gia_Man_t
*
Wlc_ManGenTree
(
int
nBits
)
{
Gia_Man_t
*
pTemp
,
*
pNew
;
int
i
,
iLit
,
Counter
=
0
;
Vec_Int_t
*
vOuts
=
Vec_IntAlloc
(
1000
),
*
vLits
=
Vec_IntAlloc
(
1000
);
Vec_Wec_t
*
vTemp
,
*
vBits
=
Vec_WecStart
(
14
);
// Abc_Base2Log(nBits)+3 );
pNew
=
Gia_ManStart
(
1000
);
pNew
->
pName
=
Abc_UtilStrsav
(
"tree"
);
for
(
i
=
0
;
i
<
nBits
;
i
++
)
// Vec_WecPush( vBits, 0, Gia_ManAppendCi(pNew) );
Vec_WecPush
(
vBits
,
0
,
0
);
Vec_WecPrint
(
vBits
,
0
);
Gia_ManHashAlloc
(
pNew
);
for
(
i
=
0
;
i
<
10
;
i
++
)
{
vBits
=
Wlc_ManGenTree_iter
(
pNew
,
vTemp
=
vBits
,
&
Counter
);
Vec_WecFree
(
vTemp
);
printf
(
"LEVEL %d
\n
"
,
i
+
1
);
Vec_WecPrint
(
vBits
,
0
);
}
printf
(
"Counter = %d.
\n
"
,
Counter
);
Gia_ManHashStop
(
pNew
);
Vec_IntForEachEntry
(
vOuts
,
iLit
,
i
)
Gia_ManAppendCo
(
pNew
,
iLit
);
Vec_IntFree
(
vLits
);
Vec_WecFree
(
vBits
);
pNew
=
Gia_ManCleanup
(
pTemp
=
pNew
);
Gia_ManStop
(
pTemp
);
return
pNew
;
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
...
...
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