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
8410daf3
Commit
8410daf3
authored
Feb 04, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements and tuning of CBA with buffering/sizing.
parent
eb270018
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
142 additions
and
85 deletions
+142
-85
src/base/abc/abc.h
+1
-1
src/base/abc/abcDfs.c
+8
-5
src/base/abc/abcFunc.c
+1
-1
src/base/abc/abcObj.c
+1
-1
src/base/abci/abcPrint.c
+2
-2
src/base/cba/cba.h
+8
-8
src/base/cba/cbaBlast.c
+32
-36
src/base/io/ioWriteBlif.c
+12
-3
src/map/scl/sclBufSize.c
+20
-7
src/map/scl/sclDnsize.c
+24
-1
src/map/scl/sclSize.c
+22
-1
src/map/scl/sclSize.h
+3
-3
src/map/scl/sclUtil.c
+8
-16
No files found.
src/base/abc/abc.h
View file @
8410daf3
...
@@ -358,7 +358,7 @@ static inline int Abc_ObjIsLatch( Abc_Obj_t * pObj ) { return pO
...
@@ -358,7 +358,7 @@ static inline int Abc_ObjIsLatch( Abc_Obj_t * pObj ) { return pO
static
inline
int
Abc_ObjIsBox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
||
pObj
->
Type
==
ABC_OBJ_WHITEBOX
||
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;
}
static
inline
int
Abc_ObjIsBox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
||
pObj
->
Type
==
ABC_OBJ_WHITEBOX
||
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;
}
static
inline
int
Abc_ObjIsWhitebox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_WHITEBOX
;}
static
inline
int
Abc_ObjIsWhitebox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_WHITEBOX
;}
static
inline
int
Abc_ObjIsBlackbox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;}
static
inline
int
Abc_ObjIsBlackbox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;}
static
inline
int
Abc_ObjIsBarBuf
(
Abc_Obj_t
*
pObj
)
{
return
Abc_Ntk
IsLogic
(
pObj
->
pNtk
)
&&
Abc_ObjIsNode
(
pObj
)
&&
Vec_IntSize
(
&
pObj
->
vFanins
)
==
1
&&
pObj
->
pData
==
NULL
;
}
static
inline
int
Abc_ObjIsBarBuf
(
Abc_Obj_t
*
pObj
)
{
return
Abc_Ntk
HasMapping
(
pObj
->
pNtk
)
&&
Abc_ObjIsNode
(
pObj
)
&&
Vec_IntSize
(
&
pObj
->
vFanins
)
==
1
&&
pObj
->
pData
==
NULL
;
}
static
inline
void
Abc_ObjBlackboxToWhitebox
(
Abc_Obj_t
*
pObj
)
{
assert
(
Abc_ObjIsBlackbox
(
pObj
)
);
pObj
->
Type
=
ABC_OBJ_WHITEBOX
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_BLACKBOX
]
--
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_WHITEBOX
]
++
;
}
static
inline
void
Abc_ObjBlackboxToWhitebox
(
Abc_Obj_t
*
pObj
)
{
assert
(
Abc_ObjIsBlackbox
(
pObj
)
);
pObj
->
Type
=
ABC_OBJ_WHITEBOX
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_BLACKBOX
]
--
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_WHITEBOX
]
++
;
}
// working with fanin/fanout edges
// working with fanin/fanout edges
...
...
src/base/abc/abcDfs.c
View file @
8410daf3
...
@@ -87,14 +87,17 @@ Vec_Ptr_t * Abc_NtkDfs( Abc_Ntk_t * pNtk, int fCollectAll )
...
@@ -87,14 +87,17 @@ Vec_Ptr_t * Abc_NtkDfs( Abc_Ntk_t * pNtk, int fCollectAll )
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
pNtk
->
nBarBufs2
>
0
)
Abc_NtkForEachBarBuf
(
pNtk
,
pObj
,
i
)
{
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pObj
)),
vNodes
);
Vec_PtrPush
(
vNodes
,
pObj
);
}
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
{
{
if
(
!
Abc_ObjIsCo
(
pObj
)
&&
!
Abc_ObjIsBarBuf
(
pObj
)
)
continue
;
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pObj
)),
vNodes
);
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pObj
)),
vNodes
);
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
Vec_PtrPush
(
vNodes
,
pObj
);
}
}
// collect dangling nodes if asked to
// collect dangling nodes if asked to
if
(
fCollectAll
)
if
(
fCollectAll
)
...
...
src/base/abc/abcFunc.c
View file @
8410daf3
...
@@ -1081,7 +1081,6 @@ int Abc_NtkMapToSop( Abc_Ntk_t * pNtk )
...
@@ -1081,7 +1081,6 @@ int Abc_NtkMapToSop( Abc_Ntk_t * pNtk )
// update the functionality manager
// update the functionality manager
assert
(
pNtk
->
pManFunc
==
Abc_FrameReadLibGen
()
);
assert
(
pNtk
->
pManFunc
==
Abc_FrameReadLibGen
()
);
pNtk
->
pManFunc
=
Mem_FlexStart
();
pNtk
->
pManFunc
=
Mem_FlexStart
();
pNtk
->
ntkFunc
=
ABC_FUNC_SOP
;
// update the nodes
// update the nodes
Abc_NtkForEachNode
(
pNtk
,
pNode
,
i
)
Abc_NtkForEachNode
(
pNtk
,
pNode
,
i
)
{
{
...
@@ -1091,6 +1090,7 @@ int Abc_NtkMapToSop( Abc_Ntk_t * pNtk )
...
@@ -1091,6 +1090,7 @@ int Abc_NtkMapToSop( Abc_Ntk_t * pNtk )
assert
(
Abc_SopGetVarNum
(
pSop
)
==
Abc_ObjFaninNum
(
pNode
)
);
assert
(
Abc_SopGetVarNum
(
pSop
)
==
Abc_ObjFaninNum
(
pNode
)
);
pNode
->
pData
=
Abc_SopRegister
(
(
Mem_Flex_t
*
)
pNtk
->
pManFunc
,
pSop
);
pNode
->
pData
=
Abc_SopRegister
(
(
Mem_Flex_t
*
)
pNtk
->
pManFunc
,
pSop
);
}
}
pNtk
->
ntkFunc
=
ABC_FUNC_SOP
;
return
1
;
return
1
;
}
}
...
...
src/base/abc/abcObj.c
View file @
8410daf3
...
@@ -377,7 +377,7 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName
...
@@ -377,7 +377,7 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName
else
if
(
Abc_NtkHasAig
(
pNtkNew
)
)
else
if
(
Abc_NtkHasAig
(
pNtkNew
)
)
pObjNew
->
pData
=
Hop_Transfer
((
Hop_Man_t
*
)
pObj
->
pNtk
->
pManFunc
,
(
Hop_Man_t
*
)
pNtkNew
->
pManFunc
,
(
Hop_Obj_t
*
)
pObj
->
pData
,
Abc_ObjFaninNum
(
pObj
));
pObjNew
->
pData
=
Hop_Transfer
((
Hop_Man_t
*
)
pObj
->
pNtk
->
pManFunc
,
(
Hop_Man_t
*
)
pNtkNew
->
pManFunc
,
(
Hop_Obj_t
*
)
pObj
->
pData
,
Abc_ObjFaninNum
(
pObj
));
else
if
(
Abc_NtkHasMapping
(
pNtkNew
)
)
else
if
(
Abc_NtkHasMapping
(
pNtkNew
)
)
pObjNew
->
pData
=
pObj
->
pData
;
pObjNew
->
pData
=
pObj
->
pData
,
pNtkNew
->
nBarBufs2
+=
!
pObj
->
pData
;
else
assert
(
0
);
else
assert
(
0
);
}
}
}
}
...
...
src/base/abci/abcPrint.c
View file @
8410daf3
...
@@ -1073,7 +1073,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
...
@@ -1073,7 +1073,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
// count the gates by name
// count the gates by name
CounterTotal
=
0
;
CounterTotal
=
0
;
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
(
pNtk
,
pObj
,
i
)
{
{
if
(
i
==
0
)
continue
;
if
(
i
==
0
)
continue
;
Mio_GateSetValue
(
(
Mio_Gate_t
*
)
pObj
->
pData
,
1
+
Mio_GateReadValue
((
Mio_Gate_t
*
)
pObj
->
pData
)
);
Mio_GateSetValue
(
(
Mio_Gate_t
*
)
pObj
->
pData
,
1
+
Mio_GateReadValue
((
Mio_Gate_t
*
)
pObj
->
pData
)
);
...
@@ -1128,7 +1128,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
...
@@ -1128,7 +1128,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
// get hold of the SOP of the node
// get hold of the SOP of the node
CountConst
=
CountBuf
=
CountInv
=
CountAnd
=
CountOr
=
CountOther
=
CounterTotal
=
0
;
CountConst
=
CountBuf
=
CountInv
=
CountAnd
=
CountOr
=
CountOther
=
CounterTotal
=
0
;
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
(
pNtk
,
pObj
,
i
)
{
{
if
(
i
==
0
)
continue
;
if
(
i
==
0
)
continue
;
if
(
Abc_NtkHasMapping
(
pNtk
)
)
if
(
Abc_NtkHasMapping
(
pNtk
)
)
...
...
src/base/cba/cba.h
View file @
8410daf3
...
@@ -157,10 +157,10 @@ struct Cba_Man_t_
...
@@ -157,10 +157,10 @@ struct Cba_Man_t_
int
nNtks
;
// number of current networks
int
nNtks
;
// number of current networks
Cba_Ntk_t
*
pNtks
;
// networks
Cba_Ntk_t
*
pNtks
;
// networks
// user data
// user data
Vec_Int_t
*
vBuf2RootNtk
;
Vec_Int_t
vBuf2RootNtk
;
Vec_Int_t
*
vBuf2RootObj
;
Vec_Int_t
vBuf2RootObj
;
Vec_Int_t
*
vBuf2LeafNtk
;
Vec_Int_t
vBuf2LeafNtk
;
Vec_Int_t
*
vBuf2LeafObj
;
Vec_Int_t
vBuf2LeafObj
;
void
*
pMioLib
;
void
*
pMioLib
;
void
**
ppGraphs
;
void
**
ppGraphs
;
int
ElemGates
[
4
];
int
ElemGates
[
4
];
...
@@ -574,10 +574,10 @@ static inline void Cba_ManFree( Cba_Man_t * p )
...
@@ -574,10 +574,10 @@ static inline void Cba_ManFree( Cba_Man_t * p )
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_NtkFree
(
pNtk
);
Cba_NtkFree
(
pNtk
);
Vec_Int
FreeP
(
&
p
->
vBuf2LeafNtk
);
Vec_Int
Erase
(
&
p
->
vBuf2LeafNtk
);
Vec_Int
FreeP
(
&
p
->
vBuf2LeafObj
);
Vec_Int
Erase
(
&
p
->
vBuf2LeafObj
);
Vec_Int
FreeP
(
&
p
->
vBuf2RootNtk
);
Vec_Int
Erase
(
&
p
->
vBuf2RootNtk
);
Vec_Int
FreeP
(
&
p
->
vBuf2RootObj
);
Vec_Int
Erase
(
&
p
->
vBuf2RootObj
);
Abc_NamDeref
(
p
->
pStrs
);
Abc_NamDeref
(
p
->
pStrs
);
Abc_NamDeref
(
p
->
pMods
);
Abc_NamDeref
(
p
->
pMods
);
ABC_FREE
(
p
->
pName
);
ABC_FREE
(
p
->
pName
);
...
...
src/base/cba/cbaBlast.c
View file @
8410daf3
...
@@ -90,12 +90,12 @@ int Cba_ManAddBarbuf( Gia_Man_t * pNew, int iRes, Cba_Man_t * p, int iLNtk, int
...
@@ -90,12 +90,12 @@ int Cba_ManAddBarbuf( Gia_Man_t * pNew, int iRes, Cba_Man_t * p, int iLNtk, int
return
iRes
;
return
iRes
;
assert
(
iRes
>
0
);
assert
(
iRes
>
0
);
if
(
vMap
&&
Abc_Lit2Var
(
iRes
)
<
Vec_IntSize
(
vMap
)
&&
(
iIdLit
=
Vec_IntEntry
(
vMap
,
Abc_Lit2Var
(
iRes
)))
>=
0
&&
if
(
vMap
&&
Abc_Lit2Var
(
iRes
)
<
Vec_IntSize
(
vMap
)
&&
(
iIdLit
=
Vec_IntEntry
(
vMap
,
Abc_Lit2Var
(
iRes
)))
>=
0
&&
Vec_IntEntry
(
p
->
vBuf2LeafNtk
,
Abc_Lit2Var
(
iIdLit
))
==
iLNtk
&&
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Abc_Lit2Var
(
iIdLit
))
==
iRNtk
)
Vec_IntEntry
(
&
p
->
vBuf2LeafNtk
,
Abc_Lit2Var
(
iIdLit
))
==
iLNtk
&&
Vec_IntEntry
(
&
p
->
vBuf2RootNtk
,
Abc_Lit2Var
(
iIdLit
))
==
iRNtk
)
return
Abc_LitNotCond
(
Vec_IntEntry
(
pNew
->
vBarBufs
,
Abc_Lit2Var
(
iIdLit
)),
Abc_LitIsCompl
(
iRes
)
^
Abc_LitIsCompl
(
iIdLit
)
);
return
Abc_LitNotCond
(
Vec_IntEntry
(
pNew
->
vBarBufs
,
Abc_Lit2Var
(
iIdLit
)),
Abc_LitIsCompl
(
iRes
)
^
Abc_LitIsCompl
(
iIdLit
)
);
Vec_IntPush
(
p
->
vBuf2LeafNtk
,
iLNtk
);
Vec_IntPush
(
&
p
->
vBuf2LeafNtk
,
iLNtk
);
Vec_IntPush
(
p
->
vBuf2LeafObj
,
iLObj
);
Vec_IntPush
(
&
p
->
vBuf2LeafObj
,
iLObj
);
Vec_IntPush
(
p
->
vBuf2RootNtk
,
iRNtk
);
Vec_IntPush
(
&
p
->
vBuf2RootNtk
,
iRNtk
);
Vec_IntPush
(
p
->
vBuf2RootObj
,
iRObj
);
Vec_IntPush
(
&
p
->
vBuf2RootObj
,
iRObj
);
iBufLit
=
Gia_ManAppendBuf
(
pNew
,
iRes
);
iBufLit
=
Gia_ManAppendBuf
(
pNew
,
iRes
);
if
(
vMap
)
if
(
vMap
)
{
{
...
@@ -196,14 +196,10 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
...
@@ -196,14 +196,10 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
Vec_Int_t
*
vMap
=
NULL
;
Vec_Int_t
*
vMap
=
NULL
;
int
i
,
iObj
;
int
i
,
iObj
;
Vec_IntFreeP
(
&
p
->
vBuf2LeafNtk
);
Vec_IntClear
(
&
p
->
vBuf2LeafNtk
);
Vec_IntFreeP
(
&
p
->
vBuf2LeafObj
);
Vec_IntClear
(
&
p
->
vBuf2LeafObj
);
Vec_IntFreeP
(
&
p
->
vBuf2RootNtk
);
Vec_IntClear
(
&
p
->
vBuf2RootNtk
);
Vec_IntFreeP
(
&
p
->
vBuf2RootObj
);
Vec_IntClear
(
&
p
->
vBuf2RootObj
);
p
->
vBuf2LeafNtk
=
Vec_IntAlloc
(
1000
);
p
->
vBuf2LeafObj
=
Vec_IntAlloc
(
1000
);
p
->
vBuf2RootNtk
=
Vec_IntAlloc
(
1000
);
p
->
vBuf2RootObj
=
Vec_IntAlloc
(
1000
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_NtkStartCopies
(
pNtk
);
Cba_NtkStartCopies
(
pNtk
);
...
@@ -231,7 +227,7 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
...
@@ -231,7 +227,7 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
// primary outputs
// primary outputs
Cba_NtkForEachPo
(
pRoot
,
iObj
,
i
)
Cba_NtkForEachPo
(
pRoot
,
iObj
,
i
)
Gia_ManAppendCo
(
pNew
,
Cba_ObjCopy
(
pRoot
,
iObj
)
);
Gia_ManAppendCo
(
pNew
,
Cba_ObjCopy
(
pRoot
,
iObj
)
);
assert
(
Vec_IntSize
(
p
->
vBuf2LeafNtk
)
==
pNew
->
nBufs
);
assert
(
Vec_IntSize
(
&
p
->
vBuf2LeafNtk
)
==
pNew
->
nBufs
);
// cleanup
// cleanup
pNew
=
Gia_ManCleanup
(
pTemp
=
pNew
);
pNew
=
Gia_ManCleanup
(
pTemp
=
pNew
);
...
@@ -254,14 +250,14 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
...
@@ -254,14 +250,14 @@ Gia_Man_t * Cba_ManExtract( Cba_Man_t * p, int fBuffers, int fVerbose )
void
Cba_ManMarkNodesGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
)
void
Cba_ManMarkNodesGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
)
{
{
Gia_Obj_t
*
pObj
;
int
i
,
Count
=
0
;
Gia_Obj_t
*
pObj
;
int
i
,
Count
=
0
;
assert
(
Vec_IntSize
(
p
->
vBuf2LeafNtk
)
==
Gia_ManBufNum
(
pGia
)
);
assert
(
Vec_IntSize
(
&
p
->
vBuf2LeafNtk
)
==
Gia_ManBufNum
(
pGia
)
);
Gia_ManConst0
(
pGia
)
->
Value
=
0
;
Gia_ManConst0
(
pGia
)
->
Value
=
0
;
Gia_ManForEachPi
(
pGia
,
pObj
,
i
)
Gia_ManForEachPi
(
pGia
,
pObj
,
i
)
pObj
->
Value
=
0
;
pObj
->
Value
=
0
;
Gia_ManForEachAnd
(
pGia
,
pObj
,
i
)
Gia_ManForEachAnd
(
pGia
,
pObj
,
i
)
{
{
if
(
Gia_ObjIsBuf
(
pObj
)
)
if
(
Gia_ObjIsBuf
(
pObj
)
)
pObj
->
Value
=
Vec_IntEntry
(
p
->
vBuf2LeafNtk
,
Count
++
);
pObj
->
Value
=
Vec_IntEntry
(
&
p
->
vBuf2LeafNtk
,
Count
++
);
else
else
{
{
pObj
->
Value
=
Gia_ObjFanin0
(
pObj
)
->
Value
;
pObj
->
Value
=
Gia_ObjFanin0
(
pObj
)
->
Value
;
...
@@ -278,21 +274,21 @@ void Cba_ManMarkNodesGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -278,21 +274,21 @@ void Cba_ManMarkNodesGia( Cba_Man_t * p, Gia_Man_t * pGia )
void
Cba_ManRemapBarbufs
(
Cba_Man_t
*
pNew
,
Cba_Man_t
*
p
)
void
Cba_ManRemapBarbufs
(
Cba_Man_t
*
pNew
,
Cba_Man_t
*
p
)
{
{
Cba_Ntk_t
*
pNtk
;
int
Entry
,
i
;
Cba_Ntk_t
*
pNtk
;
int
Entry
,
i
;
assert
(
p
->
vBuf2RootNtk
!=
NULL
);
assert
(
Vec_IntSize
(
&
p
->
vBuf2RootNtk
)
);
assert
(
pNew
->
vBuf2RootNtk
==
NULL
);
assert
(
!
Vec_IntSize
(
&
pNew
->
vBuf2RootNtk
)
);
pNew
->
vBuf2RootNtk
=
Vec_IntDup
(
p
->
vBuf2RootNtk
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootNtk
,
&
p
->
vBuf2RootNtk
);
pNew
->
vBuf2RootObj
=
Vec_IntDup
(
p
->
vBuf2RootObj
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootObj
,
&
p
->
vBuf2RootObj
);
pNew
->
vBuf2LeafNtk
=
Vec_IntDup
(
p
->
vBuf2LeafNtk
);
Vec_IntAppend
(
&
pNew
->
vBuf2LeafNtk
,
&
p
->
vBuf2LeafNtk
);
pNew
->
vBuf2LeafObj
=
Vec_IntDup
(
p
->
vBuf2LeafObj
);
Vec_IntAppend
(
&
pNew
->
vBuf2LeafObj
,
&
p
->
vBuf2LeafObj
);
Vec_IntForEachEntry
(
p
->
vBuf2LeafObj
,
Entry
,
i
)
Vec_IntForEachEntry
(
&
p
->
vBuf2LeafObj
,
Entry
,
i
)
{
{
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2LeafNtk
,
i
)
);
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
&
p
->
vBuf2LeafNtk
,
i
)
);
Vec_IntWriteEntry
(
pNew
->
vBuf2LeafObj
,
i
,
Cba_ObjCopy
(
pNtk
,
Entry
)
);
Vec_IntWriteEntry
(
&
pNew
->
vBuf2LeafObj
,
i
,
Cba_ObjCopy
(
pNtk
,
Entry
)
);
}
}
Vec_IntForEachEntry
(
p
->
vBuf2RootObj
,
Entry
,
i
)
Vec_IntForEachEntry
(
&
p
->
vBuf2RootObj
,
Entry
,
i
)
{
{
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
i
)
);
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
&
p
->
vBuf2RootNtk
,
i
)
);
Vec_IntWriteEntry
(
pNew
->
vBuf2RootObj
,
i
,
Cba_ObjCopy
(
pNtk
,
Entry
)
);
Vec_IntWriteEntry
(
&
pNew
->
vBuf2RootObj
,
i
,
Cba_ObjCopy
(
pNtk
,
Entry
)
);
}
}
}
}
void
Cba_NtkCreateAndConnectBuffer
(
Gia_Man_t
*
pGia
,
Gia_Obj_t
*
pObj
,
Cba_Ntk_t
*
p
,
int
iTerm
)
void
Cba_NtkCreateAndConnectBuffer
(
Gia_Man_t
*
pGia
,
Gia_Obj_t
*
pObj
,
Cba_Ntk_t
*
p
,
int
iTerm
)
...
@@ -326,13 +322,13 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -326,13 +322,13 @@ void Cba_NtkInsertGia( Cba_Man_t * p, Gia_Man_t * pGia )
{
{
if
(
Gia_ObjIsBuf
(
pObj
)
)
if
(
Gia_ObjIsBuf
(
pObj
)
)
{
{
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
pNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
&
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
iTerm
=
Vec_IntEntry
(
&
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pNtk
,
iTerm
)
);
assert
(
Cba_ObjIsCo
(
pNtk
,
iTerm
)
);
if
(
Cba_ObjFanin
(
pNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
if
(
Cba_ObjFanin
(
pNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
Cba_NtkCreateAndConnectBuffer
(
pGia
,
pObj
,
pNtk
,
iTerm
);
// prepare leaf
// prepare leaf
pObj
->
Value
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
pObj
->
Value
=
Vec_IntEntry
(
&
p
->
vBuf2LeafObj
,
Count
++
);
}
}
else
else
{
{
...
@@ -424,13 +420,13 @@ static inline int Abc_NodeIsSeriousGate( Abc_Obj_t * p )
...
@@ -424,13 +420,13 @@ static inline int Abc_NodeIsSeriousGate( Abc_Obj_t * p )
void
Cba_ManMarkNodesAbc
(
Cba_Man_t
*
p
,
Abc_Ntk_t
*
pNtk
)
void
Cba_ManMarkNodesAbc
(
Cba_Man_t
*
p
,
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
,
k
,
Count
=
0
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
,
k
,
Count
=
0
;
assert
(
Vec_IntSize
(
p
->
vBuf2LeafNtk
)
==
pNtk
->
nBarBufs2
);
assert
(
Vec_IntSize
(
&
p
->
vBuf2LeafNtk
)
==
pNtk
->
nBarBufs2
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
pObj
->
iTemp
=
0
;
pObj
->
iTemp
=
0
;
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
{
{
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
pObj
->
iTemp
=
Vec_IntEntry
(
p
->
vBuf2LeafNtk
,
Count
++
);
pObj
->
iTemp
=
Vec_IntEntry
(
&
p
->
vBuf2LeafNtk
,
Count
++
);
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
{
{
pObj
->
iTemp
=
Abc_ObjFanin0
(
pObj
)
->
iTemp
;
pObj
->
iTemp
=
Abc_ObjFanin0
(
pObj
)
->
iTemp
;
...
@@ -505,13 +501,13 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
...
@@ -505,13 +501,13 @@ void Cba_NtkInsertNtk( Cba_Man_t * p, Abc_Ntk_t * pNtk )
{
{
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
{
{
pCbaNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
p
->
vBuf2RootNtk
,
Count
)
);
pCbaNtk
=
Cba_ManNtk
(
p
,
Vec_IntEntry
(
&
p
->
vBuf2RootNtk
,
Count
)
);
iTerm
=
Vec_IntEntry
(
p
->
vBuf2RootObj
,
Count
);
iTerm
=
Vec_IntEntry
(
&
p
->
vBuf2RootObj
,
Count
);
assert
(
Cba_ObjIsCo
(
pCbaNtk
,
iTerm
)
);
assert
(
Cba_ObjIsCo
(
pCbaNtk
,
iTerm
)
);
if
(
Cba_ObjFanin
(
pCbaNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
if
(
Cba_ObjFanin
(
pCbaNtk
,
iTerm
)
==
-
1
)
// not a feedthrough
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
Cba_NtkCreateOrConnectFanin
(
Abc_ObjFanin0
(
pObj
),
pCbaNtk
,
iTerm
);
// prepare leaf
// prepare leaf
pObj
->
iTemp
=
Vec_IntEntry
(
p
->
vBuf2LeafObj
,
Count
++
);
pObj
->
iTemp
=
Vec_IntEntry
(
&
p
->
vBuf2LeafObj
,
Count
++
);
}
}
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
else
if
(
Abc_NodeIsSeriousGate
(
pObj
)
)
{
{
...
...
src/base/io/ioWriteBlif.c
View file @
8410daf3
...
@@ -615,9 +615,18 @@ int Io_NtkWriteNode( FILE * pFile, Abc_Obj_t * pNode, int Length )
...
@@ -615,9 +615,18 @@ int Io_NtkWriteNode( FILE * pFile, Abc_Obj_t * pNode, int Length )
if
(
Abc_NtkHasMapping
(
pNode
->
pNtk
)
)
if
(
Abc_NtkHasMapping
(
pNode
->
pNtk
)
)
{
{
// write the .gate line
// write the .gate line
fprintf
(
pFile
,
".gate"
);
if
(
Abc_ObjIsBarBuf
(
pNode
)
)
RetValue
=
Io_NtkWriteNodeGate
(
pFile
,
pNode
,
Length
);
{
fprintf
(
pFile
,
"
\n
"
);
fprintf
(
pFile
,
".barbuf "
);
fprintf
(
pFile
,
"%s %s"
,
Abc_ObjName
(
Abc_ObjFanin0
(
pNode
)),
Abc_ObjName
(
Abc_ObjFanout0
(
pNode
))
);
fprintf
(
pFile
,
"
\n
"
);
}
else
{
fprintf
(
pFile
,
".gate"
);
RetValue
=
Io_NtkWriteNodeGate
(
pFile
,
pNode
,
Length
);
fprintf
(
pFile
,
"
\n
"
);
}
}
}
else
else
{
{
...
...
src/map/scl/sclBufSize.c
View file @
8410daf3
...
@@ -172,8 +172,6 @@ static inline float Abc_NtkComputeEdgeDept( Abc_Obj_t * pFanout, int iFanin, flo
...
@@ -172,8 +172,6 @@ static inline float Abc_NtkComputeEdgeDept( Abc_Obj_t * pFanout, int iFanin, flo
float
Load
=
Bus_SclObjLoad
(
pFanout
);
float
Load
=
Bus_SclObjLoad
(
pFanout
);
float
Dept
=
Bus_SclObjDept
(
pFanout
);
float
Dept
=
Bus_SclObjDept
(
pFanout
);
float
Edge
=
Scl_LibPinArrivalEstimate
(
Abc_SclObjCell
(
pFanout
),
iFanin
,
Slew
,
Load
);
float
Edge
=
Scl_LibPinArrivalEstimate
(
Abc_SclObjCell
(
pFanout
),
iFanin
,
Slew
,
Load
);
//if ( Abc_ObjFaninNum(pFanout) == 0 )
//printf( "Edge = %.2f\n", Edge );
assert
(
Edge
>
0
);
assert
(
Edge
>
0
);
return
Dept
+
Edge
;
return
Dept
+
Edge
;
}
}
...
@@ -183,8 +181,12 @@ float Abc_NtkComputeNodeDeparture( Abc_Obj_t * pObj, float Slew )
...
@@ -183,8 +181,12 @@ float Abc_NtkComputeNodeDeparture( Abc_Obj_t * pObj, float Slew )
int
i
;
int
i
;
assert
(
Bus_SclObjDept
(
pObj
)
==
0
);
assert
(
Bus_SclObjDept
(
pObj
)
==
0
);
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
i
)
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
i
)
if
(
!
Abc_ObjIsCo
(
pFanout
)
)
// add required times here
{
if
(
Abc_ObjIsBarBuf
(
pFanout
)
)
Bus_SclObjUpdateDept
(
pObj
,
Bus_SclObjDept
(
pFanout
)
);
else
if
(
!
Abc_ObjIsCo
(
pFanout
)
)
// add required times here
Bus_SclObjUpdateDept
(
pObj
,
Abc_NtkComputeEdgeDept
(
pFanout
,
Abc_NodeFindFanin
(
pFanout
,
pObj
),
Slew
)
);
Bus_SclObjUpdateDept
(
pObj
,
Abc_NtkComputeEdgeDept
(
pFanout
,
Abc_NodeFindFanin
(
pFanout
,
pObj
),
Slew
)
);
}
return
Bus_SclObjDept
(
pObj
);
return
Bus_SclObjDept
(
pObj
);
}
}
void
Abc_NtkComputeFanoutInfo
(
Abc_Obj_t
*
pObj
,
float
Slew
)
void
Abc_NtkComputeFanoutInfo
(
Abc_Obj_t
*
pObj
,
float
Slew
)
...
@@ -192,12 +194,19 @@ void Abc_NtkComputeFanoutInfo( Abc_Obj_t * pObj, float Slew )
...
@@ -192,12 +194,19 @@ void Abc_NtkComputeFanoutInfo( Abc_Obj_t * pObj, float Slew )
Abc_Obj_t
*
pFanout
;
Abc_Obj_t
*
pFanout
;
int
i
;
int
i
;
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
i
)
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
i
)
if
(
!
Abc_ObjIsCo
(
pFanout
)
)
{
if
(
Abc_ObjIsBarBuf
(
pFanout
)
)
{
Bus_SclObjSetETime
(
pFanout
,
Bus_SclObjDept
(
pFanout
)
);
Bus_SclObjSetCin
(
pFanout
,
Bus_SclObjLoad
(
pFanout
)
);
}
else
if
(
!
Abc_ObjIsCo
(
pFanout
)
)
{
{
int
iFanin
=
Abc_NodeFindFanin
(
pFanout
,
pObj
);
int
iFanin
=
Abc_NodeFindFanin
(
pFanout
,
pObj
);
Bus_SclObjSetETime
(
pFanout
,
Abc_NtkComputeEdgeDept
(
pFanout
,
iFanin
,
Slew
)
);
Bus_SclObjSetETime
(
pFanout
,
Abc_NtkComputeEdgeDept
(
pFanout
,
iFanin
,
Slew
)
);
Bus_SclObjSetCin
(
pFanout
,
SC_CellPinCap
(
Abc_SclObjCell
(
pFanout
),
iFanin
)
);
Bus_SclObjSetCin
(
pFanout
,
SC_CellPinCap
(
Abc_SclObjCell
(
pFanout
),
iFanin
)
);
}
}
}
}
}
float
Abc_NtkComputeNodeLoad
(
Bus_Man_t
*
p
,
Abc_Obj_t
*
pObj
)
float
Abc_NtkComputeNodeLoad
(
Bus_Man_t
*
p
,
Abc_Obj_t
*
pObj
)
{
{
...
@@ -407,10 +416,12 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
...
@@ -407,10 +416,12 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
Abc_NtkComputeFanoutInfo
(
pObj
,
p
->
pPars
->
Slew
);
Abc_NtkComputeFanoutInfo
(
pObj
,
p
->
pPars
->
Slew
);
Load
=
Abc_NtkComputeNodeLoad
(
p
,
pObj
);
Load
=
Abc_NtkComputeNodeLoad
(
p
,
pObj
);
// consider the gate
// consider the gate
if
(
Abc_ObjIsCi
(
pObj
)
)
if
(
Abc_ObjIsCi
(
pObj
)
||
Abc_ObjIsBarBuf
(
pObj
)
)
{
{
pCell
=
p
->
pPiDrive
;
pCell
=
p
->
pPiDrive
;
Cin
=
SC_CellPinCapAve
(
pCell
);
// if PI driver is not given, assume Cin to be equal to Load
// this way, buffering of the PIs is performed
Cin
=
pCell
?
SC_CellPinCapAve
(
pCell
)
:
Load
;
}
}
else
else
{
{
...
@@ -418,7 +429,7 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
...
@@ -418,7 +429,7 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
Cin
=
SC_CellPinCapAve
(
pCell
->
pAve
);
Cin
=
SC_CellPinCapAve
(
pCell
->
pAve
);
// Cin = SC_CellPinCapAve( pCell->pRepr->pNext );
// Cin = SC_CellPinCapAve( pCell->pRepr->pNext );
}
}
// consider
upsizing the
gate
// consider
buffering this
gate
if
(
!
p
->
pPars
->
fSizeOnly
&&
(
Abc_ObjFanoutNum
(
pObj
)
>
p
->
pPars
->
nDegree
||
Load
>
GainGate
*
Cin
)
)
if
(
!
p
->
pPars
->
fSizeOnly
&&
(
Abc_ObjFanoutNum
(
pObj
)
>
p
->
pPars
->
nDegree
||
Load
>
GainGate
*
Cin
)
)
{
{
// add one or more inverters
// add one or more inverters
...
@@ -448,6 +459,8 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
...
@@ -448,6 +459,8 @@ void Abc_SclBufSize( Bus_Man_t * p, float Gain )
if
(
Abc_ObjIsCi
(
pObj
)
)
if
(
Abc_ObjIsCi
(
pObj
)
)
continue
;
continue
;
Abc_NtkComputeNodeDeparture
(
pObj
,
p
->
pPars
->
Slew
);
Abc_NtkComputeNodeDeparture
(
pObj
,
p
->
pPars
->
Slew
);
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
continue
;
// create cell
// create cell
pCellNew
=
Abc_SclFindSmallestGate
(
pCell
,
Load
/
GainGate
);
pCellNew
=
Abc_SclFindSmallestGate
(
pCell
,
Load
/
GainGate
);
Abc_SclObjSetCell
(
pObj
,
pCellNew
);
Abc_SclObjSetCell
(
pObj
,
pCellNew
);
...
...
src/map/scl/sclDnsize.c
View file @
8410daf3
...
@@ -239,7 +239,7 @@ void Abc_SclDnsizePrint( SC_Man * p, int Iter, int nAttempts, int nOverlaps, int
...
@@ -239,7 +239,7 @@ void Abc_SclDnsizePrint( SC_Man * p, int Iter, int nAttempts, int nOverlaps, int
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_SclDnsizePerform
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
SC_SizePars
*
pPars
)
void
Abc_SclDnsizePerform
Int
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
SC_SizePars
*
pPars
)
{
{
SC_Man
*
p
;
SC_Man
*
p
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
...
@@ -346,6 +346,29 @@ void Abc_SclDnsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars
...
@@ -346,6 +346,29 @@ void Abc_SclDnsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars
// Abc_NtkCleanMarkAB( pNtk );
// Abc_NtkCleanMarkAB( pNtk );
}
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_SclDnsizePerform
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
SC_SizePars
*
pPars
)
{
Abc_Ntk_t
*
pNtkNew
=
pNtk
;
if
(
pNtk
->
nBarBufs2
>
0
)
pNtkNew
=
Abc_NtkDupDfsNoBarBufs
(
pNtk
);
Abc_SclDnsizePerformInt
(
pLib
,
pNtkNew
,
pPars
);
if
(
pNtk
->
nBarBufs2
>
0
)
Abc_SclTransferGates
(
pNtk
,
pNtkNew
);
if
(
pNtk
->
nBarBufs2
>
0
)
Abc_NtkDelete
(
pNtkNew
);
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/map/scl/sclSize.c
View file @
8410daf3
...
@@ -668,7 +668,7 @@ SC_Man * Abc_SclManStart( SC_Lib * pLib, Abc_Ntk_t * pNtk, int fUseWireLoads, in
...
@@ -668,7 +668,7 @@ SC_Man * Abc_SclManStart( SC_Lib * pLib, Abc_Ntk_t * pNtk, int fUseWireLoads, in
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_SclTimePerform
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
int
nTreeCRatio
,
int
fUseWireLoads
,
int
fShowAll
,
int
fPrintPath
,
int
fDumpStats
)
void
Abc_SclTimePerform
Int
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
int
nTreeCRatio
,
int
fUseWireLoads
,
int
fShowAll
,
int
fPrintPath
,
int
fDumpStats
)
{
{
SC_Man
*
p
;
SC_Man
*
p
;
p
=
Abc_SclManStart
(
pLib
,
pNtk
,
fUseWireLoads
,
1
,
0
,
nTreeCRatio
);
p
=
Abc_SclManStart
(
pLib
,
pNtk
,
fUseWireLoads
,
1
,
0
,
nTreeCRatio
);
...
@@ -678,6 +678,27 @@ void Abc_SclTimePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, int nTreeCRatio, int f
...
@@ -678,6 +678,27 @@ void Abc_SclTimePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, int nTreeCRatio, int f
Abc_SclManFree
(
p
);
Abc_SclManFree
(
p
);
}
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_SclTimePerform
(
SC_Lib
*
pLib
,
Abc_Ntk_t
*
pNtk
,
int
nTreeCRatio
,
int
fUseWireLoads
,
int
fShowAll
,
int
fPrintPath
,
int
fDumpStats
)
{
Abc_Ntk_t
*
pNtkNew
=
pNtk
;
if
(
pNtk
->
nBarBufs2
>
0
)
pNtkNew
=
Abc_NtkDupDfsNoBarBufs
(
pNtk
);
Abc_SclTimePerformInt
(
pLib
,
pNtkNew
,
nTreeCRatio
,
fUseWireLoads
,
fShowAll
,
fPrintPath
,
fDumpStats
);
if
(
pNtk
->
nBarBufs2
>
0
)
Abc_NtkDelete
(
pNtkNew
);
}
/**Function*************************************************************
/**Function*************************************************************
...
...
src/map/scl/sclSize.h
View file @
8410daf3
...
@@ -430,7 +430,7 @@ static inline int Abc_SclGetBufInvCount( Abc_Ntk_t * pNtk )
...
@@ -430,7 +430,7 @@ static inline int Abc_SclGetBufInvCount( Abc_Ntk_t * pNtk )
{
{
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
,
Count
=
0
;
int
i
,
Count
=
0
;
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf1
(
pNtk
,
pObj
,
i
)
Count
+=
(
Abc_ObjFaninNum
(
pObj
)
==
1
);
Count
+=
(
Abc_ObjFaninNum
(
pObj
)
==
1
);
return
Count
;
return
Count
;
}
}
...
@@ -439,7 +439,7 @@ static inline float Abc_SclGetAverageSize( Abc_Ntk_t * pNtk )
...
@@ -439,7 +439,7 @@ static inline float Abc_SclGetAverageSize( Abc_Ntk_t * pNtk )
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
double
Total
=
0
;
double
Total
=
0
;
int
i
,
Count
=
0
;
int
i
,
Count
=
0
;
Abc_NtkForEachNode1
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
pNtk
,
pObj
,
i
)
Count
++
,
Total
+=
100
.
0
*
Abc_SclObjCell
(
pObj
)
->
Order
/
Abc_SclObjCell
(
pObj
)
->
nGates
;
Count
++
,
Total
+=
100
.
0
*
Abc_SclObjCell
(
pObj
)
->
Order
/
Abc_SclObjCell
(
pObj
)
->
nGates
;
return
(
float
)(
Total
/
Count
);
return
(
float
)(
Total
/
Count
);
}
}
...
@@ -448,7 +448,7 @@ static inline float Abc_SclGetTotalArea( Abc_Ntk_t * pNtk )
...
@@ -448,7 +448,7 @@ static inline float Abc_SclGetTotalArea( Abc_Ntk_t * pNtk )
double
Area
=
0
;
double
Area
=
0
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
;
int
i
;
Abc_NtkForEachNode1
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
pNtk
,
pObj
,
i
)
Area
+=
Abc_SclObjCell
(
pObj
)
->
area
;
Area
+=
Abc_SclObjCell
(
pObj
)
->
area
;
return
Area
;
return
Area
;
}
}
...
...
src/map/scl/sclUtil.c
View file @
8410daf3
...
@@ -59,12 +59,9 @@ void Abc_SclMioGates2SclGates( SC_Lib * pLib, Abc_Ntk_t * p )
...
@@ -59,12 +59,9 @@ void Abc_SclMioGates2SclGates( SC_Lib * pLib, Abc_Ntk_t * p )
// remap cells
// remap cells
assert
(
p
->
vGates
==
NULL
);
assert
(
p
->
vGates
==
NULL
);
p
->
vGates
=
Vec_IntStartFull
(
Abc_NtkObjNumMax
(
p
)
);
p
->
vGates
=
Vec_IntStartFull
(
Abc_NtkObjNumMax
(
p
)
);
Abc_NtkForEachNode1
(
p
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
p
,
pObj
,
i
)
{
{
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
gateId
=
Abc_SclCellFind
(
pLib
,
Mio_GateReadName
((
Mio_Gate_t
*
)
pObj
->
pData
)
);
gateId
=
bufferId
;
else
gateId
=
Abc_SclCellFind
(
pLib
,
Mio_GateReadName
((
Mio_Gate_t
*
)
pObj
->
pData
)
);
assert
(
gateId
>=
0
);
assert
(
gateId
>=
0
);
Vec_IntWriteEntry
(
p
->
vGates
,
i
,
gateId
);
Vec_IntWriteEntry
(
p
->
vGates
,
i
,
gateId
);
}
}
...
@@ -76,14 +73,11 @@ void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p )
...
@@ -76,14 +73,11 @@ void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p )
SC_Cell
*
pCell
;
SC_Cell
*
pCell
;
int
i
,
Counter
=
0
,
CounterAll
=
0
;
int
i
,
Counter
=
0
,
CounterAll
=
0
;
assert
(
p
->
vGates
!=
NULL
);
assert
(
p
->
vGates
!=
NULL
);
Abc_NtkForEachNode1
(
p
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
p
,
pObj
,
i
)
{
{
pCell
=
Abc_SclObjCell
(
pObj
);
pCell
=
Abc_SclObjCell
(
pObj
);
assert
(
pCell
->
n_inputs
==
Abc_ObjFaninNum
(
pObj
)
);
assert
(
pCell
->
n_inputs
==
Abc_ObjFaninNum
(
pObj
)
);
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
pObj
->
pData
=
Mio_LibraryReadGateByName
(
(
Mio_Library_t
*
)
p
->
pManFunc
,
pCell
->
pName
,
NULL
);
pObj
->
pData
=
NULL
;
else
pObj
->
pData
=
Mio_LibraryReadGateByName
(
(
Mio_Library_t
*
)
p
->
pManFunc
,
pCell
->
pName
,
NULL
);
Counter
+=
(
pObj
->
pData
==
NULL
);
Counter
+=
(
pObj
->
pData
==
NULL
);
assert
(
pObj
->
fMarkA
==
0
&&
pObj
->
fMarkB
==
0
);
assert
(
pObj
->
fMarkA
==
0
&&
pObj
->
fMarkB
==
0
);
CounterAll
++
;
CounterAll
++
;
...
@@ -110,12 +104,10 @@ void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew )
...
@@ -110,12 +104,10 @@ void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew )
Abc_Obj_t
*
pObj
;
int
i
;
Abc_Obj_t
*
pObj
;
int
i
;
assert
(
pOld
->
nBarBufs2
>
0
);
assert
(
pOld
->
nBarBufs2
>
0
);
assert
(
pNew
->
nBarBufs2
==
0
);
assert
(
pNew
->
nBarBufs2
==
0
);
Abc_NtkForEachNode
(
pOld
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
(
pOld
,
pObj
,
i
)
{
{
if
(
pObj
->
pCopy
==
NULL
)
if
(
pObj
->
pCopy
==
NULL
)
continue
;
continue
;
if
(
Abc_ObjIsBarBuf
(
pObj
)
)
continue
;
assert
(
Abc_ObjNtk
(
pObj
->
pCopy
)
==
pNew
);
assert
(
Abc_ObjNtk
(
pObj
->
pCopy
)
==
pNew
);
pObj
->
pData
=
pObj
->
pCopy
->
pData
;
pObj
->
pData
=
pObj
->
pCopy
->
pData
;
}
}
...
@@ -139,7 +131,7 @@ void Abc_SclManPrintGateSizes( SC_Lib * pLib, Abc_Ntk_t * p, Vec_Int_t * vGates
...
@@ -139,7 +131,7 @@ void Abc_SclManPrintGateSizes( SC_Lib * pLib, Abc_Ntk_t * p, Vec_Int_t * vGates
SC_Cell
*
pCell
;
SC_Cell
*
pCell
;
int
i
,
nGates
=
0
,
Counters
[
ABC_SCL_MAX_SIZE
]
=
{
0
};
int
i
,
nGates
=
0
,
Counters
[
ABC_SCL_MAX_SIZE
]
=
{
0
};
double
TotArea
=
0
,
Areas
[
ABC_SCL_MAX_SIZE
]
=
{
0
};
double
TotArea
=
0
,
Areas
[
ABC_SCL_MAX_SIZE
]
=
{
0
};
Abc_NtkForEachNode1
(
p
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
p
,
pObj
,
i
)
{
{
pCell
=
SC_LibCell
(
pLib
,
Vec_IntEntry
(
vGates
,
Abc_ObjId
(
pObj
))
);
pCell
=
SC_LibCell
(
pLib
,
Vec_IntEntry
(
vGates
,
Abc_ObjId
(
pObj
))
);
assert
(
pCell
->
Order
<
ABC_SCL_MAX_SIZE
);
assert
(
pCell
->
Order
<
ABC_SCL_MAX_SIZE
);
...
@@ -216,7 +208,7 @@ void Abc_SclMinsizePerform( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax, int fVerb
...
@@ -216,7 +208,7 @@ void Abc_SclMinsizePerform( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax, int fVerb
int
i
,
gateId
;
int
i
,
gateId
;
vMinCells
=
Abc_SclFindMinAreas
(
pLib
,
fUseMax
);
vMinCells
=
Abc_SclFindMinAreas
(
pLib
,
fUseMax
);
Abc_SclMioGates2SclGates
(
pLib
,
p
);
Abc_SclMioGates2SclGates
(
pLib
,
p
);
Abc_NtkForEachNode1
(
p
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
p
,
pObj
,
i
)
{
{
gateId
=
Vec_IntEntry
(
p
->
vGates
,
i
);
gateId
=
Vec_IntEntry
(
p
->
vGates
,
i
);
assert
(
gateId
>=
0
&&
gateId
<
Vec_PtrSize
(
pLib
->
vCells
)
);
assert
(
gateId
>=
0
&&
gateId
<
Vec_PtrSize
(
pLib
->
vCells
)
);
...
@@ -233,7 +225,7 @@ int Abc_SclCountMinSize( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax )
...
@@ -233,7 +225,7 @@ int Abc_SclCountMinSize( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax )
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
,
gateId
,
Counter
=
0
;
int
i
,
gateId
,
Counter
=
0
;
vMinCells
=
Abc_SclFindMinAreas
(
pLib
,
fUseMax
);
vMinCells
=
Abc_SclFindMinAreas
(
pLib
,
fUseMax
);
Abc_NtkForEachNode1
(
p
,
pObj
,
i
)
Abc_NtkForEachNode
NotBarBuf
1
(
p
,
pObj
,
i
)
{
{
gateId
=
Vec_IntEntry
(
p
->
vGates
,
i
);
gateId
=
Vec_IntEntry
(
p
->
vGates
,
i
);
Counter
+=
(
gateId
==
Vec_IntEntry
(
vMinCells
,
gateId
)
);
Counter
+=
(
gateId
==
Vec_IntEntry
(
vMinCells
,
gateId
)
);
...
...
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