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
d7099e7a
Commit
d7099e7a
authored
Feb 05, 2015
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding binary dump to CBA.
parent
35ab8cbd
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
413 additions
and
11 deletions
+413
-11
abclib.dsp
+12
-0
src/base/cba/cba.h
+19
-9
src/base/cba/cbaCba.c
+239
-0
src/base/cba/cbaCom.c
+14
-1
src/base/cba/cbaNtk.c
+1
-1
src/base/cba/cbaReadSmt.c
+66
-0
src/base/cba/cbaWriteSmt.c
+52
-0
src/base/cba/module.make
+3
-0
src/misc/vec/vecStr.h
+7
-0
No files found.
abclib.dsp
View file @
d7099e7a
...
@@ -783,6 +783,10 @@ SOURCE=.\src\base\cba\cbaBlast.c
...
@@ -783,6 +783,10 @@ SOURCE=.\src\base\cba\cbaBlast.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaCba.c
# End Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaCom.c
SOURCE=.\src\base\cba\cbaCom.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
...
@@ -819,6 +823,10 @@ SOURCE=.\src\base\cba\cbaReadBlif.c
...
@@ -819,6 +823,10 @@ SOURCE=.\src\base\cba\cbaReadBlif.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaReadSmt.c
# End Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaReadVer.c
SOURCE=.\src\base\cba\cbaReadVer.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
...
@@ -827,6 +835,10 @@ SOURCE=.\src\base\cba\cbaWriteBlif.c
...
@@ -827,6 +835,10 @@ SOURCE=.\src\base\cba\cbaWriteBlif.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaWriteSmt.c
# End Source File
# Begin Source File
SOURCE=.\src\base\cba\cbaWriteVer.c
SOURCE=.\src\base\cba\cbaWriteVer.c
# End Source File
# End Source File
# End Group
# End Group
...
...
src/base/cba/cba.h
View file @
d7099e7a
...
@@ -71,11 +71,13 @@ typedef enum {
...
@@ -71,11 +71,13 @@ typedef enum {
CBA_BOX_RXOR
,
CBA_BOX_RXOR
,
CBA_BOX_RXNOR
,
CBA_BOX_RXNOR
,
CBA_BOX_N1MUX
,
CBA_BOX_SEL
,
CBA_BOX_SEL
,
CBA_BOX_PSEL
,
CBA_BOX_PSEL
,
CBA_BOX_ENC
,
CBA_BOX_ENC
,
CBA_BOX_PENC
,
CBA_BOX_PENC
,
CBA_BOX_DEC
,
CBA_BOX_DEC
,
CBA_BOX_EDEC
,
CBA_BOX_ADD
,
CBA_BOX_ADD
,
CBA_BOX_SUB
,
CBA_BOX_SUB
,
...
@@ -84,6 +86,7 @@ typedef enum {
...
@@ -84,6 +86,7 @@ typedef enum {
CBA_BOX_MOD
,
CBA_BOX_MOD
,
CBA_BOX_REM
,
CBA_BOX_REM
,
CBA_BOX_POW
,
CBA_BOX_POW
,
CBA_BOX_MIN
,
CBA_BOX_ABS
,
CBA_BOX_ABS
,
CBA_BOX_LTHAN
,
CBA_BOX_LTHAN
,
...
@@ -113,7 +116,7 @@ typedef enum {
...
@@ -113,7 +116,7 @@ typedef enum {
CBA_BOX_DFF
,
CBA_BOX_DFF
,
CBA_BOX_DFFRS
,
CBA_BOX_DFFRS
,
CBA_BOX_UNKNOWN
//
50
CBA_BOX_UNKNOWN
//
67
}
Cba_ObjType_t
;
}
Cba_ObjType_t
;
...
@@ -156,6 +159,7 @@ struct Cba_Man_t_
...
@@ -156,6 +159,7 @@ struct Cba_Man_t_
int
iRoot
;
// root network
int
iRoot
;
// root network
int
nNtks
;
// number of current networks
int
nNtks
;
// number of current networks
Cba_Ntk_t
*
pNtks
;
// networks
Cba_Ntk_t
*
pNtks
;
// networks
Vec_Int_t
vInfo
;
// box info
// user data
// user data
Vec_Int_t
vBuf2RootNtk
;
Vec_Int_t
vBuf2RootNtk
;
Vec_Int_t
vBuf2RootObj
;
Vec_Int_t
vBuf2RootObj
;
...
@@ -176,6 +180,7 @@ static inline Cba_Ntk_t * Cba_ManNtkFind( Cba_Man_t * p, char * pName ) { r
...
@@ -176,6 +180,7 @@ 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
int
Cba_ManInfoNum
(
Cba_Man_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vInfo
)
>>
2
;
}
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
;
}
...
@@ -186,7 +191,7 @@ static inline Cba_Ntk_t * Cba_NtkCopyNtk(Cba_Man_t * pNew, Cba_Ntk_t * p) { r
...
@@ -186,7 +191,7 @@ static inline Cba_Ntk_t * Cba_NtkCopyNtk(Cba_Man_t * pNew, Cba_Ntk_t * p) { r
static
inline
void
Cba_NtkSetCopy
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
p
->
iCopy
==
-
1
);
p
->
iCopy
=
i
;
}
static
inline
void
Cba_NtkSetCopy
(
Cba_Ntk_t
*
p
,
int
i
)
{
assert
(
p
->
iCopy
==
-
1
);
p
->
iCopy
=
i
;
}
static
inline
int
Cba_NtkObjNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrSize
(
&
p
->
vType
);
}
static
inline
int
Cba_NtkObjNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrSize
(
&
p
->
vType
);
}
static
inline
int
Cba_Ntk
AllocNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCap
(
&
p
->
vType
);
}
static
inline
int
Cba_Ntk
ObjNumAlloc
(
Cba_Ntk_t
*
p
)
{
return
Vec_StrCap
(
&
p
->
vType
);
}
static
inline
int
Cba_NtkPiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPiNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vInputs
);
}
static
inline
int
Cba_NtkPoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vOutputs
);
}
static
inline
int
Cba_NtkPoNum
(
Cba_Ntk_t
*
p
)
{
return
Vec_IntSize
(
&
p
->
vOutputs
);
}
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
);
}
...
@@ -207,9 +212,9 @@ static inline Cba_Ntk_t * Cba_NtkHostNtk( Cba_Ntk_t * p ) { r
...
@@ -207,9 +212,9 @@ static inline Cba_Ntk_t * Cba_NtkHostNtk( Cba_Ntk_t * p ) { r
static
inline
int
Cba_NtkHostObj
(
Cba_Ntk_t
*
p
)
{
return
p
->
iBoxObj
;
}
static
inline
int
Cba_NtkHostObj
(
Cba_Ntk_t
*
p
)
{
return
p
->
iBoxObj
;
}
static
inline
void
Cba_NtkSetHost
(
Cba_Ntk_t
*
p
,
int
n
,
int
i
)
{
assert
(
p
->
iBoxNtk
==
-
1
);
p
->
iBoxNtk
=
n
;
p
->
iBoxObj
=
i
;
}
static
inline
void
Cba_NtkSetHost
(
Cba_Ntk_t
*
p
,
int
n
,
int
i
)
{
assert
(
p
->
iBoxNtk
==
-
1
);
p
->
iBoxNtk
=
n
;
p
->
iBoxObj
=
i
;
}
static
inline
void
Cba_NtkStartNames
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
AllocNum
(
p
));
Vec_IntFill
(
&
p
->
vName
,
Cba_NtkAllocNum
(
p
),
0
);
}
static
inline
void
Cba_NtkStartNames
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
ObjNumAlloc
(
p
));
Vec_IntFill
(
&
p
->
vName
,
Cba_NtkObjNumAlloc
(
p
),
0
);
}
static
inline
void
Cba_NtkStartRanges
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
AllocNum
(
p
));
Vec_IntFill
(
&
p
->
vRange
,
Cba_NtkAllocNum
(
p
),
0
);
}
static
inline
void
Cba_NtkStartRanges
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
ObjNumAlloc
(
p
));
Vec_IntFill
(
&
p
->
vRange
,
Cba_NtkObjNumAlloc
(
p
),
0
);
}
static
inline
void
Cba_NtkStartCopies
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
AllocNum
(
p
));
Vec_IntFill
(
&
p
->
vCopy
,
Cba_NtkAllocNum
(
p
),
-
1
);
}
static
inline
void
Cba_NtkStartCopies
(
Cba_Ntk_t
*
p
)
{
assert
(
Cba_Ntk
ObjNumAlloc
(
p
));
Vec_IntFill
(
&
p
->
vCopy
,
Cba_NtkObjNumAlloc
(
p
),
-
1
);
}
static
inline
void
Cba_NtkFreeNames
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vName
);
}
static
inline
void
Cba_NtkFreeNames
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vName
);
}
static
inline
void
Cba_NtkFreeRanges
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vRange
);
}
static
inline
void
Cba_NtkFreeRanges
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vRange
);
}
static
inline
void
Cba_NtkFreeCopies
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vCopy
);
}
static
inline
void
Cba_NtkFreeCopies
(
Cba_Ntk_t
*
p
)
{
Vec_IntErase
(
&
p
->
vCopy
);
}
...
@@ -247,8 +252,8 @@ static inline void Cba_ObjSetName( Cba_Ntk_t * p, int i, int x ) { a
...
@@ -247,8 +252,8 @@ static inline void Cba_ObjSetName( Cba_Ntk_t * p, int i, int x ) { a
static
inline
void
Cba_ObjSetRange
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjRange
(
p
,
i
)
==
0
);
Vec_IntWriteEntry
(
&
p
->
vRange
,
i
,
x
);
}
static
inline
void
Cba_ObjSetRange
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjRange
(
p
,
i
)
==
0
);
Vec_IntWriteEntry
(
&
p
->
vRange
,
i
,
x
);
}
static
inline
void
Cba_ObjSetCopy
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjCopy
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vCopy
,
i
,
x
);
}
static
inline
void
Cba_ObjSetCopy
(
Cba_Ntk_t
*
p
,
int
i
,
int
x
)
{
assert
(
Cba_ObjCopy
(
p
,
i
)
==
-
1
);
Vec_IntWriteEntry
(
&
p
->
vCopy
,
i
,
x
);
}
static
inline
int
Cba_BoxBiNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
-
1
;
assert
(
Cba_ObjIsBox
(
p
,
i
));
while
(
i
<
Cba_NtkObjNum
(
p
)
&&
Cba_ObjIsBi
(
p
,
--
i
));
return
s
-
i
;
}
static
inline
int
Cba_BoxBiNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
-
1
;
assert
(
Cba_ObjIsBox
(
p
,
i
));
while
(
--
i
>=
0
&&
Cba_ObjIsBi
(
p
,
i
));
return
s
-
i
;
}
static
inline
int
Cba_BoxBoNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
+
1
;
assert
(
Cba_ObjIsBox
(
p
,
i
));
while
(
i
<
Cba_NtkObjNum
(
p
)
&&
Cba_ObjIsBo
(
p
,
++
i
));
return
i
-
s
;
}
static
inline
int
Cba_BoxBoNum
(
Cba_Ntk_t
*
p
,
int
i
)
{
int
s
=
i
+
1
;
assert
(
Cba_ObjIsBox
(
p
,
i
));
while
(
++
i
<
Cba_NtkObjNum
(
p
)
&&
Cba_ObjIsBo
(
p
,
i
));
return
i
-
s
;
}
static
inline
int
Cba_BoxSize
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
1
+
Cba_BoxBiNum
(
p
,
i
)
+
Cba_BoxBoNum
(
p
,
i
);
}
static
inline
int
Cba_BoxSize
(
Cba_Ntk_t
*
p
,
int
i
)
{
return
1
+
Cba_BoxBiNum
(
p
,
i
)
+
Cba_BoxBoNum
(
p
,
i
);
}
static
inline
int
Cba_BoxBi
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
-
1
-
i
;
}
static
inline
int
Cba_BoxBi
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
-
1
-
i
;
}
static
inline
int
Cba_BoxBo
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
+
1
+
i
;
}
static
inline
int
Cba_BoxBo
(
Cba_Ntk_t
*
p
,
int
b
,
int
i
)
{
assert
(
Cba_ObjIsBox
(
p
,
b
));
return
b
+
1
+
i
;
}
...
@@ -441,7 +446,7 @@ static inline void Cba_NtkDup( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
...
@@ -441,7 +446,7 @@ static inline void Cba_NtkDup( Cba_Ntk_t * pNew, Cba_Ntk_t * p )
Cba_NtkForEachCo
(
p
,
iObj
)
Cba_NtkForEachCo
(
p
,
iObj
)
Cba_ObjSetFanin
(
pNew
,
Cba_ObjCopy
(
p
,
iObj
),
Cba_ObjCopy
(
p
,
Cba_ObjFanin
(
p
,
iObj
))
);
Cba_ObjSetFanin
(
pNew
,
Cba_ObjCopy
(
p
,
iObj
),
Cba_ObjCopy
(
p
,
Cba_ObjFanin
(
p
,
iObj
))
);
//Cba_NtkFreeCopies( p ); // needed for host ntk
//Cba_NtkFreeCopies( p ); // needed for host ntk
assert
(
Cba_NtkObjNum
(
pNew
)
==
Cba_Ntk
AllocNum
(
pNew
)
);
assert
(
Cba_NtkObjNum
(
pNew
)
==
Cba_Ntk
ObjNumAlloc
(
pNew
)
);
}
}
static
inline
void
Cba_NtkDupUserBoxes
(
Cba_Ntk_t
*
pNew
,
Cba_Ntk_t
*
p
)
static
inline
void
Cba_NtkDupUserBoxes
(
Cba_Ntk_t
*
pNew
,
Cba_Ntk_t
*
p
)
{
{
...
@@ -578,6 +583,7 @@ static inline void Cba_ManFree( Cba_Man_t * p )
...
@@ -578,6 +583,7 @@ static inline void Cba_ManFree( Cba_Man_t * p )
Vec_IntErase
(
&
p
->
vBuf2LeafObj
);
Vec_IntErase
(
&
p
->
vBuf2LeafObj
);
Vec_IntErase
(
&
p
->
vBuf2RootNtk
);
Vec_IntErase
(
&
p
->
vBuf2RootNtk
);
Vec_IntErase
(
&
p
->
vBuf2RootObj
);
Vec_IntErase
(
&
p
->
vBuf2RootObj
);
Vec_IntErase
(
&
p
->
vInfo
);
Abc_NamDeref
(
p
->
pStrs
);
Abc_NamDeref
(
p
->
pStrs
);
Abc_NamDeref
(
p
->
pMods
);
Abc_NamDeref
(
p
->
pMods
);
ABC_FREE
(
p
->
pName
);
ABC_FREE
(
p
->
pName
);
...
@@ -747,6 +753,9 @@ extern Vec_Ptr_t * Abc_FrameExportPtr();
...
@@ -747,6 +753,9 @@ extern Vec_Ptr_t * Abc_FrameExportPtr();
extern
Gia_Man_t
*
Cba_ManExtract
(
Cba_Man_t
*
p
,
int
fBuffers
,
int
fVerbose
);
extern
Gia_Man_t
*
Cba_ManExtract
(
Cba_Man_t
*
p
,
int
fBuffers
,
int
fVerbose
);
extern
Cba_Man_t
*
Cba_ManInsertGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
);
extern
Cba_Man_t
*
Cba_ManInsertGia
(
Cba_Man_t
*
p
,
Gia_Man_t
*
pGia
);
extern
void
*
Cba_ManInsertAbc
(
Cba_Man_t
*
p
,
void
*
pAbc
);
extern
void
*
Cba_ManInsertAbc
(
Cba_Man_t
*
p
,
void
*
pAbc
);
/*=== cbaCba.c ===============================================================*/
extern
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
);
extern
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
);
/*=== cbaNtk.c ===============================================================*/
/*=== cbaNtk.c ===============================================================*/
extern
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
);
extern
void
Cba_ManAssignInternNames
(
Cba_Man_t
*
p
);
extern
Cba_Man_t
*
Cba_ManCollapse
(
Cba_Man_t
*
p
);
extern
Cba_Man_t
*
Cba_ManCollapse
(
Cba_Man_t
*
p
);
...
@@ -763,6 +772,8 @@ extern void Prs_ManVecFree( Vec_Ptr_t * vPrs );
...
@@ -763,6 +772,8 @@ extern void Prs_ManVecFree( Vec_Ptr_t * vPrs );
extern
Cba_Man_t
*
Prs_ManBuildCba
(
char
*
pFileName
,
Vec_Ptr_t
*
vDes
);
extern
Cba_Man_t
*
Prs_ManBuildCba
(
char
*
pFileName
,
Vec_Ptr_t
*
vDes
);
/*=== cbaReadBlif.c ==========================================================*/
/*=== cbaReadBlif.c ==========================================================*/
extern
Vec_Ptr_t
*
Prs_ManReadBlif
(
char
*
pFileName
);
extern
Vec_Ptr_t
*
Prs_ManReadBlif
(
char
*
pFileName
);
/*=== cbaReadSmt.c ===========================================================*/
extern
Vec_Ptr_t
*
Prs_ManReadSmt
(
char
*
pFileName
);
/*=== cbaReadVer.c ===========================================================*/
/*=== cbaReadVer.c ===========================================================*/
extern
Vec_Ptr_t
*
Prs_ManReadVerilog
(
char
*
pFileName
);
extern
Vec_Ptr_t
*
Prs_ManReadVerilog
(
char
*
pFileName
);
/*=== cbaWriteBlif.c =========================================================*/
/*=== cbaWriteBlif.c =========================================================*/
...
@@ -772,7 +783,6 @@ extern void Cba_ManWriteBlif( char * pFileName, Cba_Man_t * p );
...
@@ -772,7 +783,6 @@ extern void Cba_ManWriteBlif( char * pFileName, Cba_Man_t * p );
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
);
ABC_NAMESPACE_HEADER_END
ABC_NAMESPACE_HEADER_END
#endif
#endif
...
...
src/base/cba/cbaCba.c
0 → 100644
View file @
d7099e7a
/**CFile****************************************************************
FileName [cbaCba.c]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Hierarchical word-level netlist.]
Synopsis [Verilog parser.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - November 29, 2014.]
Revision [$Id: cbaCba.c,v 1.00 2014/11/29 00:00:00 alanmi Exp $]
***********************************************************************/
#include "cba.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis [Read CBA.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
CbaManReadCbaLine
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
char
*
pBuffer
,
char
*
pLimit
)
{
char
c
;
while
(
(
c
=
Vec_StrEntry
(
vOut
,
(
*
pPos
)
++
))
!=
'\n'
&&
pBuffer
<
pLimit
)
*
pBuffer
++
=
c
;
*
pBuffer
=
0
;
return
pBuffer
<
pLimit
;
}
int
CbaManReadCbaNameAndNums
(
char
*
pBuffer
,
int
*
Num1
,
int
*
Num2
,
int
*
Num3
)
{
*
Num1
=
*
Num2
=
*
Num3
=
-
1
;
// read name
while
(
*
pBuffer
&&
*
pBuffer
!=
' '
)
pBuffer
++
;
if
(
!*
pBuffer
)
return
0
;
assert
(
*
pBuffer
==
' '
);
*
pBuffer
=
0
;
// read Num1
*
Num1
=
atoi
(
++
pBuffer
);
while
(
*
pBuffer
&&
*
pBuffer
!=
' '
)
pBuffer
++
;
if
(
!*
pBuffer
)
return
0
;
// read Num2
assert
(
*
pBuffer
==
' '
);
*
Num2
=
atoi
(
++
pBuffer
);
while
(
*
pBuffer
&&
*
pBuffer
!=
' '
)
pBuffer
++
;
if
(
!*
pBuffer
)
return
1
;
// read Num3
assert
(
*
pBuffer
==
' '
);
*
Num3
=
atoi
(
++
pBuffer
);
return
1
;
}
void
Cba_ManReadCbaVecStr
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
Vec_Str_t
*
p
,
int
nSize
)
{
memcpy
(
Vec_StrArray
(
p
),
Vec_StrArray
(
vOut
)
+
*
pPos
,
nSize
);
*
pPos
+=
nSize
;
p
->
nSize
=
nSize
;
assert
(
Vec_StrSize
(
p
)
==
Vec_StrCap
(
p
)
);
}
void
Cba_ManReadCbaVecInt
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
Vec_Int_t
*
p
,
int
nSize
)
{
memcpy
(
Vec_IntArray
(
p
),
Vec_StrArray
(
vOut
)
+
*
pPos
,
nSize
);
*
pPos
+=
nSize
;
p
->
nSize
=
nSize
/
4
;
assert
(
Vec_IntSize
(
p
)
==
Vec_IntCap
(
p
)
);
}
void
Cba_ManReadCbaNtk
(
Vec_Str_t
*
vOut
,
int
*
pPos
,
Cba_Ntk_t
*
pNtk
)
{
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vInputs
,
4
*
Cba_NtkPiNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vOutputs
,
4
*
Cba_NtkPoNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecStr
(
vOut
,
pPos
,
&
pNtk
->
vType
,
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vIndex
,
4
*
Cba_NtkObjNumAlloc
(
pNtk
)
);
Cba_ManReadCbaVecInt
(
vOut
,
pPos
,
&
pNtk
->
vFanin
,
4
*
Cba_NtkObjNumAlloc
(
pNtk
)
);
}
Cba_Man_t
*
Cba_ManReadCbaInt
(
Vec_Str_t
*
vOut
)
{
Cba_Man_t
*
p
;
Cba_Ntk_t
*
pNtk
;
char
Buffer
[
1000
]
=
"#"
;
int
i
,
NameId
,
Pos
=
0
,
Num1
,
Num2
,
Num3
;
while
(
Buffer
[
0
]
==
'#'
)
if
(
!
CbaManReadCbaLine
(
vOut
,
&
Pos
,
Buffer
,
Buffer
+
1000
)
)
return
NULL
;
if
(
!
CbaManReadCbaNameAndNums
(
Buffer
,
&
Num1
,
&
Num2
,
&
Num3
)
)
return
NULL
;
// start manager
assert
(
Num1
>
0
&&
Num2
>=
0
);
p
=
Cba_ManAlloc
(
Buffer
,
Num1
);
Vec_IntGrow
(
&
p
->
vInfo
,
4
*
Num2
);
// start networks
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
{
if
(
!
CbaManReadCbaLine
(
vOut
,
&
Pos
,
Buffer
,
Buffer
+
1000
)
)
{
Cba_ManFree
(
p
);
return
NULL
;
}
if
(
!
CbaManReadCbaNameAndNums
(
Buffer
,
&
Num1
,
&
Num2
,
&
Num3
)
)
{
Cba_ManFree
(
p
);
return
NULL
;
}
assert
(
Num1
>
0
&&
Num2
>
0
&&
Num3
>
0
);
NameId
=
Abc_NamStrFindOrAdd
(
p
->
pStrs
,
Buffer
,
NULL
);
Cba_NtkAlloc
(
pNtk
,
NameId
,
Num1
,
Num2
,
Num3
);
}
// read networks
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManReadCbaNtk
(
vOut
,
&
Pos
,
pNtk
);
Cba_ManReadCbaVecInt
(
vOut
,
&
Pos
,
&
p
->
vInfo
,
4
*
Vec_IntSize
(
&
p
->
vInfo
)
);
assert
(
Pos
==
Vec_StrSize
(
vOut
)
);
return
p
;
}
Cba_Man_t
*
Cba_ManReadCba
(
char
*
pFileName
)
{
Cba_Man_t
*
p
;
FILE
*
pFile
;
Vec_Str_t
*
vOut
;
int
nFileSize
;
pFile
=
fopen
(
pFileName
,
"rb"
);
if
(
pFile
==
NULL
)
{
printf
(
"Cannot open file
\"
%s
\"
for reading.
\n
"
,
pFileName
);
return
NULL
;
}
// get the file size, in bytes
fseek
(
pFile
,
0
,
SEEK_END
);
nFileSize
=
ftell
(
pFile
);
rewind
(
pFile
);
// load the contents
vOut
=
Vec_StrAlloc
(
nFileSize
);
vOut
->
nSize
=
vOut
->
nCap
;
assert
(
nFileSize
==
Vec_StrSize
(
vOut
)
);
nFileSize
=
fread
(
Vec_StrArray
(
vOut
),
1
,
Vec_StrSize
(
vOut
),
pFile
);
assert
(
nFileSize
==
Vec_StrSize
(
vOut
)
);
fclose
(
pFile
);
// read the library
p
=
Cba_ManReadCbaInt
(
vOut
);
if
(
p
!=
NULL
)
{
ABC_FREE
(
p
->
pSpec
);
p
->
pSpec
=
Abc_UtilStrsav
(
pFileName
);
}
Vec_StrFree
(
vOut
);
return
p
;
}
/**Function*************************************************************
Synopsis [Write CBA.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Cba_ManWriteCbaNtk
(
Vec_Str_t
*
vOut
,
Cba_Ntk_t
*
pNtk
)
{
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vInputs
),
4
*
Cba_NtkPiNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vOutputs
),
4
*
Cba_NtkPoNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_StrArray
(
&
pNtk
->
vType
),
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vIndex
),
4
*
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
pNtk
->
vFanin
),
4
*
Cba_NtkObjNum
(
pNtk
)
);
}
void
Cba_ManWriteCbaInt
(
Vec_Str_t
*
vOut
,
Cba_Man_t
*
p
)
{
char
Buffer
[
1000
];
Cba_Ntk_t
*
pNtk
;
int
i
;
sprintf
(
Buffer
,
"# Design
\"
%s
\"
written by ABC on %s
\n
"
,
Cba_ManName
(
p
),
Extra_TimeStamp
()
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
// write short info
sprintf
(
Buffer
,
"%s %d %d
\n
"
,
Cba_ManName
(
p
),
Cba_ManNtkNum
(
p
),
Cba_ManInfoNum
(
p
)
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
{
sprintf
(
Buffer
,
"%s %d %d %d
\n
"
,
Cba_NtkName
(
pNtk
),
Cba_NtkPiNum
(
pNtk
),
Cba_NtkPoNum
(
pNtk
),
Cba_NtkObjNum
(
pNtk
)
);
Vec_StrPrintStr
(
vOut
,
Buffer
);
}
Cba_ManForEachNtk
(
p
,
pNtk
,
i
)
Cba_ManWriteCbaNtk
(
vOut
,
pNtk
);
Vec_StrPushBuffer
(
vOut
,
(
char
*
)
Vec_IntArray
(
&
p
->
vInfo
),
16
*
Cba_ManInfoNum
(
p
)
);
}
void
Cba_ManWriteCba
(
char
*
pFileName
,
Cba_Man_t
*
p
)
{
Vec_Str_t
*
vOut
;
assert
(
p
->
pMioLib
==
NULL
);
vOut
=
Vec_StrAlloc
(
10000
);
Cba_ManWriteCbaInt
(
vOut
,
p
);
if
(
Vec_StrSize
(
vOut
)
>
0
)
{
FILE
*
pFile
=
fopen
(
pFileName
,
"wb"
);
if
(
pFile
==
NULL
)
printf
(
"Cannot open file
\"
%s
\"
for writing.
\n
"
,
pFileName
);
else
{
fwrite
(
Vec_StrArray
(
vOut
),
1
,
Vec_StrSize
(
vOut
),
pFile
);
fclose
(
pFile
);
}
}
Vec_StrFree
(
vOut
);
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END
src/base/cba/cbaCom.c
View file @
d7099e7a
...
@@ -172,7 +172,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -172,7 +172,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
(
pFile
=
fopen
(
pFileName
,
"r"
))
==
NULL
)
if
(
(
pFile
=
fopen
(
pFileName
,
"r"
))
==
NULL
)
{
{
Abc_Print
(
1
,
"Cannot open input file
\"
%s
\"
. "
,
pFileName
);
Abc_Print
(
1
,
"Cannot open input file
\"
%s
\"
. "
,
pFileName
);
if
(
(
pFileName
=
Extra_FileGetSimilarName
(
pFileName
,
".v"
,
".blif"
,
NULL
,
NULL
,
NULL
))
)
if
(
(
pFileName
=
Extra_FileGetSimilarName
(
pFileName
,
".v"
,
".blif"
,
".smt"
,
".cba"
,
NULL
))
)
Abc_Print
(
1
,
"Did you mean
\"
%s
\"
?"
,
pFileName
);
Abc_Print
(
1
,
"Did you mean
\"
%s
\"
?"
,
pFileName
);
Abc_Print
(
1
,
"
\n
"
);
Abc_Print
(
1
,
"
\n
"
);
return
0
;
return
0
;
...
@@ -207,6 +207,17 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -207,6 +207,17 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
Prs_ManVecFree
(
vDes
);
}
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"smt"
)
)
{
vDes
=
Prs_ManReadSmt
(
pFileName
);
if
(
vDes
&&
Vec_PtrSize
(
vDes
)
)
p
=
Prs_ManBuildCba
(
pFileName
,
vDes
);
Prs_ManVecFree
(
vDes
);
}
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
{
p
=
Cba_ManReadCba
(
pFileName
);
}
else
assert
(
0
);
else
assert
(
0
);
Cba_AbcUpdateMan
(
pAbc
,
p
);
Cba_AbcUpdateMan
(
pAbc
,
p
);
return
0
;
return
0
;
...
@@ -268,6 +279,8 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -268,6 +279,8 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
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
);
else
if
(
!
strcmp
(
Extra_FileNameExtension
(
pFileName
),
"cba"
)
)
Cba_ManWriteCba
(
pFileName
,
p
);
else
else
{
{
printf
(
"Unrecognized output file extension.
\n
"
);
printf
(
"Unrecognized output file extension.
\n
"
);
...
...
src/base/cba/cbaNtk.c
View file @
d7099e7a
...
@@ -264,7 +264,7 @@ Cba_Man_t * Cba_ManCollapseInt( Cba_Man_t * p )
...
@@ -264,7 +264,7 @@ Cba_Man_t * Cba_ManCollapseInt( Cba_Man_t * p )
assert
(
Vec_IntSize
(
vSigs
)
==
Cba_NtkPoNum
(
pRoot
)
);
assert
(
Vec_IntSize
(
vSigs
)
==
Cba_NtkPoNum
(
pRoot
)
);
Cba_NtkForEachPo
(
pRoot
,
iObj
,
i
)
Cba_NtkForEachPo
(
pRoot
,
iObj
,
i
)
Cba_ObjAlloc
(
pRootNew
,
CBA_OBJ_PO
,
i
,
Vec_IntEntry
(
vSigs
,
i
)
);
Cba_ObjAlloc
(
pRootNew
,
CBA_OBJ_PO
,
i
,
Vec_IntEntry
(
vSigs
,
i
)
);
assert
(
Cba_NtkObjNum
(
pRootNew
)
==
Cba_Ntk
AllocNum
(
pRootNew
)
);
assert
(
Cba_NtkObjNum
(
pRootNew
)
==
Cba_Ntk
ObjNumAlloc
(
pRootNew
)
);
Vec_IntFree
(
vSigs
);
Vec_IntFree
(
vSigs
);
// transfer PI/PO names
// transfer PI/PO names
Cba_NtkStartNames
(
pRootNew
);
Cba_NtkStartNames
(
pRootNew
);
...
...
src/base/cba/cbaReadSmt.c
0 → 100644
View file @
d7099e7a
/**CFile****************************************************************
FileName [cbaReadSmt.c]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Hierarchical word-level netlist.]
Synopsis [BLIF parser.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - November 29, 2014.]
Revision [$Id: cbaReadSmt.c,v 1.00 2014/11/29 00:00:00 alanmi Exp $]
***********************************************************************/
#include "cba.h"
#include "cbaPrs.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Vec_Ptr_t
*
Prs_ManReadSmt
(
char
*
pFileName
)
{
Vec_Ptr_t
*
vPrs
=
NULL
;
Prs_Man_t
*
p
=
Prs_ManAlloc
(
pFileName
);
if
(
p
==
NULL
)
return
NULL
;
// Prs_ManReadLines( p );
if
(
Prs_ManErrorPrint
(
p
)
)
ABC_SWAP
(
Vec_Ptr_t
*
,
vPrs
,
p
->
vNtks
);
Prs_ManFree
(
p
);
return
vPrs
;
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END
src/base/cba/cbaWriteSmt.c
0 → 100644
View file @
d7099e7a
/**CFile****************************************************************
FileName [cbaWriteSmt.c]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Hierarchical word-level netlist.]
Synopsis [Verilog parser.]
Author [Alan Mishchenko]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - November 29, 2014.]
Revision [$Id: cbaWriteSmt.c,v 1.00 2014/11/29 00:00:00 alanmi Exp $]
***********************************************************************/
#include "cba.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END
src/base/cba/module.make
View file @
d7099e7a
SRC
+=
src/base/cba/cbaBlast.c
\
SRC
+=
src/base/cba/cbaBlast.c
\
src/base/cba/cbaCba.c
\
src/base/cba/cbaCom.c
\
src/base/cba/cbaCom.c
\
src/base/cba/cbaLib.c
\
src/base/cba/cbaLib.c
\
src/base/cba/cbaNtk.c
\
src/base/cba/cbaNtk.c
\
...
@@ -7,6 +8,8 @@ SRC += src/base/cba/cbaBlast.c \
...
@@ -7,6 +8,8 @@ SRC += src/base/cba/cbaBlast.c \
src/base/cba/cbaPtr.c
\
src/base/cba/cbaPtr.c
\
src/base/cba/cbaPtrAbc.c
\
src/base/cba/cbaPtrAbc.c
\
src/base/cba/cbaReadBlif.c
\
src/base/cba/cbaReadBlif.c
\
src/base/cba/cbaReadSmt.c
\
src/base/cba/cbaReadVer.c
\
src/base/cba/cbaReadVer.c
\
src/base/cba/cbaWriteBlif.c
\
src/base/cba/cbaWriteBlif.c
\
src/base/cba/cbaWriteSmt.c
\
src/base/cba/cbaWriteVer.c
src/base/cba/cbaWriteVer.c
src/misc/vec/vecStr.h
View file @
d7099e7a
...
@@ -553,6 +553,13 @@ static inline void Vec_StrPush( Vec_Str_t * p, char Entry )
...
@@ -553,6 +553,13 @@ static inline void Vec_StrPush( Vec_Str_t * p, char Entry )
}
}
p
->
pArray
[
p
->
nSize
++
]
=
Entry
;
p
->
pArray
[
p
->
nSize
++
]
=
Entry
;
}
}
static
inline
void
Vec_StrPushBuffer
(
Vec_Str_t
*
p
,
char
*
pBuffer
,
int
nSize
)
{
if
(
p
->
nSize
+
nSize
>
p
->
nCap
)
Vec_StrGrow
(
p
,
2
*
(
p
->
nSize
+
nSize
)
);
memcpy
(
p
->
pArray
+
p
->
nSize
,
pBuffer
,
nSize
);
p
->
nSize
+=
nSize
;
}
/**Function*************************************************************
/**Function*************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment