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
2d90b916
Commit
2d90b916
authored
Mar 01, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements to the CBA package.
parent
f27979fc
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
643 additions
and
385 deletions
+643
-385
src/base/cba/cba.h
+62
-113
src/base/cba/cbaBlast.c
+1
-1
src/base/cba/cbaCba.c
+51
-21
src/base/cba/cbaCom.c
+11
-3
src/base/cba/cbaNtk.c
+211
-146
src/base/cba/cbaOper.c
+1
-1
src/base/cba/cbaPrsTrans.c
+93
-0
src/base/cba/cbaPtrAbc.c
+1
-1
src/base/cba/cbaReadVer.c
+89
-49
src/base/cba/cbaWriteBlif.c
+12
-2
src/base/cba/cbaWriteVer.c
+78
-48
src/misc/vec/vecStr.h
+33
-0
No files found.
src/base/cba/cba.h
View file @
2d90b916
...
@@ -189,6 +189,8 @@ struct Cba_Man_t_
...
@@ -189,6 +189,8 @@ struct Cba_Man_t_
void
*
pMioLib
;
void
*
pMioLib
;
void
**
ppGraphs
;
void
**
ppGraphs
;
int
ElemGates
[
4
];
int
ElemGates
[
4
];
char
*
pPrimNames
[
CBA_BOX_UNKNOWN
];
char
*
pPrimSymbs
[
CBA_BOX_UNKNOWN
];
};
};
static
inline
char
*
Cba_ManName
(
Cba_Man_t
*
p
)
{
return
p
->
pName
;
}
static
inline
char
*
Cba_ManName
(
Cba_Man_t
*
p
)
{
return
p
->
pName
;
}
...
@@ -202,6 +204,8 @@ static inline Cba_Ntk_t * Cba_ManNtkFind( Cba_Man_t * p, char * pName ) { r
...
@@ -202,6 +204,8 @@ static inline Cba_Ntk_t * Cba_ManNtkFind( Cba_Man_t * p, char * pName ) { r
static
inline
Cba_Ntk_t
*
Cba_ManRoot
(
Cba_Man_t
*
p
)
{
return
Cba_ManNtk
(
p
,
p
->
iRoot
);
}
static
inline
Cba_Ntk_t
*
Cba_ManRoot
(
Cba_Man_t
*
p
)
{
return
Cba_ManNtk
(
p
,
p
->
iRoot
);
}
static
inline
char
*
Cba_ManStr
(
Cba_Man_t
*
p
,
int
i
)
{
return
Abc_NamStr
(
p
->
pStrs
,
i
);
}
static
inline
char
*
Cba_ManStr
(
Cba_Man_t
*
p
,
int
i
)
{
return
Abc_NamStr
(
p
->
pStrs
,
i
);
}
static
inline
int
Cba_ManStrId
(
Cba_Man_t
*
p
,
char
*
pStr
)
{
return
Abc_NamStrFind
(
p
->
pStrs
,
pStr
);
}
static
inline
int
Cba_ManStrId
(
Cba_Man_t
*
p
,
char
*
pStr
)
{
return
Abc_NamStrFind
(
p
->
pStrs
,
pStr
);
}
static
inline
char
*
Cba_ManPrimName
(
Cba_Man_t
*
p
,
Cba_ObjType_t
Type
)
{
return
p
->
pPrimNames
[
Type
];
}
static
inline
char
*
Cba_ManPrimSymb
(
Cba_Man_t
*
p
,
Cba_ObjType_t
Type
)
{
return
p
->
pPrimSymbs
[
Type
];
}
static
inline
int
Cba_NtkId
(
Cba_Ntk_t
*
p
)
{
int
i
=
p
-
p
->
pDesign
->
pNtks
;
assert
(
Cba_ManNtkIsOk
(
p
->
pDesign
,
i
));
return
i
;
}
static
inline
int
Cba_NtkId
(
Cba_Ntk_t
*
p
)
{
int
i
=
p
-
p
->
pDesign
->
pNtks
;
assert
(
Cba_ManNtkIsOk
(
p
->
pDesign
,
i
));
return
i
;
}
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
;
}
...
@@ -218,13 +222,13 @@ static inline int Cba_NtkPoNum( Cba_Ntk_t * p ) { r
...
@@ -218,13 +222,13 @@ static inline int Cba_NtkPoNum( Cba_Ntk_t * p ) { r
static
inline
int
Cba_NtkPioNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPiNum
(
p
)
+
Cba_NtkPoNum
(
p
);
}
static
inline
int
Cba_NtkPioNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPiNum
(
p
)
+
Cba_NtkPoNum
(
p
);
}
static
inline
int
Cba_NtkPiNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPiNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPoNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkPoNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntCap
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkBiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BI
);
}
static
inline
int
Cba_NtkBiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
Lit
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BI
);
}
static
inline
int
Cba_NtkBoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BO
);
}
static
inline
int
Cba_NtkBoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
Lit
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BO
);
}
static
inline
int
Cba_NtkCiNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPiNum
(
p
)
+
Cba_NtkBoNum
(
p
);
}
static
inline
int
Cba_NtkCiNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPiNum
(
p
)
+
Cba_NtkBoNum
(
p
);
}
static
inline
int
Cba_NtkCoNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPoNum
(
p
)
+
Cba_NtkBiNum
(
p
);
}
static
inline
int
Cba_NtkCoNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkPoNum
(
p
)
+
Cba_NtkBiNum
(
p
);
}
static
inline
int
Cba_NtkBoxNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkObjNum
(
p
)
-
Vec_StrCountSmaller
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkBoxNum
(
Cba_Ntk_t
*
p
)
{
return
Cba_NtkObjNum
(
p
)
-
Vec_StrCountSmaller
Lit
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkPrimNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountLarger
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkPrimNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountLarger
Lit
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkUserNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkUserNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCountEntry
Lit
(
&
p
->
vType
,
(
char
)
CBA_OBJ_BOX
);
}
static
inline
int
Cba_NtkPi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Vec_IntEntry
(
&
p
->
vInputs
,
i
);
}
static
inline
int
Cba_NtkPi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Vec_IntEntry
(
&
p
->
vInputs
,
i
);
}
static
inline
int
Cba_NtkPo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Vec_IntEntry
(
&
p
->
vOutputs
,
i
);
}
static
inline
int
Cba_NtkPo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Vec_IntEntry
(
&
p
->
vOutputs
,
i
);
}
...
@@ -257,8 +261,9 @@ static inline int Cba_NtkHasCopies( Cba_Ntk_t * p ) { r
...
@@ -257,8 +261,9 @@ static inline int Cba_NtkHasCopies( Cba_Ntk_t * p ) { r
static
inline
int
Cba_TypeIsBox
(
Cba_ObjType_t
Type
)
{
return
Type
>=
CBA_OBJ_BOX
&&
Type
<
CBA_BOX_UNKNOWN
;
}
static
inline
int
Cba_TypeIsBox
(
Cba_ObjType_t
Type
)
{
return
Type
>=
CBA_OBJ_BOX
&&
Type
<
CBA_BOX_UNKNOWN
;
}
static
inline
Cba_NameType_t
Cba_NameType
(
int
n
)
{
assert
(
n
);
return
(
Cba_NameType_t
)
Abc_Lit2Att2
(
n
);
}
static
inline
Cba_NameType_t
Cba_NameType
(
int
n
)
{
assert
(
n
);
return
(
Cba_NameType_t
)
Abc_Lit2Att2
(
n
);
}
static
inline
int
Cba_CharIsDigit
(
char
c
)
{
return
c
>=
'0'
&&
c
<=
'9'
;
}
static
inline
Cba_ObjType_t
Cba_ObjType
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
(
Cba_ObjType_t
)
Vec_StrEntry
(
&
p
->
vType
,
i
);
}
static
inline
Cba_ObjType_t
Cba_ObjType
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
(
Cba_ObjType_t
)
Abc_Lit2Var
((
int
)(
unsigned
char
)
Vec_StrEntry
(
&
p
->
vType
,
i
));
}
static
inline
int
Cba_ObjIsPi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_PI
;
}
static
inline
int
Cba_ObjIsPi
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_PI
;
}
static
inline
int
Cba_ObjIsPo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_PO
;
}
static
inline
int
Cba_ObjIsPo
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_OBJ_PO
;
}
static
inline
int
Cba_ObjIsPio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPi
(
p
,
i
)
||
Cba_ObjIsPo
(
p
,
i
);
}
static
inline
int
Cba_ObjIsPio
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjIsPi
(
p
,
i
)
||
Cba_ObjIsPo
(
p
,
i
);
}
...
@@ -275,6 +280,8 @@ static inline int Cba_ObjIsCio( Cba_Ntk_t * p, int i ) { r
...
@@ -275,6 +280,8 @@ static inline int Cba_ObjIsCio( Cba_Ntk_t * p, int i ) { r
static
inline
int
Cba_ObjIsConst
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
>=
CBA_BOX_CF
&&
Cba_ObjType
(
p
,
i
)
<=
CBA_BOX_CZ
;
}
static
inline
int
Cba_ObjIsConst
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
>=
CBA_BOX_CF
&&
Cba_ObjType
(
p
,
i
)
<=
CBA_BOX_CZ
;
}
static
inline
int
Cba_ObjIsConstBin
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_BOX_CF
||
Cba_ObjType
(
p
,
i
)
==
CBA_BOX_CT
;
}
static
inline
int
Cba_ObjIsConstBin
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ObjType
(
p
,
i
)
==
CBA_BOX_CF
||
Cba_ObjType
(
p
,
i
)
==
CBA_BOX_CT
;
}
static
inline
int
Cba_ObjBit
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
!
Cba_ObjIsBox
(
p
,
i
));
return
Abc_LitIsCompl
((
int
)
Vec_StrEntry
(
&
p
->
vType
,
i
));
}
static
inline
void
Cba_ObjSetBit
(
Cba_Ntk_t
*
p
,
int
i
)
{
char
*
q
=
Vec_StrArray
(
&
p
->
vType
);
assert
(
!
Cba_ObjIsBox
(
p
,
i
));
q
[
i
]
=
(
char
)
Abc_LitNot
((
int
)
q
[
i
]);
}
static
inline
int
Cba_ObjFanin
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsCo
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vFanin
,
i
);
}
static
inline
int
Cba_ObjFanin
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsCo
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vFanin
,
i
);
}
static
inline
int
Cba_ObjIndex
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsCio
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vIndex
,
i
);
}
static
inline
int
Cba_ObjIndex
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsCio
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vIndex
,
i
);
}
static
inline
int
Cba_ObjNameInt
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
!
Cba_ObjIsCo
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vName
,
i
);
}
static
inline
int
Cba_ObjNameInt
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
!
Cba_ObjIsCo
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vName
,
i
);
}
...
@@ -303,6 +310,9 @@ static inline int Cba_BoxBiBox( Cba_Ntk_t * p, int i ) { a
...
@@ -303,6 +310,9 @@ static inline int Cba_BoxBiBox( Cba_Ntk_t * p, int i ) { a
static
inline
int
Cba_BoxBoBox
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBo
(
p
,
i
));
return
i
-
1
-
Cba_ObjIndex
(
p
,
i
);
}
static
inline
int
Cba_BoxBoBox
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBo
(
p
,
i
));
return
i
-
1
-
Cba_ObjIndex
(
p
,
i
);
}
static
inline
int
Cba_BoxFanin
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
return
Cba_ObjFanin
(
p
,
Cba_BoxBi
(
p
,
b
,
i
));
}
static
inline
int
Cba_BoxFanin
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
return
Cba_ObjFanin
(
p
,
Cba_BoxBi
(
p
,
b
,
i
));
}
static
inline
int
Cba_BoxFaninBox
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
return
Cba_BoxBoBox
(
p
,
Cba_BoxFanin
(
p
,
b
,
i
));
}
static
inline
int
Cba_BoxFaninBox
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
return
Cba_BoxBoBox
(
p
,
Cba_BoxFanin
(
p
,
b
,
i
));
}
static
inline
int
Cba_BoxBiRange
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
;
assert
(
Cba_ObjIsBi
(
p
,
i
)
&&
!
Cba_ObjBit
(
p
,
i
));
while
(
--
i
>=
0
&&
Cba_ObjIsBi
(
p
,
i
)
&&
Cba_ObjBit
(
p
,
i
))
{}
return
s
-
i
;
}
static
inline
int
Cba_BoxBoRange
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
;
assert
(
Cba_ObjIsBo
(
p
,
i
)
&&
!
Cba_ObjBit
(
p
,
i
));
while
(
++
i
<
Cba_NtkObjNum
(
p
)
&&
Cba_ObjIsBo
(
p
,
i
)
&&
Cba_ObjBit
(
p
,
i
))
{}
return
i
-
s
;
}
static
inline
int
Cba_ObjPiRange
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
;
assert
(
Cba_ObjIsPi
(
p
,
i
)
&&
!
Cba_ObjBit
(
p
,
i
));
while
(
++
i
<
Cba_NtkObjNum
(
p
)
&&
Cba_ObjIsPi
(
p
,
i
)
&&
Cba_ObjBit
(
p
,
i
))
{}
return
i
-
s
;
}
static
inline
int
Cba_BoxNtkId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vFanin
,
i
);
}
static
inline
int
Cba_BoxNtkId
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
));
return
Vec_IntEntry
(
&
p
->
vFanin
,
i
);
}
static
inline
void
Cba_BoxSetNtkId
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
)
&&
Cba_ManNtkIsOk
(
p
->
pDesign
,
x
));
Vec_IntSetEntry
(
&
p
->
vFanin
,
i
,
x
);}
static
inline
void
Cba_BoxSetNtkId
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjIsBox
(
p
,
i
)
&&
Cba_ManNtkIsOk
(
p
->
pDesign
,
x
));
Vec_IntSetEntry
(
&
p
->
vFanin
,
i
,
x
);}
...
@@ -313,110 +323,6 @@ static inline Cba_Ntk_t * Cba_BoxBiNtk( Cba_Ntk_t * p, int i ) { r
...
@@ -313,110 +323,6 @@ static inline Cba_Ntk_t * Cba_BoxBiNtk( Cba_Ntk_t * p, int i ) { r
static
inline
Cba_Ntk_t
*
Cba_BoxBoNtk
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_BoxBoNtkId
(
p
,
i
)
);
}
static
inline
Cba_Ntk_t
*
Cba_BoxBoNtk
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Cba_ManNtk
(
p
->
pDesign
,
Cba_BoxBoNtkId
(
p
,
i
)
);
}
static
inline
char
*
Cba_BoxNtkName
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Abc_NamStr
(
p
->
pDesign
->
pMods
,
Cba_BoxNtkId
(
p
,
i
)
);
}
static
inline
char
*
Cba_BoxNtkName
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
Abc_NamStr
(
p
->
pDesign
->
pMods
,
Cba_BoxNtkId
(
p
,
i
)
);
}
static
inline
int
Cba_CharIsDigit
(
char
c
)
{
return
c
>=
'0'
&&
c
<=
'9'
;
}
static
inline
int
Cba_NtkNamePoNum
(
char
*
pName
)
{
int
Multi
=
1
,
Counter
=
0
;
char
*
pTemp
=
pName
+
strlen
(
pName
)
-
1
;
assert
(
Cba_CharIsDigit
(
*
pTemp
)
);
for
(
;
pName
<
pTemp
&&
Cba_CharIsDigit
(
*
pTemp
);
pTemp
--
,
Multi
*=
10
)
Counter
+=
Multi
*
(
*
pTemp
-
'0'
);
return
Counter
;
}
static
inline
int
Cba_NtkNamePiNum
(
char
*
pName
)
{
char
*
pTemp
;
int
CounterAll
=
0
,
Counter
=
0
;
for
(
pTemp
=
pName
;
*
pTemp
;
pTemp
++
)
{
if
(
Cba_CharIsDigit
(
*
pTemp
)
)
Counter
=
10
*
Counter
+
*
pTemp
-
'0'
;
else
CounterAll
+=
Counter
,
Counter
=
0
;
}
return
CounterAll
;
}
static
inline
int
Cba_NtkNameRanges
(
char
*
pName
,
int
*
pRanges
,
char
*
pSymbs
)
{
char
Symb
,
*
pTemp
;
int
nSigs
=
0
,
Num
=
0
;
assert
(
!
strncmp
(
pName
,
"ABC"
,
3
)
);
for
(
pTemp
=
pName
;
*
pTemp
&&
!
Cba_CharIsDigit
(
*
pTemp
);
pTemp
++
);
assert
(
Cba_CharIsDigit
(
*
pTemp
)
);
Symb
=
*
(
pTemp
-
1
);
for
(
;
*
pTemp
;
pTemp
++
)
{
if
(
Cba_CharIsDigit
(
*
pTemp
)
)
Num
=
10
*
Num
+
*
pTemp
-
'0'
;
else
pSymbs
[
nSigs
]
=
Symb
,
Symb
=
*
pTemp
,
pRanges
[
nSigs
++
]
=
Num
,
Num
=
0
;
}
assert
(
Num
>
0
);
pSymbs
[
nSigs
]
=
Symb
,
pRanges
[
nSigs
++
]
=
Num
;
return
nSigs
;
}
static
inline
int
Cba_NtkReadRangesPrim
(
char
*
pName
,
Vec_Int_t
*
vRanges
,
int
fPo
)
{
char
*
pTemp
;
int
Last
,
Num
=
0
,
Count
=
0
;
assert
(
!
strncmp
(
pName
,
"ABC"
,
3
)
);
for
(
pTemp
=
pName
;
*
pTemp
&&
!
Cba_CharIsDigit
(
*
pTemp
);
pTemp
++
);
assert
(
Cba_CharIsDigit
(
*
pTemp
)
);
Vec_IntClear
(
vRanges
);
for
(
;
*
pTemp
;
pTemp
++
)
{
if
(
Cba_CharIsDigit
(
*
pTemp
)
)
Num
=
10
*
Num
+
*
pTemp
-
'0'
;
else
Vec_IntPush
(
vRanges
,
Num
),
Count
+=
Num
,
Num
=
0
;
}
assert
(
Num
>
0
);
Vec_IntPush
(
vRanges
,
Num
);
Count
+=
Num
;
Last
=
Vec_IntPop
(
vRanges
);
if
(
!
fPo
)
return
Count
;
if
(
!
strncmp
(
pName
,
"ABCADD"
,
6
)
)
Vec_IntFillTwo
(
vRanges
,
2
,
Last
-
1
,
1
);
else
Vec_IntFill
(
vRanges
,
1
,
Last
);
return
Vec_IntSum
(
vRanges
);
}
static
inline
int
Cba_NtkReadRangesUser
(
Cba_Ntk_t
*
p
,
Vec_Int_t
*
vRanges
,
int
fPo
)
{
int
Count
=
0
;
assert
(
fPo
==
0
||
fPo
==
1
);
if
(
Cba_NtkInfoNum
(
p
)
==
0
)
{
if
(
vRanges
)
Vec_IntFill
(
vRanges
,
fPo
?
Cba_NtkPoNum
(
p
)
:
Cba_NtkPiNum
(
p
),
1
);
Count
=
fPo
?
Cba_NtkPoNum
(
p
)
:
Cba_NtkPiNum
(
p
);
}
else
{
int
Value
,
Beg
,
End
,
k
;
if
(
vRanges
)
Vec_IntClear
(
vRanges
);
Vec_IntForEachEntryTriple
(
&
p
->
vInfo
,
Value
,
Beg
,
End
,
k
)
if
(
Abc_Lit2Att2
(
Value
)
==
(
fPo
?
2
:
1
)
)
{
if
(
vRanges
)
Vec_IntPush
(
vRanges
,
Cba_InfoRange
(
Beg
,
End
)
);
Count
+=
Cba_InfoRange
(
Beg
,
End
);
}
}
return
Count
;
}
static
inline
int
Cba_ObjGetRange
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
int
i
,
NameId
=
Cba_ObjName
(
p
,
iObj
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
// if ( Cba_NameType(NameId) == CBA_NAME_INDEX )
// NameId = Cba_ObjName(p, iObj - Abc_Lit2Var2(NameId));
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
||
Cba_NameType
(
NameId
)
==
CBA_NAME_INFO
);
for
(
i
=
iObj
+
1
;
i
<
Cba_NtkObjNum
(
p
);
i
++
)
if
(
!
Cba_ObjIsCi
(
p
,
i
)
||
Cba_ObjNameType
(
p
,
i
)
!=
CBA_NAME_INDEX
)
break
;
return
i
-
iObj
;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -435,6 +341,11 @@ static inline int Cba_ObjGetRange( Cba_Ntk_t * p, int iObj )
...
@@ -435,6 +341,11 @@ static inline int Cba_ObjGetRange( Cba_Ntk_t * p, int iObj )
#define Cba_NtkForEachPoDriver( p, iObj, i ) \
#define Cba_NtkForEachPoDriver( p, iObj, i ) \
for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_ObjFanin(p, Cba_NtkPo(p, i))), 1); i++ )
for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_ObjFanin(p, Cba_NtkPo(p, i))), 1); i++ )
#define Cba_NtkForEachPiMain( p, iObj, i ) \
for ( i = 0; (i < Cba_NtkPiNum(p)) && (((iObj) = Cba_NtkPi(p, i)), 1); i++ ) if ( Cba_ObjBit(p, iObj) ) {} else
#define Cba_NtkForEachPoMain( p, iObj, i ) \
for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_NtkPo(p, i)), 1); i++ ) if ( Cba_ObjBit(p, iObj) ) {} else
#define Cba_NtkForEachObj( p, i ) if ( !Cba_ObjType(p, i) ) {} else \
#define Cba_NtkForEachObj( p, i ) if ( !Cba_ObjType(p, i) ) {} else \
for ( i = 0; (i < Cba_NtkObjNum(p)); i++ )
for ( i = 0; (i < Cba_NtkObjNum(p)); i++ )
#define Cba_NtkForEachObjType( p, Type, i ) \
#define Cba_NtkForEachObjType( p, Type, i ) \
...
@@ -468,6 +379,11 @@ static inline int Cba_ObjGetRange( Cba_Ntk_t * p, int iObj )
...
@@ -468,6 +379,11 @@ static inline int Cba_ObjGetRange( Cba_Ntk_t * p, int iObj )
#define Cba_BoxForEachBiReverse( p, iBox, iTerm, i ) \
#define Cba_BoxForEachBiReverse( p, iBox, iTerm, i ) \
for ( i = Cba_BoxBiNum(p, iBox), iTerm = iBox - i--; Cba_ObjIsBi(p, iTerm); iTerm++, i-- )
for ( i = Cba_BoxBiNum(p, iBox), iTerm = iBox - i--; Cba_ObjIsBi(p, iTerm); iTerm++, i-- )
#define Cba_BoxForEachBiMain( p, iBox, iTerm, i ) \
for ( iTerm = iBox - 1, i = 0; iTerm >= 0 && Cba_ObjIsBi(p, iTerm); iTerm--, i++ ) if ( Cba_ObjBit(p, iTerm) ) {} else
#define Cba_BoxForEachBoMain( p, iBox, iTerm, i ) \
for ( iTerm = iBox + 1, i = 0; iTerm < Cba_NtkObjNum(p) && Cba_ObjIsBo(p, iTerm); iTerm++, i++ ) if ( Cba_ObjBit(p, iTerm) ) {} else
#define Cba_BoxForEachFanin( p, iBox, iFanin, i ) \
#define Cba_BoxForEachFanin( p, iBox, iFanin, i ) \
for ( i = 0; iBox - 1 - i >= 0 && Cba_ObjIsBi(p, iBox - 1 - i) && (((iFanin) = Cba_BoxFanin(p, iBox, i)), 1); i++ )
for ( i = 0; iBox - 1 - i >= 0 && Cba_ObjIsBi(p, iBox - 1 - i) && (((iFanin) = Cba_BoxFanin(p, iBox, i)), 1); i++ )
#define Cba_BoxForEachFaninBox( p, iBox, iFanin, i ) \
#define Cba_BoxForEachFaninBox( p, iBox, iFanin, i ) \
...
@@ -501,7 +417,7 @@ static inline int Cba_ObjAlloc( Cba_Ntk_t * p, Cba_ObjType_t Type, int Fanin )
...
@@ -501,7 +417,7 @@ static inline int Cba_ObjAlloc( Cba_Ntk_t * p, Cba_ObjType_t Type, int Fanin )
Vec_IntPush
(
&
p
->
vInputs
,
iObj
);
Vec_IntPush
(
&
p
->
vInputs
,
iObj
);
else
if
(
Type
==
CBA_OBJ_PO
)
else
if
(
Type
==
CBA_OBJ_PO
)
Vec_IntPush
(
&
p
->
vOutputs
,
iObj
);
Vec_IntPush
(
&
p
->
vOutputs
,
iObj
);
Vec_StrPush
(
&
p
->
vType
,
(
char
)
Type
);
Vec_StrPush
(
&
p
->
vType
,
(
char
)
Abc_Var2Lit
(
Type
,
0
)
);
Vec_IntPush
(
&
p
->
vFanin
,
Fanin
);
Vec_IntPush
(
&
p
->
vFanin
,
Fanin
);
return
iObj
;
return
iObj
;
}
}
...
@@ -561,6 +477,26 @@ static inline void Cba_BoxReplace( Cba_Ntk_t * p, int iBox, int * pArray, int nS
...
@@ -561,6 +477,26 @@ static inline void Cba_BoxReplace( Cba_Ntk_t * p, int iBox, int * pArray, int nS
}
}
static
inline
Vec_Int_t
*
Cba_BoxCollectRanges
(
Cba_Ntk_t
*
p
,
int
iBox
)
{
static
Vec_Int_t
Bits
,
*
vBits
=
&
Bits
;
static
int
pArray
[
10
];
int
i
,
iTerm
;
assert
(
!
Cba_ObjIsBoxUser
(
p
,
iBox
)
);
// initialize array
vBits
->
pArray
=
pArray
;
vBits
->
nSize
=
0
;
vBits
->
nCap
=
10
;
// iterate through inputs
Cba_BoxForEachBiMain
(
p
,
iBox
,
iTerm
,
i
)
Vec_IntPush
(
vBits
,
Cba_BoxBiRange
(
p
,
iTerm
)
);
// iterate through outputs
Cba_BoxForEachBoMain
(
p
,
iBox
,
iTerm
,
i
)
Vec_IntPush
(
vBits
,
Cba_BoxBoRange
(
p
,
iTerm
)
);
assert
(
Vec_IntSize
(
vBits
)
<
10
);
//Vec_IntPrint( vBits );
return
vBits
;
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Prints vector.]
Synopsis [Prints vector.]
...
@@ -782,6 +718,7 @@ static inline void Cba_NtkPrint( Cba_Ntk_t * p )
...
@@ -782,6 +718,7 @@ static inline void Cba_NtkPrint( Cba_Ntk_t * p )
***********************************************************************/
***********************************************************************/
static
inline
Cba_Man_t
*
Cba_ManAlloc
(
char
*
pFileName
,
int
nNtks
)
static
inline
Cba_Man_t
*
Cba_ManAlloc
(
char
*
pFileName
,
int
nNtks
)
{
{
extern
void
Cba_ManSetupTypes
(
char
**
pNames
,
char
**
pSymbs
);
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_Man_t
*
pNew
=
ABC_CALLOC
(
Cba_Man_t
,
1
);
Cba_Man_t
*
pNew
=
ABC_CALLOC
(
Cba_Man_t
,
1
);
pNew
->
pName
=
Extra_FileDesignName
(
pFileName
);
pNew
->
pName
=
Extra_FileDesignName
(
pFileName
);
...
@@ -793,6 +730,7 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName, int nNtks )
...
@@ -793,6 +730,7 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName, int nNtks )
pNew
->
pNtks
=
ABC_CALLOC
(
Cba_Ntk_t
,
pNew
->
nNtks
);
pNew
->
pNtks
=
ABC_CALLOC
(
Cba_Ntk_t
,
pNew
->
nNtks
);
Cba_ManForEachNtk
(
pNew
,
pNtk
,
i
)
Cba_ManForEachNtk
(
pNew
,
pNtk
,
i
)
pNtk
->
pDesign
=
pNew
;
pNtk
->
pDesign
=
pNew
;
Cba_ManSetupTypes
(
pNew
->
pPrimNames
,
pNew
->
pPrimSymbs
);
return
pNew
;
return
pNew
;
}
}
static
inline
Cba_Man_t
*
Cba_ManStart
(
Cba_Man_t
*
p
,
int
nNtks
)
static
inline
Cba_Man_t
*
Cba_ManStart
(
Cba_Man_t
*
p
,
int
nNtks
)
...
@@ -956,6 +894,7 @@ static inline Cba_ObjType_t Ptr_SopToType( char * pSop )
...
@@ -956,6 +894,7 @@ static inline Cba_ObjType_t Ptr_SopToType( char * pSop )
if
(
!
strcmp
(
pSop
,
"11 1
\n
00 1
\n
"
)
)
return
CBA_BOX_XNOR
;
if
(
!
strcmp
(
pSop
,
"11 1
\n
00 1
\n
"
)
)
return
CBA_BOX_XNOR
;
if
(
!
strcmp
(
pSop
,
"00 1
\n
11 1
\n
"
)
)
return
CBA_BOX_XNOR
;
if
(
!
strcmp
(
pSop
,
"00 1
\n
11 1
\n
"
)
)
return
CBA_BOX_XNOR
;
if
(
!
strcmp
(
pSop
,
"10 1
\n
"
)
)
return
CBA_BOX_SHARP
;
if
(
!
strcmp
(
pSop
,
"10 1
\n
"
)
)
return
CBA_BOX_SHARP
;
if
(
!
strcmp
(
pSop
,
"01 1
\n
"
)
)
return
CBA_BOX_SHARPL
;
assert
(
0
);
assert
(
0
);
return
CBA_OBJ_NONE
;
return
CBA_OBJ_NONE
;
}
}
...
@@ -975,6 +914,7 @@ static inline char * Ptr_SopToTypeName( char * pSop )
...
@@ -975,6 +914,7 @@ static inline char * Ptr_SopToTypeName( char * pSop )
if
(
!
strcmp
(
pSop
,
"11 1
\n
00 1
\n
"
)
)
return
"CBA_BOX_XNOR"
;
if
(
!
strcmp
(
pSop
,
"11 1
\n
00 1
\n
"
)
)
return
"CBA_BOX_XNOR"
;
if
(
!
strcmp
(
pSop
,
"00 1
\n
11 1
\n
"
)
)
return
"CBA_BOX_XNOR"
;
if
(
!
strcmp
(
pSop
,
"00 1
\n
11 1
\n
"
)
)
return
"CBA_BOX_XNOR"
;
if
(
!
strcmp
(
pSop
,
"10 1
\n
"
)
)
return
"CBA_BOX_SHARP"
;
if
(
!
strcmp
(
pSop
,
"10 1
\n
"
)
)
return
"CBA_BOX_SHARP"
;
if
(
!
strcmp
(
pSop
,
"01 1
\n
"
)
)
return
"CBA_BOX_SHARPL"
;
assert
(
0
);
assert
(
0
);
return
NULL
;
return
NULL
;
}
}
...
@@ -982,6 +922,8 @@ static inline char * Ptr_TypeToName( Cba_ObjType_t Type )
...
@@ -982,6 +922,8 @@ static inline char * Ptr_TypeToName( Cba_ObjType_t Type )
{
{
if
(
Type
==
CBA_BOX_CF
)
return
"const0"
;
if
(
Type
==
CBA_BOX_CF
)
return
"const0"
;
if
(
Type
==
CBA_BOX_CT
)
return
"const1"
;
if
(
Type
==
CBA_BOX_CT
)
return
"const1"
;
if
(
Type
==
CBA_BOX_CX
)
return
"constX"
;
if
(
Type
==
CBA_BOX_CZ
)
return
"constZ"
;
if
(
Type
==
CBA_BOX_BUF
)
return
"buf"
;
if
(
Type
==
CBA_BOX_BUF
)
return
"buf"
;
if
(
Type
==
CBA_BOX_INV
)
return
"not"
;
if
(
Type
==
CBA_BOX_INV
)
return
"not"
;
if
(
Type
==
CBA_BOX_AND
)
return
"and"
;
if
(
Type
==
CBA_BOX_AND
)
return
"and"
;
...
@@ -993,6 +935,7 @@ static inline char * Ptr_TypeToName( Cba_ObjType_t Type )
...
@@ -993,6 +935,7 @@ static inline char * Ptr_TypeToName( Cba_ObjType_t Type )
if
(
Type
==
CBA_BOX_MUX
)
return
"mux"
;
if
(
Type
==
CBA_BOX_MUX
)
return
"mux"
;
if
(
Type
==
CBA_BOX_MAJ
)
return
"maj"
;
if
(
Type
==
CBA_BOX_MAJ
)
return
"maj"
;
if
(
Type
==
CBA_BOX_SHARP
)
return
"sharp"
;
if
(
Type
==
CBA_BOX_SHARP
)
return
"sharp"
;
if
(
Type
==
CBA_BOX_SHARPL
)
return
"sharpl"
;
assert
(
0
);
assert
(
0
);
return
"???"
;
return
"???"
;
}
}
...
@@ -1000,6 +943,8 @@ static inline char * Ptr_TypeToSop( Cba_ObjType_t Type )
...
@@ -1000,6 +943,8 @@ static inline char * Ptr_TypeToSop( Cba_ObjType_t Type )
{
{
if
(
Type
==
CBA_BOX_CF
)
return
" 0
\n
"
;
if
(
Type
==
CBA_BOX_CF
)
return
" 0
\n
"
;
if
(
Type
==
CBA_BOX_CT
)
return
" 1
\n
"
;
if
(
Type
==
CBA_BOX_CT
)
return
" 1
\n
"
;
if
(
Type
==
CBA_BOX_CX
)
return
" 0
\n
"
;
if
(
Type
==
CBA_BOX_CZ
)
return
" 0
\n
"
;
if
(
Type
==
CBA_BOX_BUF
)
return
"1 1
\n
"
;
if
(
Type
==
CBA_BOX_BUF
)
return
"1 1
\n
"
;
if
(
Type
==
CBA_BOX_INV
)
return
"0 1
\n
"
;
if
(
Type
==
CBA_BOX_INV
)
return
"0 1
\n
"
;
if
(
Type
==
CBA_BOX_AND
)
return
"11 1
\n
"
;
if
(
Type
==
CBA_BOX_AND
)
return
"11 1
\n
"
;
...
@@ -1009,6 +954,7 @@ static inline char * Ptr_TypeToSop( Cba_ObjType_t Type )
...
@@ -1009,6 +954,7 @@ static inline char * Ptr_TypeToSop( Cba_ObjType_t Type )
if
(
Type
==
CBA_BOX_XOR
)
return
"01 1
\n
10 1
\n
"
;
if
(
Type
==
CBA_BOX_XOR
)
return
"01 1
\n
10 1
\n
"
;
if
(
Type
==
CBA_BOX_XNOR
)
return
"00 1
\n
11 1
\n
"
;
if
(
Type
==
CBA_BOX_XNOR
)
return
"00 1
\n
11 1
\n
"
;
if
(
Type
==
CBA_BOX_SHARP
)
return
"10 1
\n
"
;
if
(
Type
==
CBA_BOX_SHARP
)
return
"10 1
\n
"
;
if
(
Type
==
CBA_BOX_SHARPL
)
return
"01 1
\n
"
;
if
(
Type
==
CBA_BOX_MUX
)
return
"11- 1
\n
0-1 1
\n
"
;
if
(
Type
==
CBA_BOX_MUX
)
return
"11- 1
\n
0-1 1
\n
"
;
if
(
Type
==
CBA_BOX_MAJ
)
return
"11- 1
\n
1-1 1
\n
-11 1
\n
"
;
if
(
Type
==
CBA_BOX_MAJ
)
return
"11- 1
\n
1-1 1
\n
-11 1
\n
"
;
assert
(
0
);
assert
(
0
);
...
@@ -1028,9 +974,12 @@ extern void * Cba_ManInsertAbc( Cba_Man_t * p, void * pAbc );
...
@@ -1028,9 +974,12 @@ extern void * Cba_ManInsertAbc( Cba_Man_t * p, void * pAbc );
extern
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
);
extern
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
);
extern
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
);
extern
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
);
/*=== cbaNtk.c ===============================================================*/
/*=== cbaNtk.c ===============================================================*/
extern
char
*
Cba_NtkGenerateName
(
Cba_Ntk_t
*
p
,
Cba_ObjType_t
Type
,
Vec_Int_t
*
vBits
);
extern
Cba_ObjType_t
Cba_NameToType
(
char
*
pName
);
extern
Vec_Int_t
*
Cba_NameToRanges
(
char
*
pName
);
extern
void
Cba_NtkUpdateFanout
(
Cba_Ntk_t
*
p
,
int
iOld
,
int
iNew
);
extern
void
Cba_NtkUpdateFanout
(
Cba_Ntk_t
*
p
,
int
iOld
,
int
iNew
);
extern
void
Cba_ManDeriveFanout
(
Cba_Man_t
*
p
);
extern
void
Cba_ManDeriveFanout
(
Cba_Man_t
*
p
);
extern
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
);
//extern void
Cba_ManAssignInternNames( Cba_Man_t * p );
extern
void
Cba_ManAssignInternWordNames
(
Cba_Man_t
*
p
);
extern
void
Cba_ManAssignInternWordNames
(
Cba_Man_t
*
p
);
extern
Cba_Man_t
*
Cba_ManCollapse
(
Cba_Man_t
*
p
);
extern
Cba_Man_t
*
Cba_ManCollapse
(
Cba_Man_t
*
p
);
/*=== cbaPtr.c ===============================================================*/
/*=== cbaPtr.c ===============================================================*/
...
@@ -1055,7 +1004,7 @@ extern void Prs_ManWriteBlif( char * pFileName, Vec_Ptr_t * p );
...
@@ -1055,7 +1004,7 @@ extern void Prs_ManWriteBlif( char * pFileName, Vec_Ptr_t * p );
extern
void
Cba_ManWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
);
extern
void
Cba_ManWriteBlif
(
char
*
pFileName
,
Cba_Man_t
*
p
);
/*=== cbaWriteVer.c ==========================================================*/
/*=== cbaWriteVer.c ==========================================================*/
extern
void
Prs_ManWriteVerilog
(
char
*
pFileName
,
Vec_Ptr_t
*
p
);
extern
void
Prs_ManWriteVerilog
(
char
*
pFileName
,
Vec_Ptr_t
*
p
);
extern
void
Cba_ManWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
);
extern
void
Cba_ManWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
,
int
fUseAssign
);
ABC_NAMESPACE_HEADER_END
ABC_NAMESPACE_HEADER_END
...
...
src/base/cba/cbaBlast.c
View file @
2d90b916
...
@@ -300,7 +300,7 @@ void Cba_ManMarkNodesGia( Cba_Man_t * p, Gia_Man_t * pGia )
...
@@ -300,7 +300,7 @@ 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
(
Vec_IntSize
(
&
p
->
vBuf2RootNtk
)
);
//
assert( Vec_IntSize(&p->vBuf2RootNtk) );
assert
(
!
Vec_IntSize
(
&
pNew
->
vBuf2RootNtk
)
);
assert
(
!
Vec_IntSize
(
&
pNew
->
vBuf2RootNtk
)
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootNtk
,
&
p
->
vBuf2RootNtk
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootNtk
,
&
p
->
vBuf2RootNtk
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootObj
,
&
p
->
vBuf2RootObj
);
Vec_IntAppend
(
&
pNew
->
vBuf2RootObj
,
&
p
->
vBuf2RootObj
);
...
...
src/base/cba/cbaCba.c
View file @
2d90b916
...
@@ -102,6 +102,7 @@ void Cba_ManReadCbaVecInt( Vec_Str_t * vOut, int * pPos, Vec_Int_t * p, int nSiz
...
@@ -102,6 +102,7 @@ void Cba_ManReadCbaVecInt( Vec_Str_t * vOut, int * pPos, Vec_Int_t * p, int nSiz
void
Cba_ManReadCbaNtk
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
Cba_Ntk_t
*
pNtk
)
void
Cba_ManReadCbaNtk
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
Cba_Ntk_t
*
pNtk
)
{
{
int
i
,
Type
;
int
i
,
Type
;
//char * pName; int iObj, NameId;
Cba_ManReadCbaVecStr
(
vOut
,
pPos
,
&
pNtk
->
vType
,
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecStr
(
vOut
,
pPos
,
&
pNtk
->
vType
,
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vFanin
,
4
*
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vFanin
,
4
*
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vInfo
,
12
*
Cba_NtkInfoNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vInfo
,
12
*
Cba_NtkInfoNumAlloc
(
pNtk
)
);
...
@@ -116,20 +117,41 @@ void Cba_ManReadCbaNtk( Vec_Str_t * vOut, int * pPos, Cba_Ntk_t * pNtk )
...
@@ -116,20 +117,41 @@ void Cba_ManReadCbaNtk( Vec_Str_t * vOut, int * pPos, Cba_Ntk_t * pNtk )
assert
(
Cba_NtkPoNum
(
pNtk
)
==
Cba_NtkPoNumAlloc
(
pNtk
)
);
assert
(
Cba_NtkPoNum
(
pNtk
)
==
Cba_NtkPoNumAlloc
(
pNtk
)
);
assert
(
Cba_NtkObjNum
(
pNtk
)
==
Cba_NtkObjNumAlloc
(
pNtk
)
);
assert
(
Cba_NtkObjNum
(
pNtk
)
==
Cba_NtkObjNumAlloc
(
pNtk
)
);
assert
(
Cba_NtkInfoNum
(
pNtk
)
==
Cba_NtkInfoNumAlloc
(
pNtk
)
);
assert
(
Cba_NtkInfoNum
(
pNtk
)
==
Cba_NtkInfoNumAlloc
(
pNtk
)
);
/*
// read input/output/box names
Cba_NtkForEachPiMain( pNtk, iObj, i )
{
pName = Vec_StrEntryP( vOut, Pos );
NameId = Abc_NamStrFindOrAdd( p->pStrs, pName, NULL );
Pos += strlen(pName) + 1;
}
Cba_NtkForEachPoMain( pNtk, iObj, i )
{
pName = Vec_StrEntryP( vOut, Pos );
NameId = Abc_NamStrFindOrAdd( p->pStrs, pName, NULL );
Pos += strlen(pName) + 1;
}
Cba_NtkForEachBox( pNtk, iObj )
{
pName = Vec_StrEntryP( vOut, Pos );
NameId = Abc_NamStrFindOrAdd( p->pStrs, pName, NULL );
Pos += strlen(pName) + 1;
}
*/
}
}
Cba_Man_t
*
Cba_ManReadCbaInt
(
Vec_Str_t
*
vOut
)
Cba_Man_t
*
Cba_ManReadCbaInt
(
Vec_Str_t
*
vOut
)
{
{
Cba_Man_t
*
p
;
Cba_Man_t
*
p
;
Cba_Ntk_t
*
pNtk
;
Cba_Ntk_t
*
pNtk
;
char
Buffer
[
1000
]
=
"#"
;
char
Buffer
[
1000
]
=
"#"
;
int
i
,
NameId
,
Pos
=
0
,
nNtks
,
nPrims
,
Num1
,
Num2
,
Num3
,
Num4
;
int
i
,
NameId
,
Pos
=
0
,
nNtks
,
Num1
,
Num2
,
Num3
,
Num4
;
while
(
Buffer
[
0
]
==
'#'
)
while
(
Buffer
[
0
]
==
'#'
)
if
(
!
CbaManReadCbaLine
(
vOut
,
&
Pos
,
Buffer
,
Buffer
+
1000
)
)
if
(
!
CbaManReadCbaLine
(
vOut
,
&
Pos
,
Buffer
,
Buffer
+
1000
)
)
return
NULL
;
return
NULL
;
if
(
!
CbaManReadCbaNameAndNums
(
Buffer
,
&
nNtks
,
&
nPrims
,
&
Num3
,
&
Num4
)
)
if
(
!
CbaManReadCbaNameAndNums
(
Buffer
,
&
nNtks
,
&
Num2
,
&
Num3
,
&
Num4
)
)
return
NULL
;
return
NULL
;
// start manager
// start manager
assert
(
nNtks
>
0
&&
nPrims
>
0
);
assert
(
nNtks
>
0
);
p
=
Cba_ManAlloc
(
Buffer
,
nNtks
);
p
=
Cba_ManAlloc
(
Buffer
,
nNtks
);
// start networks
// start networks
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
...
@@ -152,16 +174,8 @@ Cba_Man_t * Cba_ManReadCbaInt( Vec_Str_t * vOut )
...
@@ -152,16 +174,8 @@ Cba_Man_t * Cba_ManReadCbaInt( Vec_Str_t * vOut )
// read networks
// read networks
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManReadCbaNtk
(
vOut
,
&
Pos
,
pNtk
);
Cba_ManReadCbaNtk
(
vOut
,
&
Pos
,
pNtk
);
// read primitives
for
(
i
=
0
;
i
<
nPrims
;
i
++
)
{
char
*
pName
=
Vec_StrEntryP
(
vOut
,
Pos
);
Abc_NamStrFindOrAdd
(
p
->
pMods
,
pName
,
NULL
);
Pos
+=
strlen
(
pName
)
+
1
;
}
assert
(
Pos
==
Vec_StrSize
(
vOut
)
);
assert
(
Cba_ManNtkNum
(
p
)
==
nNtks
);
assert
(
Cba_ManNtkNum
(
p
)
==
nNtks
);
assert
(
Cba_ManPrimNum
(
p
)
==
nPrims
);
assert
(
Pos
==
Vec_StrSize
(
vOut
)
);
return
p
;
return
p
;
}
}
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
)
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
)
...
@@ -187,7 +201,7 @@ Cba_Man_t * Cba_ManReadCba( char * pFileName )
...
@@ -187,7 +201,7 @@ Cba_Man_t * Cba_ManReadCba( char * pFileName )
nFileSize
=
fread
(
Vec_StrArray
(
vOut
),
1
,
Vec_StrSize
(
vOut
),
pFile
);
nFileSize
=
fread
(
Vec_StrArray
(
vOut
),
1
,
Vec_StrSize
(
vOut
),
pFile
);
assert
(
nFileSize
==
Vec_StrSize
(
vOut
)
);
assert
(
nFileSize
==
Vec_StrSize
(
vOut
)
);
fclose
(
pFile
);
fclose
(
pFile
);
// read the
library
// read the
networks
p
=
Cba_ManReadCbaInt
(
vOut
);
p
=
Cba_ManReadCbaInt
(
vOut
);
if
(
p
!=
NULL
)
if
(
p
!=
NULL
)
{
{
...
@@ -211,18 +225,40 @@ Cba_Man_t * Cba_ManReadCba( char * pFileName )
...
@@ -211,18 +225,40 @@ Cba_Man_t * Cba_ManReadCba( char * pFileName )
***********************************************************************/
***********************************************************************/
void
Cba_ManWriteCbaNtk
(
Vec_Str_t
*
vOut
,
Cba_Ntk_t
*
pNtk
)
void
Cba_ManWriteCbaNtk
(
Vec_Str_t
*
vOut
,
Cba_Ntk_t
*
pNtk
)
{
{
//char * pName; int iObj, NameId;
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_StrArray
(
&
pNtk
->
vType
),
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_StrArray
(
&
pNtk
->
vType
),
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vFanin
),
4
*
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vFanin
),
4
*
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vInfo
),
12
*
Cba_NtkInfoNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vInfo
),
12
*
Cba_NtkInfoNum
(
pNtk
)
);
/*
// write input/output/box names
Cba_NtkForEachPiMain( pNtk, iObj, i )
{
pName = Cba_ObjNameStr( pNtk, iObj );
Vec_StrPrintStr( vOut, pName );
Vec_StrPush( vOut, '\0' );
}
Cba_NtkForEachPoMain( pNtk, iObj, i )
{
pName = Cba_ObjNameStr( pNtk, iObj );
Vec_StrPrintStr( vOut, pName );
Vec_StrPush( vOut, '\0' );
}
Cba_NtkForEachBox( pNtk, iObj )
{
pName = Cba_ObjNameStr( pNtk, iObj );
Vec_StrPrintStr( vOut, pName );
Vec_StrPush( vOut, '\0' );
}
*/
}
}
void
Cba_ManWriteCbaInt
(
Vec_Str_t
*
vOut
,
Cba_Man_t
*
p
)
void
Cba_ManWriteCbaInt
(
Vec_Str_t
*
vOut
,
Cba_Man_t
*
p
)
{
{
char
Buffer
[
1000
];
char
Buffer
[
1000
];
Cba_Ntk_t
*
pNtk
;
int
i
,
nPrims
=
Cba_ManPrimNum
(
p
)
;
Cba_Ntk_t
*
pNtk
;
int
i
;
sprintf
(
Buffer
,
"# Design
\"
%s
\"
written by ABC on %s
\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
sprintf
(
Buffer
,
"# Design
\"
%s
\"
written by ABC on %s
\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
// write short info
// write short info
sprintf
(
Buffer
,
"%s %d
%d
\n
"
,
Cba_ManName
(
p
),
Cba_ManNtkNum
(
p
),
Cba_ManPrim
Num
(
p
)
);
sprintf
(
Buffer
,
"%s %d
\n
"
,
Cba_ManName
(
p
),
Cba_ManNtk
Num
(
p
)
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
{
{
...
@@ -232,12 +268,6 @@ void Cba_ManWriteCbaInt( Vec_Str_t * vOut, Cba_Man_t * p )
...
@@ -232,12 +268,6 @@ void Cba_ManWriteCbaInt( Vec_Str_t * vOut, Cba_Man_t * p )
}
}
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManWriteCbaNtk
(
vOut
,
pNtk
);
Cba_ManWriteCbaNtk
(
vOut
,
pNtk
);
for
(
i
=
0
;
i
<
nPrims
;
i
++
)
{
char
*
pName
=
Abc_NamStr
(
p
->
pMods
,
Cba_ManNtkNum
(
p
)
+
i
);
Vec_StrPrintStr
(
vOut
,
pName
);
Vec_StrPush
(
vOut
,
'\0'
);
}
}
}
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
)
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
)
{
{
...
...
src/base/cba/cbaCom.c
View file @
2d90b916
...
@@ -198,6 +198,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -198,6 +198,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
vDes
=
Prs_ManReadBlif
(
pFileName
);
vDes
=
Prs_ManReadBlif
(
pFileName
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
if
(
vDes
)
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
...
@@ -205,6 +206,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -205,6 +206,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
vDes
=
Prs_ManReadVerilog
(
pFileName
);
vDes
=
Prs_ManReadVerilog
(
pFileName
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
if
(
vDes
)
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"smt"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"smt"
)
)
...
@@ -212,6 +214,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -212,6 +214,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
vDes
=
NULL
;
//Prs_ManReadSmt( pFileName );
vDes
=
NULL
;
//Prs_ManReadSmt( pFileName );
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
if
(
vDes
)
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
...
@@ -249,12 +252,16 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -249,12 +252,16 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
{
{
Cba_Man_t
*
p
=
Cba_AbcGetMan
(
pAbc
);
Cba_Man_t
*
p
=
Cba_AbcGetMan
(
pAbc
);
char
*
pFileName
=
NULL
;
char
*
pFileName
=
NULL
;
int
fUseAssign
=
1
;
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
,
"
a
vh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
case
'a'
:
fUseAssign
^=
1
;
break
;
case
'v'
:
case
'v'
:
fVerbose
^=
1
;
fVerbose
^=
1
;
break
;
break
;
...
@@ -282,7 +289,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -282,7 +289,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"blif"
)
)
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"blif"
)
)
Cba_ManWriteBlif
(
pFileName
,
p
);
Cba_ManWriteBlif
(
pFileName
,
p
);
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"v"
)
)
Cba_ManWriteVerilog
(
pFileName
,
p
);
Cba_ManWriteVerilog
(
pFileName
,
p
,
fUseAssign
);
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
Cba_ManWriteCba
(
pFileName
,
p
);
Cba_ManWriteCba
(
pFileName
,
p
);
else
else
...
@@ -292,8 +299,9 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -292,8 +299,9 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
}
}
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: @write [-vh]
\n
"
);
Abc_Print
(
-
2
,
"usage: @write [-
a
vh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
writes the design into a file in BLIF or Verilog
\n
"
);
Abc_Print
(
-
2
,
"
\t
writes the design into a file in BLIF or Verilog
\n
"
);
Abc_Print
(
-
2
,
"
\t
-a : toggle using assign-statement for primitives [default = %s]
\n
"
,
fUseAssign
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
Abc_Print
(
-
2
,
"
\t
-h : print the command usage
\n
"
);
return
1
;
return
1
;
...
...
src/base/cba/cbaNtk.c
View file @
2d90b916
...
@@ -26,6 +26,177 @@ ABC_NAMESPACE_IMPL_START
...
@@ -26,6 +26,177 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
typedef
struct
Cba_Pair_t_
Cba_Pair_t
;
struct
Cba_Pair_t_
{
Cba_ObjType_t
Type
;
char
*
pName
;
char
*
pSymb
;
};
static
const
char
*
s_Pref
=
"ABC_"
;
static
Cba_Pair_t
s_Types
[
CBA_BOX_UNKNOWN
]
=
{
{
CBA_OBJ_NONE
,
"NONE"
,
NULL
},
{
CBA_OBJ_PI
,
"PI"
,
NULL
},
{
CBA_OBJ_PO
,
"PO"
,
NULL
},
{
CBA_OBJ_BI
,
"BI"
,
NULL
},
{
CBA_OBJ_BO
,
"BO"
,
NULL
},
{
CBA_OBJ_BOX
,
"BOX"
,
NULL
},
{
CBA_BOX_CF
,
"CF"
,
"o"
},
{
CBA_BOX_CT
,
"CT"
,
"o"
},
{
CBA_BOX_CX
,
"CX"
,
"o"
},
{
CBA_BOX_CZ
,
"CZ"
,
"o"
},
{
CBA_BOX_BUF
,
"BUF"
,
"ao"
},
{
CBA_BOX_INV
,
"INV"
,
"ao"
},
{
CBA_BOX_AND
,
"AND"
,
"abo"
},
{
CBA_BOX_NAND
,
"NAND"
,
"abo"
},
{
CBA_BOX_OR
,
"OR"
,
"abo"
},
{
CBA_BOX_NOR
,
"NOR"
,
"abo"
},
{
CBA_BOX_XOR
,
"XOR"
,
"abo"
},
{
CBA_BOX_XNOR
,
"XNOR"
,
"abo"
},
{
CBA_BOX_SHARP
,
"SHARP"
,
"abo"
},
{
CBA_BOX_SHARPL
,
"SHARPL"
,
"abo"
},
{
CBA_BOX_MUX
,
"MUX"
,
"cabo"
},
{
CBA_BOX_MAJ
,
"MAJ"
,
"abco"
},
{
CBA_BOX_RAND
,
"RAND"
,
"ao"
},
{
CBA_BOX_RNAND
,
"RNAND"
,
"ao"
},
{
CBA_BOX_ROR
,
"ROR"
,
"ao"
},
{
CBA_BOX_RNOR
,
"RNOR"
,
"ao"
},
{
CBA_BOX_RXOR
,
"RXOR"
,
"ao"
},
{
CBA_BOX_RXNOR
,
"RXNOR"
,
"ao"
},
{
CBA_BOX_LAND
,
"LAND"
,
"abo"
},
{
CBA_BOX_LNAND
,
"LNAND"
,
"abo"
},
{
CBA_BOX_LOR
,
"LOR"
,
"abo"
},
{
CBA_BOX_LNOR
,
"LNOR"
,
"abo"
},
{
CBA_BOX_LXOR
,
"LXOR"
,
"abo"
},
{
CBA_BOX_LXNOR
,
"LXNOR"
,
"abo"
},
{
CBA_BOX_NMUX
,
"NMUX"
,
"abo"
},
{
CBA_BOX_SEL
,
"SEL"
,
"abo"
},
{
CBA_BOX_PSEL
,
"PSEL"
,
"iabo"
},
{
CBA_BOX_ENC
,
"ENC"
,
"ao"
},
{
CBA_BOX_PENC
,
"PENC"
,
"ao"
},
{
CBA_BOX_DEC
,
"DEC"
,
"ao"
},
{
CBA_BOX_EDEC
,
"EDEC"
,
"abo"
},
{
CBA_BOX_ADD
,
"ADD"
,
"iabso"
},
{
CBA_BOX_SUB
,
"SUB"
,
"abo"
},
{
CBA_BOX_MUL
,
"MUL"
,
"abo"
},
{
CBA_BOX_DIV
,
"DIV"
,
"abo"
},
{
CBA_BOX_MOD
,
"MOD"
,
"abo"
},
{
CBA_BOX_REM
,
"REM"
,
"abo"
},
{
CBA_BOX_POW
,
"POW"
,
"abo"
},
{
CBA_BOX_MIN
,
"MIN"
,
"ao"
},
{
CBA_BOX_ABS
,
"ABS"
,
"ao"
},
{
CBA_BOX_LTHAN
,
"LTHAN"
,
"iabo"
},
{
CBA_BOX_LETHAN
,
"LETHAN"
,
"abo"
},
{
CBA_BOX_METHAN
,
"METHAN"
,
"abo"
},
{
CBA_BOX_MTHAN
,
"MTHAN"
,
"abo"
},
{
CBA_BOX_EQU
,
"EQU"
,
"abo"
},
{
CBA_BOX_NEQU
,
"NEQU"
,
"abo"
},
{
CBA_BOX_SHIL
,
"SHIL"
,
"abo"
},
{
CBA_BOX_SHIR
,
"SHIR"
,
"abo"
},
{
CBA_BOX_ROTL
,
"ROTL"
,
"abo"
},
{
CBA_BOX_ROTR
,
"ROTR"
,
"abo"
},
{
CBA_BOX_GATE
,
"GATE"
,
"io"
},
{
CBA_BOX_LUT
,
"LUT"
,
"io"
},
{
CBA_BOX_ASSIGN
,
"ASSIGN"
,
"abo"
},
{
CBA_BOX_TRI
,
"TRI"
,
"abo"
},
{
CBA_BOX_RAM
,
"RAM"
,
"eadro"
},
{
CBA_BOX_RAMR
,
"RAMR"
,
"eamo"
},
{
CBA_BOX_RAMW
,
"RAMW"
,
"eado"
},
{
CBA_BOX_RAMWC
,
"RAMWC"
,
"ceado"
},
{
CBA_BOX_RAMBOX
,
"RAMBOX"
,
"io"
},
{
CBA_BOX_LATCH
,
"LATCH"
,
"dvsgq"
},
{
CBA_BOX_LATCHRS
,
"LATCHRS"
,
"dsrgq"
},
{
CBA_BOX_DFF
,
"DFF"
,
"dvscq"
},
{
CBA_BOX_DFFRS
,
"DFFRS"
,
"dsrcq"
}
};
static
inline
int
Cba_GetTypeId
(
Cba_ObjType_t
Type
)
{
int
i
;
for
(
i
=
1
;
i
<
CBA_BOX_UNKNOWN
;
i
++
)
if
(
s_Types
[
i
].
Type
==
Type
)
return
i
;
return
-
1
;
}
void
Cba_ManSetupTypes
(
char
**
pNames
,
char
**
pSymbs
)
{
int
Type
,
Id
;
for
(
Type
=
1
;
Type
<
CBA_BOX_UNKNOWN
;
Type
++
)
{
Id
=
Cba_GetTypeId
(
Type
);
pNames
[
Type
]
=
s_Types
[
Id
].
pName
;
pSymbs
[
Type
]
=
s_Types
[
Id
].
pSymb
;
}
}
char
*
Cba_NtkGenerateName
(
Cba_Ntk_t
*
p
,
Cba_ObjType_t
Type
,
Vec_Int_t
*
vBits
)
{
static
char
Buffer
[
100
];
char
*
pTemp
;
int
i
,
Bits
;
char
*
pName
=
Cba_ManPrimName
(
p
->
pDesign
,
Type
);
char
*
pSymb
=
Cba_ManPrimSymb
(
p
->
pDesign
,
Type
);
assert
(
Vec_IntSize
(
vBits
)
==
(
int
)
strlen
(
pSymb
)
);
sprintf
(
Buffer
,
"%s%s_"
,
s_Pref
,
pName
);
pTemp
=
Buffer
+
strlen
(
Buffer
);
Vec_IntForEachEntry
(
vBits
,
Bits
,
i
)
{
sprintf
(
pTemp
,
"%c%d"
,
pSymb
[
i
],
Bits
);
pTemp
+=
strlen
(
pTemp
);
}
//Vec_IntPrint( vBits );
//printf( "%s\n", Buffer );
return
Buffer
;
}
Cba_ObjType_t
Cba_NameToType
(
char
*
pName
)
{
int
i
;
if
(
strncmp
(
pName
,
s_Pref
,
strlen
(
s_Pref
))
)
return
0
;
pName
+=
strlen
(
s_Pref
);
for
(
i
=
1
;
i
<
CBA_BOX_UNKNOWN
;
i
++
)
if
(
!
strncmp
(
pName
,
s_Types
[
i
].
pName
,
strlen
(
s_Types
[
i
].
pName
))
)
return
s_Types
[
i
].
Type
;
return
0
;
}
Vec_Int_t
*
Cba_NameToRanges
(
char
*
pName
)
{
static
Vec_Int_t
Bits
,
*
vBits
=
&
Bits
;
static
int
pArray
[
10
];
char
*
pTemp
;
int
Num
=
0
,
Count
=
0
;
// initialize array
vBits
->
pArray
=
pArray
;
vBits
->
nSize
=
0
;
vBits
->
nCap
=
10
;
// check the name
assert
(
!
strncmp
(
pName
,
s_Pref
,
strlen
(
s_Pref
))
);
for
(
pTemp
=
pName
;
*
pTemp
&&
!
Cba_CharIsDigit
(
*
pTemp
);
pTemp
++
);
assert
(
Cba_CharIsDigit
(
*
pTemp
)
);
for
(
;
*
pTemp
;
pTemp
++
)
{
if
(
Cba_CharIsDigit
(
*
pTemp
)
)
Num
=
10
*
Num
+
*
pTemp
-
'0'
;
else
Vec_IntPush
(
vBits
,
Num
),
Count
+=
Num
,
Num
=
0
;
}
assert
(
Num
>
0
);
Vec_IntPush
(
vBits
,
Num
);
Count
+=
Num
;
assert
(
Vec_IntSize
(
vBits
)
<=
10
);
return
vBits
;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -116,80 +287,60 @@ int Cba_ManAssignInternTwo( Cba_Ntk_t * p, int iNum, int nDigits, int fPis, Vec_
...
@@ -116,80 +287,60 @@ int Cba_ManAssignInternTwo( Cba_Ntk_t * p, int iNum, int nDigits, int fPis, Vec_
Vec_IntWriteEntry
(
vMap
,
NameId
,
iNum
);
Vec_IntWriteEntry
(
vMap
,
NameId
,
iNum
);
return
NameId
;
return
NameId
;
}
}
void
Cba_ManPrepareBitNames
(
Cba_Ntk_t
*
p
,
Vec_Int_t
*
vMap
,
int
*
pnNames
,
int
nDigits
,
int
fPis
,
Vec_Int_t
*
vRanges
,
Vec_Int_t
*
vNames
)
{
int
i
,
k
,
Range
;
Vec_IntClear
(
vNames
);
Vec_IntForEachEntry
(
vRanges
,
Range
,
i
)
{
assert
(
Range
>
0
);
if
(
Range
==
1
)
Vec_IntPush
(
vNames
,
Abc_Var2Lit2
(
Cba_ManAssignInternTwo
(
p
,
(
*
pnNames
)
++
,
nDigits
,
fPis
,
vMap
),
CBA_NAME_BIN
)
);
else
{
Vec_IntPush
(
vNames
,
Abc_Var2Lit2
(
Cba_ManAssignInternTwo
(
p
,
(
*
pnNames
)
++
,
nDigits
,
fPis
,
vMap
),
CBA_NAME_WORD
)
);
for
(
k
=
1
;
k
<
Range
;
k
++
)
Vec_IntPush
(
vNames
,
Abc_Var2Lit2
(
k
,
CBA_NAME_INDEX
)
);
}
}
}
int
Cba_ManAssignCountNames
(
Cba_Ntk_t
*
p
)
int
Cba_ManAssignCountNames
(
Cba_Ntk_t
*
p
)
{
{
int
iBox
,
Counter
=
1
;
int
i
,
iObj
,
iBox
,
Count
=
0
;
Vec_Int_t
*
vRanges
=
&
p
->
pDesign
->
pNtks
->
vArray
;
Cba_NtkForEachPiMain
(
p
,
iObj
,
i
)
Cba_NtkReadRangesUser
(
p
,
vRanges
,
0
);
if
(
!
Cba_ObjNameInt
(
p
,
iObj
)
)
Counter
+=
Vec_IntSize
(
vRanges
);
Count
++
;
Cba_NtkReadRangesUser
(
p
,
vRanges
,
1
);
Counter
+=
Vec_IntSize
(
vRanges
);
Cba_NtkForEachBox
(
p
,
iBox
)
Cba_NtkForEachBox
(
p
,
iBox
)
{
Cba_BoxForEachBoMain
(
p
,
iBox
,
iObj
,
i
)
if
(
Cba_ObjIsBoxUser
(
p
,
iBox
)
)
if
(
!
Cba_ObjNameInt
(
p
,
iObj
)
)
Cba_NtkReadRangesUser
(
Cba_BoxNtk
(
p
,
iBox
),
vRanges
,
1
);
Count
++
;
else
if
(
Cba_BoxNtkId
(
p
,
iBox
)
)
return
Count
;
Cba_NtkReadRangesPrim
(
Cba_BoxNtkName
(
p
,
iBox
),
vRanges
,
1
);
else
assert
(
0
);
Counter
+=
Vec_IntSize
(
vRanges
);
}
return
Counter
;
}
}
void
Cba_ManAssignInternWordNamesNtk
(
Cba_Ntk_t
*
p
,
Vec_Int_t
*
vMap
)
void
Cba_ManAssignInternWordNamesNtk
(
Cba_Ntk_t
*
p
,
Vec_Int_t
*
vMap
)
{
{
Vec_Int_t
*
vRanges
=
&
p
->
pDesign
->
pNtks
->
vArray
;
int
k
,
iObj
,
iTerm
,
iName
=
-
1
,
iBit
=
-
1
;
Vec_Int_t
*
vNames
=
&
p
->
pDesign
->
pNtks
->
vArray2
;
int
nDigits
,
nPis
=
0
,
nPos
=
0
,
nNames
=
1
;
int
k
,
nPis
=
0
,
nPos
=
0
,
iObj
,
iTerm
,
nNames
=
1
;
int
nDigits
=
Abc_Base10Log
(
Cba_ManAssignCountNames
(
p
)
);
assert
(
Cba_NtkReadRangesUser
(
p
,
NULL
,
0
)
==
Cba_NtkPiNum
(
p
)
);
assert
(
Cba_NtkReadRangesUser
(
p
,
NULL
,
1
)
==
Cba_NtkPoNum
(
p
)
);
// start names
// start names
assert
(
!
Cba_NtkHasNames
(
p
)
);
if
(
!
Cba_NtkHasNames
(
p
)
)
Cba_NtkStartNames
(
p
);
Cba_NtkStartNames
(
p
);
// derive PI names
nDigits
=
Abc_Base10Log
(
Cba_ManAssignCountNames
(
p
)
);
Cba_NtkReadRangesUser
(
p
,
vRanges
,
0
);
// assign CI names
Cba_ManPrepareBitNames
(
p
,
vMap
,
&
nNames
,
nDigits
,
1
,
vRanges
,
vNames
);
Cba_NtkForEachCi
(
p
,
iObj
)
assert
(
Vec_IntSize
(
vNames
)
==
Cba_NtkPiNum
(
p
)
);
Cba_NtkForEachPi
(
p
,
iObj
,
k
)
Cba_ObjSetName
(
p
,
iObj
,
Vec_IntEntry
(
vNames
,
k
)
);
// derive box output names
Cba_NtkForEachBox
(
p
,
iObj
)
{
{
if
(
Cba_ObjIsBoxUser
(
p
,
iObj
)
)
if
(
Cba_ObjNameInt
(
p
,
iObj
)
)
Cba_NtkReadRangesUser
(
Cba_BoxNtk
(
p
,
iObj
),
vRanges
,
1
);
{
else
if
(
Cba_BoxNtkId
(
p
,
iObj
)
)
iName
=
-
1
;
Cba_NtkReadRangesPrim
(
Cba_BoxNtkName
(
p
,
iObj
),
vRanges
,
1
);
iBit
=
-
1
;
else
assert
(
0
);
continue
;
Cba_ManPrepareBitNames
(
p
,
vMap
,
&
nNames
,
nDigits
,
0
,
vRanges
,
vNames
);
}
assert
(
Vec_IntSize
(
vNames
)
==
Cba_BoxBoNum
(
p
,
iObj
)
);
if
(
Cba_ObjBit
(
p
,
iObj
)
)
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
k
)
{
Cba_ObjSetName
(
p
,
iTerm
,
Vec_IntEntry
(
vNames
,
k
)
);
assert
(
iBit
>
0
);
Cba_ObjSetName
(
p
,
iObj
,
Abc_Var2Lit2
(
iBit
++
,
CBA_NAME_INDEX
)
);
}
else
{
int
Type
=
Cba_ObjType
(
p
,
iObj
);
int
Range
=
Cba_ObjIsPi
(
p
,
iObj
)
?
Cba_ObjPiRange
(
p
,
iObj
)
:
Cba_BoxBoRange
(
p
,
iObj
);
iName
=
Cba_ManAssignInternTwo
(
p
,
nNames
++
,
nDigits
,
Cba_ObjIsPi
(
p
,
iObj
),
vMap
);
if
(
Range
==
1
)
Cba_ObjSetName
(
p
,
iObj
,
Abc_Var2Lit2
(
iName
,
CBA_NAME_BIN
)
);
else
Cba_ObjSetName
(
p
,
iObj
,
Abc_Var2Lit2
(
iName
,
CBA_NAME_WORD
)
);
iBit
=
1
;
}
}
}
// transfer names to the interface
// transfer names to the interface
// Cba_NtkReadRangesUser( p, vRanges, 1 );
for
(
k
=
0
;
k
<
Cba_NtkInfoNum
(
p
);
k
++
)
for
(
k
=
0
;
k
<
Cba_NtkInfoNum
(
p
);
k
++
)
{
{
char
*
pName
=
Cba_NtkName
(
p
);
//
char * pName = Cba_NtkName(p);
if
(
Cba_NtkInfoType
(
p
,
k
)
==
1
)
// PI
if
(
Cba_NtkInfoType
(
p
,
k
)
==
1
)
// PI
{
{
iObj
=
Cba_NtkPi
(
p
,
nPis
);
iObj
=
Cba_NtkPi
(
p
,
nPis
);
assert
(
!
Cba_ObjBit
(
p
,
iObj
)
);
assert
(
Cba_ObjNameType
(
p
,
iObj
)
<=
CBA_NAME_WORD
);
assert
(
Cba_ObjNameType
(
p
,
iObj
)
<=
CBA_NAME_WORD
);
Cba_NtkSetInfoName
(
p
,
k
,
Abc_Var2Lit2
(
Cba_ObjNameId
(
p
,
iObj
),
1
)
);
Cba_NtkSetInfoName
(
p
,
k
,
Abc_Var2Lit2
(
Cba_ObjNameId
(
p
,
iObj
),
1
)
);
nPis
+=
Cba_NtkInfoRange
(
p
,
k
);
nPis
+=
Cba_NtkInfoRange
(
p
,
k
);
...
@@ -197,6 +348,7 @@ void Cba_ManAssignInternWordNamesNtk( Cba_Ntk_t * p, Vec_Int_t * vMap )
...
@@ -197,6 +348,7 @@ void Cba_ManAssignInternWordNamesNtk( Cba_Ntk_t * p, Vec_Int_t * vMap )
else
if
(
Cba_NtkInfoType
(
p
,
k
)
==
2
)
// PO
else
if
(
Cba_NtkInfoType
(
p
,
k
)
==
2
)
// PO
{
{
iObj
=
Cba_NtkPo
(
p
,
nPos
);
iObj
=
Cba_NtkPo
(
p
,
nPos
);
assert
(
!
Cba_ObjBit
(
p
,
iObj
)
);
iObj
=
Cba_ObjFanin
(
p
,
iObj
);
iObj
=
Cba_ObjFanin
(
p
,
iObj
);
assert
(
Cba_ObjNameType
(
p
,
iObj
)
<=
CBA_NAME_WORD
);
assert
(
Cba_ObjNameType
(
p
,
iObj
)
<=
CBA_NAME_WORD
);
Cba_NtkSetInfoName
(
p
,
k
,
Abc_Var2Lit2
(
Cba_ObjNameId
(
p
,
iObj
),
2
)
);
Cba_NtkSetInfoName
(
p
,
k
,
Abc_Var2Lit2
(
Cba_ObjNameId
(
p
,
iObj
),
2
)
);
...
@@ -214,9 +366,7 @@ void Cba_ManAssignInternWordNamesNtk( Cba_Ntk_t * p, Vec_Int_t * vMap )
...
@@ -214,9 +366,7 @@ void Cba_ManAssignInternWordNamesNtk( Cba_Ntk_t * p, Vec_Int_t * vMap )
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
k
)
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
k
)
if
(
Cba_ObjNameType
(
p
,
iTerm
)
<=
CBA_NAME_WORD
)
if
(
Cba_ObjNameType
(
p
,
iTerm
)
<=
CBA_NAME_WORD
)
Vec_IntWriteEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iTerm
),
0
);
Vec_IntWriteEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iTerm
),
0
);
printf
(
"Generated %d word-level names.
\n
"
,
nNames
-
1
);
// printf( "Generated %d word-level names.\n", nNames-1 );
// Vec_IntPrint( &p->vName );
// Vec_IntPrint( &p->vInfo );
}
}
void
Cba_ManAssignInternWordNames
(
Cba_Man_t
*
p
)
void
Cba_ManAssignInternWordNames
(
Cba_Man_t
*
p
)
{
{
...
@@ -230,91 +380,6 @@ void Cba_ManAssignInternWordNames( Cba_Man_t * p )
...
@@ -230,91 +380,6 @@ void Cba_ManAssignInternWordNames( Cba_Man_t * p )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Assigns bit-level names.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Cba_ManSetInternOne
(
Cba_Ntk_t
*
p
,
int
iTerm
,
Vec_Int_t
*
vMap
)
{
if
(
!
Cba_ObjName
(
p
,
iTerm
)
)
return
1
;
if
(
Cba_ObjNameType
(
p
,
iTerm
)
>
CBA_NAME_WORD
)
return
0
;
assert
(
Vec_IntEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iTerm
))
==
0
);
Vec_IntWriteEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iTerm
),
iTerm
+
1
);
return
0
;
}
int
Cba_ManAssignInternOne
(
Cba_Ntk_t
*
p
,
int
iTerm
,
Vec_Int_t
*
vMap
)
{
char
Buffer
[
16
];
int
i
=
0
,
NameId
,
nDigits
;
if
(
Cba_ObjName
(
p
,
iTerm
)
)
return
0
;
do
{
nDigits
=
Abc_Base10Log
(
Cba_NtkObjNum
(
p
)
);
if
(
i
==
0
)
sprintf
(
Buffer
,
"%s%0*d"
,
"n"
,
nDigits
,
iTerm
);
else
sprintf
(
Buffer
,
"%s%0*d_%d"
,
"n"
,
nDigits
,
iTerm
,
++
i
);
NameId
=
Abc_NamStrFindOrAdd
(
p
->
pDesign
->
pStrs
,
Buffer
,
NULL
);
}
while
(
Vec_IntEntry
(
vMap
,
NameId
)
);
Cba_ObjSetName
(
p
,
iTerm
,
Abc_Var2Lit2
(
NameId
,
CBA_NAME_BIN
)
);
Vec_IntWriteEntry
(
vMap
,
NameId
,
iTerm
+
1
);
return
1
;
}
void
Cba_ManAssignInternNamesNtk
(
Cba_Ntk_t
*
p
,
Vec_Int_t
*
vMap
)
{
int
i
,
iObj
,
iTerm
,
nNameless
=
0
;
// Vec_IntPrint( &p->vName );
if
(
!
Cba_NtkHasNames
(
p
)
)
Cba_NtkStartNames
(
p
);
// set all names
Cba_NtkForEachPi
(
p
,
iObj
,
i
)
nNameless
+=
Cba_ManSetInternOne
(
p
,
iObj
,
vMap
);
Cba_NtkForEachBox
(
p
,
iObj
)
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
i
)
nNameless
+=
Cba_ManSetInternOne
(
p
,
iTerm
,
vMap
);
// generate new names
if
(
nNameless
)
{
int
nNameless2
=
0
;
Cba_NtkForEachPi
(
p
,
iObj
,
i
)
nNameless2
+=
Cba_ManAssignInternOne
(
p
,
iObj
,
vMap
);
Cba_NtkForEachBox
(
p
,
iObj
)
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
i
)
nNameless2
+=
Cba_ManAssignInternOne
(
p
,
iTerm
,
vMap
);
assert
(
nNameless
==
nNameless2
);
if
(
nNameless
)
printf
(
"Generated unique names for %d objects in network
\"
%s
\"
.
\n
"
,
nNameless
,
Cba_NtkName
(
p
)
);
}
// unmark all names
Cba_NtkForEachPi
(
p
,
iObj
,
i
)
if
(
Cba_ObjNameType
(
p
,
iObj
)
<=
CBA_NAME_WORD
)
Vec_IntWriteEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iObj
),
0
);
Cba_NtkForEachBox
(
p
,
iObj
)
Cba_BoxForEachBo
(
p
,
iObj
,
iTerm
,
i
)
if
(
Cba_ObjNameType
(
p
,
iTerm
)
<=
CBA_NAME_WORD
)
Vec_IntWriteEntry
(
vMap
,
Cba_ObjNameId
(
p
,
iTerm
),
0
);
}
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
)
{
Vec_Int_t
*
vMap
=
Vec_IntStart
(
Cba_ManObjNum
(
p
)
);
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManAssignInternNamesNtk
(
pNtk
,
vMap
);
Vec_IntFree
(
vMap
);
}
/**Function*************************************************************
Synopsis [Count number of objects after collapsing.]
Synopsis [Count number of objects after collapsing.]
Description []
Description []
...
...
src/base/cba/cbaOper.c
View file @
2d90b916
...
@@ -213,7 +213,7 @@ int Cba_ObjClpArith( Cba_Ntk_t * p, int iBox )
...
@@ -213,7 +213,7 @@ int Cba_ObjClpArith( Cba_Ntk_t * p, int iBox )
{
{
Cba_ObjType_t
Type
=
Cba_ObjType
(
p
,
iBox
);
Cba_ObjType_t
Type
=
Cba_ObjType
(
p
,
iBox
);
int
i
,
iObj
=
-
1
;
int
i
,
iObj
=
-
1
;
int
nBis
=
Cba_NtkReadRangesPrim
(
Cba_BoxNtkName
(
p
,
iObj
),
&
p
->
vArray
,
0
);
int
nBis
=
0
;
//
Cba_NtkReadRangesPrim( Cba_BoxNtkName(p, iObj), &p->vArray, 0 );
assert
(
nBis
==
Cba_BoxBiNum
(
p
,
iBox
)
);
assert
(
nBis
==
Cba_BoxBiNum
(
p
,
iBox
)
);
if
(
Type
==
CBA_BOX_ADD
)
if
(
Type
==
CBA_BOX_ADD
)
{
{
...
...
src/base/cba/cbaPrsTrans.c
View file @
2d90b916
...
@@ -27,6 +27,99 @@ ABC_NAMESPACE_IMPL_START
...
@@ -27,6 +27,99 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
typedef
struct
Cba_Trip_t_
Cba_Trip_t
;
struct
Cba_Trip_t_
{
Cba_ObjType_t
Type
;
char
*
pName
;
char
*
pCode
;
char
*
pSigs
[
6
];
};
static
Cba_Trip_t
s_Types
[
100
]
=
{
{
CBA_BOX_CT
,
"VERIFIC_PWR"
,
"1"
,
{
"o"
}
},
{
CBA_BOX_CF
,
"VERIFIC_GND"
,
"1"
,
{
"o"
}
},
{
CBA_BOX_CX
,
"VERIFIC_X"
,
"1"
,
{
"o"
}
},
{
CBA_BOX_CZ
,
"VERIFIC_Z"
,
"1"
,
{
"o"
}
},
{
CBA_BOX_INV
,
"VERIFIC_INV"
,
"11"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_BUF
,
"VERIFIC_BUF"
,
"11"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_AND
,
"VERIFIC_AND"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_NAND
,
"VERIFIC_NAND"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_OR
,
"VERIFIC_OR"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_NOR
,
"VERIFIC_NOR"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_XOR
,
"VERIFIC_XOR"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_XNOR
,
"VERIFIC_XNOR"
,
"111"
,
{
"a0"
,
"a1"
,
"o"
}
},
{
CBA_BOX_MUX
,
"VERIFIC_MUX"
,
"1111"
,
{
"c"
,
"a1"
,
"a0"
,
"o"
}
},
// changed order
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_PULLUP"
,
"1"
,
{
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_PULLDOWN"
,
"1"
,
{
"o"
}
},
{
CBA_BOX_TRI
,
"VERIFIC_TRI"
,
"111"
,
{
"i"
,
"c"
,
"o"
}
},
{
CBA_BOX_LATCH
,
"VERIFIC_DLATCH"
,
"11111"
,
{
"d"
,
"async_val"
,
"async_cond"
,
"gate"
,
"q"
}
},
// changed order
{
CBA_BOX_LATCHRS
,
"VERIFIC_DLATCHRS"
,
"11111"
,
{
"d"
,
"s"
,
"r"
,
"gate"
,
"q"
}
},
// changed order
{
CBA_BOX_DFF
,
"VERIFIC_DFF"
,
"11111"
,
{
"d"
,
"async_val"
,
"async_cond"
,
"clk"
,
"q"
}
},
// changed order
{
CBA_BOX_DFFRS
,
"VERIFIC_DFFRS"
,
"11111"
,
{
"d"
,
"s"
,
"r"
,
"clk"
,
"q"
}
},
// changed order
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_NMOS"
,
"111"
,
{
"c"
,
"d"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_PMOS"
,
"111"
,
{
"c"
,
"d"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_CMOS"
,
"1111"
,
{
"d"
,
"nc"
,
"pc"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_TRAN"
,
"111"
,
{
"inout1"
,
"inout2"
,
"control"
}
},
{
CBA_BOX_ADD
,
"VERIFIC_FADD"
,
"11111"
,
{
"cin"
,
"a"
,
"b"
,
"o"
,
"cout"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_RCMOS"
,
"1111"
,
{
"d"
,
"nc"
,
"pc"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_RNMOS"
,
"111"
,
{
"c"
,
"d"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_RPMOS"
,
"111"
,
{
"c"
,
"d"
,
"o"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_RTRAN"
,
"111"
,
{
"inout1"
,
"inout2"
,
"control"
}
},
{
(
Cba_ObjType_t
)
-
1
,
"VERIFIC_HDL_ASSERTION"
,
"1"
,
{
"condition"
}
},
{
CBA_BOX_ADD
,
"add_"
,
"1aba1"
,
{
"cin"
,
"a"
,
"b"
,
"o"
,
"cout"
}
},
{
CBA_BOX_MUL
,
"mult_"
,
"ab?"
,
{
"a"
,
"b"
,
"o"
}
},
// ? = a * b
{
CBA_BOX_DIV
,
"div_"
,
"ab?"
,
{
"a"
,
"b"
,
"o"
}
},
// ? =
{
CBA_BOX_MOD
,
"mod_"
,
"ab?"
,
{
"a"
,
"b"
,
"o"
}
},
// ? =
{
CBA_BOX_REM
,
"rem_"
,
"ab?"
,
{
"a"
,
"b"
,
"o"
}
},
// ? =
{
CBA_BOX_SHIL
,
"shift_left_"
,
"1aba"
,
{
"cin"
,
"a"
,
"amount"
,
"o"
}
},
{
CBA_BOX_SHIR
,
"shift_right_"
,
"1aba"
,
{
"cin"
,
"a"
,
"amount"
,
"o"
}
},
{
CBA_BOX_ROTL
,
"rotate_left_"
,
"aba"
,
{
"a"
,
"amount"
,
"o"
}
},
{
CBA_BOX_ROTR
,
"rotate_right_"
,
"aba"
,
{
"a"
,
"amount"
,
"o"
}
},
{
CBA_BOX_RAND
,
"reduce_and_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_ROR
,
"reduce_or_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_RXOR
,
"reduce_xor_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_RNAND
,
"reduce_nand_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_RNOR
,
"reduce_nor_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_RXNOR
,
"reduce_xnor_"
,
"ab1"
,
{
"a"
,
"o"
}
},
{
CBA_BOX_LTHAN
,
"LessThan_"
,
"1ab1"
,
{
"cin"
,
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_NMUX
,
"Mux_"
,
"ab1"
,
{
"sel"
,
"data"
,
"o"
}
},
{
CBA_BOX_SEL
,
"Select_"
,
"aaa"
,
{
"sel"
,
"data"
,
"o"
}
},
{
CBA_BOX_DEC
,
"Decoder_"
,
"a?"
,
{
"a"
,
"o"
}
},
// ? = (1 << a)
{
CBA_BOX_EDEC
,
"EnabledDecoder_"
,
"1a?"
,
{
"en"
,
"i"
,
"o"
}
},
// ? = (1 << a)
{
CBA_BOX_PSEL
,
"PrioSelect_"
,
"1aaa"
,
{
"cin"
,
"sel"
,
"data"
,
"o"
}
},
{
CBA_BOX_RAM
,
"DualPortRam_"
,
"1abab"
,
{
"write_enable"
,
"write_address"
,
"write_data"
,
"read_address"
,
"read_data"
}
},
{
CBA_BOX_RAMR
,
"ReadPort_"
,
"1a1b"
,
{
"read_enable"
,
"read_address"
,
"RAM"
,
"read_data"
}
},
{
CBA_BOX_RAMW
,
"WritePort_"
,
"1ab1"
,
{
"write_enable"
,
"write_address"
,
"write_data"
,
"RAM"
}
},
{
CBA_BOX_RAMWC
,
"ClockedWritePort_"
,
"11ab1"
,
{
"clk"
,
"write_enable"
,
"write_address"
,
"write_data"
,
"RAM"
}
},
{
CBA_BOX_LUT
,
"lut"
,
"?"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_AND
,
"and_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_OR
,
"or_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_XOR
,
"xor_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_NAND
,
"nand_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_NOR
,
"nor_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_XNOR
,
"xnor_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_BUF
,
"buf_"
,
"aa"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_INV
,
"inv_"
,
"aa"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_TRI
,
"tri_"
,
"a1a"
,
{
"i"
,
"c"
,
"o"
}
},
{
CBA_BOX_SUB
,
"sub_"
,
"aaa"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_MIN
,
"unary_minus_"
,
"aa"
,
{
"i"
,
"o"
}
},
{
CBA_BOX_EQU
,
"equal_"
,
"aa1"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_NEQU
,
"not_equal_"
,
"aa1"
,
{
"a"
,
"b"
,
"o"
}
},
{
CBA_BOX_MUX
,
"mux_"
,
"1aaa"
,
{
"cond"
,
"d1"
,
"d0"
,
"o"
}
},
// changed order
{
CBA_BOX_NMUX
,
"wide_mux_"
,
"ab?"
,
{
"sel"
,
"data"
,
"o"
}
},
// ? = b / (1 << a)
{
CBA_BOX_SEL
,
"wide_select_"
,
"ab?"
,
{
"sel"
,
"data"
,
"o"
}
},
// ? = b / a
{
CBA_BOX_DFF
,
"wide_dff_"
,
"aaa1a"
,
{
"d"
,
"async_val"
,
"async_cond"
,
"clock"
,
"q"
}
},
{
CBA_BOX_DFFRS
,
"wide_dlatch_"
,
"aaa1a"
,
{
"d"
,
"set"
,
"reset"
,
"clock"
,
"q"
}
},
{
CBA_BOX_LATCHRS
,
"wide_dffrs_"
,
"aaa1a"
,
{
"d"
,
"set"
,
"reset"
,
"clock"
,
"q"
}
},
{
CBA_BOX_LATCH
,
"wide_dlatchrs_"
,
"aaa1a"
,
{
"d"
,
"async_val"
,
"async_cond"
,
"clock"
,
"q"
}
},
{
CBA_BOX_PSEL
,
"wide_prio_select_"
,
"ab??"
,
{
"sel"
,
"data"
,
"carry_in"
,
"o"
}
},
// ? = b / a
{
CBA_BOX_POW
,
"pow_"
,
"abc"
,
{
"a"
,
"b"
,
"o"
}
},
// ? =
{
CBA_BOX_PENC
,
"PrioEncoder_"
,
"a?"
,
{
"sel"
,
"o"
}
},
{
CBA_BOX_ABS
,
"abs"
,
"aa"
,
{
"i"
,
"o"
}
}
};
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/base/cba/cbaPtrAbc.c
View file @
2d90b916
...
@@ -462,7 +462,7 @@ Vec_Ptr_t * Cba_PtrDeriveFromCba( Cba_Man_t * p )
...
@@ -462,7 +462,7 @@ Vec_Ptr_t * Cba_PtrDeriveFromCba( Cba_Man_t * p )
Cba_Ntk_t
*
pTemp
;
int
i
;
Cba_Ntk_t
*
pTemp
;
int
i
;
if
(
p
==
NULL
)
if
(
p
==
NULL
)
return
NULL
;
return
NULL
;
Cba_ManAssignInternNames
(
p
);
Cba_ManAssignIntern
Word
Names
(
p
);
vDes
=
Vec_PtrAllocExact
(
1
+
Cba_ManNtkNum
(
p
)
);
vDes
=
Vec_PtrAllocExact
(
1
+
Cba_ManNtkNum
(
p
)
);
Vec_PtrPush
(
vDes
,
p
->
pName
);
Vec_PtrPush
(
vDes
,
p
->
pName
);
Cba_ManForEachNtk
(
p
,
pTemp
,
i
)
Cba_ManForEachNtk
(
p
,
pTemp
,
i
)
...
...
src/base/cba/cbaReadVer.c
View file @
2d90b916
...
@@ -101,16 +101,10 @@ static inline int Prs_ManIsDigit( Prs_Man_t * p ) { return Prs_CharIsD
...
@@ -101,16 +101,10 @@ static inline int Prs_ManIsDigit( Prs_Man_t * p ) { return Prs_CharIsD
***********************************************************************/
***********************************************************************/
// collect predefined modules names
// collect predefined modules names
const
char
*
s_KnownModules
[
100
]
=
{
const
char
*
s_VerilogModules
[
100
]
=
NULL
,
// CBA_OBJ_NONE = 0, // 0: unused
{
NULL
,
// CBA_OBJ_PI, // 1: input
"const0"
,
// CBA_BOX_CF,
NULL
,
// CBA_OBJ_PO, // 2: output
"const1"
,
// CBA_BOX_CT,
NULL
,
// CBA_OBJ_BI, // 3: box input
NULL
,
// CBA_OBJ_BO, // 4: box output
NULL
,
// CBA_OBJ_BOX, // 5: box
"const0"
,
// CBA_BOX_C0,
"const1"
,
// CBA_BOX_C1,
"constX"
,
// CBA_BOX_CX,
"constX"
,
// CBA_BOX_CX,
"constZ"
,
// CBA_BOX_CZ,
"constZ"
,
// CBA_BOX_CZ,
"buf"
,
// CBA_BOX_BUF,
"buf"
,
// CBA_BOX_BUF,
...
@@ -124,7 +118,10 @@ const char * s_KnownModules[100] = {
...
@@ -124,7 +118,10 @@ const char * s_KnownModules[100] = {
"sharp"
,
// CBA_BOX_SHARP,
"sharp"
,
// CBA_BOX_SHARP,
"mux"
,
// CBA_BOX_MUX,
"mux"
,
// CBA_BOX_MUX,
"maj"
,
// CBA_BOX_MAJ,
"maj"
,
// CBA_BOX_MAJ,
NULL
};
const
char
*
s_KnownModules
[
100
]
=
{
"VERIFIC_"
,
"VERIFIC_"
,
"add_"
,
"add_"
,
"mult_"
,
"mult_"
,
...
@@ -179,11 +176,20 @@ const char * s_KnownModules[100] = {
...
@@ -179,11 +176,20 @@ const char * s_KnownModules[100] = {
NULL
NULL
};
};
// check if it is a Verilog predefined module
static
inline
int
Prs_ManIsVerilogModule
(
Prs_Man_t
*
p
,
char
*
pName
)
{
int
i
;
for
(
i
=
0
;
s_VerilogModules
[
i
];
i
++
)
if
(
!
strcmp
(
pName
,
s_VerilogModules
[
i
])
)
return
CBA_BOX_CF
+
i
;
return
0
;
}
// check if it is a known module
// check if it is a known module
static
inline
int
Prs_ManIsKnownModule
(
Prs_Man_t
*
p
,
char
*
pName
)
static
inline
int
Prs_ManIsKnownModule
(
Prs_Man_t
*
p
,
char
*
pName
)
{
{
int
i
;
int
i
;
for
(
i
=
CBA_BOX_CF
;
s_KnownModules
[
i
];
i
++
)
for
(
i
=
0
;
s_KnownModules
[
i
];
i
++
)
if
(
!
strncmp
(
pName
,
s_KnownModules
[
i
],
strlen
(
s_KnownModules
[
i
]))
)
if
(
!
strncmp
(
pName
,
s_KnownModules
[
i
],
strlen
(
s_KnownModules
[
i
]))
)
return
i
;
return
i
;
return
0
;
return
0
;
...
@@ -306,11 +312,14 @@ static inline int Prs_ManReadNameList( Prs_Man_t * p, Vec_Int_t * vTemp, char La
...
@@ -306,11 +312,14 @@ static inline int Prs_ManReadNameList( Prs_Man_t * p, Vec_Int_t * vTemp, char La
{
{
int
Item
=
Prs_ManReadName
(
p
);
int
Item
=
Prs_ManReadName
(
p
);
if
(
Item
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read name in the list."
,
0
);
if
(
Item
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read name in the list."
,
0
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 1."
,
0
);
if
(
Item
==
PRS_VER_WIRE
)
continue
;
Vec_IntPush
(
vTemp
,
Item
);
Vec_IntPush
(
vTemp
,
Item
);
if
(
Prs_ManIsChar
(
p
,
LastSymb
)
)
break
;
if
(
Prs_ManIsChar
(
p
,
LastSymb
)
)
break
;
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the list."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the list."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 2."
,
0
)
;
}
}
return
1
;
return
1
;
}
}
...
@@ -368,19 +377,19 @@ static inline int Prs_ManReadRange( Prs_Man_t * p )
...
@@ -368,19 +377,19 @@ static inline int Prs_ManReadRange( Prs_Man_t * p )
assert
(
Prs_ManIsChar
(
p
,
'['
)
);
assert
(
Prs_ManIsChar
(
p
,
'['
)
);
Vec_StrClear
(
&
p
->
vCover
);
Vec_StrClear
(
&
p
->
vCover
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 3."
,
0
)
;
if
(
!
Prs_ManIsDigit
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read digit in range specification."
,
0
);
if
(
!
Prs_ManIsDigit
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read digit in range specification."
,
0
);
while
(
Prs_ManIsDigit
(
p
)
)
while
(
Prs_ManIsDigit
(
p
)
)
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 4."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
':'
)
)
if
(
Prs_ManIsChar
(
p
,
':'
)
)
{
{
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 5."
,
0
)
;
if
(
!
Prs_ManIsDigit
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read digit in range specification."
,
0
);
if
(
!
Prs_ManIsDigit
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read digit in range specification."
,
0
);
while
(
Prs_ManIsDigit
(
p
)
)
while
(
Prs_ManIsDigit
(
p
)
)
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 6."
,
0
)
;
}
}
if
(
!
Prs_ManIsChar
(
p
,
']'
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read closing brace in range specification."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
']'
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read closing brace in range specification."
,
0
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
Vec_StrPush
(
&
p
->
vCover
,
*
p
->
pCur
++
);
...
@@ -392,7 +401,7 @@ static inline int Prs_ManReadConcat( Prs_Man_t * p, Vec_Int_t * vTemp2 )
...
@@ -392,7 +401,7 @@ static inline int Prs_ManReadConcat( Prs_Man_t * p, Vec_Int_t * vTemp2 )
extern
int
Prs_ManReadSignalList
(
Prs_Man_t
*
p
,
Vec_Int_t
*
vTemp
,
char
LastSymb
,
int
fAddForm
);
extern
int
Prs_ManReadSignalList
(
Prs_Man_t
*
p
,
Vec_Int_t
*
vTemp
,
char
LastSymb
,
int
fAddForm
);
assert
(
Prs_ManIsChar
(
p
,
'{'
)
);
assert
(
Prs_ManIsChar
(
p
,
'{'
)
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
!
Prs_ManReadSignalList
(
p
,
vTemp2
,
'}'
,
0
)
)
return
0
;
if
(
!
Prs_ManReadSignalList
(
p
,
vTemp2
,
'}'
,
0
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 7."
,
0
)
;
// check final
// check final
assert
(
Prs_ManIsChar
(
p
,
'}'
)
);
assert
(
Prs_ManIsChar
(
p
,
'}'
)
);
p
->
pCur
++
;
p
->
pCur
++
;
...
@@ -405,12 +414,12 @@ static inline int Prs_ManReadConcat( Prs_Man_t * p, Vec_Int_t * vTemp2 )
...
@@ -405,12 +414,12 @@ static inline int Prs_ManReadConcat( Prs_Man_t * p, Vec_Int_t * vTemp2 )
static
inline
int
Prs_ManReadSignal
(
Prs_Man_t
*
p
)
static
inline
int
Prs_ManReadSignal
(
Prs_Man_t
*
p
)
{
{
int
Item
;
int
Item
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 8."
,
0
)
;
if
(
Prs_ManIsDigit
(
p
)
)
if
(
Prs_ManIsDigit
(
p
)
)
{
{
Item
=
Prs_ManReadConstant
(
p
);
Item
=
Prs_ManReadConstant
(
p
);
if
(
Item
==
0
)
return
0
;
if
(
Item
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 9."
,
0
)
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 10."
,
0
)
;
return
Abc_Var2Lit2
(
Item
,
CBA_PRS_CONST
);
return
Abc_Var2Lit2
(
Item
,
CBA_PRS_CONST
);
}
}
if
(
Prs_ManIsChar
(
p
,
'{'
)
)
if
(
Prs_ManIsChar
(
p
,
'{'
)
)
...
@@ -419,20 +428,20 @@ static inline int Prs_ManReadSignal( Prs_Man_t * p )
...
@@ -419,20 +428,20 @@ static inline int Prs_ManReadSignal( Prs_Man_t * p )
p
->
fUsingTemp2
=
1
;
p
->
fUsingTemp2
=
1
;
Item
=
Prs_ManReadConcat
(
p
,
&
p
->
vTemp2
);
Item
=
Prs_ManReadConcat
(
p
,
&
p
->
vTemp2
);
p
->
fUsingTemp2
=
0
;
p
->
fUsingTemp2
=
0
;
if
(
Item
==
0
)
return
0
;
if
(
Item
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 11."
,
0
)
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 12."
,
0
)
;
return
Item
;
return
Item
;
}
}
else
else
{
{
Item
=
Prs_ManReadName
(
p
);
Item
=
Prs_ManReadName
(
p
);
if
(
Item
==
0
)
return
0
;
// was return 1;
if
(
Item
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 13."
,
0
)
;
// was return 1;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 14."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
'['
)
)
if
(
Prs_ManIsChar
(
p
,
'['
)
)
{
{
int
Range
=
Prs_ManReadRange
(
p
);
int
Range
=
Prs_ManReadRange
(
p
);
if
(
Range
==
0
)
return
0
;
if
(
Range
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 15."
,
0
)
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 16."
,
0
)
;
return
Abc_Var2Lit2
(
Prs_NtkAddSlice
(
p
->
pNtk
,
Item
,
Range
),
CBA_PRS_SLICE
);
return
Abc_Var2Lit2
(
Prs_NtkAddSlice
(
p
->
pNtk
,
Item
,
Range
),
CBA_PRS_SLICE
);
}
}
return
Abc_Var2Lit2
(
Item
,
CBA_PRS_NAME
);
return
Abc_Var2Lit2
(
Item
,
CBA_PRS_NAME
);
...
@@ -466,17 +475,17 @@ static inline int Prs_ManReadSignalList2( Prs_Man_t * p, Vec_Int_t * vTemp )
...
@@ -466,17 +475,17 @@ static inline int Prs_ManReadSignalList2( Prs_Man_t * p, Vec_Int_t * vTemp )
if
(
FormId
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read formal name of the instance."
,
0
);
if
(
FormId
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read formal name of the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
'('
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read
\"
(
\"
in the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
'('
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read
\"
(
\"
in the instance."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 17."
,
0
)
;
ActItem
=
Prs_ManReadSignal
(
p
);
ActItem
=
Prs_ManReadSignal
(
p
);
if
(
ActItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read actual name of the instance."
,
0
);
if
(
ActItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read actual name of the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
')'
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read
\"
)
\"
in the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
')'
)
)
return
Prs_ManErrorSet
(
p
,
"Cannot read
\"
)
\"
in the instance."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
Vec_IntPushTwo
(
vTemp
,
FormId
,
ActItem
);
Vec_IntPushTwo
(
vTemp
,
FormId
,
ActItem
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 18."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
')'
)
)
break
;
if
(
Prs_ManIsChar
(
p
,
')'
)
)
break
;
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the instance."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 19."
,
0
)
;
}
}
assert
(
Vec_IntSize
(
vTemp
)
>
0
);
assert
(
Vec_IntSize
(
vTemp
)
>
0
);
assert
(
Vec_IntSize
(
vTemp
)
%
2
==
0
);
assert
(
Vec_IntSize
(
vTemp
)
%
2
==
0
);
...
@@ -500,9 +509,9 @@ static inline int Prs_ManReadDeclaration( Prs_Man_t * p, int Type )
...
@@ -500,9 +509,9 @@ static inline int Prs_ManReadDeclaration( Prs_Man_t * p, int Type )
Vec_Int_t
*
vNames
[
4
]
=
{
&
p
->
pNtk
->
vInputs
,
&
p
->
pNtk
->
vOutputs
,
&
p
->
pNtk
->
vInouts
,
&
p
->
pNtk
->
vWires
};
Vec_Int_t
*
vNames
[
4
]
=
{
&
p
->
pNtk
->
vInputs
,
&
p
->
pNtk
->
vOutputs
,
&
p
->
pNtk
->
vInouts
,
&
p
->
pNtk
->
vWires
};
Vec_Int_t
*
vNamesR
[
4
]
=
{
&
p
->
pNtk
->
vInputsR
,
&
p
->
pNtk
->
vOutputsR
,
&
p
->
pNtk
->
vInoutsR
,
&
p
->
pNtk
->
vWiresR
};
Vec_Int_t
*
vNamesR
[
4
]
=
{
&
p
->
pNtk
->
vInputsR
,
&
p
->
pNtk
->
vOutputsR
,
&
p
->
pNtk
->
vInoutsR
,
&
p
->
pNtk
->
vWiresR
};
assert
(
Type
>=
PRS_VER_INPUT
&&
Type
<=
PRS_VER_WIRE
);
assert
(
Type
>=
PRS_VER_INPUT
&&
Type
<=
PRS_VER_WIRE
);
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 20."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
'['
)
&&
!
(
RangeId
=
Prs_ManReadRange
(
p
))
)
return
0
;
if
(
Prs_ManIsChar
(
p
,
'['
)
&&
!
(
RangeId
=
Prs_ManReadRange
(
p
))
)
return
Prs_ManErrorSet
(
p
,
"Error number 21."
,
0
)
;
if
(
!
Prs_ManReadNameList
(
p
,
&
p
->
vTemp
,
';'
)
)
return
0
;
if
(
!
Prs_ManReadNameList
(
p
,
&
p
->
vTemp
,
';'
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 22."
,
0
)
;
Vec_IntForEachEntry
(
&
p
->
vTemp
,
NameId
,
i
)
Vec_IntForEachEntry
(
&
p
->
vTemp
,
NameId
,
i
)
{
{
Vec_IntPush
(
vNames
[
Type
-
PRS_VER_INPUT
],
NameId
);
Vec_IntPush
(
vNames
[
Type
-
PRS_VER_INPUT
],
NameId
);
...
@@ -514,13 +523,13 @@ static inline int Prs_ManReadDeclaration( Prs_Man_t * p, int Type )
...
@@ -514,13 +523,13 @@ static inline int Prs_ManReadDeclaration( Prs_Man_t * p, int Type )
}
}
static
inline
int
Prs_ManReadAssign
(
Prs_Man_t
*
p
)
static
inline
int
Prs_ManReadAssign
(
Prs_Man_t
*
p
)
{
{
int
OutItem
,
InItem
,
fCompl
=
0
,
Oper
=
0
;
int
OutItem
,
InItem
,
fCompl
=
0
,
fCompl2
=
0
,
Oper
=
0
;
// read output name
// read output name
OutItem
=
Prs_ManReadSignal
(
p
);
OutItem
=
Prs_ManReadSignal
(
p
);
if
(
OutItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read output in assign-statement."
,
0
);
if
(
OutItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read output in assign-statement."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
'='
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting
\"
=
\"
in assign-statement."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
'='
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting
\"
=
\"
in assign-statement."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 23."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
'~'
)
)
if
(
Prs_ManIsChar
(
p
,
'~'
)
)
{
{
fCompl
=
1
;
fCompl
=
1
;
...
@@ -546,11 +555,17 @@ static inline int Prs_ManReadAssign( Prs_Man_t * p )
...
@@ -546,11 +555,17 @@ static inline int Prs_ManReadAssign( Prs_Man_t * p )
else
if
(
Prs_ManIsChar
(
p
,
'|'
)
)
else
if
(
Prs_ManIsChar
(
p
,
'|'
)
)
Oper
=
CBA_BOX_OR
;
Oper
=
CBA_BOX_OR
;
else
if
(
Prs_ManIsChar
(
p
,
'^'
)
)
else
if
(
Prs_ManIsChar
(
p
,
'^'
)
)
Oper
=
fCompl
?
CBA_BOX_XNOR
:
CBA_BOX_XOR
;
Oper
=
CBA_BOX_XOR
;
else
if
(
Prs_ManIsChar
(
p
,
'?'
)
)
else
if
(
Prs_ManIsChar
(
p
,
'?'
)
)
Oper
=
CBA_BOX_MUX
;
Oper
=
CBA_BOX_MUX
;
else
return
Prs_ManErrorSet
(
p
,
"Unrecognized operator in the assign-statement."
,
0
);
else
return
Prs_ManErrorSet
(
p
,
"Unrecognized operator in the assign-statement."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 24."
,
0
);
if
(
Prs_ManIsChar
(
p
,
'~'
)
)
{
fCompl2
=
1
;
p
->
pCur
++
;
}
// read second name
// read second name
InItem
=
Prs_ManReadSignal
(
p
);
InItem
=
Prs_ManReadSignal
(
p
);
if
(
InItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read second input name in the assign-statement."
,
0
);
if
(
InItem
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot read second input name in the assign-statement."
,
0
);
...
@@ -569,6 +584,31 @@ static inline int Prs_ManReadAssign( Prs_Man_t * p )
...
@@ -569,6 +584,31 @@ static inline int Prs_ManReadAssign( Prs_Man_t * p )
Vec_IntPush
(
&
p
->
vTemp
,
InItem
);
Vec_IntPush
(
&
p
->
vTemp
,
InItem
);
if
(
!
Prs_ManIsChar
(
p
,
';'
)
)
return
Prs_ManErrorSet
(
p
,
"Expected semicolon at the end of the assign-statement."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
';'
)
)
return
Prs_ManErrorSet
(
p
,
"Expected semicolon at the end of the assign-statement."
,
0
);
}
}
else
{
// figure out operator
if
(
Oper
==
CBA_BOX_AND
)
{
if
(
fCompl
&&
!
fCompl2
)
Oper
=
CBA_BOX_SHARPL
;
else
if
(
!
fCompl
&&
fCompl2
)
Oper
=
CBA_BOX_SHARP
;
else
if
(
fCompl
&&
fCompl2
)
Oper
=
CBA_BOX_NOR
;
}
else
if
(
Oper
==
CBA_BOX_OR
)
{
if
(
fCompl
&&
fCompl2
)
Oper
=
CBA_BOX_NAND
;
else
assert
(
!
fCompl
&&
!
fCompl2
);
}
else
if
(
Oper
==
CBA_BOX_XOR
)
{
if
(
fCompl
&&
!
fCompl2
)
Oper
=
CBA_BOX_XNOR
;
else
assert
(
!
fCompl
&&
!
fCompl2
);
}
}
// write binary operator
// write binary operator
Vec_IntPush
(
&
p
->
vTemp
,
0
);
Vec_IntPush
(
&
p
->
vTemp
,
0
);
Vec_IntPush
(
&
p
->
vTemp
,
OutItem
);
Vec_IntPush
(
&
p
->
vTemp
,
OutItem
);
...
@@ -585,27 +625,27 @@ static inline int Prs_ManReadInstance( Prs_Man_t * p, int Func )
...
@@ -585,27 +625,27 @@ static inline int Prs_ManReadInstance( Prs_Man_t * p, int Func )
int s=0;
int s=0;
}
}
*/
*/
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 25."
,
0
)
;
if
(
(
InstId
=
Prs_ManReadName
(
p
))
)
if
(
(
InstId
=
Prs_ManReadName
(
p
))
)
if
(
Prs_ManUtilSkipSpaces
(
p
))
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
))
return
Prs_ManErrorSet
(
p
,
"Error number 26."
,
0
)
;
if
(
!
Prs_ManIsChar
(
p
,
'('
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting
\"
(
\"
in module instantiation."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
'('
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting
\"
(
\"
in module instantiation."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 27."
,
0
)
;
if
(
Prs_ManIsChar
(
p
,
'.'
)
)
// box
if
(
Prs_ManIsChar
(
p
,
'.'
)
)
// box
Status
=
Prs_ManReadSignalList2
(
p
,
&
p
->
vTemp
);
Status
=
Prs_ManReadSignalList2
(
p
,
&
p
->
vTemp
);
else
// node
else
// node
{
{
//char * s = Abc_NamStr(p->pStrs, Func);
//char * s = Abc_NamStr(p->pStrs, Func);
// translate elementary gate
// translate elementary gate
int
iFuncNew
=
Prs_ManIs
Known
Module
(
p
,
Abc_NamStr
(
p
->
pStrs
,
Func
));
int
iFuncNew
=
Prs_ManIs
Verilog
Module
(
p
,
Abc_NamStr
(
p
->
pStrs
,
Func
));
if
(
iFuncNew
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot find elementary gate."
,
0
);
if
(
iFuncNew
==
0
)
return
Prs_ManErrorSet
(
p
,
"Cannot find elementary gate."
,
0
);
Func
=
iFuncNew
;
Func
=
iFuncNew
;
Status
=
Prs_ManReadSignalList
(
p
,
&
p
->
vTemp
,
')'
,
1
);
Status
=
Prs_ManReadSignalList
(
p
,
&
p
->
vTemp
,
')'
,
1
);
}
}
if
(
Status
==
0
)
return
0
;
if
(
Status
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 28."
,
0
)
;
assert
(
Prs_ManIsChar
(
p
,
')'
)
);
assert
(
Prs_ManIsChar
(
p
,
')'
)
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 29."
,
0
)
;
if
(
!
Prs_ManIsChar
(
p
,
';'
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting semicolon in the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
';'
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting semicolon in the instance."
,
0
);
// add box
// add box
Prs_NtkAddBox
(
p
->
pNtk
,
Func
,
InstId
,
&
p
->
vTemp
);
Prs_NtkAddBox
(
p
->
pNtk
,
Func
,
InstId
,
&
p
->
vTemp
);
...
@@ -618,23 +658,23 @@ static inline int Prs_ManReadArguments( Prs_Man_t * p )
...
@@ -618,23 +658,23 @@ static inline int Prs_ManReadArguments( Prs_Man_t * p )
Vec_Int_t
*
vSigsR
[
3
]
=
{
&
p
->
pNtk
->
vInputsR
,
&
p
->
pNtk
->
vOutputsR
,
&
p
->
pNtk
->
vInoutsR
};
Vec_Int_t
*
vSigsR
[
3
]
=
{
&
p
->
pNtk
->
vInputsR
,
&
p
->
pNtk
->
vOutputsR
,
&
p
->
pNtk
->
vInoutsR
};
assert
(
Prs_ManIsChar
(
p
,
'('
)
);
assert
(
Prs_ManIsChar
(
p
,
'('
)
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 30."
,
0
)
;
while
(
1
)
while
(
1
)
{
{
int
iName
=
Prs_ManReadName
(
p
);
int
iName
=
Prs_ManReadName
(
p
);
if
(
iName
==
0
)
return
0
;
if
(
iName
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 31."
,
0
)
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 32."
,
0
)
;
if
(
iName
>=
PRS_VER_INPUT
&&
iName
<=
PRS_VER_INOUT
)
// declaration
if
(
iName
>=
PRS_VER_INPUT
&&
iName
<=
PRS_VER_INOUT
)
// declaration
{
{
iType
=
iName
;
iType
=
iName
;
if
(
Prs_ManIsChar
(
p
,
'['
)
)
if
(
Prs_ManIsChar
(
p
,
'['
)
)
{
{
iRange
=
Prs_ManReadRange
(
p
);
iRange
=
Prs_ManReadRange
(
p
);
if
(
iRange
==
0
)
return
0
;
if
(
iRange
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 33."
,
0
)
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 34."
,
0
)
;
}
}
iName
=
Prs_ManReadName
(
p
);
iName
=
Prs_ManReadName
(
p
);
if
(
iName
==
0
)
return
0
;
if
(
iName
==
0
)
return
Prs_ManErrorSet
(
p
,
"Error number 35."
,
0
)
;
}
}
if
(
iType
>
0
)
if
(
iType
>
0
)
{
{
...
@@ -646,7 +686,7 @@ static inline int Prs_ManReadArguments( Prs_Man_t * p )
...
@@ -646,7 +686,7 @@ static inline int Prs_ManReadArguments( Prs_Man_t * p )
break
;
break
;
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the instance."
,
0
);
if
(
!
Prs_ManIsChar
(
p
,
','
)
)
return
Prs_ManErrorSet
(
p
,
"Expecting comma in the instance."
,
0
);
p
->
pCur
++
;
p
->
pCur
++
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
0
;
if
(
Prs_ManUtilSkipSpaces
(
p
)
)
return
Prs_ManErrorSet
(
p
,
"Error number 36."
,
0
)
;
}
}
// check final
// check final
assert
(
Prs_ManIsChar
(
p
,
')'
)
);
assert
(
Prs_ManIsChar
(
p
,
')'
)
);
...
...
src/base/cba/cbaWriteBlif.c
View file @
2d90b916
...
@@ -132,7 +132,12 @@ void Cba_ManWriteBlifGate( FILE * pFile, Cba_Ntk_t * p, Mio_Gate_t * pGate, Vec_
...
@@ -132,7 +132,12 @@ void Cba_ManWriteBlifGate( FILE * pFile, Cba_Ntk_t * p, Mio_Gate_t * pGate, Vec_
{
{
int
iFanin
,
i
;
int
iFanin
,
i
;
Vec_IntForEachEntry
(
vFanins
,
iFanin
,
i
)
Vec_IntForEachEntry
(
vFanins
,
iFanin
,
i
)
{
if
(
Cba_ObjIsCo
(
p
,
iFanin
)
)
iFanin
=
Cba_ObjFanin
(
p
,
iFanin
);
assert
(
Cba_ObjIsCi
(
p
,
iFanin
)
);
fprintf
(
pFile
,
" %s=%s"
,
Mio_GateReadPinName
(
pGate
,
i
),
Cba_ObjNameStr
(
p
,
iFanin
)
);
fprintf
(
pFile
,
" %s=%s"
,
Mio_GateReadPinName
(
pGate
,
i
),
Cba_ObjNameStr
(
p
,
iFanin
)
);
}
fprintf
(
pFile
,
" %s=%s"
,
Mio_GateReadOutName
(
pGate
),
Cba_ObjNameStr
(
p
,
iObj
)
);
fprintf
(
pFile
,
" %s=%s"
,
Mio_GateReadOutName
(
pGate
),
Cba_ObjNameStr
(
p
,
iObj
)
);
fprintf
(
pFile
,
"
\n
"
);
fprintf
(
pFile
,
"
\n
"
);
}
}
...
@@ -140,7 +145,12 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in
...
@@ -140,7 +145,12 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in
{
{
int
iFanin
,
i
;
int
iFanin
,
i
;
Vec_IntForEachEntry
(
vFanins
,
iFanin
,
i
)
Vec_IntForEachEntry
(
vFanins
,
iFanin
,
i
)
{
if
(
Cba_ObjIsCo
(
p
,
iFanin
)
)
iFanin
=
Cba_ObjFanin
(
p
,
iFanin
);
assert
(
Cba_ObjIsCi
(
p
,
iFanin
)
);
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iFanin
)
);
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iFanin
)
);
}
if
(
iObj
>=
0
)
if
(
iObj
>=
0
)
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iObj
)
);
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iObj
)
);
fprintf
(
pFile
,
"
\n
"
);
fprintf
(
pFile
,
"
\n
"
);
...
@@ -182,7 +192,7 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
...
@@ -182,7 +192,7 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
{
{
fprintf
(
pFile
,
".names"
);
fprintf
(
pFile
,
".names"
);
Cba_BoxForEachBi
(
p
,
i
,
iTerm
,
k
)
Cba_BoxForEachBi
(
p
,
i
,
iTerm
,
k
)
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iTerm
)
);
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
Cba_ObjFanin
(
p
,
iTerm
)
)
);
Cba_BoxForEachBo
(
p
,
i
,
iTerm
,
k
)
Cba_BoxForEachBo
(
p
,
i
,
iTerm
,
k
)
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iTerm
)
);
fprintf
(
pFile
,
" %s"
,
Cba_ObjNameStr
(
p
,
iTerm
)
);
fprintf
(
pFile
,
"
\n
%s"
,
Ptr_TypeToSop
(
Cba_ObjType
(
p
,
i
))
);
fprintf
(
pFile
,
"
\n
%s"
,
Ptr_TypeToSop
(
Cba_ObjType
(
p
,
i
))
);
...
@@ -220,7 +230,7 @@ void Cba_ManWriteBlif( char * pFileName, Cba_Man_t * p )
...
@@ -220,7 +230,7 @@ void Cba_ManWriteBlif( char * pFileName, Cba_Man_t * p )
return
;
return
;
}
}
fprintf
(
pFile
,
"# Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
fprintf
(
pFile
,
"# Design
\"
%s
\"
written by ABC on %s
\n\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
Cba_ManAssignInternNames
(
p
);
Cba_ManAssignIntern
Word
Names
(
p
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManWriteBlifNtk
(
pFile
,
pNtk
);
Cba_ManWriteBlifNtk
(
pFile
,
pNtk
);
fclose
(
pFile
);
fclose
(
pFile
);
...
...
src/base/cba/cbaWriteVer.c
View file @
2d90b916
...
@@ -191,11 +191,25 @@ void Prs_ManWriteVerilog( char * pFileName, Vec_Ptr_t * vPrs )
...
@@ -191,11 +191,25 @@ void Prs_ManWriteVerilog( char * pFileName, Vec_Ptr_t * vPrs )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Cba_ManWriteVar
(
Cba_Ntk_t
*
p
,
int
RealName
)
// compute range of a name (different from range of a multi-bit wire)
static
inline
int
Cba_ObjGetRange
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
int
i
,
NameId
=
Cba_ObjName
(
p
,
iObj
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
// if ( Cba_NameType(NameId) == CBA_NAME_INDEX )
// NameId = Cba_ObjName(p, iObj - Abc_Lit2Var2(NameId));
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
||
Cba_NameType
(
NameId
)
==
CBA_NAME_INFO
);
for
(
i
=
iObj
+
1
;
i
<
Cba_NtkObjNum
(
p
);
i
++
)
if
(
!
Cba_ObjIsCi
(
p
,
i
)
||
Cba_ObjNameType
(
p
,
i
)
!=
CBA_NAME_INDEX
)
break
;
return
i
-
iObj
;
}
static
inline
void
Cba_ManWriteVar
(
Cba_Ntk_t
*
p
,
int
RealName
)
{
{
Vec_StrPrintStr
(
p
->
pDesign
->
vOut
,
Cba_NtkStr
(
p
,
RealName
)
);
Vec_StrPrintStr
(
p
->
pDesign
->
vOut
,
Cba_NtkStr
(
p
,
RealName
)
);
}
}
void
Cba_ManWriteRange
(
Cba_Ntk_t
*
p
,
int
Beg
,
int
End
)
static
inline
void
Cba_ManWriteRange
(
Cba_Ntk_t
*
p
,
int
Beg
,
int
End
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_StrPrintStr
(
vStr
,
"["
);
Vec_StrPrintStr
(
vStr
,
"["
);
...
@@ -207,7 +221,7 @@ void Cba_ManWriteRange( Cba_Ntk_t * p, int Beg, int End )
...
@@ -207,7 +221,7 @@ void Cba_ManWriteRange( Cba_Ntk_t * p, int Beg, int End )
Vec_StrPrintNum
(
vStr
,
Beg
);
Vec_StrPrintNum
(
vStr
,
Beg
);
Vec_StrPrintStr
(
vStr
,
"]"
);
Vec_StrPrintStr
(
vStr
,
"]"
);
}
}
void
Cba_ManWriteConstBit
(
Cba_Ntk_t
*
p
,
int
iObj
,
int
fHead
)
static
inline
void
Cba_ManWriteConstBit
(
Cba_Ntk_t
*
p
,
int
iObj
,
int
fHead
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
int
Const
=
Cba_ObjGetConst
(
p
,
iObj
);
int
Const
=
Cba_ObjGetConst
(
p
,
iObj
);
...
@@ -224,7 +238,7 @@ void Cba_ManWriteConstBit( Cba_Ntk_t * p, int iObj, int fHead )
...
@@ -224,7 +238,7 @@ void Cba_ManWriteConstBit( Cba_Ntk_t * p, int iObj, int fHead )
Vec_StrPush
(
vStr
,
'z'
);
Vec_StrPush
(
vStr
,
'z'
);
else
assert
(
0
);
else
assert
(
0
);
}
}
int
Cba_ManFindRealNameId
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
int
Cba_ManFindRealNameId
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
int
NameId
=
Cba_ObjName
(
p
,
iObj
);
int
NameId
=
Cba_ObjName
(
p
,
iObj
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
...
@@ -235,7 +249,7 @@ int Cba_ManFindRealNameId( Cba_Ntk_t * p, int iObj )
...
@@ -235,7 +249,7 @@ int Cba_ManFindRealNameId( Cba_Ntk_t * p, int iObj )
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_BIN
||
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
);
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_BIN
||
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
);
return
Abc_Lit2Var2
(
NameId
);
return
Abc_Lit2Var2
(
NameId
);
}
}
int
Cba_ManFindRealIndex
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
int
Cba_ManFindRealIndex
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
int
iBit
=
0
,
NameId
=
Cba_ObjName
(
p
,
iObj
);
int
iBit
=
0
,
NameId
=
Cba_ObjName
(
p
,
iObj
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
assert
(
Cba_ObjIsCi
(
p
,
iObj
)
);
...
@@ -247,7 +261,7 @@ int Cba_ManFindRealIndex( Cba_Ntk_t * p, int iObj )
...
@@ -247,7 +261,7 @@ int Cba_ManFindRealIndex( Cba_Ntk_t * p, int iObj )
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
);
assert
(
Cba_NameType
(
NameId
)
==
CBA_NAME_WORD
);
return
iBit
;
return
iBit
;
}
}
void
Cba_ManWriteSig
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
void
Cba_ManWriteSig
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
if
(
Cba_ObjIsCo
(
p
,
iObj
)
)
if
(
Cba_ObjIsCo
(
p
,
iObj
)
)
iObj
=
Cba_ObjFanin
(
p
,
iObj
);
iObj
=
Cba_ObjFanin
(
p
,
iObj
);
...
@@ -266,10 +280,7 @@ void Cba_ManWriteSig( Cba_Ntk_t * p, int iObj )
...
@@ -266,10 +280,7 @@ void Cba_ManWriteSig( Cba_Ntk_t * p, int iObj )
}
}
}
}
}
}
void
Cba_ManWriteConstant
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
void
Cba_ManWriteConcat
(
Cba_Ntk_t
*
p
,
int
iStart
,
int
nObjs
)
{
}
void
Cba_ManWriteConcat
(
Cba_Ntk_t
*
p
,
int
iStart
,
int
nObjs
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
assert
(
nObjs
>=
1
);
assert
(
nObjs
>=
1
);
...
@@ -380,7 +391,7 @@ void Cba_ManWriteConcat( Cba_Ntk_t * p, int iStart, int nObjs )
...
@@ -380,7 +391,7 @@ void Cba_ManWriteConcat( Cba_Ntk_t * p, int iStart, int nObjs )
else
assert
(
0
);
else
assert
(
0
);
Vec_StrPrintStr
(
vStr
,
"}"
);
Vec_StrPrintStr
(
vStr
,
"}"
);
}
}
void
Cba_ManWriteGate
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
void
Cba_ManWriteGate
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
int
iTerm
,
k
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
int
iTerm
,
k
;
char
*
pGateName
=
Abc_NamStr
(
p
->
pDesign
->
pMods
,
Cba_BoxNtkId
(
p
,
iObj
));
char
*
pGateName
=
Abc_NamStr
(
p
->
pDesign
->
pMods
,
Cba_BoxNtkId
(
p
,
iObj
));
...
@@ -407,7 +418,7 @@ void Cba_ManWriteGate( Cba_Ntk_t * p, int iObj )
...
@@ -407,7 +418,7 @@ void Cba_ManWriteGate( Cba_Ntk_t * p, int iObj )
}
}
Vec_StrPrintStr
(
vStr
,
");
\n
"
);
Vec_StrPrintStr
(
vStr
,
");
\n
"
);
}
}
void
Cba_ManWriteAssign
(
Cba_Ntk_t
*
p
,
int
iObj
)
static
inline
void
Cba_ManWriteAssign
(
Cba_Ntk_t
*
p
,
int
iObj
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Cba_ObjType_t
Type
=
Cba_ObjType
(
p
,
iObj
);
Cba_ObjType_t
Type
=
Cba_ObjType
(
p
,
iObj
);
...
@@ -438,31 +449,30 @@ void Cba_ManWriteAssign( Cba_Ntk_t * p, int iObj )
...
@@ -438,31 +449,30 @@ void Cba_ManWriteAssign( Cba_Ntk_t * p, int iObj )
}
}
else
if
(
nInputs
==
2
)
else
if
(
nInputs
==
2
)
{
{
if
(
Type
==
CBA_BOX_XNOR
)
if
(
Type
==
CBA_BOX_NAND
||
Type
==
CBA_BOX_NOR
||
Type
==
CBA_BOX_XNOR
||
Type
==
CBA_BOX_SHARPL
)
{
Vec_StrPrintStr
(
vStr
,
"~"
);
Vec_StrPrintStr
(
vStr
,
"~"
);
Type
=
CBA_BOX_XOR
;
}
Cba_ManWriteSig
(
p
,
iObj
-
1
);
Cba_ManWriteSig
(
p
,
iObj
-
1
);
if
(
Type
==
CBA_BOX_AND
)
if
(
Type
==
CBA_BOX_AND
||
Type
==
CBA_BOX_SHARPL
)
Vec_StrPrintStr
(
vStr
,
" & "
);
Vec_StrPrintStr
(
vStr
,
" & "
);
else
if
(
Type
==
CBA_BOX_SHARP
||
Type
==
CBA_BOX_NOR
)
Vec_StrPrintStr
(
vStr
,
" & ~"
);
else
if
(
Type
==
CBA_BOX_OR
)
else
if
(
Type
==
CBA_BOX_OR
)
Vec_StrPrintStr
(
vStr
,
" | "
);
Vec_StrPrintStr
(
vStr
,
" | "
);
else
if
(
Type
==
CBA_BOX_XOR
)
else
if
(
Type
==
CBA_BOX_NAND
)
Vec_StrPrintStr
(
vStr
,
" | ~"
);
else
if
(
Type
==
CBA_BOX_XOR
||
Type
==
CBA_BOX_XNOR
)
Vec_StrPrintStr
(
vStr
,
" ^ "
);
Vec_StrPrintStr
(
vStr
,
" ^ "
);
else
assert
(
0
);
else
assert
(
0
);
Cba_ManWriteSig
(
p
,
iObj
-
2
);
Cba_ManWriteSig
(
p
,
iObj
-
2
);
}
}
Vec_StrPrintStr
(
vStr
,
";
\n
"
);
Vec_StrPrintStr
(
vStr
,
";
\n
"
);
}
}
void
Cba_ManWriteVerilogBoxes
(
Cba_Ntk_t
*
p
)
void
Cba_ManWriteVerilogBoxes
(
Cba_Ntk_t
*
p
,
int
fUseAssign
)
{
{
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
int
iObj
,
k
,
i
,
o
,
StartPos
;
int
iObj
,
k
,
i
,
o
,
StartPos
;
Cba_NtkForEachBox
(
p
,
iObj
)
// .subckt/.gate/box (formal/actual binding)
Cba_NtkForEachBox
(
p
,
iObj
)
// .subckt/.gate/box (formal/actual binding)
{
{
Cba_Ntk_t
*
pModel
=
NULL
;
char
*
pName
=
NULL
;
// skip constants
// skip constants
if
(
Cba_ObjIsConst
(
p
,
iObj
)
)
if
(
Cba_ObjIsConst
(
p
,
iObj
)
)
continue
;
continue
;
...
@@ -473,28 +483,24 @@ void Cba_ManWriteVerilogBoxes( Cba_Ntk_t * p )
...
@@ -473,28 +483,24 @@ void Cba_ManWriteVerilogBoxes( Cba_Ntk_t * p )
continue
;
continue
;
}
}
// write primitives as assign-statements
// write primitives as assign-statements
if
(
Cba_BoxNtkName
(
p
,
iObj
)
==
NULL
)
if
(
!
Cba_ObjIsBoxUser
(
p
,
iObj
)
&&
fUseAssign
)
{
{
Cba_ManWriteAssign
(
p
,
iObj
);
Cba_ManWriteAssign
(
p
,
iObj
);
continue
;
continue
;
}
}
// write header
// write header
if
(
Cba_ObjIsBoxUser
(
p
,
iObj
)
)
pModel
=
Cba_BoxNtk
(
p
,
iObj
);
else
if
(
Cba_BoxNtkId
(
p
,
iObj
)
)
pName
=
Cba_BoxNtkName
(
p
,
iObj
);
else
assert
(
0
);
StartPos
=
Vec_StrSize
(
vStr
);
StartPos
=
Vec_StrSize
(
vStr
);
if
(
Cba_ObjIsBoxUser
(
p
,
iObj
)
)
{
int
Value
,
Beg
,
End
,
Range
;
Cba_Ntk_t
*
pModel
=
Cba_BoxNtk
(
p
,
iObj
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
pModel
?
Cba_NtkName
(
pModel
)
:
pName
);
Vec_StrPrintStr
(
vStr
,
Cba_NtkName
(
pModel
)
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
Cba_ObjName
(
p
,
iObj
)
?
Cba_ObjNameStr
(
p
,
iObj
)
:
""
);
Vec_StrPrintStr
(
vStr
,
Cba_ObjName
(
p
,
iObj
)
?
Cba_ObjNameStr
(
p
,
iObj
)
:
""
);
Vec_StrPrintStr
(
vStr
,
" ("
);
// write arguments
// write arguments
i
=
o
=
0
;
i
=
o
=
0
;
Vec_StrPrintStr
(
vStr
,
" ("
);
if
(
pModel
)
{
int
Value
,
Beg
,
End
,
Range
;
assert
(
Cba_NtkInfoNum
(
pModel
)
);
assert
(
Cba_NtkInfoNum
(
pModel
)
);
Vec_IntForEachEntryTriple
(
&
pModel
->
vInfo
,
Value
,
Beg
,
End
,
k
)
Vec_IntForEachEntryTriple
(
&
pModel
->
vInfo
,
Value
,
Beg
,
End
,
k
)
{
{
...
@@ -518,35 +524,59 @@ void Cba_ManWriteVerilogBoxes( Cba_Ntk_t * p )
...
@@ -518,35 +524,59 @@ void Cba_ManWriteVerilogBoxes( Cba_Ntk_t * p )
else
assert
(
0
);
else
assert
(
0
);
Vec_StrPrintStr
(
vStr
,
")"
);
Vec_StrPrintStr
(
vStr
,
")"
);
}
}
assert
(
i
==
Cba_BoxBiNum
(
p
,
iObj
)
);
assert
(
o
==
Cba_BoxBoNum
(
p
,
iObj
)
);
}
}
else
else
{
{
int
pRanges
[
8
];
char
pSymbs
[
8
];
int
iTerm
,
k
,
Range
,
iSig
=
0
;
int
nSigs
=
Cba_NtkNameRanges
(
pName
,
pRanges
,
pSymbs
);
Vec_Int_t
*
vBits
=
Cba_BoxCollectRanges
(
p
,
iObj
);
for
(
k
=
0
;
k
<
nSigs
;
k
++
)
char
*
pName
=
Cba_NtkGenerateName
(
p
,
Cba_ObjType
(
p
,
iObj
),
vBits
);
char
*
pSymbs
=
Cba_ManPrimSymb
(
p
->
pDesign
,
Cba_ObjType
(
p
,
iObj
)
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
pName
);
Vec_StrPrintStr
(
vStr
,
" "
);
Vec_StrPrintStr
(
vStr
,
Cba_ObjName
(
p
,
iObj
)
?
Cba_ObjNameStr
(
p
,
iObj
)
:
""
);
Vec_StrPrintStr
(
vStr
,
" ("
);
// write inputs
Cba_BoxForEachBiMain
(
p
,
iObj
,
iTerm
,
k
)
{
{
Vec_StrPrintStr
(
vStr
,
k
?
", "
:
""
);
Range
=
Vec_IntEntry
(
vBits
,
iSig
);
Vec_StrPrintStr
(
vStr
,
iSig
?
", "
:
""
);
if
(
Vec_StrSize
(
vStr
)
>
StartPos
+
70
)
if
(
Vec_StrSize
(
vStr
)
>
StartPos
+
70
)
{
{
StartPos
=
Vec_StrSize
(
vStr
);
StartPos
=
Vec_StrSize
(
vStr
);
Vec_StrPrintStr
(
vStr
,
"
\n
"
);
Vec_StrPrintStr
(
vStr
,
"
\n
"
);
}
}
Vec_StrPrintStr
(
vStr
,
"."
);
Vec_StrPrintStr
(
vStr
,
"."
);
Vec_StrPush
(
vStr
,
pSymbs
[
k
]
);
Vec_StrPush
(
vStr
,
pSymbs
[
iSig
]
);
Vec_StrPrintStr
(
vStr
,
"("
);
Vec_StrPrintStr
(
vStr
,
"("
);
if
(
k
<
nSigs
-
1
)
Cba_ManWriteConcat
(
p
,
iTerm
,
Range
);
Cba_ManWriteConcat
(
p
,
Cba_BoxBi
(
p
,
iObj
,
i
),
pRanges
[
k
]
),
i
+=
pRanges
[
k
];
else
Cba_ManWriteConcat
(
p
,
Cba_BoxBo
(
p
,
iObj
,
o
),
pRanges
[
k
]
),
o
+=
pRanges
[
k
];
Vec_StrPrintStr
(
vStr
,
")"
);
Vec_StrPrintStr
(
vStr
,
")"
);
iSig
++
;
}
}
Cba_BoxForEachBoMain
(
p
,
iObj
,
iTerm
,
k
)
{
Range
=
Vec_IntEntry
(
vBits
,
iSig
);
Vec_StrPrintStr
(
vStr
,
iSig
?
", "
:
""
);
if
(
Vec_StrSize
(
vStr
)
>
StartPos
+
70
)
{
StartPos
=
Vec_StrSize
(
vStr
);
Vec_StrPrintStr
(
vStr
,
"
\n
"
);
}
Vec_StrPrintStr
(
vStr
,
"."
);
Vec_StrPush
(
vStr
,
pSymbs
[
iSig
]
);
Vec_StrPrintStr
(
vStr
,
"("
);
Cba_ManWriteConcat
(
p
,
iTerm
,
Range
);
Vec_StrPrintStr
(
vStr
,
")"
);
iSig
++
;
}
assert
(
iSig
==
Vec_IntSize
(
vBits
)
);
}
}
Vec_StrPrintStr
(
vStr
,
");
\n
"
);
Vec_StrPrintStr
(
vStr
,
");
\n
"
);
assert
(
i
==
Cba_BoxBiNum
(
p
,
iObj
)
);
assert
(
o
==
Cba_BoxBoNum
(
p
,
iObj
)
);
}
}
}
}
void
Cba_ManWriteVerilogNtk
(
Cba_Ntk_t
*
p
)
void
Cba_ManWriteVerilogNtk
(
Cba_Ntk_t
*
p
,
int
fUseAssign
)
{
{
char
*
pKeyword
[
4
]
=
{
"wire "
,
"input "
,
"output "
,
"inout "
};
char
*
pKeyword
[
4
]
=
{
"wire "
,
"input "
,
"output "
,
"inout "
};
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
Vec_Str_t
*
vStr
=
p
->
pDesign
->
vOut
;
...
@@ -622,10 +652,10 @@ void Cba_ManWriteVerilogNtk( Cba_Ntk_t * p )
...
@@ -622,10 +652,10 @@ void Cba_ManWriteVerilogNtk( Cba_Ntk_t * p )
}
}
Vec_StrPrintStr
(
vStr
,
"
\n
"
);
Vec_StrPrintStr
(
vStr
,
"
\n
"
);
// write objects
// write objects
Cba_ManWriteVerilogBoxes
(
p
);
Cba_ManWriteVerilogBoxes
(
p
,
fUseAssign
);
Vec_StrPrintStr
(
vStr
,
"endmodule
\n\n
"
);
Vec_StrPrintStr
(
vStr
,
"endmodule
\n\n
"
);
}
}
void
Cba_ManWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
)
void
Cba_ManWriteVerilog
(
char
*
pFileName
,
Cba_Man_t
*
p
,
int
fUseAssign
)
{
{
Cba_Ntk_t
*
pNtk
;
int
i
;
Cba_Ntk_t
*
pNtk
;
int
i
;
// check the library
// check the library
...
@@ -637,9 +667,9 @@ void Cba_ManWriteVerilog( char * pFileName, Cba_Man_t * p )
...
@@ -637,9 +667,9 @@ void Cba_ManWriteVerilog( char * pFileName, Cba_Man_t * p )
// derive the stream
// derive the stream
p
->
vOut
=
Vec_StrAlloc
(
10000
);
p
->
vOut
=
Vec_StrAlloc
(
10000
);
p
->
vOut2
=
Vec_StrAlloc
(
1000
);
p
->
vOut2
=
Vec_StrAlloc
(
1000
);
Cba_ManAssignInternNames
(
p
);
Cba_ManAssignIntern
Word
Names
(
p
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManWriteVerilogNtk
(
pNtk
);
Cba_ManWriteVerilogNtk
(
pNtk
,
fUseAssign
);
// dump into file
// dump into file
if
(
p
->
vOut
&&
Vec_StrSize
(
p
->
vOut
)
>
0
)
if
(
p
->
vOut
&&
Vec_StrSize
(
p
->
vOut
)
>
0
)
{
{
...
...
src/misc/vec/vecStr.h
View file @
2d90b916
...
@@ -746,6 +746,39 @@ static inline int Vec_StrCountSmaller( Vec_Str_t * p, char Entry )
...
@@ -746,6 +746,39 @@ static inline int Vec_StrCountSmaller( Vec_Str_t * p, char Entry )
/**Function*************************************************************
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
int
Vec_StrCountEntryLit
(
Vec_Str_t
*
p
,
char
Entry
)
{
int
i
,
Counter
=
0
;
for
(
i
=
0
;
i
<
p
->
nSize
;
i
++
)
Counter
+=
(
Abc_Lit2Var
((
int
)
p
->
pArray
[
i
])
==
Entry
);
return
Counter
;
}
static
inline
int
Vec_StrCountLargerLit
(
Vec_Str_t
*
p
,
char
Entry
)
{
int
i
,
Counter
=
0
;
for
(
i
=
0
;
i
<
p
->
nSize
;
i
++
)
Counter
+=
(
Abc_Lit2Var
((
int
)
p
->
pArray
[
i
])
>
Entry
);
return
Counter
;
}
static
inline
int
Vec_StrCountSmallerLit
(
Vec_Str_t
*
p
,
char
Entry
)
{
int
i
,
Counter
=
0
;
for
(
i
=
0
;
i
<
p
->
nSize
;
i
++
)
Counter
+=
(
Abc_Lit2Var
((
int
)
p
->
pArray
[
i
])
<
Entry
);
return
Counter
;
}
/**Function*************************************************************
Synopsis [Compares two strings.]
Synopsis [Compares two strings.]
Description []
Description []
...
...
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