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
8ac8923a
Commit
8ac8923a
authored
Jan 13, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Various transformations of Cba_Ntk_t.
parent
2b2f05ba
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
178 additions
and
111 deletions
+178
-111
src/base/cba/cba.h
+56
-31
src/base/cba/cbaBuild.c
+42
-23
src/base/cba/cbaCom.c
+9
-3
src/base/cba/cbaPrs.h
+2
-0
src/base/cba/cbaReadBlif.c
+4
-4
src/base/cba/cbaReadVer.c
+7
-7
src/base/cba/cbaSimple.c
+31
-19
src/base/cba/cbaWriteBlif.c
+22
-19
src/base/cba/cbaWriteVer.c
+5
-5
No files found.
src/base/cba/cba.h
View file @
8ac8923a
...
@@ -54,25 +54,26 @@ typedef enum {
...
@@ -54,25 +54,26 @@ typedef enum {
CBA_OBJ_NODE
,
// 6: node
CBA_OBJ_NODE
,
// 6: node
CBA_OBJ_BOX
,
// 7: box
CBA_OBJ_BOX
,
// 7: box
CBA_OBJ_LATCH
,
// 8: latch
CBA_OBJ_LATCH
,
// 8: latch
CBA_OBJ_UNKNOWN
// 9: unknown
CBA_OBJ_CONCAT
,
// 9: concatenation
CBA_OBJ_UNKNOWN
// 10: unknown
}
Cba_ObjType_t
;
}
Cba_ObjType_t
;
// Verilog predefined models
// Verilog predefined models
typedef
enum
{
typedef
enum
{
CBA_NODE_NONE
=
0
,
// 0: unused
CBA_NODE_NONE
=
0
,
// 0: unused
CBA_NODE_CONST
,
// 1: constant
CBA_NODE_CONST
,
// 1: constant
CBA_NODE_BUF
,
// 2: buffer
CBA_NODE_BUF
,
// 2: buffer
CBA_NODE_INV
,
// 3: inverter
CBA_NODE_INV
,
// 3: inverter
CBA_NODE_AND
,
// 4: AND
CBA_NODE_AND
,
// 4: AND
CBA_NODE_NAND
,
// 5: NAND
CBA_NODE_NAND
,
// 5: NAND
CBA_NODE_OR
,
// 6: OR
CBA_NODE_OR
,
// 6: OR
CBA_NODE_NOR
,
// 7: NOR
CBA_NODE_NOR
,
// 7: NOR
CBA_NODE_XOR
,
// 8: XOR
CBA_NODE_XOR
,
// 8: XOR
CBA_NODE_XNOR
,
// 9 .XNOR
CBA_NODE_XNOR
,
// 9 .XNOR
CBA_NODE_MUX
,
// 10: MUX
CBA_NODE_MUX
,
// 10: MUX
CBA_NODE_MAJ
,
// 11: MAJ
CBA_NODE_MAJ
,
// 11: MAJ
CBA_NODE_KNOWN
,
// 12: unknown
CBA_NODE_KNOWN
,
// 12: unknown
CBA_NODE_UNKNOWN
// 13: unknown
CBA_NODE_UNKNOWN
// 13: unknown
}
Cba_NodeType_t
;
}
Cba_NodeType_t
;
...
@@ -102,7 +103,6 @@ struct Cba_Man_t_
...
@@ -102,7 +103,6 @@ struct Cba_Man_t_
typedef
struct
Cba_Ntk_t_
Cba_Ntk_t
;
typedef
struct
Cba_Ntk_t_
Cba_Ntk_t
;
struct
Cba_Ntk_t_
struct
Cba_Ntk_t_
{
{
char
*
pName
;
// name
Cba_Man_t
*
pDesign
;
// design
Cba_Man_t
*
pDesign
;
// design
int
Id
;
// network ID
int
Id
;
// network ID
int
iBoxNtk
;
// instance network ID
int
iBoxNtk
;
// instance network ID
...
@@ -135,9 +135,9 @@ static inline Vec_Set_t * Cba_ManMem( Cba_Man_t * p ) { r
...
@@ -135,9 +135,9 @@ static inline Vec_Set_t * Cba_ManMem( Cba_Man_t * p ) { r
static
inline
int
Cba_ManMemSave
(
Cba_Man_t
*
p
,
int
*
d
,
int
s
)
{
return
Vec_SetAppend
(
Cba_ManMem
(
p
),
d
,
s
);
}
static
inline
int
Cba_ManMemSave
(
Cba_Man_t
*
p
,
int
*
d
,
int
s
)
{
return
Vec_SetAppend
(
Cba_ManMem
(
p
),
d
,
s
);
}
static
inline
int
*
Cba_ManMemRead
(
Cba_Man_t
*
p
,
int
h
)
{
return
h
?
(
int
*
)
Vec_SetEntry
(
Cba_ManMem
(
p
),
h
)
:
NULL
;
}
static
inline
int
*
Cba_ManMemRead
(
Cba_Man_t
*
p
,
int
h
)
{
return
h
?
(
int
*
)
Vec_SetEntry
(
Cba_ManMem
(
p
),
h
)
:
NULL
;
}
static
inline
int
Cba_NtkId
(
Cba_Ntk_t
*
p
)
{
return
p
->
Id
;
}
static
inline
char
*
Cba_NtkName
(
Cba_Ntk_t
*
p
)
{
return
p
->
pName
;
}
static
inline
Cba_Man_t
*
Cba_NtkMan
(
Cba_Ntk_t
*
p
)
{
return
p
->
pDesign
;
}
static
inline
Cba_Man_t
*
Cba_NtkMan
(
Cba_Ntk_t
*
p
)
{
return
p
->
pDesign
;
}
static
inline
int
Cba_NtkId
(
Cba_Ntk_t
*
p
)
{
return
p
->
Id
;
}
static
inline
char
*
Cba_NtkName
(
Cba_Ntk_t
*
p
)
{
return
Abc_NamStr
(
Cba_NtkMan
(
p
)
->
pModels
,
Cba_NtkId
(
p
));
}
static
inline
int
Cba_NtkObjNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vFanins
);
}
static
inline
int
Cba_NtkObjNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vFanins
);
}
static
inline
int
Cba_NtkPiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkPoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vOutputs
);
}
...
@@ -169,13 +169,14 @@ static inline int Cba_ObjIsBi( Cba_Ntk_t * p, int i ) { r
...
@@ -169,13 +169,14 @@ static inline int Cba_ObjIsBi( Cba_Ntk_t * p, int i ) { r
static
inline
int
Cba_ObjIsBo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_BO
;
}
static
inline
int
Cba_ObjIsBo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_BO
;
}
static
inline
int
Cba_ObjIsNode
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_NODE
;
}
static
inline
int
Cba_ObjIsNode
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_NODE
;
}
static
inline
int
Cba_ObjIsBox
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_BOX
;
}
static
inline
int
Cba_ObjIsBox
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_BOX
;
}
static
inline
int
Cba_ObjIsConcat
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_CONCAT
;
}
static
inline
int
Cba_ObjIsCi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPi
(
p
,
i
)
||
Cba_ObjIsBo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsCi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPi
(
p
,
i
)
||
Cba_ObjIsBo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsCo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPo
(
p
,
i
)
||
Cba_ObjIsBi
(
p
,
i
);
}
static
inline
int
Cba_ObjIsCo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPo
(
p
,
i
)
||
Cba_ObjIsBi
(
p
,
i
);
}
static
inline
int
Cba_ObjIsCio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsCi
(
p
,
i
)
||
Cba_ObjIsCo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsCio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsCi
(
p
,
i
)
||
Cba_ObjIsCo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsBio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsBi
(
p
,
i
)
||
Cba_ObjIsBo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsBio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsBi
(
p
,
i
)
||
Cba_ObjIsBo
(
p
,
i
);
}
static
inline
int
Cba_ObjFanin0
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsPo
(
p
,
i
)
||
Cba_ObjIsBio
(
p
,
i
));
return
Cba_ObjFuncId
(
p
,
i
);
}
static
inline
int
Cba_ObjFanin0
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsPo
(
p
,
i
)
||
Cba_ObjIsBio
(
p
,
i
));
return
Cba_ObjFuncId
(
p
,
i
);
}
static
inline
int
*
Cba_ObjFaninArray
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_Obj
IsNode
(
p
,
i
));
return
Cba_NtkMemRead
(
p
,
Cba_ObjFaninId
(
p
,
i
));
}
static
inline
int
*
Cba_ObjFaninArray
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_Obj
Type
(
p
,
i
)
>=
CBA_OBJ_NODE
);
return
Cba_NtkMemRead
(
p
,
Cba_ObjFaninId
(
p
,
i
));
}
static
inline
int
Cba_ObjFaninNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
*
Cba_ObjFaninArray
(
p
,
i
);
}
static
inline
int
Cba_ObjFaninNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
*
Cba_ObjFaninArray
(
p
,
i
);
}
static
inline
int
*
Cba_ObjFanins
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjFaninArray
(
p
,
i
)
+
1
;
}
static
inline
int
*
Cba_ObjFanins
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjFaninArray
(
p
,
i
)
+
1
;
}
static
inline
Vec_Int_t
*
Cba_ObjFaninVec
(
Cba_Ntk_t
*
p
,
int
i
)
{
static
Vec_Int_t
V
;
V
.
pArray
=
Cba_ObjFaninArray
(
p
,
i
);
V
.
nSize
=
V
.
nCap
=
V
.
pArray
?
*
V
.
pArray
++
:
0
;
return
&
V
;
}
static
inline
Vec_Int_t
*
Cba_ObjFaninVec
(
Cba_Ntk_t
*
p
,
int
i
)
{
static
Vec_Int_t
V
;
V
.
pArray
=
Cba_ObjFaninArray
(
p
,
i
);
V
.
nSize
=
V
.
nCap
=
V
.
pArray
?
*
V
.
pArray
++
:
0
;
return
&
V
;
}
...
@@ -183,8 +184,10 @@ static inline Vec_Int_t * Cba_ObjFaninVec2( Cba_Ntk_t * p, int i ) { s
...
@@ -183,8 +184,10 @@ static inline Vec_Int_t * Cba_ObjFaninVec2( Cba_Ntk_t * p, int i ) { s
static
inline
Cba_NodeType_t
Cba_ObjNodeType
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsNode
(
p
,
i
));
return
Cba_ObjFaninId
(
p
,
i
);
}
static
inline
Cba_NodeType_t
Cba_ObjNodeType
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsNode
(
p
,
i
));
return
Cba_ObjFaninId
(
p
,
i
);
}
static
inline
int
Cba_ObjBoxModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_ObjFuncId
(
p
,
i
);
}
static
inline
int
Cba_ObjBoxModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_ObjFuncId
(
p
,
i
);
}
static
inline
Cba_Ntk_t
*
Cba_ObjBoxModel
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_ObjBoxModelId
(
p
,
i
));
}
static
inline
Cba_Ntk_t
*
Cba_ObjBoxModel
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_ObjBoxModelId
(
p
,
i
));
}
static
inline
int
Cba_ObjBoxBi
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
b
-
Cba_NtkPiNum
(
Cba_ObjBoxModel
(
p
,
b
))
+
i
;
}
static
inline
int
Cba_ObjBoxBiNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_NtkPiNum
(
Cba_ObjBoxModel
(
p
,
i
));
}
static
inline
int
Cba_ObjBoxBo
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
b
+
1
+
i
;
}
static
inline
int
Cba_ObjBoxBoNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Cba_NtkPoNum
(
Cba_ObjBoxModel
(
p
,
i
));
}
static
inline
int
Cba_ObjBoxBi
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
-
Cba_ObjBoxBiNum
(
p
,
b
)
+
i
;
}
static
inline
int
Cba_ObjBoxBo
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
+
1
+
i
;
}
static
inline
int
Cba_ObjBiModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBi
(
p
,
i
));
while
(
!
Cba_ObjIsBox
(
p
,
i
))
i
++
;
return
Cba_ObjBoxModelId
(
p
,
i
);
}
static
inline
int
Cba_ObjBiModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBi
(
p
,
i
));
while
(
!
Cba_ObjIsBox
(
p
,
i
))
i
++
;
return
Cba_ObjBoxModelId
(
p
,
i
);
}
static
inline
int
Cba_ObjBoModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBo
(
p
,
i
));
return
Cba_ObjBoxModelId
(
p
,
Cba_ObjFanin0
(
p
,
i
));
}
static
inline
int
Cba_ObjBoModelId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBo
(
p
,
i
));
return
Cba_ObjBoxModelId
(
p
,
Cba_ObjFanin0
(
p
,
i
));
}
static
inline
Cba_Ntk_t
*
Cba_ObjBiModel
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_ObjBiModelId
(
p
,
i
)
);
}
static
inline
Cba_Ntk_t
*
Cba_ObjBiModel
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_ObjBiModelId
(
p
,
i
)
);
}
...
@@ -216,8 +219,6 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
...
@@ -216,8 +219,6 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
#define Cba_NtkForEachObjType( p, Type, i ) \
#define Cba_NtkForEachObjType( p, Type, i ) \
for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1); i++ )
for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1); i++ )
#define Cba_NtkForEachObjTypeFuncFanins( p, Type, Func, vFanins, i ) \
for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1) && (((Func) = Cba_ObjFuncId(p, i)), 1) && (((vFanins) = Cba_ObjFaninVec(p, i)), 1); i++ )
#define Cba_NtkForEachBox( p, iObj, i ) \
#define Cba_NtkForEachBox( p, iObj, i ) \
for ( i = 0; (i < Cba_NtkBoxNum(p)) && (((iObj) = Vec_IntEntry(&p->vBoxes, i)), 1); i++ )
for ( i = 0; (i < Cba_NtkBoxNum(p)) && (((iObj) = Vec_IntEntry(&p->vBoxes, i)), 1); i++ )
...
@@ -229,6 +230,11 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
...
@@ -229,6 +230,11 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
#define Cba_NtkForEachCo( p, i ) \
#define Cba_NtkForEachCo( p, i ) \
for ( i = 0; (i < Cba_NtkObjNum(p)); i++ ) if ( Cba_ObjType(p, i) != CBA_OBJ_PO && Cba_ObjType(p, i) != CBA_OBJ_BI ) {} else
for ( i = 0; (i < Cba_NtkObjNum(p)); i++ ) if ( Cba_ObjType(p, i) != CBA_OBJ_PO && Cba_ObjType(p, i) != CBA_OBJ_BI ) {} else
#define Cba_BoxForEachBi( p, iBox, iTerm, i ) \
for ( iTerm = iBox - Cba_ObjBoxBiNum(p, iBox), i = 0; iTerm < iBox; iTerm++, i++ )
#define Cba_BoxForEachBo( p, iBox, iTerm, i ) \
for ( iTerm = iBox + 1, i = 0; iTerm < iBox + 1 + Cba_ObjBoxBoNum(p, iBox); iTerm++, i++ )
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS ///
/// FUNCTION DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -272,12 +278,15 @@ static inline void Cba_ManFetchArray( Cba_Man_t * p, Vec_Int_t * vTo, int nSize
...
@@ -272,12 +278,15 @@ static inline void Cba_ManFetchArray( Cba_Man_t * p, Vec_Int_t * vTo, int nSize
// constructors desctructors
// constructors desctructors
static
inline
Cba_Ntk_t
*
Cba_NtkAlloc
(
Cba_Man_t
*
p
,
char
*
pName
)
static
inline
Cba_Ntk_t
*
Cba_NtkAlloc
(
Cba_Man_t
*
p
,
char
*
pName
)
{
{
int
iModelId
=
Abc_NamStrFindOrAdd
(
p
->
pModels
,
pName
,
NULL
);
Cba_Ntk_t
*
pNtk
=
Vec_SetFetch
(
Cba_ManMem
(
p
),
sizeof
(
Cba_Ntk_t
)
);
Cba_Ntk_t
*
pNtk
=
Vec_SetFetch
(
Cba_ManMem
(
p
),
sizeof
(
Cba_Ntk_t
)
);
memset
(
pNtk
,
0
,
sizeof
(
Cba_Ntk_t
)
);
memset
(
pNtk
,
0
,
sizeof
(
Cba_Ntk_t
)
);
pNtk
->
pDesign
=
p
;
pNtk
->
pDesign
=
p
;
pNtk
->
pName
=
Vec_SetStrsav
(
Cba_ManMem
(
p
),
pName
);
pNtk
->
Id
=
Vec_PtrSize
(
&
p
->
vNtks
);
pNtk
->
Id
=
Vec_PtrSize
(
&
p
->
vNtks
);
Vec_PtrPush
(
&
p
->
vNtks
,
pNtk
);
Vec_PtrPush
(
&
p
->
vNtks
,
pNtk
);
assert
(
iModelId
<=
pNtk
->
Id
);
if
(
iModelId
<
pNtk
->
Id
)
printf
(
"Model with name %s already exists.
\n
"
,
pName
);
return
pNtk
;
return
pNtk
;
}
}
static
inline
Cba_Man_t
*
Cba_ManAlloc
(
char
*
pFileName
)
static
inline
Cba_Man_t
*
Cba_ManAlloc
(
char
*
pFileName
)
...
@@ -290,8 +299,23 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName )
...
@@ -290,8 +299,23 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName )
p
->
pFuncs
=
Abc_NamStart
(
1000
,
20
);
p
->
pFuncs
=
Abc_NamStart
(
1000
,
20
);
Vec_SetAlloc_
(
&
p
->
Mem
,
20
);
Vec_SetAlloc_
(
&
p
->
Mem
,
20
);
Vec_PtrPush
(
&
p
->
vNtks
,
NULL
);
Vec_PtrPush
(
&
p
->
vNtks
,
NULL
);
p
->
iRoot
=
1
;
return
p
;
}
static
inline
Cba_Man_t
*
Cba_ManClone
(
Cba_Man_t
*
pOld
)
{
Cba_Man_t
*
p
=
ABC_CALLOC
(
Cba_Man_t
,
1
);
p
->
pName
=
Extra_FileDesignName
(
pOld
->
pName
);
p
->
pSpec
=
Abc_UtilStrsav
(
pOld
->
pSpec
);
p
->
pNames
=
Abc_NamRef
(
pOld
->
pNames
);
p
->
pModels
=
Abc_NamRef
(
pOld
->
pModels
);
p
->
pFuncs
=
Abc_NamRef
(
pOld
->
pFuncs
);
Vec_SetAlloc_
(
&
p
->
Mem
,
20
);
Vec_PtrPush
(
&
p
->
vNtks
,
NULL
);
p
->
iRoot
=
1
;
return
p
;
return
p
;
}
}
static
inline
void
Cba_ManFree
(
Cba_Man_t
*
p
)
static
inline
void
Cba_ManFree
(
Cba_Man_t
*
p
)
{
{
Vec_IntFreeP
(
&
p
->
vBuf2LeafNtk
);
Vec_IntFreeP
(
&
p
->
vBuf2LeafNtk
);
...
@@ -301,9 +325,9 @@ static inline void Cba_ManFree( Cba_Man_t * p )
...
@@ -301,9 +325,9 @@ static inline void Cba_ManFree( Cba_Man_t * p )
ABC_FREE
(
p
->
vCopies
.
pArray
);
ABC_FREE
(
p
->
vCopies
.
pArray
);
ABC_FREE
(
p
->
vNtks
.
pArray
);
ABC_FREE
(
p
->
vNtks
.
pArray
);
Vec_SetFree_
(
&
p
->
Mem
);
Vec_SetFree_
(
&
p
->
Mem
);
Abc_Nam
Stop
(
p
->
pNames
);
Abc_Nam
Deref
(
p
->
pNames
);
Abc_Nam
Stop
(
p
->
pModels
);
Abc_Nam
Deref
(
p
->
pModels
);
Abc_Nam
Stop
(
p
->
pFuncs
);
Abc_Nam
Deref
(
p
->
pFuncs
);
ABC_FREE
(
p
->
pName
);
ABC_FREE
(
p
->
pName
);
ABC_FREE
(
p
->
pSpec
);
ABC_FREE
(
p
->
pSpec
);
ABC_FREE
(
p
);
ABC_FREE
(
p
);
...
@@ -324,12 +348,13 @@ static inline int Cba_ManMemory( Cba_Man_t * p )
...
@@ -324,12 +348,13 @@ static inline int Cba_ManMemory( Cba_Man_t * p )
extern
Cba_Man_t
*
Cba_ManBuild
(
Cba_Man_t
*
p
);
extern
Cba_Man_t
*
Cba_ManBuild
(
Cba_Man_t
*
p
);
/*=== cbaReadBlif.c =========================================================*/
/*=== cbaReadBlif.c =========================================================*/
extern
Cba_Man_t
*
Cba_PrsReadBlif
(
char
*
pFileName
);
extern
Cba_Man_t
*
Cba_PrsReadBlif
(
char
*
pFileName
);
/*=== cbaWriteBlif.c ========================================================*/
extern
void
Cba_PrsWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
pDes
);
/*=== cbaReadVer.c ==========================================================*/
/*=== cbaReadVer.c ==========================================================*/
extern
Cba_Man_t
*
Cba_PrsReadVerilog
(
char
*
pFileName
);
extern
Cba_Man_t
*
Cba_PrsReadVerilog
(
char
*
pFileName
);
/*=== cbaWriteBlif.c ========================================================*/
extern
void
Cba_PrsWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
);
extern
void
Cba_ManWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
);
/*=== cbaWriteVer.c =========================================================*/
/*=== cbaWriteVer.c =========================================================*/
extern
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
Des
);
extern
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
);
/*=== cbaNtk.c =========================================================*/
/*=== cbaNtk.c =========================================================*/
extern
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
);
extern
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
);
extern
int
Cba_NtkNodeNum
(
Cba_Ntk_t
*
p
);
extern
int
Cba_NtkNodeNum
(
Cba_Ntk_t
*
p
);
...
...
src/base/cba/cbaBuild.c
View file @
8ac8923a
...
@@ -56,6 +56,8 @@ void Cba_BoxRemap( Cba_Ntk_t * pNtk, int iBox, Vec_Int_t * vMap )
...
@@ -56,6 +56,8 @@ void Cba_BoxRemap( Cba_Ntk_t * pNtk, int iBox, Vec_Int_t * vMap )
Cba_Ntk_t
*
pBoxModel
=
Cba_ObjBoxModel
(
pNtk
,
iBox
);
Cba_Ntk_t
*
pBoxModel
=
Cba_ObjBoxModel
(
pNtk
,
iBox
);
Vec_Int_t
*
vFanins
=
Cba_ObjFaninVec
(
pNtk
,
iBox
);
Vec_Int_t
*
vFanins
=
Cba_ObjFaninVec
(
pNtk
,
iBox
);
int
i
,
NameId
;
int
i
,
NameId
;
Vec_IntForEachEntry
(
vMap
,
NameId
,
i
)
assert
(
NameId
==
-
1
);
// map formal names into I/O indexes
// map formal names into I/O indexes
Cba_NtkForEachPi
(
pBoxModel
,
NameId
,
i
)
Cba_NtkForEachPi
(
pBoxModel
,
NameId
,
i
)
{
{
...
@@ -217,9 +219,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
...
@@ -217,9 +219,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
int
i
,
iObj
,
ObjId
,
FaninId
,
Type
,
Index
,
NameId
,
nBoxes
=
0
;
int
i
,
iObj
,
ObjId
,
FaninId
,
Type
,
Index
,
NameId
,
nBoxes
=
0
;
// start network
// start network
pNtkNew
=
Cba_NtkAlloc
(
pNew
,
Cba_NtkName
(
pNtk
)
);
pNtkNew
=
Cba_ManNtk
(
pNew
,
Cba_NtkId
(
pNtk
)
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vInputs
,
Cba_NtkPiNum
(
pNtk
)
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vOutputs
,
Cba_NtkPoNum
(
pNtk
)
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vTypes
,
nObjCount
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vTypes
,
nObjCount
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vFuncs
,
nObjCount
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vFuncs
,
nObjCount
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vFanins
,
nObjCount
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vFanins
,
nObjCount
);
...
@@ -230,9 +230,12 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
...
@@ -230,9 +230,12 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
Cba_NtkForEachPi
(
pNtk
,
NameId
,
i
)
Cba_NtkForEachPi
(
pNtk
,
NameId
,
i
)
{
{
ObjId
=
Vec_IntEntry
(
vMap
,
NameId
);
ObjId
=
Vec_IntEntry
(
vMap
,
NameId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vInputs
,
i
,
ObjId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vInputs
,
i
,
ObjId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
,
CBA_OBJ_PI
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
,
i
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
ObjId
,
NameId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
ObjId
,
NameId
);
}
}
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
{
{
vFanins
=
Cba_ObjFaninVec
(
pNtk
,
iObj
);
vFanins
=
Cba_ObjFaninVec
(
pNtk
,
iObj
);
...
@@ -252,7 +255,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
...
@@ -252,7 +255,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
}
}
else
if
(
Type
==
CBA_OBJ_BOX
)
else
if
(
Type
==
CBA_OBJ_BOX
)
{
{
ObjId
=
Vec_IntEntry
(
vBoxes
,
nBoxes
++
);
ObjId
=
Vec_IntEntry
(
&
pNtkNew
->
vBoxes
,
nBoxes
++
);
pNtkBox
=
Cba_ObjBoxModel
(
pNtk
,
iObj
);
pNtkBox
=
Cba_ObjBoxModel
(
pNtk
,
iObj
);
Cba_NtkSetHost
(
pNtkBox
,
Cba_NtkId
(
pNtk
),
ObjId
);
Cba_NtkSetHost
(
pNtkBox
,
Cba_NtkId
(
pNtk
),
ObjId
);
// collect fanins
// collect fanins
...
@@ -262,33 +265,38 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
...
@@ -262,33 +265,38 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
i
++
;
NameId
=
Vec_IntEntry
(
vFanins
,
i
);
i
++
;
NameId
=
Vec_IntEntry
(
vFanins
,
i
);
assert
(
Vec_IntEntry
(
vMap
,
NameId
)
!=
-
1
);
assert
(
Vec_IntEntry
(
vMap
,
NameId
)
!=
-
1
);
if
(
Index
<
Cba_NtkPiNum
(
pNtkBox
)
)
if
(
Index
<
Cba_NtkPiNum
(
pNtkBox
)
)
{
Vec_IntWriteEntry
(
vTemp
,
Index
,
Vec_IntEntry
(
vMap
,
NameId
)
);
Vec_IntWriteEntry
(
vTemp
,
Index
,
Vec_IntEntry
(
vMap
,
NameId
)
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
ObjId
-
Cba_NtkPiNum
(
pNtkBox
)
+
Index
,
NameId
);
}
else
else
{
assert
(
Vec_IntEntry
(
vMap
,
NameId
)
==
ObjId
+
1
+
Index
-
Cba_NtkPiNum
(
pNtkBox
)
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
Vec_IntEntry
(
vMap
,
NameId
),
NameId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
Vec_IntEntry
(
vMap
,
NameId
),
NameId
);
}
}
}
Vec_IntForEachEntry
(
vTemp
,
Index
,
i
)
Vec_IntForEachEntry
(
vTemp
,
Index
,
i
)
assert
(
Index
>=
0
);
assert
(
Index
>=
0
);
// create box
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
,
CBA_OBJ_BOX
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
,
Cba_ManNtkId
(
pNew
,
Cba_NtkName
(
pNtkBox
))
);
// create box inputs
// create box inputs
for
(
i
=
0
;
i
<
Cba_NtkPiNum
(
pNtkBox
);
i
++
)
Cba_BoxForEachBi
(
pNtkNew
,
ObjId
,
FaninId
,
i
)
{
{
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
-
Cba_NtkPiNum
(
pNtkBox
)
+
i
,
CBA_OBJ_BI
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
FaninId
,
CBA_OBJ_BI
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
-
Cba_NtkPiNum
(
pNtkBox
)
+
i
,
i
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
FaninId
,
i
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
ObjId
-
Cba_NtkPiNum
(
pNtkBox
)
+
i
,
Cba_ManHandleBuffer
(
pNew
,
Vec_IntEntry
(
vTemp
,
i
))
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
FaninId
,
Cba_ManHandleBuffer
(
pNew
,
Vec_IntEntry
(
vTemp
,
i
))
);
}
}
// craete box
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
,
CBA_OBJ_BOX
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
,
Cba_ManNtkId
(
pNew
,
Cba_NtkName
(
pNtkBox
))
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
ObjId
,
Cba_ManHandleArray
(
pNew
,
vTemp
)
);
// create box outputs
// create box outputs
for
(
i
=
1
;
i
<=
Cba_NtkPoNum
(
pNtkBox
);
i
++
)
Cba_BoxForEachBo
(
pNtkNew
,
ObjId
,
FaninId
,
i
)
{
{
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
+
i
,
CBA_OBJ_BO
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
FaninId
,
CBA_OBJ_BO
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
+
i
,
i
-
1
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
FaninId
,
i
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
ObjId
+
i
,
Cba_ManHandleBuffer
(
pNew
,
ObjId
)
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
FaninId
,
Cba_ManHandleBuffer
(
pNew
,
ObjId
)
);
}
}
}
}
}
}
assert
(
nBoxes
==
Vec_IntSize
(
vBoxes
)
);
assert
(
nBoxes
==
Vec_IntSize
(
&
pNtkNew
->
vBoxes
)
);
Cba_NtkForEachPo
(
pNtk
,
NameId
,
i
)
Cba_NtkForEachPo
(
pNtk
,
NameId
,
i
)
{
{
ObjId
=
nObjCount
-
Cba_NtkPoNum
(
pNtk
)
+
i
;
ObjId
=
nObjCount
-
Cba_NtkPoNum
(
pNtk
)
+
i
;
...
@@ -296,23 +304,34 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
...
@@ -296,23 +304,34 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
assert
(
FaninId
!=
-
1
);
assert
(
FaninId
!=
-
1
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vOutputs
,
i
,
ObjId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vOutputs
,
i
,
ObjId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
,
CBA_OBJ_PO
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vTypes
,
ObjId
,
CBA_OBJ_PO
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
,
-
1
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFuncs
,
ObjId
,
i
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
ObjId
,
Cba_ManHandleBuffer
(
pNew
,
FaninId
)
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vFanins
,
ObjId
,
Cba_ManHandleBuffer
(
pNew
,
FaninId
)
);
// remove NameId from the driver and assign it to the output
// remove NameId from the driver and assign it to the output
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
FaninId
,
-
1
);
//
Vec_IntWriteEntry( &pNtkNew->vNameIds, FaninId, -1 );
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
ObjId
,
NameId
);
Vec_IntWriteEntry
(
&
pNtkNew
->
vNameIds
,
ObjId
,
NameId
);
}
}
return
pNtkNew
;
return
pNtkNew
;
}
}
Cba_Man_t
*
Cba_ManPreBuild
(
Cba_Man_t
*
p
)
{
Cba_Man_t
*
pNew
=
Cba_ManClone
(
p
);
Cba_Ntk_t
*
pNtk
,
*
pNtkNew
;
int
i
;
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
{
pNtkNew
=
Cba_NtkAlloc
(
pNew
,
Cba_NtkName
(
pNtk
)
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vInputs
,
Cba_NtkPiNum
(
pNtk
)
);
Cba_ManFetchArray
(
pNew
,
&
pNtkNew
->
vOutputs
,
Cba_NtkPoNum
(
pNtk
)
);
}
assert
(
Cba_ManNtkNum
(
pNew
)
==
Cba_ManNtkNum
(
p
)
);
return
pNew
;
}
Cba_Man_t
*
Cba_ManBuild
(
Cba_Man_t
*
p
)
Cba_Man_t
*
Cba_ManBuild
(
Cba_Man_t
*
p
)
{
{
Cba_Man_t
*
pNew
=
Cba_Man
Alloc
(
Cba_ManName
(
p
)
);
Cba_Man_t
*
pNew
=
Cba_Man
PreBuild
(
p
);
Vec_Int_t
*
vMap
=
Vec_IntStartFull
(
Abc_NamObjNumMax
(
p
->
pNames
)
+
1
);
Vec_Int_t
*
vMap
=
Vec_IntStartFull
(
Abc_NamObjNumMax
(
p
->
pNames
)
+
1
);
Vec_Int_t
*
vBoxes
=
Vec_IntAlloc
(
1000
);
Vec_Int_t
*
vBoxes
=
Vec_IntAlloc
(
1000
);
Vec_Int_t
*
vTemp
=
Vec_IntAlloc
(
1000
);
Vec_Int_t
*
vTemp
=
Vec_IntAlloc
(
1000
);
Cba_Ntk_t
*
pNtk
;
int
i
,
nObjs
;
Cba_Ntk_t
*
pNtk
;
int
i
,
nObjs
;
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Abc_NamStrFindOrAdd
(
p
->
pModels
,
Cba_NtkName
(
pNtk
),
NULL
);
assert
(
Abc_NamObjNumMax
(
p
->
pModels
)
==
Cba_ManNtkNum
(
p
)
+
1
);
assert
(
Abc_NamObjNumMax
(
p
->
pModels
)
==
Cba_ManNtkNum
(
p
)
+
1
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
{
{
...
...
src/base/cba/cbaCom.c
View file @
8ac8923a
...
@@ -174,7 +174,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -174,7 +174,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
return
0
;
}
}
if
(
argc
==
globalUtilOptind
)
if
(
argc
==
globalUtilOptind
)
pFileName
=
Extra_FileNameGenericAppend
(
pNtk
->
pName
,
"_out.v"
);
pFileName
=
Extra_FileNameGenericAppend
(
Cba_NtkMan
(
pNtk
)
->
pName
,
"_out.v"
);
else
if
(
argc
==
globalUtilOptind
+
1
)
else
if
(
argc
==
globalUtilOptind
+
1
)
pFileName
=
argv
[
globalUtilOptind
];
pFileName
=
argv
[
globalUtilOptind
];
else
else
...
@@ -314,7 +314,10 @@ usage:
...
@@ -314,7 +314,10 @@ usage:
******************************************************************************/
******************************************************************************/
int
Cba_CommandTest
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
int
Cba_CommandTest
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
{
extern
void
Cba_ManReadDesExperiment
(
Abc_Ntk_t
*
pNtk
);
Abc_Ntk_t
*
pAbcNtk
;
Cba_Ntk_t
*
pNtk
=
Cba_AbcGetNtk
(
pAbc
);
Cba_Ntk_t
*
pNtk
=
Cba_AbcGetNtk
(
pAbc
);
char
*
pFileName
=
"c/hie/dump/1/netlist_1.v"
;
int
c
,
fVerbose
=
0
;
int
c
,
fVerbose
=
0
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
)
)
!=
EOF
)
...
@@ -330,14 +333,17 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -330,14 +333,17 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
goto
usage
;
goto
usage
;
}
}
}
}
/*
if ( pNtk == NULL )
if ( pNtk == NULL )
{
{
Abc_Print( 1, "Cba_CommandTest(): There is no current design.\n" );
Abc_Print( 1, "Cba_CommandTest(): There is no current design.\n" );
return 0;
return 0;
}
}
*/
// transform
// transform
// pNtk = Cba_NtkUifNodePairs( pNtk, NULL );
pAbcNtk
=
Io_ReadNetlist
(
pFileName
,
Io_ReadFileType
(
pFileName
),
0
);
Cba_AbcUpdateNtk
(
pAbc
,
pNtk
);
Cba_ManReadDesExperiment
(
pAbcNtk
);
Abc_NtkDelete
(
pAbcNtk
);
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: @test [-vh]
\n
"
);
Abc_Print
(
-
2
,
"usage: @test [-vh]
\n
"
);
...
...
src/base/cba/cbaPrs.h
View file @
8ac8923a
...
@@ -32,6 +32,7 @@
...
@@ -32,6 +32,7 @@
ABC_NAMESPACE_HEADER_START
ABC_NAMESPACE_HEADER_START
/*
// parser objects (object types after parsing)
// parser objects (object types after parsing)
typedef enum {
typedef enum {
CBA_PRS_NONE = 0, // 0: unused
CBA_PRS_NONE = 0, // 0: unused
...
@@ -41,6 +42,7 @@ typedef enum {
...
@@ -41,6 +42,7 @@ typedef enum {
CBA_PRS_CONCAT, // 4: concatenation
CBA_PRS_CONCAT, // 4: concatenation
CBA_PRS_UNKNOWN // 5: unknown
CBA_PRS_UNKNOWN // 5: unknown
} Cba_PrsType_t;
} Cba_PrsType_t;
*/
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// BASIC TYPES ///
/// BASIC TYPES ///
...
...
src/base/cba/cbaReadBlif.c
View file @
8ac8923a
...
@@ -265,7 +265,7 @@ static inline int Cba_PrsReadNode( Cba_Prs_t * p )
...
@@ -265,7 +265,7 @@ static inline int Cba_PrsReadNode( Cba_Prs_t * p )
{
{
if
(
Cba_PrsReadList2
(
p
)
)
return
1
;
if
(
Cba_PrsReadList2
(
p
)
)
return
1
;
// save results
// save results
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_NODE
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_NODE
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
1
);
// default const 0 function
Vec_IntPush
(
&
p
->
vFuncsCur
,
1
);
// default const 0 function
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
return
0
;
return
0
;
...
@@ -276,7 +276,7 @@ static inline int Cba_PrsReadBox( Cba_Prs_t * p, int fGate )
...
@@ -276,7 +276,7 @@ static inline int Cba_PrsReadBox( Cba_Prs_t * p, int fGate )
if
(
iToken
==
0
)
return
Cba_PrsErrorSet
(
p
,
"Cannot read model name."
,
1
);
if
(
iToken
==
0
)
return
Cba_PrsErrorSet
(
p
,
"Cannot read model name."
,
1
);
if
(
Cba_PrsReadList3
(
p
)
)
return
1
;
if
(
Cba_PrsReadList3
(
p
)
)
return
1
;
// save results
// save results
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_BOX
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_BOX
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
iToken
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
iToken
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
return
0
;
return
0
;
...
@@ -299,7 +299,7 @@ static inline int Cba_PrsReadLatch( Cba_Prs_t * p )
...
@@ -299,7 +299,7 @@ static inline int Cba_PrsReadLatch( Cba_Prs_t * p )
iToken
=
2
;
iToken
=
2
;
Cba_PrsSkipToChar
(
p
,
'\n'
);
Cba_PrsSkipToChar
(
p
,
'\n'
);
// save results
// save results
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_LATCH
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_LATCH
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
iToken
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
iToken
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
return
0
;
return
0
;
...
@@ -316,7 +316,7 @@ static inline int Cba_PrsReadShort( Cba_Prs_t * p )
...
@@ -316,7 +316,7 @@ static inline int Cba_PrsReadShort( Cba_Prs_t * p )
Cba_PrsSkipSpaces
(
p
);
Cba_PrsSkipSpaces
(
p
);
if
(
!
Cba_PrsIsChar
(
p
,
'\n'
)
)
return
Cba_PrsErrorSet
(
p
,
"Trailing symbols on .short line."
,
1
);
if
(
!
Cba_PrsIsChar
(
p
,
'\n'
)
)
return
Cba_PrsErrorSet
(
p
,
"Trailing symbols on .short line."
,
1
);
// save results
// save results
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_NODE
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_NODE
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
2
);
// default buffer function
Vec_IntPush
(
&
p
->
vFuncsCur
,
2
);
// default buffer function
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
return
0
;
return
0
;
...
...
src/base/cba/cbaReadVer.c
View file @
8ac8923a
...
@@ -367,7 +367,7 @@ static inline int Cba_PrsReadConcat( Cba_Prs_t * p, Vec_Int_t * vTemp2 )
...
@@ -367,7 +367,7 @@ static inline int Cba_PrsReadConcat( Cba_Prs_t * p, Vec_Int_t * vTemp2 )
assert
(
Vec_IntSize
(
vTemp2
)
>
2
);
assert
(
Vec_IntSize
(
vTemp2
)
>
2
);
assert
(
Vec_IntSize
(
vTemp2
)
%
2
==
0
);
assert
(
Vec_IntSize
(
vTemp2
)
%
2
==
0
);
// create new concatentation
// create new concatentation
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_CONCAT
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_CONCAT
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
0
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
0
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
vTemp2
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
vTemp2
)
);
...
@@ -497,7 +497,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
...
@@ -497,7 +497,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
// check unary operator
// check unary operator
if
(
Cba_PrsIsChar
(
p
,
';'
)
)
if
(
Cba_PrsIsChar
(
p
,
';'
)
)
{
{
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_NODE
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_NODE
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
fCompl
?
CBA_NODE_INV
:
CBA_NODE_BUF
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
fCompl
?
CBA_NODE_INV
:
CBA_NODE_BUF
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
...
@@ -532,7 +532,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
...
@@ -532,7 +532,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
if
(
!
Cba_PrsIsChar
(
p
,
';'
)
)
return
Cba_PrsErrorSet
(
p
,
"Expected semicolon at the end of the assign-statement."
,
0
);
if
(
!
Cba_PrsIsChar
(
p
,
';'
)
)
return
Cba_PrsErrorSet
(
p
,
"Expected semicolon at the end of the assign-statement."
,
0
);
}
}
// write binary operator
// write binary operator
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
PRS
_NODE
);
Vec_IntPush
(
&
p
->
vTypesCur
,
CBA_
OBJ
_NODE
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
Oper
);
Vec_IntPush
(
&
p
->
vFuncsCur
,
Oper
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vInstIdsCur
,
0
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
Vec_IntPush
(
&
p
->
vFaninsCur
,
Cba_ManHandleArray
(
p
->
pDesign
,
&
p
->
vTemp
)
);
...
@@ -550,12 +550,12 @@ static inline int Cba_PrsReadInstance( Cba_Prs_t * p, int Func )
...
@@ -550,12 +550,12 @@ static inline int Cba_PrsReadInstance( Cba_Prs_t * p, int Func )
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Cba_PrsUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Cba_PrsUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Cba_PrsIsChar
(
p
,
'.'
)
)
// node
if
(
Cba_PrsIsChar
(
p
,
'.'
)
)
// node
Status
=
Cba_PrsReadSignalList2
(
p
,
&
p
->
vTemp
),
Type
=
CBA_
PRS
_BOX
;
Status
=
Cba_PrsReadSignalList2
(
p
,
&
p
->
vTemp
),
Type
=
CBA_
OBJ
_BOX
;
else
else
Status
=
Cba_PrsReadSignalList1
(
p
,
&
p
->
vTemp
),
Type
=
CBA_
PRS
_NODE
;
Status
=
Cba_PrsReadSignalList1
(
p
,
&
p
->
vTemp
),
Type
=
CBA_
OBJ
_NODE
;
if
(
Status
==
0
)
return
0
;
if
(
Status
==
0
)
return
0
;
// translate elementary gate
// translate elementary gate
if
(
Type
==
CBA_
PRS
_NODE
)
if
(
Type
==
CBA_
OBJ
_NODE
)
{
{
int
iFuncNew
=
Cba_PrsIsKnownModule
(
p
,
Abc_NamStr
(
p
->
pDesign
->
pNames
,
Func
));
int
iFuncNew
=
Cba_PrsIsKnownModule
(
p
,
Abc_NamStr
(
p
->
pDesign
->
pNames
,
Func
));
if
(
iFuncNew
==
0
)
return
Cba_PrsErrorSet
(
p
,
"Cannot find elementary gate."
,
0
);
if
(
iFuncNew
==
0
)
return
Cba_PrsErrorSet
(
p
,
"Cannot find elementary gate."
,
0
);
...
@@ -726,7 +726,7 @@ Cba_Man_t * Cba_PrsReadVerilog( char * pFileName )
...
@@ -726,7 +726,7 @@ Cba_Man_t * Cba_PrsReadVerilog( char * pFileName )
void
Cba_PrsReadVerilogTest
(
char
*
pFileName
)
void
Cba_PrsReadVerilogTest
(
char
*
pFileName
)
{
{
abctime
clk
=
Abc_Clock
();
abctime
clk
=
Abc_Clock
();
extern
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
Des
);
extern
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
);
// Cba_Man_t * p = Cba_PrsReadVerilog( "c/hie/dump/1/netlist_1.v" );
// Cba_Man_t * p = Cba_PrsReadVerilog( "c/hie/dump/1/netlist_1.v" );
// Cba_Man_t * p = Cba_PrsReadVerilog( "aga/me/me_wide.v" );
// Cba_Man_t * p = Cba_PrsReadVerilog( "aga/me/me_wide.v" );
Cba_Man_t
*
p
=
Cba_PrsReadVerilog
(
"aga/ray/ray_wide.v"
);
Cba_Man_t
*
p
=
Cba_PrsReadVerilog
(
"aga/ray/ray_wide.v"
);
...
...
src/base/cba/cbaSimple.c
View file @
8ac8923a
...
@@ -89,7 +89,7 @@ char * Ptr_TypeToName( Ptr_ObjType_t Type )
...
@@ -89,7 +89,7 @@ char * Ptr_TypeToName( Ptr_ObjType_t Type )
assert
(
0
);
assert
(
0
);
return
"???"
;
return
"???"
;
}
}
char
*
Ptr_TypeToSop
(
Ptr_ObjType_
t
Type
)
char
*
Ptr_TypeToSop
(
in
t
Type
)
{
{
if
(
Type
==
PTR_OBJ_BUF
)
return
"1 1
\n
"
;
if
(
Type
==
PTR_OBJ_BUF
)
return
"1 1
\n
"
;
if
(
Type
==
PTR_OBJ_INV
)
return
"0 1
\n
"
;
if
(
Type
==
PTR_OBJ_INV
)
return
"0 1
\n
"
;
...
@@ -277,7 +277,7 @@ void Ptr_ManDumpNodeBlif( FILE * pFile, Vec_Ptr_t * vNode )
...
@@ -277,7 +277,7 @@ void Ptr_ManDumpNodeBlif( FILE * pFile, Vec_Ptr_t * vNode )
Vec_PtrForEachEntryStart
(
char
*
,
vNode
,
pName
,
i
,
2
)
Vec_PtrForEachEntryStart
(
char
*
,
vNode
,
pName
,
i
,
2
)
fprintf
(
pFile
,
" %s"
,
pName
);
fprintf
(
pFile
,
" %s"
,
pName
);
fprintf
(
pFile
,
" %s
\n
"
,
(
char
*
)
Vec_PtrEntry
(
vNode
,
0
)
);
fprintf
(
pFile
,
" %s
\n
"
,
(
char
*
)
Vec_PtrEntry
(
vNode
,
0
)
);
fprintf
(
pFile
,
"%s"
,
Ptr_TypeToSop
(
(
Ptr_ObjType_t
)
Abc_Ptr2Int
(
Vec_PtrEntry
(
vNode
,
1
))
)
);
fprintf
(
pFile
,
"%s"
,
Ptr_TypeToSop
(
Abc_Ptr2Int
(
Vec_PtrEntry
(
vNode
,
1
))
)
);
}
}
void
Ptr_ManDumpNodesBlif
(
FILE
*
pFile
,
Vec_Ptr_t
*
vNodes
)
void
Ptr_ManDumpNodesBlif
(
FILE
*
pFile
,
Vec_Ptr_t
*
vNodes
)
{
{
...
@@ -544,7 +544,7 @@ Vec_Ptr_t * Ptr_CbaDeriveNodes( Cba_Ntk_t * pNtk )
...
@@ -544,7 +544,7 @@ Vec_Ptr_t * Ptr_CbaDeriveNodes( Cba_Ntk_t * pNtk )
int
Type
,
iObj
;
int
Type
,
iObj
;
Vec_Ptr_t
*
vNodes
=
Vec_PtrAlloc
(
Cba_NtkNodeNum
(
pNtk
)
);
Vec_Ptr_t
*
vNodes
=
Vec_PtrAlloc
(
Cba_NtkNodeNum
(
pNtk
)
);
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
if
(
Type
==
CBA_
PRS
_NODE
)
if
(
Type
==
CBA_
OBJ
_NODE
)
Vec_PtrPush
(
vNodes
,
Ptr_CbaDeriveNode
(
pNtk
,
iObj
)
);
Vec_PtrPush
(
vNodes
,
Ptr_CbaDeriveNode
(
pNtk
,
iObj
)
);
assert
(
Ptr_CheckArray
(
vNodes
)
);
assert
(
Ptr_CheckArray
(
vNodes
)
);
return
vNodes
;
return
vNodes
;
...
@@ -578,7 +578,7 @@ Vec_Ptr_t * Ptr_CbaDeriveBoxes( Cba_Ntk_t * pNtk )
...
@@ -578,7 +578,7 @@ Vec_Ptr_t * Ptr_CbaDeriveBoxes( Cba_Ntk_t * pNtk )
int
Type
,
iObj
;
int
Type
,
iObj
;
Vec_Ptr_t
*
vBoxes
=
Vec_PtrAlloc
(
Cba_NtkBoxNum
(
pNtk
)
);
Vec_Ptr_t
*
vBoxes
=
Vec_PtrAlloc
(
Cba_NtkBoxNum
(
pNtk
)
);
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
Cba_NtkForEachObjType
(
pNtk
,
Type
,
iObj
)
if
(
Type
==
CBA_
PRS
_BOX
)
if
(
Type
==
CBA_
OBJ
_BOX
)
Vec_PtrPush
(
vBoxes
,
Ptr_CbaDeriveBox
(
pNtk
,
iObj
)
);
Vec_PtrPush
(
vBoxes
,
Ptr_CbaDeriveBox
(
pNtk
,
iObj
)
);
assert
(
Ptr_CheckArray
(
vBoxes
)
);
assert
(
Ptr_CheckArray
(
vBoxes
)
);
return
vBoxes
;
return
vBoxes
;
...
@@ -650,7 +650,7 @@ void Cba_PrsReadNodes( Cba_Man_t * p, Vec_Ptr_t * vNodes, Vec_Int_t * vTypesCur,
...
@@ -650,7 +650,7 @@ void Cba_PrsReadNodes( Cba_Man_t * p, Vec_Ptr_t * vNodes, Vec_Int_t * vTypesCur,
Vec_Ptr_t
*
vNode
;
int
i
;
Vec_Ptr_t
*
vNode
;
int
i
;
Vec_PtrForEachEntry
(
Vec_Ptr_t
*
,
vNodes
,
vNode
,
i
)
Vec_PtrForEachEntry
(
Vec_Ptr_t
*
,
vNodes
,
vNode
,
i
)
{
{
Vec_IntPush
(
vTypesCur
,
CBA_
PRS
_NODE
);
Vec_IntPush
(
vTypesCur
,
CBA_
OBJ
_NODE
);
Vec_IntPush
(
vFuncsCur
,
(
Ptr_ObjType_t
)
Abc_Ptr2Int
(
Vec_PtrEntry
(
vNode
,
1
))
);
Vec_IntPush
(
vFuncsCur
,
(
Ptr_ObjType_t
)
Abc_Ptr2Int
(
Vec_PtrEntry
(
vNode
,
1
))
);
Vec_IntPush
(
vInstIdsCur
,
0
);
Vec_IntPush
(
vInstIdsCur
,
0
);
Vec_IntPush
(
vFaninsCur
,
Cba_ManHandleArray
(
p
,
Cba_PrsReadList
(
p
,
vNode
,
vList
,
1
,
-
1
))
);
Vec_IntPush
(
vFaninsCur
,
Cba_ManHandleArray
(
p
,
Cba_PrsReadList
(
p
,
vNode
,
vList
,
1
,
-
1
))
);
...
@@ -661,8 +661,8 @@ void Cba_PrsReadBoxes( Cba_Man_t * p, Vec_Ptr_t * vBoxes, Vec_Int_t * vTypesCur,
...
@@ -661,8 +661,8 @@ void Cba_PrsReadBoxes( Cba_Man_t * p, Vec_Ptr_t * vBoxes, Vec_Int_t * vTypesCur,
Vec_Ptr_t
*
vBox
;
int
i
;
Vec_Ptr_t
*
vBox
;
int
i
;
Vec_PtrForEachEntry
(
Vec_Ptr_t
*
,
vBoxes
,
vBox
,
i
)
Vec_PtrForEachEntry
(
Vec_Ptr_t
*
,
vBoxes
,
vBox
,
i
)
{
{
Vec_IntPush
(
vTypesCur
,
CBA_
PRS
_BOX
);
Vec_IntPush
(
vTypesCur
,
CBA_
OBJ
_BOX
);
Vec_IntPush
(
vFuncsCur
,
Abc_NamStrFindOrAdd
(
p
->
p
Name
s
,
Vec_PtrEntry
(
vBox
,
0
),
NULL
)
);
Vec_IntPush
(
vFuncsCur
,
Abc_NamStrFindOrAdd
(
p
->
p
Model
s
,
Vec_PtrEntry
(
vBox
,
0
),
NULL
)
);
Vec_IntPush
(
vInstIdsCur
,
Abc_NamStrFindOrAdd
(
p
->
pNames
,
Vec_PtrEntry
(
vBox
,
1
),
NULL
)
);
Vec_IntPush
(
vInstIdsCur
,
Abc_NamStrFindOrAdd
(
p
->
pNames
,
Vec_PtrEntry
(
vBox
,
1
),
NULL
)
);
Vec_IntPush
(
vFaninsCur
,
Cba_ManHandleArray
(
p
,
Cba_PrsReadList
(
p
,
vBox
,
vList
,
0
,
1
))
);
Vec_IntPush
(
vFaninsCur
,
Cba_ManHandleArray
(
p
,
Cba_PrsReadList
(
p
,
vBox
,
vList
,
0
,
1
))
);
}
}
...
@@ -698,7 +698,7 @@ void Cba_PrsReadModule( Cba_Man_t * p, Vec_Ptr_t * vNtk )
...
@@ -698,7 +698,7 @@ void Cba_PrsReadModule( Cba_Man_t * p, Vec_Ptr_t * vNtk )
Vec_IntFree
(
vFaninsCur
);
Vec_IntFree
(
vFaninsCur
);
Vec_IntFree
(
vList
);
Vec_IntFree
(
vList
);
}
}
Cba_Man_t
*
Cba_PrsRead
Des
(
Vec_Ptr_t
*
vDes
)
Cba_Man_t
*
Cba_PrsRead
Ptr
(
Vec_Ptr_t
*
vDes
)
{
{
Vec_Ptr_t
*
vNtk
;
int
i
;
Vec_Ptr_t
*
vNtk
;
int
i
;
Cba_Man_t
*
p
=
Cba_ManAlloc
(
(
char
*
)
Vec_PtrEntry
(
vDes
,
0
)
);
Cba_Man_t
*
p
=
Cba_ManAlloc
(
(
char
*
)
Vec_PtrEntry
(
vDes
,
0
)
);
...
@@ -722,25 +722,37 @@ Cba_Man_t * Cba_PrsReadDes( Vec_Ptr_t * vDes )
...
@@ -722,25 +722,37 @@ Cba_Man_t * Cba_PrsReadDes( Vec_Ptr_t * vDes )
void
Cba_ManReadDesExperiment
(
Abc_Ntk_t
*
pNtk
)
void
Cba_ManReadDesExperiment
(
Abc_Ntk_t
*
pNtk
)
{
{
abctime
clk
=
Abc_Clock
();
abctime
clk
=
Abc_Clock
();
char
*
pFileName1
=
Extra_FileNameGenericAppend
(
pNtk
->
pDesign
->
pName
,
"_out1.blif"
);
Cba_Man_t
*
p
,
*
pTemp
;
char
*
pFileName2
=
Extra_FileNameGenericAppend
(
pNtk
->
pDesign
->
pName
,
"_out2.blif"
);
char
*
pFileName
;
Cba_Man_t
*
p
;
// derive Ptr from ABC
Vec_Ptr_t
*
vDes
=
Ptr_AbcDeriveDes
(
pNtk
);
Vec_Ptr_t
*
vDes
=
Ptr_AbcDeriveDes
(
pNtk
);
printf
(
"Converting to Ptr: Memory = %6.3f MB "
,
1
.
0
*
Ptr_ManMemDes
(
vDes
)
/
(
1
<<
20
)
);
printf
(
"Converting to Ptr: Memory = %6.3f MB "
,
1
.
0
*
Ptr_ManMemDes
(
vDes
)
/
(
1
<<
20
)
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
// dump
Ptr_ManDumpBlif
(
pFileName1
,
vDes
);
pFileName
=
Extra_FileNameGenericAppend
(
pNtk
->
pDesign
->
pName
,
"_out1.blif"
);
printf
(
"Finished writing output file
\"
%s
\"
. "
,
pFileName1
);
Ptr_ManDumpBlif
(
pFileName
,
vDes
);
printf
(
"Finished writing output file
\"
%s
\"
. "
,
pFileName
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
p
=
Cba_PrsReadDes
(
vDes
);
// derive CBA from Ptr
p
=
Cba_PrsReadPtr
(
vDes
);
Ptr_ManFreeDes
(
vDes
);
Ptr_ManFreeDes
(
vDes
);
// dump
// Abc_NamPrint( p->pDesign->pNames );
pFileName
=
Extra_FileNameGenericAppend
(
pNtk
->
pDesign
->
pName
,
"_out2.blif"
);
Cba_PrsWriteBlif
(
pFileName2
,
p
);
Cba_PrsWriteBlif
(
pFileName
,
p
);
printf
(
"Finished writing output file
\"
%s
\"
. "
,
pFileName
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
// Abc_NamPrint( p->pNames );
// build CBA from CBA
p
=
Cba_ManBuild
(
pTemp
=
p
);
Cba_ManFree
(
pTemp
);
// dump
pFileName
=
Extra_FileNameGenericAppend
(
pNtk
->
pDesign
->
pName
,
"_out3.blif"
);
Cba_ManWriteBlif
(
pFileName
,
p
);
Cba_ManFree
(
p
);
Cba_ManFree
(
p
);
printf
(
"Finished writing output file
\"
%s
\"
. "
,
pFileName
2
);
printf
(
"Finished writing output file
\"
%s
\"
. "
,
pFileName
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
Abc_PrintTime
(
1
,
"Time"
,
Abc_Clock
()
-
clk
);
}
}
...
...
src/base/cba/cbaWriteBlif.c
View file @
8ac8923a
...
@@ -27,6 +27,8 @@ ABC_NAMESPACE_IMPL_START
...
@@ -27,6 +27,8 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
extern
char
*
Ptr_TypeToSop
(
int
Type
);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -61,27 +63,28 @@ void Cba_PrsWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins )
...
@@ -61,27 +63,28 @@ void Cba_PrsWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins )
}
}
void
Cba_PrsWriteBlifLines
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
void
Cba_PrsWriteBlifLines
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
{
{
Vec_Int_t
*
vFanins
;
int
i
,
Type
;
int
Type
,
Func
,
i
;
Cba_NtkForEachObjType
(
p
,
Type
,
i
)
Cba_NtkForEachObjTypeFuncFanins
(
p
,
Type
,
Func
,
vFanins
,
i
)
if
(
Type
==
CBA_OBJ_NODE
)
// .names/assign/box2 (no formal/actual binding)
if
(
Type
==
CBA_PRS_NODE
)
// .names/assign/box2 (no formal/actual binding)
{
{
fprintf
(
pFile
,
".names"
);
fprintf
(
pFile
,
".names"
);
Cba_PrsWriteBlifArray
(
pFile
,
p
,
vFanins
,
1
);
Cba_PrsWriteBlifArray
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
),
1
);
fprintf
(
pFile
,
"%s"
,
Cba_NtkFuncStr
(
p
,
Func
)
);
//fprintf( pFile, "%s", Cba_NtkFuncStr(p, Cba_ObjFuncId(p, i)) );
fprintf
(
pFile
,
"%s"
,
Ptr_TypeToSop
(
Cba_ObjFuncId
(
p
,
i
)
)
);
}
}
else
if
(
Type
==
CBA_
PRS
_BOX
)
// .names/assign/box2 (no formal/actual binding)
else
if
(
Type
==
CBA_
OBJ
_BOX
)
// .names/assign/box2 (no formal/actual binding)
{
{
fprintf
(
pFile
,
".subckt"
);
fprintf
(
pFile
,
".subckt"
);
fprintf
(
pFile
,
" %s"
,
Cba_
NtkStr
(
p
,
Func
)
);
fprintf
(
pFile
,
" %s"
,
Cba_
ObjFuncStr
(
p
,
i
)
);
Cba_PrsWriteBlifArray2
(
pFile
,
p
,
vFanins
);
Cba_PrsWriteBlifArray2
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
)
);
}
}
else
if
(
Type
==
CBA_
PRS
_LATCH
)
// .names/assign/box2 (no formal/actual binding)
else
if
(
Type
==
CBA_
OBJ
_LATCH
)
// .names/assign/box2 (no formal/actual binding)
{
{
Vec_Int_t
*
vFanins
=
Cba_ObjFaninVec
(
p
,
i
);
fprintf
(
pFile
,
".latch"
);
fprintf
(
pFile
,
".latch"
);
fprintf
(
pFile
,
" %s"
,
Cba_NtkStr
(
p
,
Vec_IntEntry
(
vFanins
,
1
))
);
fprintf
(
pFile
,
" %s"
,
Cba_NtkStr
(
p
,
Vec_IntEntry
(
vFanins
,
1
))
);
fprintf
(
pFile
,
" %s"
,
Cba_NtkStr
(
p
,
Vec_IntEntry
(
vFanins
,
0
))
);
fprintf
(
pFile
,
" %s"
,
Cba_NtkStr
(
p
,
Vec_IntEntry
(
vFanins
,
0
))
);
fprintf
(
pFile
,
" %c
\n
"
,
'0'
+
Func
);
fprintf
(
pFile
,
" %c
\n
"
,
'0'
+
Cba_ObjFuncId
(
p
,
i
)
);
}
}
}
}
void
Cba_PrsWriteBlifNtk
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
void
Cba_PrsWriteBlifNtk
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
...
@@ -102,7 +105,7 @@ void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p )
...
@@ -102,7 +105,7 @@ void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p )
Cba_PrsWriteBlifLines
(
pFile
,
p
);
Cba_PrsWriteBlifLines
(
pFile
,
p
);
fprintf
(
pFile
,
".end
\n\n
"
);
fprintf
(
pFile
,
".end
\n\n
"
);
}
}
void
Cba_PrsWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
Des
)
void
Cba_PrsWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
)
{
{
FILE
*
pFile
;
FILE
*
pFile
;
Cba_Ntk_t
*
pNtk
;
Cba_Ntk_t
*
pNtk
;
...
@@ -113,8 +116,8 @@ void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes )
...
@@ -113,8 +116,8 @@ void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes )
printf
(
"Cannot open output file
\"
%s
\"
.
\n
"
,
pFileName
);
printf
(
"Cannot open output file
\"
%s
\"
.
\n
"
,
pFileName
);
return
;
return
;
}
}
fprintf
(
pFile
,
"// Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
Des
),
Extra_TimeStamp
()
);
fprintf
(
pFile
,
"// Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
Cba_ManForEachNtk
(
p
Des
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_PrsWriteBlifNtk
(
pFile
,
pNtk
);
Cba_PrsWriteBlifNtk
(
pFile
,
pNtk
);
fclose
(
pFile
);
fclose
(
pFile
);
}
}
...
@@ -142,12 +145,11 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in
...
@@ -142,12 +145,11 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in
void
Cba_ManWriteBlifArray2
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
,
int
iObj
)
void
Cba_ManWriteBlifArray2
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
int
iTerm
,
i
;
int
iTerm
,
i
;
Vec_Int_t
*
vFanins
=
Cba_ObjFaninVec
(
p
,
iObj
);
Cba_Ntk_t
*
pModel
=
Cba_ObjBoxModel
(
p
,
iObj
);
Cba_Ntk_t
*
pModel
=
Cba_ObjBoxModel
(
p
,
iObj
);
Cba_NtkForEachPi
(
pModel
,
iTerm
,
i
)
Cba_NtkForEachPi
(
pModel
,
iTerm
,
i
)
fprintf
(
pFile
,
" %s=%s"
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Vec_IntEntry
(
vFanins
,
i
))
);
fprintf
(
pFile
,
" %s=%s"
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_ObjBoxBi
(
p
,
iObj
,
i
))
);
Cba_NtkForEachPo
(
pModel
,
iTerm
,
i
)
Cba_NtkForEachPo
(
pModel
,
iTerm
,
i
)
fprintf
(
pFile
,
" %s=%s"
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
iObj
+
1
+
i
)
);
fprintf
(
pFile
,
" %s=%s"
,
Cba_ObjNameStr
(
pModel
,
iTerm
),
Cba_ObjNameStr
(
p
,
Cba_ObjBoxBo
(
p
,
iObj
,
i
)
)
);
fprintf
(
pFile
,
"
\n
"
);
fprintf
(
pFile
,
"
\n
"
);
}
}
void
Cba_ManWriteBlifLines
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
void
Cba_ManWriteBlifLines
(
FILE
*
pFile
,
Cba_Ntk_t
*
p
)
...
@@ -159,12 +161,13 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
...
@@ -159,12 +161,13 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
{
{
fprintf
(
pFile
,
".names"
);
fprintf
(
pFile
,
".names"
);
Cba_ManWriteBlifArray
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
),
i
);
Cba_ManWriteBlifArray
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
),
i
);
fprintf
(
pFile
,
"%s"
,
Cba_ObjFuncStr
(
p
,
i
)
);
//fprintf( pFile, "%s", Cba_NtkFuncStr(p, Cba_ObjFuncId(p, i)) );
fprintf
(
pFile
,
"%s"
,
Ptr_TypeToSop
(
Cba_ObjFuncId
(
p
,
i
)
)
);
}
}
else
if
(
Type
==
CBA_OBJ_BOX
)
// .names/assign/box2 (no formal/actual binding)
else
if
(
Type
==
CBA_OBJ_BOX
)
// .names/assign/box2 (no formal/actual binding)
{
{
fprintf
(
pFile
,
".subckt"
);
fprintf
(
pFile
,
".subckt"
);
fprintf
(
pFile
,
" %s"
,
Cba_
ObjFuncStr
(
p
,
i
)
);
fprintf
(
pFile
,
" %s"
,
Cba_
NtkName
(
Cba_ObjBoxModel
(
p
,
i
)
)
);
Cba_ManWriteBlifArray2
(
pFile
,
p
,
i
);
Cba_ManWriteBlifArray2
(
pFile
,
p
,
i
);
}
}
else
if
(
Type
==
CBA_OBJ_LATCH
)
// .names/assign/box2 (no formal/actual binding)
else
if
(
Type
==
CBA_OBJ_LATCH
)
// .names/assign/box2 (no formal/actual binding)
...
...
src/base/cba/cbaWriteVer.c
View file @
8ac8923a
...
@@ -134,7 +134,7 @@ void Cba_PrsWriteVerilogNodes( FILE * pFile, Cba_Ntk_t * p )
...
@@ -134,7 +134,7 @@ void Cba_PrsWriteVerilogNodes( FILE * pFile, Cba_Ntk_t * p )
{
{
int
Type
,
Func
,
i
;
int
Type
,
Func
,
i
;
Cba_NtkForEachObjType
(
p
,
Type
,
i
)
Cba_NtkForEachObjType
(
p
,
Type
,
i
)
if
(
Type
==
CBA_
PRS
_NODE
)
// .names/assign/box2 (no formal/actual binding)
if
(
Type
==
CBA_
OBJ
_NODE
)
// .names/assign/box2 (no formal/actual binding)
{
{
Func
=
Cba_ObjFuncId
(
p
,
i
);
Func
=
Cba_ObjFuncId
(
p
,
i
);
if
(
Func
>=
CBA_NODE_BUF
&&
Func
<=
CBA_NODE_XNOR
)
if
(
Func
>=
CBA_NODE_BUF
&&
Func
<=
CBA_NODE_XNOR
)
...
@@ -156,7 +156,7 @@ void Cba_PrsWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p )
...
@@ -156,7 +156,7 @@ void Cba_PrsWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p )
{
{
int
Type
,
i
;
int
Type
,
i
;
Cba_NtkForEachObjType
(
p
,
Type
,
i
)
Cba_NtkForEachObjType
(
p
,
Type
,
i
)
if
(
Type
==
CBA_
PRS
_BOX
)
// .subckt/.gate/box (formal/actual binding)
if
(
Type
==
CBA_
OBJ
_BOX
)
// .subckt/.gate/box (formal/actual binding)
{
{
fprintf
(
pFile
,
" %s %s ("
,
Cba_ObjFuncStr
(
p
,
i
),
Cba_ObjInstStr
(
p
,
i
)
);
fprintf
(
pFile
,
" %s %s ("
,
Cba_ObjFuncStr
(
p
,
i
),
Cba_ObjInstStr
(
p
,
i
)
);
Cba_PrsWriteVerilogArray3
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
)
);
Cba_PrsWriteVerilogArray3
(
pFile
,
p
,
Cba_ObjFaninVec
(
p
,
i
)
);
...
@@ -204,7 +204,7 @@ void Cba_PrsWriteVerilogNtk( FILE * pFile, Cba_Ntk_t * p )
...
@@ -204,7 +204,7 @@ void Cba_PrsWriteVerilogNtk( FILE * pFile, Cba_Ntk_t * p )
Cba_PrsWriteVerilogBoxes
(
pFile
,
p
);
Cba_PrsWriteVerilogBoxes
(
pFile
,
p
);
fprintf
(
pFile
,
"endmodule
\n\n
"
);
fprintf
(
pFile
,
"endmodule
\n\n
"
);
}
}
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
Des
)
void
Cba_PrsWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
)
{
{
FILE
*
pFile
;
FILE
*
pFile
;
Cba_Ntk_t
*
pNtk
;
Cba_Ntk_t
*
pNtk
;
...
@@ -215,8 +215,8 @@ void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes )
...
@@ -215,8 +215,8 @@ void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes )
printf
(
"Cannot open output file
\"
%s
\"
.
\n
"
,
pFileName
);
printf
(
"Cannot open output file
\"
%s
\"
.
\n
"
,
pFileName
);
return
;
return
;
}
}
fprintf
(
pFile
,
"// Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
Des
),
Extra_TimeStamp
()
);
fprintf
(
pFile
,
"// Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
Cba_ManForEachNtk
(
p
Des
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_PrsWriteVerilogNtk
(
pFile
,
pNtk
);
Cba_PrsWriteVerilogNtk
(
pFile
,
pNtk
);
fclose
(
pFile
);
fclose
(
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