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
581daaea
Commit
581daaea
authored
Jul 29, 2011
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes to enable smarter simulation.
parent
9e6d0664
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
111 additions
and
85 deletions
+111
-85
src/aig/aig/aigUtil.c
+2
-2
src/aig/ssw/ssw.h
+3
-0
src/aig/ssw/sswClass.c
+20
-0
src/aig/ssw/sswInt.h
+1
-0
src/aig/ssw/sswRarity.c
+85
-83
src/aig/ssw/sswRarity2.c
+0
-0
No files found.
src/aig/aig/aigUtil.c
View file @
581daaea
...
@@ -1217,8 +1217,8 @@ unsigned Aig_ManRandom( int fReset )
...
@@ -1217,8 +1217,8 @@ unsigned Aig_ManRandom( int fReset )
***********************************************************************/
***********************************************************************/
word
Aig_ManRandom64
(
int
fReset
)
word
Aig_ManRandom64
(
int
fReset
)
{
{
word
Res
=
(
(
word
)
Aig_ManRandom
(
fReset
))
<<
32
;
word
Res
=
(
word
)
Aig_ManRandom
(
fReset
)
;
return
Res
|
(
word
)
Aig_ManRandom
(
0
);
return
Res
|
(
(
word
)
Aig_ManRandom
(
0
)
<<
32
);
}
}
...
...
src/aig/ssw/ssw.h
View file @
581daaea
...
@@ -118,6 +118,9 @@ extern int Ssw_SecGeneralMiter( Aig_Man_t * pMiter, Ssw_Pars_t * pPars
...
@@ -118,6 +118,9 @@ extern int Ssw_SecGeneralMiter( Aig_Man_t * pMiter, Ssw_Pars_t * pPars
/*=== sswRarity.c ===================================================*/
/*=== sswRarity.c ===================================================*/
extern
int
Ssw_RarSignalFilter
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
Abc_Cex_t
*
pCex
,
int
fLatchOnly
,
int
fVerbose
);
extern
int
Ssw_RarSignalFilter
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
Abc_Cex_t
*
pCex
,
int
fLatchOnly
,
int
fVerbose
);
extern
int
Ssw_RarSimulate
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
int
fVerbose
);
extern
int
Ssw_RarSimulate
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
int
fVerbose
);
/*=== sswRarity2.c ===================================================*/
extern
int
Ssw_RarSignalFilter2
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
Abc_Cex_t
*
pCex
,
int
fLatchOnly
,
int
fVerbose
);
extern
int
Ssw_RarSimulate2
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
int
fVerbose
);
/*=== sswSim.c ===================================================*/
/*=== sswSim.c ===================================================*/
extern
Ssw_Sml_t
*
Ssw_SmlSimulateComb
(
Aig_Man_t
*
pAig
,
int
nWords
);
extern
Ssw_Sml_t
*
Ssw_SmlSimulateComb
(
Aig_Man_t
*
pAig
,
int
nWords
);
extern
Ssw_Sml_t
*
Ssw_SmlSimulateSeq
(
Aig_Man_t
*
pAig
,
int
nPref
,
int
nFrames
,
int
nWords
);
extern
Ssw_Sml_t
*
Ssw_SmlSimulateSeq
(
Aig_Man_t
*
pAig
,
int
nPref
,
int
nFrames
,
int
nWords
);
...
...
src/aig/ssw/sswClass.c
View file @
581daaea
...
@@ -1041,6 +1041,26 @@ int Ssw_ClassesRefine( Ssw_Cla_t * p, int fRecursive )
...
@@ -1041,6 +1041,26 @@ int Ssw_ClassesRefine( Ssw_Cla_t * p, int fRecursive )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Refines the classes after simulation.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Ssw_ClassesRefineGroup
(
Ssw_Cla_t
*
p
,
Vec_Ptr_t
*
vReprs
,
int
fRecursive
)
{
Aig_Obj_t
*
pObj
;
int
i
,
nRefis
=
0
;
Vec_PtrForEachEntry
(
Aig_Obj_t
*
,
vReprs
,
pObj
,
i
)
nRefis
+=
Ssw_ClassesRefineOneClass
(
p
,
pObj
,
fRecursive
);
return
nRefis
;
}
/**Function*************************************************************
Synopsis [Refine the group of constant 1 nodes.]
Synopsis [Refine the group of constant 1 nodes.]
Description []
Description []
...
...
src/aig/ssw/sswInt.h
View file @
581daaea
...
@@ -226,6 +226,7 @@ extern Ssw_Cla_t * Ssw_ClassesPrepareTargets( Aig_Man_t * pAig );
...
@@ -226,6 +226,7 @@ extern Ssw_Cla_t * Ssw_ClassesPrepareTargets( Aig_Man_t * pAig );
extern
Ssw_Cla_t
*
Ssw_ClassesPreparePairs
(
Aig_Man_t
*
pAig
,
Vec_Int_t
**
pvClasses
);
extern
Ssw_Cla_t
*
Ssw_ClassesPreparePairs
(
Aig_Man_t
*
pAig
,
Vec_Int_t
**
pvClasses
);
extern
Ssw_Cla_t
*
Ssw_ClassesPreparePairsSimple
(
Aig_Man_t
*
pMiter
,
Vec_Int_t
*
vPairs
);
extern
Ssw_Cla_t
*
Ssw_ClassesPreparePairsSimple
(
Aig_Man_t
*
pMiter
,
Vec_Int_t
*
vPairs
);
extern
int
Ssw_ClassesRefine
(
Ssw_Cla_t
*
p
,
int
fRecursive
);
extern
int
Ssw_ClassesRefine
(
Ssw_Cla_t
*
p
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineGroup
(
Ssw_Cla_t
*
p
,
Vec_Ptr_t
*
vReprs
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineOneClass
(
Ssw_Cla_t
*
p
,
Aig_Obj_t
*
pRepr
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineOneClass
(
Ssw_Cla_t
*
p
,
Aig_Obj_t
*
pRepr
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineConst1Group
(
Ssw_Cla_t
*
p
,
Vec_Ptr_t
*
vRoots
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineConst1Group
(
Ssw_Cla_t
*
p
,
Vec_Ptr_t
*
vRoots
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineConst1
(
Ssw_Cla_t
*
p
,
int
fRecursive
);
extern
int
Ssw_ClassesRefineConst1
(
Ssw_Cla_t
*
p
,
int
fRecursive
);
...
...
src/aig/ssw/sswRarity.c
View file @
581daaea
...
@@ -84,7 +84,7 @@ static inline void Ssw_RarAddToBinPat( Ssw_RarMan_t * p, int iBin, int iPat )
...
@@ -84,7 +84,7 @@ static inline void Ssw_RarAddToBinPat( Ssw_RarMan_t * p, int iBin, int iPat )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Ssw_RarMan_t
*
Ssw_RarManStart
(
Aig_Man_t
*
pAig
,
int
nWords
,
int
nFrames
,
int
nBinSize
,
int
fVerbose
)
static
Ssw_RarMan_t
*
Ssw_RarManStart
(
Aig_Man_t
*
pAig
,
int
nWords
,
int
nFrames
,
int
nBinSize
,
int
fVerbose
)
{
{
Ssw_RarMan_t
*
p
;
Ssw_RarMan_t
*
p
;
if
(
Aig_ManRegNum
(
pAig
)
<
nBinSize
||
nBinSize
<=
0
)
if
(
Aig_ManRegNum
(
pAig
)
<
nBinSize
||
nBinSize
<=
0
)
...
@@ -115,7 +115,7 @@ Ssw_RarMan_t * Ssw_RarManStart( Aig_Man_t * pAig, int nWords, int nFrames, int n
...
@@ -115,7 +115,7 @@ Ssw_RarMan_t * Ssw_RarManStart( Aig_Man_t * pAig, int nWords, int nFrames, int n
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Ssw_RarManStop
(
Ssw_RarMan_t
*
p
)
static
void
Ssw_RarManStop
(
Ssw_RarMan_t
*
p
)
{
{
if
(
p
->
pSml
)
Ssw_SmlStop
(
p
->
pSml
);
if
(
p
->
pSml
)
Ssw_SmlStop
(
p
->
pSml
);
if
(
p
->
ppClasses
)
Ssw_ClassesStop
(
p
->
ppClasses
);
if
(
p
->
ppClasses
)
Ssw_ClassesStop
(
p
->
ppClasses
);
...
@@ -139,7 +139,7 @@ void Ssw_RarManStop( Ssw_RarMan_t * p )
...
@@ -139,7 +139,7 @@ void Ssw_RarManStop( Ssw_RarMan_t * p )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Ssw_RarUpdateCounters
(
Ssw_RarMan_t
*
p
)
static
void
Ssw_RarUpdateCounters
(
Ssw_RarMan_t
*
p
)
{
{
Aig_Obj_t
*
pObj
;
Aig_Obj_t
*
pObj
;
unsigned
*
pData
;
unsigned
*
pData
;
...
@@ -185,7 +185,7 @@ void Ssw_RarUpdateCounters( Ssw_RarMan_t * p )
...
@@ -185,7 +185,7 @@ void Ssw_RarUpdateCounters( Ssw_RarMan_t * p )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Ssw_RarTransferPatterns
(
Ssw_RarMan_t
*
p
,
Vec_Int_t
*
vInits
)
static
void
Ssw_RarTransferPatterns
(
Ssw_RarMan_t
*
p
,
Vec_Int_t
*
vInits
)
{
{
Aig_Obj_t
*
pObj
;
Aig_Obj_t
*
pObj
;
unsigned
*
pData
;
unsigned
*
pData
;
...
@@ -214,7 +214,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
...
@@ -214,7 +214,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
}
}
// printf( "\n" );
// printf( "\n" );
// print the result
// print the result
//
printf( "%3d : %9.6f\n", k, p->pPatCosts[k] );
printf
(
"%3d : %9.6f
\n
"
,
k
,
p
->
pPatCosts
[
k
]
);
}
}
// choose as many as there are words
// choose as many as there are words
...
@@ -239,8 +239,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
...
@@ -239,8 +239,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
pData
=
(
unsigned
*
)
Vec_PtrEntry
(
p
->
vSimInfo
,
Aig_ObjId
(
pObj
)
)
+
p
->
nWords
*
(
p
->
nFrames
-
1
);
pData
=
(
unsigned
*
)
Vec_PtrEntry
(
p
->
vSimInfo
,
Aig_ObjId
(
pObj
)
)
+
p
->
nWords
*
(
p
->
nFrames
-
1
);
Vec_IntPush
(
vInits
,
Aig_InfoHasBit
(
pData
,
iPatBest
)
);
Vec_IntPush
(
vInits
,
Aig_InfoHasBit
(
pData
,
iPatBest
)
);
}
}
//printf( "Best pattern %5d\n", iPatBest );
printf
(
"Best pattern %5d
\n
"
,
iPatBest
);
}
}
assert
(
Vec_IntSize
(
vInits
)
==
Aig_ManRegNum
(
p
->
pAig
)
*
p
->
nWords
);
assert
(
Vec_IntSize
(
vInits
)
==
Aig_ManRegNum
(
p
->
pAig
)
*
p
->
nWords
);
}
}
...
@@ -257,7 +256,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
...
@@ -257,7 +256,7 @@ void Ssw_RarTransferPatterns( Ssw_RarMan_t * p, Vec_Int_t * vInits )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Int_t
*
Ssw_RarFindStartingState
(
Aig_Man_t
*
pAig
,
Abc_Cex_t
*
pCex
)
static
Vec_Int_t
*
Ssw_RarFindStartingState
(
Aig_Man_t
*
pAig
,
Abc_Cex_t
*
pCex
)
{
{
Vec_Int_t
*
vInit
;
Vec_Int_t
*
vInit
;
Aig_Obj_t
*
pObj
,
*
pObjLi
;
Aig_Obj_t
*
pObj
,
*
pObjLi
;
...
@@ -295,6 +294,84 @@ Vec_Int_t * Ssw_RarFindStartingState( Aig_Man_t * pAig, Abc_Cex_t * pCex )
...
@@ -295,6 +294,84 @@ Vec_Int_t * Ssw_RarFindStartingState( Aig_Man_t * pAig, Abc_Cex_t * pCex )
return
vInit
;
return
vInit
;
}
}
/**Function*************************************************************
Synopsis [Perform sequential simulation.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Ssw_RarSimulate
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
int
fVerbose
)
{
int
fMiter
=
1
;
Ssw_RarMan_t
*
p
;
int
r
,
clk
,
clkTotal
=
clock
();
int
RetValue
=
-
1
;
assert
(
Aig_ManRegNum
(
pAig
)
>
0
);
assert
(
Aig_ManConstrNum
(
pAig
)
==
0
);
// consider the case of empty AIG
if
(
Aig_ManNodeNum
(
pAig
)
==
0
)
return
-
1
;
if
(
fVerbose
)
printf
(
"Simulating %d words through %d frames with %d binsize, %d rounds, and %d sec timeout.
\n
"
,
nWords
,
nFrames
,
nBinSize
,
nRounds
,
TimeOut
);
// reset random numbers
Aig_ManRandom
(
1
);
// create manager
p
=
Ssw_RarManStart
(
pAig
,
nWords
,
nFrames
,
nBinSize
,
fVerbose
);
p
->
vInits
=
Vec_IntStart
(
Aig_ManRegNum
(
pAig
)
*
nWords
);
Ssw_SmlInitializeSpecial
(
p
->
pSml
,
p
->
vInits
);
// perform simulation rounds
for
(
r
=
0
;
r
<
nRounds
;
r
++
)
{
clk
=
clock
();
// simulate
Ssw_SmlSimulateOne
(
p
->
pSml
);
if
(
fMiter
&&
Ssw_SmlCheckNonConstOutputs
(
p
->
pSml
)
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Simulation asserted a PO in frame f: %d <= f < %d.
\n
"
,
r
*
nFrames
,
(
r
+
1
)
*
nFrames
);
RetValue
=
0
;
break
;
}
// get initialization patterns
Ssw_RarUpdateCounters
(
p
);
Ssw_RarTransferPatterns
(
p
,
p
->
vInits
);
Ssw_SmlInitializeSpecial
(
p
->
pSml
,
p
->
vInits
);
// printout
if
(
fVerbose
)
{
// printf( "Round %3d: ", r );
// Abc_PrintTime( 1, "Time", clock() - clk );
printf
(
"."
);
}
// check timeout
if
(
TimeOut
&&
((
float
)
TimeOut
<=
(
float
)(
clock
()
-
clkTotal
)
/
(
float
)(
CLOCKS_PER_SEC
))
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Reached timeout (%d seconds).
\n
"
,
TimeOut
);
break
;
}
}
if
(
r
==
nRounds
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Simulation did not assert POs in the first %d frames. "
,
nRounds
*
nFrames
);
Abc_PrintTime
(
1
,
"Time"
,
clock
()
-
clkTotal
);
}
// cleanup
Ssw_RarManStop
(
p
);
return
RetValue
;
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Filter equivalence classes of nodes.]
Synopsis [Filter equivalence classes of nodes.]
...
@@ -430,81 +507,6 @@ int Ssw_RarSignalFilterGia( Gia_Man_t * p, int nFrames, int nWords, int nBinSize
...
@@ -430,81 +507,6 @@ int Ssw_RarSignalFilterGia( Gia_Man_t * p, int nFrames, int nWords, int nBinSize
/**Function*************************************************************
Synopsis [Perform sequential simulation.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Ssw_RarSimulate
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nWords
,
int
nBinSize
,
int
nRounds
,
int
TimeOut
,
int
fVerbose
)
{
int
fMiter
=
1
;
Ssw_RarMan_t
*
p
;
int
r
,
clk
,
clkTotal
=
clock
();
int
RetValue
=
-
1
;
assert
(
Aig_ManRegNum
(
pAig
)
>
0
);
assert
(
Aig_ManConstrNum
(
pAig
)
==
0
);
// consider the case of empty AIG
if
(
Aig_ManNodeNum
(
pAig
)
==
0
)
return
-
1
;
if
(
fVerbose
)
printf
(
"Simulating %d words through %d frames with %d binsize, %d rounds, and %d sec timeout.
\n
"
,
nWords
,
nFrames
,
nBinSize
,
nRounds
,
TimeOut
);
// reset random numbers
Aig_ManRandom
(
1
);
// create manager
p
=
Ssw_RarManStart
(
pAig
,
nWords
,
nFrames
,
nBinSize
,
fVerbose
);
p
->
vInits
=
Vec_IntStart
(
Aig_ManRegNum
(
pAig
)
*
nWords
);
Ssw_SmlInitializeSpecial
(
p
->
pSml
,
p
->
vInits
);
// perform simulation rounds
for
(
r
=
0
;
r
<
nRounds
;
r
++
)
{
clk
=
clock
();
// simulate
Ssw_SmlSimulateOne
(
p
->
pSml
);
if
(
fMiter
&&
Ssw_SmlCheckNonConstOutputs
(
p
->
pSml
)
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Simulation asserted a PO in frame f: %d <= f < %d.
\n
"
,
r
*
nFrames
,
(
r
+
1
)
*
nFrames
);
RetValue
=
0
;
break
;
}
// get initialization patterns
Ssw_RarUpdateCounters
(
p
);
Ssw_RarTransferPatterns
(
p
,
p
->
vInits
);
Ssw_SmlInitializeSpecial
(
p
->
pSml
,
p
->
vInits
);
// printout
if
(
fVerbose
)
{
// printf( "Round %3d: ", r );
// Abc_PrintTime( 1, "Time", clock() - clk );
printf
(
"."
);
}
// check timeout
if
(
TimeOut
&&
((
float
)
TimeOut
<=
(
float
)(
clock
()
-
clkTotal
)
/
(
float
)(
CLOCKS_PER_SEC
))
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Reached timeout (%d seconds).
\n
"
,
TimeOut
);
break
;
}
}
if
(
r
==
nRounds
)
{
if
(
fVerbose
)
printf
(
"
\n
"
);
printf
(
"Simulation did not assert POs in the first %d frames. "
,
nRounds
*
nFrames
);
Abc_PrintTime
(
1
,
"Time"
,
clock
()
-
clkTotal
);
}
// cleanup
Ssw_RarManStop
(
p
);
return
RetValue
;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
...
...
src/aig/ssw/sswRarity2.c
0 → 100644
View file @
581daaea
This diff is collapsed.
Click to expand it.
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