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
36585eff
Commit
36585eff
authored
Dec 09, 2018
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Experiments with retiming (adding new APIs).
parent
fe03f042
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
132 additions
and
53 deletions
+132
-53
src/aig/miniaig/ndr.h
+2
-0
src/base/main/abcapis.h
+5
-0
src/base/main/main.h
+1
-1
src/base/main/mainFrame.c
+9
-1
src/base/main/mainInt.h
+2
-0
src/base/wlc/wlc.h
+1
-0
src/base/wlc/wlcCom.c
+20
-2
src/base/wlc/wlcNdr.c
+2
-1
src/base/wlc/wlcNtk.c
+14
-5
src/base/wlc/wlcReadVer.c
+2
-2
src/base/wlc/wlcShow.c
+22
-4
src/base/wln/wln.h
+2
-1
src/base/wln/wlnNdr.c
+13
-31
src/base/wln/wlnRetime.c
+30
-5
src/misc/vec/vecInt.h
+7
-0
No files found.
src/aig/miniaig/ndr.h
View file @
36585eff
...
@@ -579,6 +579,8 @@ static inline void * Ndr_Read( char * pFileName )
...
@@ -579,6 +579,8 @@ static inline void * Ndr_Read( char * pFileName )
// check file size
// check file size
fseek
(
pFile
,
0
,
SEEK_END
);
fseek
(
pFile
,
0
,
SEEK_END
);
nFileSize
=
ftell
(
pFile
);
nFileSize
=
ftell
(
pFile
);
if
(
nFileSize
%
5
!=
0
)
return
NULL
;
assert
(
nFileSize
%
5
==
0
);
assert
(
nFileSize
%
5
==
0
);
rewind
(
pFile
);
rewind
(
pFile
);
// create structure
// create structure
...
...
src/base/main/abcapis.h
View file @
36585eff
...
@@ -81,6 +81,11 @@ extern ABC_DLL void Abc_FrameGiaInputMiniLut( Abc_Frame_t * pAbc, void * pMini
...
@@ -81,6 +81,11 @@ extern ABC_DLL void Abc_FrameGiaInputMiniLut( Abc_Frame_t * pAbc, void * pMini
extern
ABC_DLL
void
*
Abc_FrameGiaOutputMiniLut
(
Abc_Frame_t
*
pAbc
);
extern
ABC_DLL
void
*
Abc_FrameGiaOutputMiniLut
(
Abc_Frame_t
*
pAbc
);
extern
ABC_DLL
char
*
Abc_FrameGiaOutputMiniLutAttr
(
Abc_Frame_t
*
pAbc
,
void
*
pMiniLut
);
extern
ABC_DLL
char
*
Abc_FrameGiaOutputMiniLutAttr
(
Abc_Frame_t
*
pAbc
,
void
*
pMiniLut
);
// procedures to input/output NDR data-structure
extern
ABC_DLL
void
Abc_FrameInputNdr
(
Abc_Frame_t
*
pAbc
,
void
*
pData
);
extern
ABC_DLL
void
*
Abc_FrameOutputNdr
(
Abc_Frame_t
*
pAbc
);
extern
ABC_DLL
int
*
Abc_FrameOutputNdrArray
(
Abc_Frame_t
*
pAbc
);
// procedures to set CI/CO arrival/required times
// procedures to set CI/CO arrival/required times
extern
ABC_DLL
void
Abc_NtkSetCiArrivalTime
(
Abc_Frame_t
*
pAbc
,
int
iCi
,
float
Rise
,
float
Fall
);
extern
ABC_DLL
void
Abc_NtkSetCiArrivalTime
(
Abc_Frame_t
*
pAbc
,
int
iCi
,
float
Rise
,
float
Fall
);
extern
ABC_DLL
void
Abc_NtkSetCoRequiredTime
(
Abc_Frame_t
*
pAbc
,
int
iCo
,
float
Rise
,
float
Fall
);
extern
ABC_DLL
void
Abc_NtkSetCoRequiredTime
(
Abc_Frame_t
*
pAbc
,
int
iCo
,
float
Rise
,
float
Fall
);
...
...
src/base/main/main.h
View file @
36585eff
...
@@ -89,7 +89,7 @@ extern ABC_DLL void Abc_FrameReplaceCurrentNetwork( Abc_Frame_t * p,
...
@@ -89,7 +89,7 @@ extern ABC_DLL void Abc_FrameReplaceCurrentNetwork( Abc_Frame_t * p,
extern
ABC_DLL
void
Abc_FrameUnmapAllNetworks
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
void
Abc_FrameUnmapAllNetworks
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
void
Abc_FrameDeleteAllNetworks
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
void
Abc_FrameDeleteAllNetworks
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
void
Abc_FrameSetGlobalFrame
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
void
Abc_FrameSetGlobalFrame
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
Abc_Frame_t
*
Abc_FrameGetGlobalFrame
();
extern
ABC_DLL
Abc_Frame_t
*
Abc_FrameGetGlobalFrame
();
extern
ABC_DLL
Abc_Frame_t
*
Abc_FrameReadGlobalFrame
();
extern
ABC_DLL
Abc_Frame_t
*
Abc_FrameReadGlobalFrame
();
...
...
src/base/main/mainFrame.c
View file @
36585eff
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
#include "mainInt.h"
#include "mainInt.h"
#include "bool/dec/dec.h"
#include "bool/dec/dec.h"
#include "map/if/if.h"
#include "map/if/if.h"
#include "aig/miniaig/ndr.h"
#ifdef ABC_USE_CUDD
#ifdef ABC_USE_CUDD
#include "bdd/extrab/extraBdd.h"
#include "bdd/extrab/extraBdd.h"
...
@@ -83,6 +84,10 @@ int Abc_FrameReadCexRegNum( Abc_Frame_t * p ) { return s_GlobalFr
...
@@ -83,6 +84,10 @@ int Abc_FrameReadCexRegNum( Abc_Frame_t * p ) { return s_GlobalFr
int
Abc_FrameReadCexPo
(
Abc_Frame_t
*
p
)
{
return
s_GlobalFrame
->
pCex
->
iPo
;
}
int
Abc_FrameReadCexPo
(
Abc_Frame_t
*
p
)
{
return
s_GlobalFrame
->
pCex
->
iPo
;
}
int
Abc_FrameReadCexFrame
(
Abc_Frame_t
*
p
)
{
return
s_GlobalFrame
->
pCex
->
iFrame
;
}
int
Abc_FrameReadCexFrame
(
Abc_Frame_t
*
p
)
{
return
s_GlobalFrame
->
pCex
->
iFrame
;
}
void
Abc_FrameInputNdr
(
Abc_Frame_t
*
pAbc
,
void
*
pData
)
{
Ndr_Delete
(
s_GlobalFrame
->
pNdr
);
s_GlobalFrame
->
pNdr
=
pData
;
}
void
*
Abc_FrameOutputNdr
(
Abc_Frame_t
*
pAbc
)
{
void
*
pData
=
s_GlobalFrame
->
pNdr
;
s_GlobalFrame
->
pNdr
=
NULL
;
return
pData
;
}
int
*
Abc_FrameOutputNdrArray
(
Abc_Frame_t
*
pAbc
)
{
int
*
pArray
=
s_GlobalFrame
->
pNdrArray
;
s_GlobalFrame
->
pNdrArray
=
NULL
;
return
pArray
;
}
void
Abc_FrameSetLibLut
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibLut
=
pLib
;
}
void
Abc_FrameSetLibLut
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibLut
=
pLib
;
}
void
Abc_FrameSetLibBox
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibBox
=
pLib
;
}
void
Abc_FrameSetLibBox
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibBox
=
pLib
;
}
void
Abc_FrameSetLibGen
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibGen
=
pLib
;
}
void
Abc_FrameSetLibGen
(
void
*
pLib
)
{
s_GlobalFrame
->
pLibGen
=
pLib
;
}
...
@@ -232,7 +237,9 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
...
@@ -232,7 +237,9 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
ABC_FREE
(
p
->
pCex
);
ABC_FREE
(
p
->
pCex
);
Vec_IntFreeP
(
&
p
->
pAbcWlcInv
);
Vec_IntFreeP
(
&
p
->
pAbcWlcInv
);
Abc_NamDeref
(
s_GlobalFrame
->
pJsonStrs
);
Abc_NamDeref
(
s_GlobalFrame
->
pJsonStrs
);
Vec_WecFreeP
(
&
s_GlobalFrame
->
vJsonObjs
);
Vec_WecFreeP
(
&
s_GlobalFrame
->
vJsonObjs
);
Ndr_Delete
(
s_GlobalFrame
->
pNdr
);
ABC_FREE
(
s_GlobalFrame
->
pNdrArray
);
Gia_ManStopP
(
&
p
->
pGiaMiniAig
);
Gia_ManStopP
(
&
p
->
pGiaMiniAig
);
Gia_ManStopP
(
&
p
->
pGiaMiniLut
);
Gia_ManStopP
(
&
p
->
pGiaMiniLut
);
...
@@ -240,6 +247,7 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
...
@@ -240,6 +247,7 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
Vec_IntFreeP
(
&
p
->
vCopyMiniLut
);
Vec_IntFreeP
(
&
p
->
vCopyMiniLut
);
ABC_FREE
(
p
->
pArray
);
ABC_FREE
(
p
->
pArray
);
ABC_FREE
(
p
->
pBoxes
);
ABC_FREE
(
p
->
pBoxes
);
ABC_FREE
(
p
);
ABC_FREE
(
p
);
s_GlobalFrame
=
NULL
;
s_GlobalFrame
=
NULL
;
...
...
src/base/main/mainInt.h
View file @
36585eff
...
@@ -150,6 +150,8 @@ struct Abc_Frame_t_
...
@@ -150,6 +150,8 @@ struct Abc_Frame_t_
Vec_Int_t
*
vCopyMiniLut
;
Vec_Int_t
*
vCopyMiniLut
;
int
*
pArray
;
int
*
pArray
;
int
*
pBoxes
;
int
*
pBoxes
;
void
*
pNdr
;
int
*
pNdrArray
;
Abc_Frame_Callback_BmcFrameDone_Func
pFuncOnFrameDone
;
Abc_Frame_Callback_BmcFrameDone_Func
pFuncOnFrameDone
;
};
};
...
...
src/base/wlc/wlc.h
View file @
36585eff
...
@@ -282,6 +282,7 @@ static inline int Wlc_ObjIsPi( Wlc_Obj_t * p )
...
@@ -282,6 +282,7 @@ static inline int Wlc_ObjIsPi( Wlc_Obj_t * p )
static
inline
int
Wlc_ObjIsPo
(
Wlc_Obj_t
*
p
)
{
return
p
->
fIsPo
;
}
static
inline
int
Wlc_ObjIsPo
(
Wlc_Obj_t
*
p
)
{
return
p
->
fIsPo
;
}
static
inline
int
Wlc_ObjIsCi
(
Wlc_Obj_t
*
p
)
{
return
p
->
Type
==
WLC_OBJ_PI
||
p
->
Type
==
WLC_OBJ_FO
;
}
static
inline
int
Wlc_ObjIsCi
(
Wlc_Obj_t
*
p
)
{
return
p
->
Type
==
WLC_OBJ_PI
||
p
->
Type
==
WLC_OBJ_FO
;
}
static
inline
int
Wlc_ObjIsCo
(
Wlc_Obj_t
*
p
)
{
return
p
->
fIsPo
||
p
->
fIsFi
;
}
static
inline
int
Wlc_ObjIsCo
(
Wlc_Obj_t
*
p
)
{
return
p
->
fIsPo
||
p
->
fIsFi
;
}
static
inline
int
Wlc_ObjIsFf
(
Wlc_Ntk_t
*
p
,
int
i
)
{
return
Wlc_NtkObj
(
p
,
i
)
->
Type
==
WLC_OBJ_FF
;
}
static
inline
int
Wlc_ObjId
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
return
pObj
-
p
->
pObjs
;
}
static
inline
int
Wlc_ObjId
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
return
pObj
-
p
->
pObjs
;
}
static
inline
int
Wlc_ObjCiId
(
Wlc_Obj_t
*
p
)
{
assert
(
Wlc_ObjIsCi
(
p
)
);
return
p
->
Fanins
[
1
];
}
static
inline
int
Wlc_ObjCiId
(
Wlc_Obj_t
*
p
)
{
assert
(
Wlc_ObjIsCi
(
p
)
);
return
p
->
Fanins
[
1
];
}
...
...
src/base/wlc/wlcCom.c
View file @
36585eff
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
***********************************************************************/
***********************************************************************/
#include "wlc.h"
#include "wlc.h"
#include "base/wln/wln.h"
#include "base/main/mainInt.h"
#include "base/main/mainInt.h"
#include "aig/miniaig/ndr.h"
#include "aig/miniaig/ndr.h"
...
@@ -1250,7 +1251,7 @@ usage:
...
@@ -1250,7 +1251,7 @@ usage:
******************************************************************************/
******************************************************************************/
int
Abc_CommandRetime
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
int
Abc_CommandRetime
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
{
extern
void
Wln_NtkRetimeTest
(
char
*
pFileName
);
extern
void
Wln_NtkRetimeTest
(
char
*
pFileName
,
int
fVerbose
);
FILE
*
pFile
;
FILE
*
pFile
;
char
*
pFileName
=
NULL
;
char
*
pFileName
=
NULL
;
int
c
,
fVerbose
=
0
;
int
c
,
fVerbose
=
0
;
...
@@ -1268,6 +1269,23 @@ int Abc_CommandRetime( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -1268,6 +1269,23 @@ int Abc_CommandRetime( Abc_Frame_t * pAbc, int argc, char ** argv )
goto
usage
;
goto
usage
;
}
}
}
}
if
(
pAbc
->
pNdr
)
{
Vec_Int_t
*
vMoves
;
Wln_Ntk_t
*
pNtk
=
Wln_NtkFromNdr
(
pAbc
->
pNdr
);
Wln_NtkRetimeCreateDelayInfo
(
pNtk
);
if
(
pNtk
==
NULL
)
{
printf
(
"Transforming NDR into internal represnetation has failed.
\n
"
);
return
0
;
}
vMoves
=
Wln_NtkRetime
(
pNtk
,
fVerbose
);
Wln_NtkFree
(
pNtk
);
ABC_FREE
(
pAbc
->
pNdrArray
);
if
(
vMoves
)
pAbc
->
pNdrArray
=
Vec_IntReleaseNewArray
(
vMoves
);
Vec_IntFreeP
(
&
vMoves
);
return
0
;
}
if
(
argc
!=
globalUtilOptind
+
1
)
if
(
argc
!=
globalUtilOptind
+
1
)
{
{
printf
(
"Abc_CommandRetime(): Input file name should be given on the command line.
\n
"
);
printf
(
"Abc_CommandRetime(): Input file name should be given on the command line.
\n
"
);
...
@@ -1284,7 +1302,7 @@ int Abc_CommandRetime( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -1284,7 +1302,7 @@ int Abc_CommandRetime( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
return
0
;
}
}
fclose
(
pFile
);
fclose
(
pFile
);
Wln_NtkRetimeTest
(
pFileName
);
Wln_NtkRetimeTest
(
pFileName
,
fVerbose
);
return
0
;
return
0
;
usage:
usage:
Abc_Print
(
-
2
,
"usage: %%retime [-vh]
\n
"
);
Abc_Print
(
-
2
,
"usage: %%retime [-vh]
\n
"
);
...
...
src/base/wlc/wlcNdr.c
View file @
36585eff
...
@@ -499,7 +499,8 @@ Wlc_Ntk_t * Wlc_ReadNdr( char * pFileName )
...
@@ -499,7 +499,8 @@ Wlc_Ntk_t * Wlc_ReadNdr( char * pFileName )
Wlc_Ntk_t
*
pNtk
=
Wlc_NtkFromNdr
(
pData
);
Wlc_Ntk_t
*
pNtk
=
Wlc_NtkFromNdr
(
pData
);
//char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
//char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
//Ndr_WriteVerilog( NULL, pData, ppNames );
//Ndr_WriteVerilog( NULL, pData, ppNames );
Ndr_Delete
(
pData
);
//Ndr_Delete( pData );
Abc_FrameInputNdr
(
Abc_FrameGetGlobalFrame
(),
pData
);
return
pNtk
;
return
pNtk
;
}
}
void
Wlc_ReadNdrTest
()
void
Wlc_ReadNdrTest
()
...
...
src/base/wlc/wlcNtk.c
View file @
36585eff
...
@@ -357,8 +357,8 @@ int Wlc_NtkCreateLevelsRev( Wlc_Ntk_t * p )
...
@@ -357,8 +357,8 @@ int Wlc_NtkCreateLevelsRev( Wlc_Ntk_t * p )
***********************************************************************/
***********************************************************************/
void
Wlc_NtkCreateLevels_rec
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
void
Wlc_NtkCreateLevels_rec
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
{
int
k
,
iFanin
,
Level
=
0
;
int
k
,
iFanin
,
Level
=
0
,
iObj
=
Wlc_ObjId
(
p
,
pObj
)
;
if
(
Vec_IntEntry
(
&
p
->
vLevels
,
Wlc_ObjId
(
p
,
pObj
)
)
>
0
)
if
(
Wlc_ObjIsCi
(
pObj
)
||
Wlc_ObjIsFf
(
p
,
iObj
)
||
Wlc_ObjFaninNum
(
pObj
)
==
0
||
Wlc_ObjLevel
(
p
,
pObj
)
>
0
)
return
;
return
;
Wlc_ObjForEachFanin
(
pObj
,
iFanin
,
k
)
if
(
iFanin
)
Wlc_ObjForEachFanin
(
pObj
,
iFanin
,
k
)
if
(
iFanin
)
Wlc_NtkCreateLevels_rec
(
p
,
Wlc_NtkObj
(
p
,
iFanin
)
);
Wlc_NtkCreateLevels_rec
(
p
,
Wlc_NtkObj
(
p
,
iFanin
)
);
...
@@ -368,11 +368,18 @@ void Wlc_NtkCreateLevels_rec( Wlc_Ntk_t * p, Wlc_Obj_t * pObj )
...
@@ -368,11 +368,18 @@ void Wlc_NtkCreateLevels_rec( Wlc_Ntk_t * p, Wlc_Obj_t * pObj )
}
}
int
Wlc_NtkCreateLevels
(
Wlc_Ntk_t
*
p
)
int
Wlc_NtkCreateLevels
(
Wlc_Ntk_t
*
p
)
{
{
Wlc_Obj_t
*
pObj
;
int
i
;
Wlc_Obj_t
*
pObj
;
int
i
,
LeveMax
=
0
;
Vec_IntFill
(
&
p
->
vLevels
,
Wlc_NtkObjNumMax
(
p
),
0
);
Vec_IntFill
(
&
p
->
vLevels
,
Wlc_NtkObjNumMax
(
p
),
0
);
Wlc_NtkForEach
Co
(
p
,
pObj
,
i
)
Wlc_NtkForEach
Obj
(
p
,
pObj
,
i
)
Wlc_NtkCreateLevels_rec
(
p
,
pObj
);
Wlc_NtkCreateLevels_rec
(
p
,
pObj
);
return
Vec_IntFindMax
(
&
p
->
vLevels
);
Wlc_NtkForEachObj
(
p
,
pObj
,
i
)
if
(
!
Wlc_ObjIsCi
(
pObj
)
&&
Wlc_ObjFaninNum
(
pObj
)
)
Vec_IntAddToEntry
(
&
p
->
vLevels
,
i
,
1
);
LeveMax
=
Vec_IntFindMax
(
&
p
->
vLevels
);
Wlc_NtkForEachFf2
(
p
,
pObj
,
i
)
Vec_IntWriteEntry
(
&
p
->
vLevels
,
Wlc_ObjId
(
p
,
pObj
),
LeveMax
+
1
);
Wlc_NtkPrintObjects
(
p
);
return
LeveMax
+
1
;
}
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -662,6 +669,8 @@ void Wlc_NtkPrintDistrib( Wlc_Ntk_t * p, int fTwoSides, int fVerbose )
...
@@ -662,6 +669,8 @@ void Wlc_NtkPrintDistrib( Wlc_Ntk_t * p, int fTwoSides, int fVerbose )
void
Wlc_NtkPrintNode
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
void
Wlc_NtkPrintNode
(
Wlc_Ntk_t
*
p
,
Wlc_Obj_t
*
pObj
)
{
{
printf
(
"%8d : "
,
Wlc_ObjId
(
p
,
pObj
)
);
printf
(
"%8d : "
,
Wlc_ObjId
(
p
,
pObj
)
);
if
(
Vec_IntSize
(
&
p
->
vLevels
)
)
printf
(
"Lev = %2d "
,
Vec_IntEntry
(
&
p
->
vLevels
,
Wlc_ObjId
(
p
,
pObj
))
);
printf
(
"%6d%s = "
,
Wlc_ObjRange
(
pObj
),
Wlc_ObjIsSigned
(
pObj
)
?
"s"
:
" "
);
printf
(
"%6d%s = "
,
Wlc_ObjRange
(
pObj
),
Wlc_ObjIsSigned
(
pObj
)
?
"s"
:
" "
);
if
(
pObj
->
Type
==
WLC_OBJ_PI
)
if
(
pObj
->
Type
==
WLC_OBJ_PI
)
{
{
...
...
src/base/wlc/wlcReadVer.c
View file @
36585eff
...
@@ -1284,7 +1284,7 @@ startword:
...
@@ -1284,7 +1284,7 @@ startword:
else
if
(
Wlc_PrsStrCmp
(
pStart
,
"ABC_DFFRSE"
)
)
else
if
(
Wlc_PrsStrCmp
(
pStart
,
"ABC_DFFRSE"
)
)
{
{
int
NameId
[
10
]
=
{
0
},
fFound
,
fFlopIn
,
fFlopClk
,
fFlopRst
,
fFlopSet
,
fFlopEna
,
fFlopAsync
,
fFlopSre
,
fFlopInit
,
fFlopOut
;
int
NameId
[
10
]
=
{
0
},
fFound
,
fFlopIn
,
fFlopClk
,
fFlopRst
,
fFlopSet
,
fFlopEna
,
fFlopAsync
,
fFlopSre
,
fFlopInit
,
fFlopOut
;
pStart
+=
strlen
(
"ABC_DFF"
);
pStart
+=
strlen
(
"ABC_DFF
RSE
"
);
while
(
1
)
while
(
1
)
{
{
pStart
=
Wlc_PrsFindSymbol
(
pStart
,
'.'
);
pStart
=
Wlc_PrsFindSymbol
(
pStart
,
'.'
);
...
@@ -1348,7 +1348,7 @@ startword:
...
@@ -1348,7 +1348,7 @@ startword:
else
if
(
Wlc_PrsStrCmp
(
pStart
,
"ABC_DFF"
)
)
else
if
(
Wlc_PrsStrCmp
(
pStart
,
"ABC_DFF"
)
)
{
{
int
NameId
=
-
1
,
NameIdIn
=
-
1
,
NameIdOut
=
-
1
,
fFound
,
nBits
=
1
,
fFlopIn
,
fFlopOut
;
int
NameId
=
-
1
,
NameIdIn
=
-
1
,
NameIdOut
=
-
1
,
fFound
,
nBits
=
1
,
fFlopIn
,
fFlopOut
;
pStart
+=
strlen
(
"ABC_DFF
RSE
"
);
pStart
+=
strlen
(
"ABC_DFF"
);
while
(
1
)
while
(
1
)
{
{
pStart
=
Wlc_PrsFindSymbol
(
pStart
,
'.'
);
pStart
=
Wlc_PrsFindSymbol
(
pStart
,
'.'
);
...
...
src/base/wlc/wlcShow.c
View file @
36585eff
...
@@ -237,13 +237,31 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold )
...
@@ -237,13 +237,31 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold )
// the labeling node of this level
// the labeling node of this level
fprintf
(
pFile
,
" Level%d;
\n
"
,
0
);
fprintf
(
pFile
,
" Level%d;
\n
"
,
0
);
// generate the CI nodes
// generate the CI nodes
Wlc_NtkForEach
Ci
(
p
,
pNode
,
i
)
Wlc_NtkForEach
Obj
(
p
,
pNode
,
i
)
{
{
if
(
!
Wlc_ObjIsCi
(
pNode
)
&&
Wlc_ObjFaninNum
(
pNode
)
>
0
)
continue
;
if
(
vBold
&&
!
pNode
->
Mark
)
if
(
vBold
&&
!
pNode
->
Mark
)
continue
;
continue
;
fprintf
(
pFile
,
" Node%d [label =
\"
%d:%s %d
\"
"
,
Wlc_ObjId
(
p
,
pNode
),
Wlc_ObjId
(
p
,
pNode
),
Wlc_ObjName
(
p
,
Wlc_ObjId
(
p
,
pNode
)),
Wlc_ObjRange
(
pNode
)
);
if
(
pNode
->
Type
==
WLC_OBJ_CONST
)
fprintf
(
pFile
,
", shape = %s"
,
i
<
Wlc_NtkPiNum
(
p
)
?
"triangle"
:
"box"
);
{
fprintf
(
pFile
,
", color = coral, fillcolor = coral"
);
//char * pName = Wlc_ObjName(p, i);
fprintf
(
pFile
,
" Node%d [label =
\"
%d:%d
\'
h"
,
i
,
i
,
Wlc_ObjRange
(
pNode
)
);
if
(
Wlc_ObjRange
(
pNode
)
>
64
)
{
Abc_TtPrintHexArrayRev
(
pFile
,
(
word
*
)
Wlc_ObjConstValue
(
pNode
),
16
);
fprintf
(
pFile
,
"..."
);
}
else
Abc_TtPrintHexArrayRev
(
pFile
,
(
word
*
)
Wlc_ObjConstValue
(
pNode
),
(
Wlc_ObjRange
(
pNode
)
+
3
)
/
4
);
fprintf
(
pFile
,
"
\"
"
);
}
else
{
fprintf
(
pFile
,
" Node%d [label =
\"
%d:%s %d
\"
"
,
Wlc_ObjId
(
p
,
pNode
),
Wlc_ObjId
(
p
,
pNode
),
Wlc_ObjName
(
p
,
Wlc_ObjId
(
p
,
pNode
)),
Wlc_ObjRange
(
pNode
)
);
fprintf
(
pFile
,
", shape = %s"
,
(
Vec_IntSize
(
&
p
->
vFfs2
)
>
0
||
i
<
Wlc_NtkPiNum
(
p
))
?
"triangle"
:
"box"
);
fprintf
(
pFile
,
", color = coral, fillcolor = coral"
);
}
fprintf
(
pFile
,
"];
\n
"
);
fprintf
(
pFile
,
"];
\n
"
);
}
}
fprintf
(
pFile
,
"}"
);
fprintf
(
pFile
,
"}"
);
...
...
src/base/wln/wln.h
View file @
36585eff
...
@@ -244,7 +244,8 @@ extern int Wln_ObjClone( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj );
...
@@ -244,7 +244,8 @@ extern int Wln_ObjClone( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj );
extern
int
Wln_ObjCreateCo
(
Wln_Ntk_t
*
p
,
int
iFanin
);
extern
int
Wln_ObjCreateCo
(
Wln_Ntk_t
*
p
,
int
iFanin
);
extern
void
Wln_ObjPrint
(
Wln_Ntk_t
*
p
,
int
iObj
);
extern
void
Wln_ObjPrint
(
Wln_Ntk_t
*
p
,
int
iObj
);
/*=== wlcRetime.c ========================================================*/
/*=== wlcRetime.c ========================================================*/
extern
Vec_Int_t
*
Wln_NtkRetime
(
Wln_Ntk_t
*
p
);
extern
Vec_Int_t
*
Wln_NtkRetime
(
Wln_Ntk_t
*
p
,
int
fVerbose
);
extern
void
Wln_NtkRetimeCreateDelayInfo
(
Wln_Ntk_t
*
pNtk
);
/*=== wlcWriteVer.c ========================================================*/
/*=== wlcWriteVer.c ========================================================*/
extern
void
Wln_WriteVer
(
Wln_Ntk_t
*
p
,
char
*
pFileName
);
extern
void
Wln_WriteVer
(
Wln_Ntk_t
*
p
,
char
*
pFileName
);
...
...
src/base/wln/wlnNdr.c
View file @
36585eff
...
@@ -293,7 +293,8 @@ Wln_Ntk_t * Wln_NtkFromNdr( void * pData )
...
@@ -293,7 +293,8 @@ Wln_Ntk_t * Wln_NtkFromNdr( void * pData )
Wln_Ntk_t
*
Wln_ReadNdr
(
char
*
pFileName
)
Wln_Ntk_t
*
Wln_ReadNdr
(
char
*
pFileName
)
{
{
void
*
pData
=
Ndr_Read
(
pFileName
);
void
*
pData
=
Ndr_Read
(
pFileName
);
Wln_Ntk_t
*
pNtk
=
Wln_NtkFromNdr
(
pData
);
Wln_Ntk_t
*
pNtk
=
pData
?
Wln_NtkFromNdr
(
pData
)
:
NULL
;
if
(
pNtk
)
return
NULL
;
//char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
//char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
//Ndr_WriteVerilog( NULL, pData, ppNames );
//Ndr_WriteVerilog( NULL, pData, ppNames );
Ndr_Delete
(
pData
);
Ndr_Delete
(
pData
);
...
@@ -308,40 +309,21 @@ void Wln_ReadNdrTest()
...
@@ -308,40 +309,21 @@ void Wln_ReadNdrTest()
Wln_NtkStaticFanoutTest
(
pNtk
);
Wln_NtkStaticFanoutTest
(
pNtk
);
Wln_NtkFree
(
pNtk
);
Wln_NtkFree
(
pNtk
);
}
}
void
Wln_NtkRetimeTest
(
char
*
pFileName
)
void
Wln_NtkRetimeTest
(
char
*
pFileName
,
int
fVerbose
)
{
{
Vec_Int_t
*
vMoves
;
void
*
pData
=
Ndr_Read
(
pFileName
);
void
*
pData
=
Ndr_Read
(
pFileName
);
Wln_Ntk_t
*
pNtk
=
Wln_NtkFromNdr
(
pData
);
Wln_Ntk_t
*
pNtk
=
pData
?
Wln_NtkFromNdr
(
pData
)
:
NULL
;
Ndr_Delete
(
pData
);
if
(
pNtk
==
NULL
)
if
(
Wln_NtkHasInstId
(
pNtk
)
)
Vec_IntErase
(
&
pNtk
->
vInstIds
);
if
(
!
Wln_NtkHasInstId
(
pNtk
)
)
{
int
iObj
;
printf
(
"The design has no delay information.
\n
"
);
Wln_NtkCleanInstId
(
pNtk
);
Wln_NtkForEachObj
(
pNtk
,
iObj
)
if
(
Wln_ObjIsFf
(
pNtk
,
iObj
)
)
Wln_ObjSetInstId
(
pNtk
,
iObj
,
1
);
else
if
(
!
Wln_ObjIsCio
(
pNtk
,
iObj
)
&&
Wln_ObjFaninNum
(
pNtk
,
iObj
)
>
0
)
Wln_ObjSetInstId
(
pNtk
,
iObj
,
10
);
printf
(
"Assuming user-specified delays for internal nodes.
\n
"
);
}
/*
else
{
int iObj;
Wln_NtkForEachObj( pNtk, iObj )
if ( !Wln_ObjIsCio(pNtk, iObj) && Wln_ObjFaninNum(pNtk, iObj) > 0 && !Wln_ObjIsFf(pNtk, iObj) )
printf( "Obj %5d : NameId = %6d InstId = %6d\n", iObj, Wln_ObjNameId(pNtk, iObj), Wln_ObjInstId(pNtk, iObj) );
}
*/
//else
{
{
Vec_Int_t
*
vMoves
=
Wln_NtkRetime
(
pNtk
);
printf
(
"Retiming network is not available.
\n
"
);
//Vec_IntPrint( vMoves );
return
;
Vec_IntFree
(
vMoves
);
}
}
Ndr_Delete
(
pData
);
Wln_NtkRetimeCreateDelayInfo
(
pNtk
);
vMoves
=
Wln_NtkRetime
(
pNtk
,
fVerbose
);
//Vec_IntPrint( vMoves );
Vec_IntFree
(
vMoves
);
Wln_NtkFree
(
pNtk
);
Wln_NtkFree
(
pNtk
);
}
}
...
...
src/base/wln/wlnRetime.c
View file @
36585eff
...
@@ -76,7 +76,8 @@ static inline int * Wln_RetFanouts( Wln_Ret_t * p, int i ) { return Vec_IntEnt
...
@@ -76,7 +76,8 @@ static inline int * Wln_RetFanouts( Wln_Ret_t * p, int i ) { return Vec_IntEnt
void
Wln_RetPrintObj
(
Wln_Ret_t
*
p
,
int
iObj
)
void
Wln_RetPrintObj
(
Wln_Ret_t
*
p
,
int
iObj
)
{
{
int
k
,
iFanin
,
Type
=
Wln_ObjType
(
p
->
pNtk
,
iObj
),
*
pLink
;
int
k
,
iFanin
,
Type
=
Wln_ObjType
(
p
->
pNtk
,
iObj
),
*
pLink
;
printf
(
"Obj %6d : Type = %6s Fanins = %d : "
,
iObj
,
Abc_OperName
(
Type
),
Wln_ObjFaninNum
(
p
->
pNtk
,
iObj
)
);
printf
(
"Obj %6d : Type = %6s NameId = %5d InstId = %5d Fanins = %d : "
,
iObj
,
Abc_OperName
(
Type
),
Wln_ObjNameId
(
p
->
pNtk
,
iObj
),
Wln_ObjInstId
(
p
->
pNtk
,
iObj
),
Wln_ObjFaninNum
(
p
->
pNtk
,
iObj
)
);
Wln_RetForEachFanin
(
p
,
iObj
,
iFanin
,
pLink
,
k
)
Wln_RetForEachFanin
(
p
,
iObj
,
iFanin
,
pLink
,
k
)
{
{
printf
(
"%5d "
,
iFanin
);
printf
(
"%5d "
,
iFanin
);
...
@@ -159,7 +160,8 @@ Wln_Ret_t * Wln_RetAlloc( Wln_Ntk_t * pNtk )
...
@@ -159,7 +160,8 @@ Wln_Ret_t * Wln_RetAlloc( Wln_Ntk_t * pNtk )
Vec_IntFree
(
vRefsCopy
);
Vec_IntFree
(
vRefsCopy
);
// other data
// other data
p
->
nClasses
=
Wln_RetComputeFfClasses
(
pNtk
,
&
p
->
vFfClasses
);
p
->
nClasses
=
Wln_RetComputeFfClasses
(
pNtk
,
&
p
->
vFfClasses
);
ABC_SWAP
(
Vec_Int_t
,
p
->
vNodeDelays
,
pNtk
->
vInstIds
);
//ABC_SWAP( Vec_Int_t, p->vNodeDelays, pNtk->vInstIds );
Vec_IntAppend
(
&
p
->
vNodeDelays
,
&
pNtk
->
vInstIds
);
Vec_IntGrow
(
&
p
->
vSources
,
1000
);
Vec_IntGrow
(
&
p
->
vSources
,
1000
);
Vec_IntGrow
(
&
p
->
vSinks
,
1000
);
Vec_IntGrow
(
&
p
->
vSinks
,
1000
);
Vec_IntGrow
(
&
p
->
vFront
,
1000
);
Vec_IntGrow
(
&
p
->
vFront
,
1000
);
...
@@ -474,7 +476,7 @@ void Wln_RetAddToMoves( Wln_Ret_t * p, Vec_Int_t * vSet, int Delay, int fForward
...
@@ -474,7 +476,7 @@ void Wln_RetAddToMoves( Wln_Ret_t * p, Vec_Int_t * vSet, int Delay, int fForward
{
{
int
NameId
=
Vec_IntEntry
(
&
p
->
pNtk
->
vNameIds
,
iObj
);
int
NameId
=
Vec_IntEntry
(
&
p
->
pNtk
->
vNameIds
,
iObj
);
Vec_IntPush
(
&
p
->
vMoves
,
fForward
?
-
NameId
:
NameId
);
Vec_IntPush
(
&
p
->
vMoves
,
fForward
?
-
NameId
:
NameId
);
printf
(
" %d
"
,
fForward
?
-
iObj
:
iObj
);
printf
(
" %d
(NameID = %d) "
,
fForward
?
-
iObj
:
iObj
,
fForward
?
-
NameId
:
NameId
);
}
}
Vec_IntPush
(
&
p
->
vMoves
,
0
);
Vec_IntPush
(
&
p
->
vMoves
,
0
);
printf
(
"
\n
"
);
printf
(
"
\n
"
);
...
@@ -491,14 +493,32 @@ void Wln_RetAddToMoves( Wln_Ret_t * p, Vec_Int_t * vSet, int Delay, int fForward
...
@@ -491,14 +493,32 @@ void Wln_RetAddToMoves( Wln_Ret_t * p, Vec_Int_t * vSet, int Delay, int fForward
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Int_t
*
Wln_NtkRetime
(
Wln_Ntk_t
*
pNtk
)
void
Wln_NtkRetimeCreateDelayInfo
(
Wln_Ntk_t
*
pNtk
)
{
if
(
Wln_NtkHasInstId
(
pNtk
)
)
Vec_IntErase
(
&
pNtk
->
vInstIds
);
if
(
!
Wln_NtkHasInstId
(
pNtk
)
)
{
int
iObj
;
printf
(
"The design has no delay information.
\n
"
);
Wln_NtkCleanInstId
(
pNtk
);
Wln_NtkForEachObj
(
pNtk
,
iObj
)
if
(
Wln_ObjIsFf
(
pNtk
,
iObj
)
)
Wln_ObjSetInstId
(
pNtk
,
iObj
,
1
);
else
if
(
!
Wln_ObjIsCio
(
pNtk
,
iObj
)
&&
Wln_ObjFaninNum
(
pNtk
,
iObj
)
>
0
)
Wln_ObjSetInstId
(
pNtk
,
iObj
,
10
);
printf
(
"Assuming user-specified delays for internal nodes.
\n
"
);
}
}
Vec_Int_t
*
Wln_NtkRetime
(
Wln_Ntk_t
*
pNtk
,
int
fVerbose
)
{
{
Wln_Ret_t
*
p
=
Wln_RetAlloc
(
pNtk
);
Wln_Ret_t
*
p
=
Wln_RetAlloc
(
pNtk
);
Vec_Int_t
*
vSources
=
&
p
->
vSources
;
Vec_Int_t
*
vSources
=
&
p
->
vSources
;
Vec_Int_t
*
vSinks
=
&
p
->
vSinks
;
Vec_Int_t
*
vSinks
=
&
p
->
vSinks
;
Vec_Int_t
*
vFront
=
&
p
->
vFront
;
Vec_Int_t
*
vFront
=
&
p
->
vFront
;
Vec_Int_t
*
vMoves
=
Vec_IntAlloc
(
0
);
Vec_Int_t
*
vMoves
=
Vec_IntAlloc
(
0
);
//Wln_RetPrint( p );
if
(
fVerbose
)
Wln_RetPrint
(
p
);
Wln_RetMarkChanges
(
p
,
NULL
);
Wln_RetMarkChanges
(
p
,
NULL
);
p
->
DelayMax
=
Wln_RetPropDelay
(
p
);
p
->
DelayMax
=
Wln_RetPropDelay
(
p
);
Wln_RetFindSources
(
p
);
Wln_RetFindSources
(
p
);
...
@@ -554,6 +574,11 @@ Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk )
...
@@ -554,6 +574,11 @@ Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk )
}
}
ABC_SWAP
(
Vec_Int_t
,
*
vMoves
,
p
->
vMoves
);
ABC_SWAP
(
Vec_Int_t
,
*
vMoves
,
p
->
vMoves
);
Wln_RetFree
(
p
);
Wln_RetFree
(
p
);
if
(
fVerbose
)
{
printf
(
"
\n
The resulting moves recorded in terms of name IDs of the NDR nodes:
\n
"
);
Vec_IntPrint
(
vMoves
);
}
return
vMoves
;
return
vMoves
;
}
}
...
...
src/misc/vec/vecInt.h
View file @
36585eff
...
@@ -327,6 +327,13 @@ static inline int * Vec_IntReleaseArray( Vec_Int_t * p )
...
@@ -327,6 +327,13 @@ static inline int * Vec_IntReleaseArray( Vec_Int_t * p )
p
->
pArray
=
NULL
;
p
->
pArray
=
NULL
;
return
pArray
;
return
pArray
;
}
}
static
inline
int
*
Vec_IntReleaseNewArray
(
Vec_Int_t
*
p
)
{
int
*
pArray
=
ABC_ALLOC
(
int
,
p
->
nSize
+
1
);
pArray
[
0
]
=
p
->
nSize
+
1
;
memcpy
(
pArray
+
1
,
p
->
pArray
,
sizeof
(
int
)
*
p
->
nSize
);
return
pArray
;
}
/**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