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
4db5e3c0
Commit
4db5e3c0
authored
Sep 24, 2014
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Printing node type statistics.
parent
ffaad9ba
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
106 additions
and
2 deletions
+106
-2
src/base/wlc/wlc.h
+2
-0
src/base/wlc/wlcNtk.c
+104
-2
No files found.
src/base/wlc/wlc.h
View file @
4db5e3c0
...
@@ -163,6 +163,8 @@ static inline Wlc_Obj_t * Wlc_ObjFanin2( Wlc_Ntk_t * p, Wlc_Obj_t * pObj )
...
@@ -163,6 +163,8 @@ static inline Wlc_Obj_t * Wlc_ObjFanin2( Wlc_Ntk_t * p, Wlc_Obj_t * pObj )
static
inline
int
Wlc_ObjRange
(
Wlc_Obj_t
*
p
)
{
return
p
->
End
-
p
->
Beg
+
1
;
}
static
inline
int
Wlc_ObjRange
(
Wlc_Obj_t
*
p
)
{
return
p
->
End
-
p
->
Beg
+
1
;
}
static
inline
int
Wlc_ObjRangeEnd
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_BIT_SELECT
);
return
p
->
Fanins
[
1
]
>>
16
;
}
static
inline
int
Wlc_ObjRangeEnd
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_BIT_SELECT
);
return
p
->
Fanins
[
1
]
>>
16
;
}
static
inline
int
Wlc_ObjRangeBeg
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_BIT_SELECT
);
return
p
->
Fanins
[
1
]
&
0xFFFF
;
}
static
inline
int
Wlc_ObjRangeBeg
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_BIT_SELECT
);
return
p
->
Fanins
[
1
]
&
0xFFFF
;
}
static
inline
int
Wlc_ObjSigned
(
Wlc_Obj_t
*
p
)
{
return
p
->
Signed
;
}
static
inline
int
Wlc_ObjSign
(
Wlc_Obj_t
*
p
)
{
return
Abc_Var2Lit
(
Wlc_ObjRange
(
p
),
Wlc_ObjSigned
(
p
)
);
}
static
inline
int
*
Wlc_ObjConstValue
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_CONST
);
return
Wlc_ObjFanins
(
p
);
}
static
inline
int
*
Wlc_ObjConstValue
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_CONST
);
return
Wlc_ObjFanins
(
p
);
}
static
inline
int
Wlc_ObjTableId
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_TABLE
);
return
p
->
Fanins
[
1
];
}
static
inline
int
Wlc_ObjTableId
(
Wlc_Obj_t
*
p
)
{
assert
(
p
->
Type
==
WLC_OBJ_TABLE
);
return
p
->
Fanins
[
1
];
}
static
inline
word
*
Wlc_ObjTable
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
return
(
word
*
)
Vec_PtrEntry
(
p
->
vTables
,
Wlc_ObjTableId
(
pObj
)
);
}
static
inline
word
*
Wlc_ObjTable
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
return
(
word
*
)
Vec_PtrEntry
(
p
->
vTables
,
Wlc_ObjTableId
(
pObj
)
);
}
...
...
src/base/wlc/wlcNtk.c
View file @
4db5e3c0
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
***********************************************************************/
***********************************************************************/
#include "wlc.h"
#include "wlc.h"
#include "misc/vec/vecWec.h"
ABC_NAMESPACE_IMPL_START
ABC_NAMESPACE_IMPL_START
...
@@ -68,7 +69,7 @@ static char * Wlc_Names[WLC_OBJ_NUMBER+1] = {
...
@@ -68,7 +69,7 @@ static char * Wlc_Names[WLC_OBJ_NUMBER+1] = {
"-"
,
// 36: arithmetic subtraction
"-"
,
// 36: arithmetic subtraction
"*"
,
// 37: arithmetic multiplier
"*"
,
// 37: arithmetic multiplier
"//"
,
// 38: arithmetic division
"//"
,
// 38: arithmetic division
"%
%"
,
// 39: arithmetic modulus
"%
"
,
// 39: arithmetic modulus
"**"
,
// 40: arithmetic power
"**"
,
// 40: arithmetic power
"-"
,
// 41: arithmetic minus
"-"
,
// 41: arithmetic minus
"table"
,
// 42: bit table
"table"
,
// 42: bit table
...
@@ -145,6 +146,8 @@ void Wlc_ObjUpdateType( Wlc_Ntk_t * p, Wlc_Obj_t * pObj, int Type )
...
@@ -145,6 +146,8 @@ void Wlc_ObjUpdateType( Wlc_Ntk_t * p, Wlc_Obj_t * pObj, int Type )
{
{
if
(
pObj
->
Type
==
WLC_OBJ_PO
)
if
(
pObj
->
Type
==
WLC_OBJ_PO
)
{
{
if
(
Type
!=
WLC_OBJ_BUF
)
printf
(
"Primary outputs should be driven by buffers.
\n
"
);
assert
(
Type
==
WLC_OBJ_BUF
);
assert
(
Type
==
WLC_OBJ_BUF
);
return
;
return
;
}
}
...
@@ -199,6 +202,104 @@ int Wlc_NtkMemUsage( Wlc_Ntk_t * p )
...
@@ -199,6 +202,104 @@ int Wlc_NtkMemUsage( Wlc_Ntk_t * p )
Mem
+=
Mem_FlexReadMemUsage
(
p
->
pMemFanin
);
Mem
+=
Mem_FlexReadMemUsage
(
p
->
pMemFanin
);
return
Mem
;
return
Mem
;
}
}
/**Function*************************************************************
Synopsis [Prints distribution of operator types.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
int
Wlc_NtkPrintDistribMakeSign
(
int
s
,
int
s0
,
int
s1
)
{
if
(
s0
&
1
)
{
int
s
=
9
;
}
return
(
s1
<<
20
)
|
(
s0
<<
10
)
|
s
;
}
static
inline
void
Wlc_NtkPrintDistribFromSign
(
int
sss
,
int
*
s
,
int
*
s0
,
int
*
s1
)
{
*
s1
=
sss
>>
20
;
*
s0
=
(
sss
>>
10
)
&
0x3FF
;
*
s
=
sss
&
0x3FF
;
}
static
inline
void
Wlc_NtkPrintDistribAddOne
(
Vec_Wec_t
*
vTypes
,
Vec_Wec_t
*
vOccurs
,
int
Type
,
int
Sign
)
{
Vec_Int_t
*
vType
=
Vec_WecEntry
(
vTypes
,
Type
);
Vec_Int_t
*
vOccur
=
Vec_WecEntry
(
vOccurs
,
Type
);
int
i
,
Entry
;
Vec_IntForEachEntry
(
vType
,
Entry
,
i
)
if
(
Entry
==
Sign
)
{
Vec_IntAddToEntry
(
vOccur
,
i
,
1
);
return
;
}
Vec_IntPush
(
vType
,
Sign
);
Vec_IntPush
(
vOccur
,
1
);
}
void
Wlc_NtkPrintDistribSortOne
(
Vec_Wec_t
*
vTypes
,
Vec_Wec_t
*
vOccurs
,
int
Type
)
{
Vec_Int_t
*
vType
=
Vec_WecEntry
(
vTypes
,
Type
);
Vec_Int_t
*
vOccur
=
Vec_WecEntry
(
vOccurs
,
Type
);
Vec_IntSelectSortCost2
(
Vec_IntArray
(
vType
),
Vec_IntSize
(
vType
),
Vec_IntArray
(
vOccur
)
);
Vec_IntReverseOrder
(
vType
);
Vec_IntReverseOrder
(
vOccur
);
}
void
Wlc_NtkPrintDistrib
(
Wlc_Ntk_t
*
p
,
int
fVerbose
)
{
Wlc_Obj_t
*
pObj
;
int
i
,
k
,
Sign
,
s
,
s0
,
s1
;
Vec_Wec_t
*
vTypes
,
*
vOccurs
;
vTypes
=
Vec_WecStart
(
WLC_OBJ_NUMBER
);
vOccurs
=
Vec_WecStart
(
WLC_OBJ_NUMBER
);
Wlc_NtkForEachObj
(
p
,
pObj
,
i
)
{
// char * pName = Wlc_ObjName(p, i);
// if ( pObj->Type == WLC_OBJ_ARI_MULTI )
// 0-input types
if
(
pObj
->
Type
==
WLC_OBJ_PI
||
pObj
->
Type
==
WLC_OBJ_CONST
||
pObj
->
Type
==
WLC_OBJ_BIT_CONCAT
)
Sign
=
Wlc_NtkPrintDistribMakeSign
(
Wlc_ObjSign
(
pObj
),
0
,
0
);
// 1-input types
else
if
(
pObj
->
Type
==
WLC_OBJ_BUF
||
pObj
->
Type
==
WLC_OBJ_PO
||
pObj
->
Type
==
WLC_OBJ_BI
||
pObj
->
Type
==
WLC_OBJ_BIT_ZEROPAD
||
pObj
->
Type
==
WLC_OBJ_BIT_SIGNEXT
||
pObj
->
Type
==
WLC_OBJ_BIT_NOT
||
pObj
->
Type
==
WLC_OBJ_LOGIC_NOT
||
pObj
->
Type
==
WLC_OBJ_ARI_MINUS
||
pObj
->
Type
==
WLC_OBJ_BIT_SELECT
||
pObj
->
Type
==
WLC_OBJ_TABLE
)
Sign
=
Wlc_NtkPrintDistribMakeSign
(
Wlc_ObjSign
(
pObj
),
Wlc_ObjSign
(
Wlc_ObjFanin0
(
p
,
pObj
)),
0
);
// 2-input types (including MUX)
else
Sign
=
Wlc_NtkPrintDistribMakeSign
(
Wlc_ObjSign
(
pObj
),
Wlc_ObjSign
(
Wlc_ObjFanin0
(
p
,
pObj
)),
Wlc_ObjSign
(
Wlc_ObjFanin1
(
p
,
pObj
))
);
// add to storage
Wlc_NtkPrintDistribAddOne
(
vTypes
,
vOccurs
,
pObj
->
Type
,
Sign
);
}
// print by occurrence
for
(
i
=
0
;
i
<
WLC_OBJ_NUMBER
;
i
++
)
{
Vec_Int_t
*
vType
=
Vec_WecEntry
(
vTypes
,
i
);
Vec_Int_t
*
vOccur
=
Vec_WecEntry
(
vOccurs
,
i
);
if
(
p
->
nObjs
[
i
]
==
0
)
continue
;
printf
(
"%2d : %6d %-8s "
,
i
,
p
->
nObjs
[
i
],
Wlc_Names
[
i
]
);
// sort by occurence
Wlc_NtkPrintDistribSortOne
(
vTypes
,
vOccurs
,
i
);
Vec_IntForEachEntry
(
vType
,
Sign
,
k
)
{
Wlc_NtkPrintDistribFromSign
(
Sign
,
&
s
,
&
s0
,
&
s1
);
printf
(
"(%d) "
,
Vec_IntEntry
(
vOccur
,
k
)
);
printf
(
"%s%d "
,
Abc_LitIsCompl
(
s
)
?
"-"
:
""
,
Abc_Lit2Var
(
s
)
);
if
(
s0
)
printf
(
"= %s%d "
,
Abc_LitIsCompl
(
s0
)
?
"-"
:
""
,
Abc_Lit2Var
(
s0
)
);
if
(
s1
)
printf
(
" %s%d "
,
Abc_LitIsCompl
(
s1
)
?
"-"
:
""
,
Abc_Lit2Var
(
s1
)
);
printf
(
" "
);
}
printf
(
"
\n
"
);
}
Vec_WecFree
(
vTypes
);
Vec_WecFree
(
vOccurs
);
}
void
Wlc_NtkPrintNodes
(
Wlc_Ntk_t
*
p
,
int
Type
)
void
Wlc_NtkPrintNodes
(
Wlc_Ntk_t
*
p
,
int
Type
)
{
{
Wlc_Obj_t
*
pObj
;
Wlc_Obj_t
*
pObj
;
...
@@ -233,10 +334,11 @@ void Wlc_NtkPrintStats( Wlc_Ntk_t * p, int fVerbose )
...
@@ -233,10 +334,11 @@ void Wlc_NtkPrintStats( Wlc_Ntk_t * p, int fVerbose )
if
(
!
fVerbose
)
if
(
!
fVerbose
)
return
;
return
;
printf
(
"Node type statisticts:
\n
"
);
printf
(
"Node type statisticts:
\n
"
);
Wlc_NtkPrintDistrib
(
p
,
fVerbose
);
return
;
for
(
i
=
0
;
i
<
WLC_OBJ_NUMBER
;
i
++
)
for
(
i
=
0
;
i
<
WLC_OBJ_NUMBER
;
i
++
)
if
(
p
->
nObjs
[
i
]
)
if
(
p
->
nObjs
[
i
]
)
printf
(
"%2d : %6d %-8s
\n
"
,
i
,
p
->
nObjs
[
i
],
Wlc_Names
[
i
]
);
printf
(
"%2d : %6d %-8s
\n
"
,
i
,
p
->
nObjs
[
i
],
Wlc_Names
[
i
]
);
// Wlc_NtkPrintNodes( p, WLC_OBJ_ARI_MULTI );
}
}
/**Function*************************************************************
/**Function*************************************************************
...
...
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