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
79b58584
Commit
79b58584
authored
Mar 18, 2014
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding barrier buffers.
parent
af0ff7e6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
78 additions
and
110 deletions
+78
-110
src/base/abc/abcBarBuf.c
+76
-110
src/misc/vec/vecPtr.h
+2
-0
No files found.
src/base/abc/abcBarBuf.c
View file @
79b58584
...
@@ -89,9 +89,9 @@ int Abc_NtkCheckSingleInstance( Abc_Ntk_t * pNtk )
...
@@ -89,9 +89,9 @@ int Abc_NtkCheckSingleInstance( Abc_Ntk_t * pNtk )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkCollectPiPos_rec
(
Abc_Obj_t
*
pNet
,
Vec_Ptr_t
*
v
BiBos
,
Vec_Ptr_t
*
vPiPo
s
)
void
Abc_NtkCollectPiPos_rec
(
Abc_Obj_t
*
pNet
,
Vec_Ptr_t
*
v
LiMaps
,
Vec_Ptr_t
*
vLoMap
s
)
{
{
extern
void
Abc_NtkCollectPiPos_int
(
Abc_Obj_t
*
pBox
,
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
*
v
BiBos
,
Vec_Ptr_t
*
vPiPo
s
);
extern
void
Abc_NtkCollectPiPos_int
(
Abc_Obj_t
*
pBox
,
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
*
v
LiMaps
,
Vec_Ptr_t
*
vLoMap
s
);
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
int
i
;
assert
(
Abc_ObjIsNet
(
pNet
)
);
assert
(
Abc_ObjIsNet
(
pNet
)
);
if
(
Abc_NodeIsTravIdCurrent
(
pNet
)
)
if
(
Abc_NodeIsTravIdCurrent
(
pNet
)
)
...
@@ -102,14 +102,11 @@ void Abc_NtkCollectPiPos_rec( Abc_Obj_t * pNet, Vec_Ptr_t * vBiBos, Vec_Ptr_t *
...
@@ -102,14 +102,11 @@ void Abc_NtkCollectPiPos_rec( Abc_Obj_t * pNet, Vec_Ptr_t * vBiBos, Vec_Ptr_t *
pObj
=
Abc_ObjFanin0
(
pObj
);
pObj
=
Abc_ObjFanin0
(
pObj
);
assert
(
Abc_ObjIsNode
(
pObj
)
||
Abc_ObjIsBox
(
pObj
)
);
assert
(
Abc_ObjIsNode
(
pObj
)
||
Abc_ObjIsBox
(
pObj
)
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_NtkCollectPiPos_rec
(
Abc_ObjIsNode
(
pObj
)
?
pFanin
:
Abc_ObjFanin0
(
pFanin
),
vBiBos
,
vPiPos
);
Abc_NtkCollectPiPos_rec
(
Abc_ObjIsNode
(
pObj
)
?
pFanin
:
Abc_ObjFanin0
(
pFanin
),
vLiMaps
,
vLoMaps
);
if
(
Abc_ObjIsNode
(
pObj
)
)
if
(
Abc_ObjIsBox
(
pObj
)
)
return
;
Abc_NtkCollectPiPos_int
(
pObj
,
Abc_ObjModel
(
pObj
),
vLiMaps
,
vLoMaps
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_NtkCollectPiPos_rec
(
Abc_ObjFanin0
(
pFanin
),
vBiBos
,
vPiPos
);
Abc_NtkCollectPiPos_int
(
pObj
,
Abc_ObjModel
(
pObj
),
vBiBos
,
vPiPos
);
}
}
void
Abc_NtkCollectPiPos_int
(
Abc_Obj_t
*
pBox
,
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
*
v
BiBos
,
Vec_Ptr_t
*
vPiPo
s
)
void
Abc_NtkCollectPiPos_int
(
Abc_Obj_t
*
pBox
,
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
*
v
LiMaps
,
Vec_Ptr_t
*
vLoMap
s
)
{
{
Abc_Obj_t
*
pObj
;
int
i
;
Abc_Obj_t
*
pObj
;
int
i
;
// mark primary inputs
// mark primary inputs
...
@@ -120,33 +117,33 @@ void Abc_NtkCollectPiPos_int( Abc_Obj_t * pBox, Abc_Ntk_t * pNtk, Vec_Ptr_t * vB
...
@@ -120,33 +117,33 @@ void Abc_NtkCollectPiPos_int( Abc_Obj_t * pBox, Abc_Ntk_t * pNtk, Vec_Ptr_t * vB
if
(
pBox
)
if
(
pBox
)
{
{
Abc_ObjForEachFanin
(
pBox
,
pObj
,
i
)
Abc_ObjForEachFanin
(
pBox
,
pObj
,
i
)
Vec_PtrPush
(
v
BiBo
s
,
pObj
);
Vec_PtrPush
(
v
LiMap
s
,
pObj
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Vec_PtrPush
(
v
PiPo
s
,
pObj
);
Vec_PtrPush
(
v
LoMap
s
,
pObj
);
}
}
// visit primary outputs
// visit primary outputs
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkCollectPiPos_rec
(
Abc_ObjFanin0
(
pObj
),
v
BiBos
,
vPiPo
s
);
Abc_NtkCollectPiPos_rec
(
Abc_ObjFanin0
(
pObj
),
v
LiMaps
,
vLoMap
s
);
// add primary outputs
// add primary outputs
if
(
pBox
)
if
(
pBox
)
{
{
Abc_ObjForEachFanout
(
pBox
,
pObj
,
i
)
Vec_PtrPush
(
vBiBos
,
pObj
);
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Vec_PtrPush
(
vPiPos
,
pObj
);
Vec_PtrPush
(
vLiMaps
,
pObj
);
Abc_ObjForEachFanout
(
pBox
,
pObj
,
i
)
Vec_PtrPush
(
vLoMaps
,
pObj
);
}
}
}
}
void
Abc_NtkCollectPiPos
(
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
**
pv
BiBos
,
Vec_Ptr_t
**
pvPiPo
s
)
void
Abc_NtkCollectPiPos
(
Abc_Ntk_t
*
pNtk
,
Vec_Ptr_t
**
pv
LiMaps
,
Vec_Ptr_t
**
pvLoMap
s
)
{
{
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
*
pv
BiBo
s
=
Vec_PtrAlloc
(
1000
);
*
pv
LiMap
s
=
Vec_PtrAlloc
(
1000
);
*
pv
PiPo
s
=
Vec_PtrAlloc
(
1000
);
*
pv
LoMap
s
=
Vec_PtrAlloc
(
1000
);
Abc_NtkCollectPiPos_int
(
NULL
,
pNtk
,
*
pv
BiBos
,
*
pvPiPo
s
);
Abc_NtkCollectPiPos_int
(
NULL
,
pNtk
,
*
pv
LiMaps
,
*
pvLoMap
s
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Derives logic network w
hile introducing barbufs
.]
Synopsis [Derives logic network w
ith barbufs from the netlist
.]
Description []
Description []
...
@@ -155,69 +152,62 @@ void Abc_NtkCollectPiPos( Abc_Ntk_t * pNtk, Vec_Ptr_t ** pvBiBos, Vec_Ptr_t ** p
...
@@ -155,69 +152,62 @@ void Abc_NtkCollectPiPos( Abc_Ntk_t * pNtk, Vec_Ptr_t ** pvBiBos, Vec_Ptr_t ** p
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkToBarBufs_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pNet
)
Abc_Obj_t
*
Abc_NtkToBarBufs_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pNet
)
{
{
Abc_Ntk_t
*
pModel
;
Abc_Obj_t
*
pObj
,
*
pFanin
;
Abc_Obj_t
*
pObj
,
*
pFanin
,
*
pFanout
,
*
pLatch
;
int
i
;
int
i
;
assert
(
Abc_ObjIsNet
(
pNet
)
);
assert
(
Abc_ObjIsNet
(
pNet
)
);
if
(
pNet
->
pCopy
)
if
(
pNet
->
pCopy
)
return
;
return
pNet
->
pCopy
;
pNet
->
pCopy
=
ABC_OBJ_VOID
;
pObj
=
Abc_ObjFanin0
(
pNet
);
pObj
=
Abc_ObjFanin0
(
pNet
);
if
(
Abc_ObjIsBo
(
pObj
)
)
assert
(
Abc_ObjIsNode
(
pObj
)
);
pObj
=
Abc_ObjFanin0
(
pObj
);
pNet
->
pCopy
=
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
assert
(
Abc_ObjIsNode
(
pObj
)
||
Abc_ObjIsBox
(
pObj
)
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_NtkToBarBufs_rec
(
pNtkNew
,
Abc_ObjIsNode
(
pObj
)
?
pFanin
:
Abc_ObjFanin0
(
pFanin
)
);
// create and connect object
if
(
Abc_ObjIsNode
(
pObj
)
)
{
pNet
->
pCopy
=
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
return
;
}
pModel
=
Abc_ObjModel
(
pObj
);
Abc_NtkCleanCopy
(
pModel
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
i
)
{
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkToBarBufs_rec
(
pNtkNew
,
pFanin
)
);
pLatch
=
Abc_NtkAddLatch
(
pNtkNew
,
Abc_ObjFanin0
(
pFanin
)
->
pCopy
,
ABC_INIT_ZERO
);
return
pNet
->
pCopy
;
Abc_ObjFanout0
(
Abc_NtkPi
(
pModel
,
i
))
->
pCopy
=
Abc_ObjFanout0
(
pLatch
);
}
Abc_NtkForEachPo
(
pModel
,
pObj
,
i
)
Abc_NtkToBarBufs_rec
(
pNtkNew
,
Abc_ObjFanin0
(
pObj
)
);
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
i
)
{
pLatch
=
Abc_NtkAddLatch
(
pNtkNew
,
Abc_ObjFanin0
(
Abc_NtkPo
(
pModel
,
i
))
->
pCopy
,
ABC_INIT_ZERO
);
Abc_ObjFanout0
(
pFanout
)
->
pCopy
=
Abc_ObjFanout0
(
pLatch
);
}
assert
(
pNet
->
pCopy
!=
ABC_OBJ_VOID
);
}
}
Abc_Ntk_t
*
Abc_NtkToBarBufs
(
Abc_Ntk_t
*
pNtk
)
Abc_Ntk_t
*
Abc_NtkToBarBufs
(
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Ntk_t
*
pNtkNew
;
Vec_Ptr_t
*
vLiMaps
,
*
vLoMaps
;
Abc_Obj_t
*
pObj
;
Abc_Ntk_t
*
pNtkNew
,
*
pTemp
;
int
i
;
Abc_Obj_t
*
pLatch
,
*
pObjLi
,
*
pObjLo
;
Abc_Obj_t
*
pObj
,
*
pLiMap
,
*
pLoMap
;
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
if
(
!
Abc_NtkCheckSingleInstance
(
pNtk
)
)
if
(
!
Abc_NtkCheckSingleInstance
(
pNtk
)
)
return
NULL
;
return
NULL
;
assert
(
pNtk
->
pDesign
!=
NULL
);
// start the network
// start the network
pNtkNew
=
Abc_NtkAlloc
(
ABC_NTK_LOGIC
,
pNtk
->
ntkFunc
,
1
);
pNtkNew
=
Abc_NtkAlloc
(
ABC_NTK_LOGIC
,
pNtk
->
ntkFunc
,
1
);
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// clone CIs/CIs/boxes
// clone CIs/CIs/boxes
Abc_NtkCleanCopy
(
pNtk
);
Abc_NtkCleanCopy
_rec
(
pNtk
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_ObjFanout0
(
pObj
)
->
pCopy
=
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
// create logic
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
// transfer labels
Abc_NtkCollectPiPos
(
pNtk
,
&
vLiMaps
,
&
vLoMaps
);
Vec_PtrForEachEntryTwo
(
Abc_Obj_t
*
,
vLiMaps
,
Abc_Obj_t
*
,
vLoMaps
,
pLiMap
,
pLoMap
,
i
)
{
{
Abc_NtkToBarBufs_rec
(
pNtkNew
,
Abc_ObjFanin0
(
pObj
)
);
pObjLi
=
Abc_NtkCreateBi
(
pNtkNew
);
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_ObjFanin0
(
pObj
)
->
pCopy
);
pLatch
=
Abc_NtkCreateLatch
(
pNtkNew
);
pObjLo
=
Abc_NtkCreateBo
(
pNtkNew
);
Abc_ObjAddFanin
(
pLatch
,
pObjLi
);
Abc_ObjAddFanin
(
pObjLo
,
pLatch
);
pLatch
->
pData
=
(
void
*
)
ABC_INIT_ZERO
;
Abc_ObjAssignName
(
pObjLi
,
Abc_ObjName
(
pLiMap
),
"_li"
);
Abc_ObjAssignName
(
pObjLo
,
Abc_ObjName
(
pLoMap
),
"_lo"
);
pObjLi
->
pCopy
=
pLiMap
;
pObjLo
->
pCopy
=
pLoMap
;
}
}
Vec_PtrFree
(
vLiMaps
);
Vec_PtrFree
(
vLoMaps
);
// rebuild networks
Vec_PtrForEachEntry
(
Abc_Ntk_t
*
,
pNtk
->
pDesign
->
vModules
,
pTemp
,
i
)
Abc_NtkForEachCo
(
pTemp
,
pObj
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkToBarBufs_rec
(
pNtkNew
,
Abc_ObjFanin0
(
pObj
))
);
pNtkNew
->
nBarBufs
=
Abc_NtkLatchNum
(
pNtkNew
);
pNtkNew
->
nBarBufs
=
Abc_NtkLatchNum
(
pNtkNew
);
return
pNtkNew
;
return
pNtkNew
;
}
}
...
@@ -239,7 +229,8 @@ Abc_Ntk_t * Abc_NtkToBarBufs( Abc_Ntk_t * pNtk )
...
@@ -239,7 +229,8 @@ Abc_Ntk_t * Abc_NtkToBarBufs( Abc_Ntk_t * pNtk )
***********************************************************************/
***********************************************************************/
Abc_Obj_t
*
Abc_NtkFromBarBufs_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pObj
)
Abc_Obj_t
*
Abc_NtkFromBarBufs_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pObj
)
{
{
Abc_Obj_t
*
pFanin
;
int
i
;
Abc_Obj_t
*
pFanin
;
int
i
;
if
(
pObj
->
pCopy
)
if
(
pObj
->
pCopy
)
return
pObj
->
pCopy
;
return
pObj
->
pCopy
;
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
...
@@ -247,28 +238,11 @@ Abc_Obj_t * Abc_NtkFromBarBufs_rec( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj )
...
@@ -247,28 +238,11 @@ Abc_Obj_t * Abc_NtkFromBarBufs_rec( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj )
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkFromBarBufs_rec
(
pNtkNew
,
pFanin
)
);
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkFromBarBufs_rec
(
pNtkNew
,
pFanin
)
);
return
pObj
->
pCopy
;
return
pObj
->
pCopy
;
}
}
Abc_Ntk_t
*
Abc_NtkFromBarBufsInt
(
Abc_Ntk_t
*
pNtkBase
,
Abc_Ntk_t
*
pNtk
)
{
Abc_Ntk_t
*
pNtkNew
;
Abc_Obj_t
*
pObj
;
int
i
;
// start the network
pNtkNew
=
Abc_NtkStartFrom
(
pNtkBase
,
pNtk
->
ntkType
,
pNtk
->
ntkFunc
);
// move copy pointers
Abc_NtkForEachCi
(
pNtkBase
,
pObj
,
i
)
pObj
->
pNext
->
pCopy
=
pObj
->
pCopy
;
Abc_NtkForEachCo
(
pNtkBase
,
pObj
,
i
)
pObj
->
pNext
->
pCopy
=
pObj
->
pCopy
;
// construct the network
Abc_NtkForEachCo
(
pNtkBase
,
pObj
,
i
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkFromBarBufs_rec
(
pNtkNew
,
Abc_ObjFanin0
(
pObj
->
pNext
))
);
return
(
pNtkBase
->
pCopy
=
pNtkNew
);
}
Abc_Ntk_t
*
Abc_NtkFromBarBufs
(
Abc_Ntk_t
*
pNtkBase
,
Abc_Ntk_t
*
pNtk
)
Abc_Ntk_t
*
Abc_NtkFromBarBufs
(
Abc_Ntk_t
*
pNtkBase
,
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Ntk_t
*
pNtkNew
,
*
pTemp
;
Abc_Ntk_t
*
pNtkNew
,
*
pTemp
;
Vec_Ptr_t
*
v
BiBos
,
*
vPiPo
s
;
Vec_Ptr_t
*
v
LiMaps
,
*
vLoMap
s
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
,
*
pLiMap
,
*
pLoMap
;
int
i
,
k
;
int
i
,
k
;
assert
(
pNtkBase
->
pDesign
!=
NULL
);
assert
(
pNtkBase
->
pDesign
!=
NULL
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
...
@@ -279,39 +253,31 @@ Abc_Ntk_t * Abc_NtkFromBarBufs( Abc_Ntk_t * pNtkBase, Abc_Ntk_t * pNtk )
...
@@ -279,39 +253,31 @@ Abc_Ntk_t * Abc_NtkFromBarBufs( Abc_Ntk_t * pNtkBase, Abc_Ntk_t * pNtk )
assert
(
Abc_NtkPoNum
(
pNtk
)
==
Abc_NtkPoNum
(
pNtkBase
)
);
assert
(
Abc_NtkPoNum
(
pNtk
)
==
Abc_NtkPoNum
(
pNtkBase
)
);
assert
(
Abc_NtkCiNum
(
pNtk
)
==
Abc_NtkCiNum
(
pNtkBase
)
);
assert
(
Abc_NtkCiNum
(
pNtk
)
==
Abc_NtkCiNum
(
pNtkBase
)
);
assert
(
Abc_NtkCoNum
(
pNtk
)
==
Abc_NtkCoNum
(
pNtkBase
)
);
assert
(
Abc_NtkCoNum
(
pNtk
)
==
Abc_NtkCoNum
(
pNtkBase
)
);
// annotate PIs/POs of base with flops from optimized network
// start networks
Abc_NtkCollectPiPos
(
pNtkBase
,
&
vBiBos
,
&
vPiPos
);
assert
(
Vec_PtrSize
(
vBiBos
)
==
Abc_NtkLatchNum
(
pNtk
)
);
assert
(
Vec_PtrSize
(
vPiPos
)
==
Abc_NtkLatchNum
(
pNtk
)
);
Abc_NtkCleanCopy_rec
(
pNtkBase
);
Abc_NtkCleanCopy_rec
(
pNtkBase
);
Abc_NtkCleanNext_rec
(
pNtkBase
);
Vec_PtrForEachEntry
(
Abc_Ntk_t
*
,
pNtkBase
->
pDesign
->
vModules
,
pTemp
,
i
)
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
pTemp
->
pCopy
=
Abc_NtkStartFrom
(
pTemp
,
pNtk
->
ntkType
,
pNtk
->
ntkFunc
);
Abc_NtkPi
(
pNtkBase
,
i
)
->
pNext
=
pObj
;
pNtkNew
=
pNtkBase
->
pCopy
;
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
// create the design
Abc_NtkPo
(
pNtkBase
,
i
)
->
pNext
=
pObj
;
Abc_NtkForEachLatch
(
pNtk
,
pObj
,
i
)
{
((
Abc_Obj_t
*
)
Vec_PtrEntry
(
vBiBos
,
i
))
->
pNext
=
Abc_ObjFanin0
(
pObj
);
((
Abc_Obj_t
*
)
Vec_PtrEntry
(
vPiPos
,
i
))
->
pNext
=
Abc_ObjFanout0
(
pObj
);
}
Vec_PtrFree
(
vBiBos
);
Vec_PtrFree
(
vPiPos
);
// duplicate the networks
pNtkNew
=
Abc_NtkFromBarBufsInt
(
pNtkBase
,
pNtk
);
// finalize the design
pNtkNew
->
pDesign
=
Abc_LibCreate
(
pNtkBase
->
pDesign
->
pName
);
pNtkNew
->
pDesign
=
Abc_LibCreate
(
pNtkBase
->
pDesign
->
pName
);
Abc_LibAddModel
(
pNtkNew
->
pDesign
,
pNtkNew
);
Vec_PtrPush
(
pNtkNew
->
pDesign
->
vTops
,
pNtkNew
);
Vec_PtrPush
(
pNtkNew
->
pDesign
->
vTops
,
pNtkNew
);
Vec_PtrForEachEntry
(
Abc_Ntk_t
*
,
pNtkBase
->
pDesign
->
vModules
,
pTemp
,
i
)
Vec_PtrForEachEntry
(
Abc_Ntk_t
*
,
pNtkBase
->
pDesign
->
vModules
,
pTemp
,
i
)
if
(
pTemp
!=
pNtkBase
)
Abc_LibAddModel
(
pNtkNew
->
pDesign
,
pTemp
->
pCopy
);
{
// annotate PIs/POs of base with flops from optimized network
pTemp
=
Abc_NtkFromBarBufsInt
(
pTemp
,
pNtk
);
Abc_NtkCollectPiPos
(
pNtkBase
,
&
vLiMaps
,
&
vLoMaps
);
Abc_LibAddModel
(
pNtkNew
->
pDesign
,
pTemp
);
assert
(
Vec_PtrSize
(
vLiMaps
)
==
Abc_NtkLatchNum
(
pNtk
)
);
}
assert
(
Vec_PtrSize
(
vLoMaps
)
==
Abc_NtkLatchNum
(
pNtk
)
);
// set node models
Vec_PtrForEachEntryTwo
(
Abc_Obj_t
*
,
vLiMaps
,
Abc_Obj_t
*
,
vLoMaps
,
pLiMap
,
pLoMap
,
i
)
Vec_PtrForEachEntry
(
Abc_Ntk_t
*
,
pNtkBase
->
pDesign
->
vModules
,
pTemp
,
i
)
{
Abc_NtkForEachBox
(
pTemp
,
pObj
,
k
)
pObj
=
Abc_NtkBox
(
pNtk
,
i
);
pObj
->
pCopy
->
pData
=
Abc_ObjModel
(
pObj
)
->
pCopy
;
Abc_ObjFanin0
(
pObj
)
->
pCopy
=
pLiMap
->
pCopy
;
Abc_ObjFanout0
(
pObj
)
->
pCopy
=
pLoMap
->
pCopy
;
}
Vec_PtrFree
(
vLiMaps
);
Vec_PtrFree
(
vLoMaps
);
// create internal nodes
Abc_NtkForEachCo
(
pNtk
,
pObj
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
Abc_NtkFromBarBufs_rec
(
pNtkNew
,
Abc_ObjFanin0
(
pObj
))
);
return
pNtkNew
;
return
pNtkNew
;
}
}
...
...
src/misc/vec/vecPtr.h
View file @
79b58584
...
@@ -62,6 +62,8 @@ struct Vec_Ptr_t_
...
@@ -62,6 +62,8 @@ struct Vec_Ptr_t_
for ( i = Start; (i < Stop) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
for ( i = Start; (i < Stop) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
#define Vec_PtrForEachEntryReverse( Type, vVec, pEntry, i ) \
#define Vec_PtrForEachEntryReverse( Type, vVec, pEntry, i ) \
for ( i = Vec_PtrSize(vVec) - 1; (i >= 0) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i-- )
for ( i = Vec_PtrSize(vVec) - 1; (i >= 0) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i-- )
#define Vec_PtrForEachEntryTwo( Type1, vVec1, Type2, vVec2, pEntry1, pEntry2, i ) \
for ( i = 0; (i < Vec_PtrSize(vVec1)) && (((pEntry1) = (Type1)Vec_PtrEntry(vVec1, i)), 1) && (((pEntry2) = (Type2)Vec_PtrEntry(vVec2, i)), 1); i++ )
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
...
...
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