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
ce690b29
Commit
ce690b29
authored
Sep 15, 2008
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Version abc80915
parent
75d6d6ab
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
210 additions
and
63 deletions
+210
-63
abc.dsp
+4
-0
src/aig/fra/fraLcr.c
+8
-1
src/aig/saig/module.make
+1
-0
src/aig/ssw/module.make
+1
-0
src/aig/ssw/ssw.h
+3
-1
src/aig/ssw/sswClass.c
+67
-0
src/aig/ssw/sswCore.c
+69
-50
src/aig/ssw/sswInt.h
+4
-0
src/aig/ssw/sswPairs.c
+0
-0
src/aig/ssw/sswSweep.c
+1
-1
src/base/abci/abc.c
+12
-8
src/base/abci/abcDar.c
+40
-2
No files found.
abc.dsp
View file @
ce690b29
...
...
@@ -3446,6 +3446,10 @@ SOURCE=.\src\aig\ssw\sswMan.c
# End Source File
# Begin Source File
SOURCE=.\src\aig\ssw\sswPairs.c
# End Source File
# Begin Source File
SOURCE=.\src\aig\ssw\sswPart.c
# End Source File
# Begin Source File
...
...
src/aig/fra/fraLcr.c
View file @
ce690b29
...
...
@@ -612,6 +612,7 @@ p->timePart += clock() - clk2;
Vec_PtrClear
(
p
->
vFraigs
);
Vec_PtrForEachEntry
(
p
->
vParts
,
vPart
,
i
)
{
int
clk3
=
clock
();
if
(
TimeLimit
!=
0
.
0
&&
clock
()
>
TimeToStop
)
{
Vec_PtrForEachEntry
(
p
->
vFraigs
,
pAigPart
,
i
)
...
...
@@ -628,9 +629,15 @@ clk2 = clock();
pAigTemp
=
Fra_FraigEquivence
(
pAigPart
,
nConfMax
,
0
);
p
->
timeFraig
+=
clock
()
-
clk2
;
Vec_PtrPush
(
p
->
vFraigs
,
pAigTemp
);
{
char
Name
[
1000
];
sprintf
(
Name
,
"part%04d.blif"
,
i
);
Aig_ManDumpBlif
(
pAigPart
,
Name
,
NULL
,
NULL
);
}
Aig_ManStop
(
pAigPart
);
//intf( "finished part %d (out of %d)\n", i, Vec_PtrSize(p->vParts) );
printf
(
"Finished part %4d (out of %4d). "
,
i
,
Vec_PtrSize
(
p
->
vParts
)
);
PRT
(
"Time"
,
clock
()
-
clk3
);
}
Fra_ClassNodesUnmark
(
p
);
...
...
src/aig/saig/module.make
View file @
ce690b29
...
...
@@ -8,4 +8,5 @@ SRC += src/aig/saig/saigBmc.c \
src/aig/saig/saigRetMin.c
\
src/aig/saig/saigRetStep.c
\
src/aig/saig/saigScl.c
\
src/aig/saig/saigSynch.c
\
src/aig/saig/saigTrans.c
src/aig/ssw/module.make
View file @
ce690b29
...
...
@@ -4,6 +4,7 @@ SRC += src/aig/ssw/sswAig.c \
src/aig/ssw/sswCore.c
\
src/aig/ssw/sswMan.c
\
src/aig/ssw/sswPart.c
\
src/aig/ssw/sswPairs.c
\
src/aig/ssw/sswSat.c
\
src/aig/ssw/sswSim.c
\
src/aig/ssw/sswSimSat.c
\
...
...
src/aig/ssw/ssw.h
View file @
ce690b29
...
...
@@ -82,7 +82,9 @@ extern void Ssw_ManSetDefaultParams( Ssw_Pars_t * p );
extern
Aig_Man_t
*
Ssw_SignalCorrespondence
(
Aig_Man_t
*
p
,
Ssw_Pars_t
*
pPars
);
/*=== sswPart.c ==========================================================*/
extern
Aig_Man_t
*
Ssw_SignalCorrespondencePart
(
Aig_Man_t
*
pAig
,
Ssw_Pars_t
*
pPars
);
/*=== sswPairs.c ===================================================*/
extern
int
Ssw_SecWithPairs
(
Aig_Man_t
*
pAig1
,
Aig_Man_t
*
pAig2
,
Vec_Int_t
*
vIds1
,
Vec_Int_t
*
vIds2
,
Ssw_Pars_t
*
pPars
);
extern
int
Ssw_SecGeneral
(
Aig_Man_t
*
pAig1
,
Aig_Man_t
*
pAig2
,
Ssw_Pars_t
*
pPars
);
#ifdef __cplusplus
}
...
...
src/aig/ssw/sswClass.c
View file @
ce690b29
...
...
@@ -88,6 +88,7 @@ static inline void Ssw_ObjSetNext( Aig_Obj_t ** ppNexts, Aig_Obj_t * pOb
static
inline
void
Ssw_ObjAddClass
(
Ssw_Cla_t
*
p
,
Aig_Obj_t
*
pRepr
,
Aig_Obj_t
**
pClass
,
int
nSize
)
{
assert
(
p
->
pId2Class
[
pRepr
->
Id
]
==
NULL
);
assert
(
pClass
[
0
]
==
pRepr
);
p
->
pId2Class
[
pRepr
->
Id
]
=
pClass
;
assert
(
p
->
pClassSizes
[
pRepr
->
Id
]
==
0
);
assert
(
nSize
>
1
);
...
...
@@ -646,6 +647,72 @@ Ssw_Cla_t * Ssw_ClassesPrepareSimple( Aig_Man_t * pAig, int fLatchCorr, int nMax
/**Function*************************************************************
Synopsis [Creates classes from the temporary representation.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Ssw_Cla_t
*
Ssw_ClassesPreparePairs
(
Aig_Man_t
*
pAig
,
Vec_Int_t
**
pvClasses
)
{
Ssw_Cla_t
*
p
;
Aig_Obj_t
**
ppClassNew
;
Aig_Obj_t
*
pObj
,
*
pRepr
,
*
pPrev
;
int
i
,
k
,
nTotalObjs
,
nEntries
,
Entry
;
// start the classes
p
=
Ssw_ClassesStart
(
pAig
);
// count the number of entries in the classes
nTotalObjs
=
0
;
for
(
i
=
0
;
i
<
Aig_ManObjNumMax
(
pAig
);
i
++
)
nTotalObjs
+=
pvClasses
[
i
]
?
Vec_IntSize
(
pvClasses
[
i
])
:
0
;
// allocate memory for classes
p
->
pMemClasses
=
ALLOC
(
Aig_Obj_t
*
,
nTotalObjs
);
// create constant-1 class
if
(
pvClasses
[
0
]
)
Vec_IntForEachEntry
(
pvClasses
[
0
],
Entry
,
i
)
{
assert
(
(
i
==
0
)
==
(
Entry
==
0
)
);
if
(
i
==
0
)
continue
;
pObj
=
Aig_ManObj
(
pAig
,
Entry
);
Ssw_ObjSetConst1Cand
(
pAig
,
pObj
);
p
->
nCands1
++
;
}
// create classes
nEntries
=
0
;
for
(
i
=
1
;
i
<
Aig_ManObjNumMax
(
pAig
);
i
++
)
{
if
(
pvClasses
[
i
]
==
NULL
)
continue
;
// get room for storing the class
ppClassNew
=
p
->
pMemClasses
+
nEntries
;
nEntries
+=
Vec_IntSize
(
pvClasses
[
i
]
);
// store the nodes of the class
pPrev
=
pRepr
=
Aig_ManObj
(
pAig
,
Vec_IntEntry
(
pvClasses
[
i
],
0
)
);
ppClassNew
[
0
]
=
pRepr
;
Vec_IntForEachEntryStart
(
pvClasses
[
i
],
Entry
,
k
,
1
)
{
pObj
=
Aig_ManObj
(
pAig
,
Entry
);
assert
(
pPrev
->
Id
<
pObj
->
Id
);
pPrev
=
pObj
;
ppClassNew
[
k
]
=
pObj
;
Aig_ObjSetRepr
(
pAig
,
pObj
,
pRepr
);
}
// create new class
Ssw_ObjAddClass
(
p
,
pRepr
,
ppClassNew
,
Vec_IntSize
(
pvClasses
[
i
])
);
}
// prepare room for new classes
p
->
pMemClassesFree
=
p
->
pMemClasses
+
nEntries
;
Ssw_ClassesCheck
(
p
);
// Ssw_ClassesPrint( p, 0 );
return
p
;
}
/**Function*************************************************************
Synopsis [Iteratively refines the classes after simulation.]
Description [Returns the number of refinements performed.]
...
...
src/aig/ssw/sswCore.c
View file @
ce690b29
...
...
@@ -66,65 +66,24 @@ void Ssw_ManSetDefaultParams( Ssw_Pars_t * p )
SeeAlso []
***********************************************************************/
Aig_Man_t
*
Ssw_SignalCorrespondence
(
Aig_Man_t
*
pAig
,
Ssw_Pars_t
*
pPars
)
Aig_Man_t
*
Ssw_SignalCorrespondence
Refine
(
Ssw_Man_t
*
p
)
{
Aig_Man_t
*
pAigNew
;
Ssw_Man_t
*
p
;
int
RetValue
,
nIter
,
clk
,
clkTotal
=
clock
();
// reset random numbers
Aig_ManRandom
(
1
);
// consider the case of empty AIG
if
(
Aig_ManNodeNum
(
pAig
)
==
0
)
{
pPars
->
nIters
=
0
;
// Ntl_ManFinalize() needs the following to satisfy an assertion
Aig_ManReprStart
(
pAig
,
Aig_ManObjNumMax
(
pAig
)
);
return
Aig_ManDupOrdered
(
pAig
);
}
// check and update parameters
assert
(
Aig_ManRegNum
(
pAig
)
>
0
);
assert
(
pPars
->
nFramesK
>
0
);
if
(
pPars
->
nFramesK
>
1
)
pPars
->
fSkipCheck
=
0
;
// perform partitioning
if
(
(
pPars
->
nPartSize
>
0
&&
pPars
->
nPartSize
<
Aig_ManRegNum
(
pAig
))
||
(
pAig
->
vClockDoms
&&
Vec_VecSize
(
pAig
->
vClockDoms
)
>
0
)
)
return
Ssw_SignalCorrespondencePart
(
pAig
,
pPars
);
// start the choicing manager
p
=
Ssw_ManCreate
(
pAig
,
pPars
);
// compute candidate equivalence classes
// p->pPars->nConstrs = 1;
if
(
p
->
pPars
->
nConstrs
==
0
)
{
// perform one round of seq simulation and generate candidate equivalence classes
p
->
ppClasses
=
Ssw_ClassesPrepare
(
pAig
,
pPars
->
fLatchCorr
,
pPars
->
nMaxLevs
,
pPars
->
fVerbose
);
p
->
pSml
=
Ssw_SmlStart
(
pAig
,
0
,
p
->
nFrames
+
p
->
pPars
->
nFramesAddSim
,
1
);
Ssw_ClassesSetData
(
p
->
ppClasses
,
p
->
pSml
,
Ssw_SmlNodeHash
,
Ssw_SmlNodeIsConst
,
Ssw_SmlNodesAreEqual
);
}
else
{
// create trivial equivalence classes with all nodes being candidates for constant 1
p
->
ppClasses
=
Ssw_ClassesPrepareSimple
(
pAig
,
pPars
->
fLatchCorr
,
pPars
->
nMaxLevs
);
Ssw_ClassesSetData
(
p
->
ppClasses
,
NULL
,
NULL
,
Ssw_NodeIsConstCex
,
Ssw_NodesAreEqualCex
);
}
int
RetValue
,
nIter
;
int
clk
,
clkTotal
=
clock
();
// get the starting stats
p
->
nLitsBeg
=
Ssw_ClassesLitNum
(
p
->
ppClasses
);
p
->
nNodesBeg
=
Aig_ManNodeNum
(
pAig
);
p
->
nRegsBeg
=
Aig_ManRegNum
(
pAig
);
p
->
nNodesBeg
=
Aig_ManNodeNum
(
p
->
p
Aig
);
p
->
nRegsBeg
=
Aig_ManRegNum
(
p
->
p
Aig
);
// refine classes using BMC
if
(
pPars
->
fVerbose
)
if
(
p
->
p
Pars
->
fVerbose
)
{
printf
(
"Before BMC: "
);
Ssw_ClassesPrint
(
p
->
ppClasses
,
0
);
}
Ssw_ManSweepBmc
(
p
);
Ssw_ManCleanup
(
p
);
if
(
pPars
->
fVerbose
)
if
(
p
->
p
Pars
->
fVerbose
)
{
printf
(
"After BMC: "
);
Ssw_ClassesPrint
(
p
->
ppClasses
,
0
);
...
...
@@ -134,7 +93,7 @@ Aig_Man_t * Ssw_SignalCorrespondence( Aig_Man_t * pAig, Ssw_Pars_t * pPars )
{
clk
=
clock
();
RetValue
=
Ssw_ManSweep
(
p
);
if
(
pPars
->
fVerbose
)
if
(
p
->
p
Pars
->
fVerbose
)
{
printf
(
"%3d : Const = %6d. Cl = %6d. LR = %6d. NR = %6d. F = %5d. "
,
nIter
,
Ssw_ClassesCand1Num
(
p
->
ppClasses
),
Ssw_ClassesClassNum
(
p
->
ppClasses
),
...
...
@@ -150,12 +109,72 @@ clk = clock();
}
p
->
pPars
->
nIters
=
nIter
+
1
;
p
->
timeTotal
=
clock
()
-
clkTotal
;
pAigNew
=
Aig_ManDupRepr
(
pAig
,
0
);
pAigNew
=
Aig_ManDupRepr
(
p
->
p
Aig
,
0
);
Aig_ManSeqCleanup
(
pAigNew
);
// get the final stats
p
->
nLitsEnd
=
Ssw_ClassesLitNum
(
p
->
ppClasses
);
p
->
nNodesEnd
=
Aig_ManNodeNum
(
pAigNew
);
p
->
nRegsEnd
=
Aig_ManRegNum
(
pAigNew
);
return
pAigNew
;
}
/**Function*************************************************************
Synopsis [Performs computation of signal correspondence with constraints.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Aig_Man_t
*
Ssw_SignalCorrespondence
(
Aig_Man_t
*
pAig
,
Ssw_Pars_t
*
pPars
)
{
Ssw_Pars_t
Pars
;
Aig_Man_t
*
pAigNew
;
Ssw_Man_t
*
p
;
// reset random numbers
Aig_ManRandom
(
1
);
// if parameters are not given, create them
if
(
pPars
==
NULL
)
Ssw_ManSetDefaultParams
(
pPars
=
&
Pars
);
// consider the case of empty AIG
if
(
Aig_ManNodeNum
(
pAig
)
==
0
)
{
pPars
->
nIters
=
0
;
// Ntl_ManFinalize() needs the following to satisfy an assertion
Aig_ManReprStart
(
pAig
,
Aig_ManObjNumMax
(
pAig
)
);
return
Aig_ManDupOrdered
(
pAig
);
}
// check and update parameters
assert
(
Aig_ManRegNum
(
pAig
)
>
0
);
assert
(
pPars
->
nFramesK
>
0
);
if
(
pPars
->
nFramesK
>
1
)
pPars
->
fSkipCheck
=
0
;
// perform partitioning
if
(
(
pPars
->
nPartSize
>
0
&&
pPars
->
nPartSize
<
Aig_ManRegNum
(
pAig
))
||
(
pAig
->
vClockDoms
&&
Vec_VecSize
(
pAig
->
vClockDoms
)
>
0
)
)
return
Ssw_SignalCorrespondencePart
(
pAig
,
pPars
);
// start the induction manager
p
=
Ssw_ManCreate
(
pAig
,
pPars
);
// compute candidate equivalence classes
// p->pPars->nConstrs = 1;
if
(
p
->
pPars
->
nConstrs
==
0
)
{
// perform one round of seq simulation and generate candidate equivalence classes
p
->
ppClasses
=
Ssw_ClassesPrepare
(
pAig
,
pPars
->
fLatchCorr
,
pPars
->
nMaxLevs
,
pPars
->
fVerbose
);
p
->
pSml
=
Ssw_SmlStart
(
pAig
,
0
,
p
->
nFrames
+
p
->
pPars
->
nFramesAddSim
,
1
);
Ssw_ClassesSetData
(
p
->
ppClasses
,
p
->
pSml
,
Ssw_SmlNodeHash
,
Ssw_SmlNodeIsConst
,
Ssw_SmlNodesAreEqual
);
}
else
{
// create trivial equivalence classes with all nodes being candidates for constant 1
p
->
ppClasses
=
Ssw_ClassesPrepareSimple
(
pAig
,
pPars
->
fLatchCorr
,
pPars
->
nMaxLevs
);
Ssw_ClassesSetData
(
p
->
ppClasses
,
NULL
,
NULL
,
Ssw_NodeIsConstCex
,
Ssw_NodesAreEqualCex
);
}
// perform refinement of classes
pAigNew
=
Ssw_SignalCorrespondenceRefine
(
p
);
// cleanup
Ssw_ManStop
(
p
);
return
pAigNew
;
...
...
src/aig/ssw/sswInt.h
View file @
ce690b29
...
...
@@ -150,6 +150,7 @@ extern void Ssw_ClassesPrint( Ssw_Cla_t * p, int fVeryVerbose );
extern
void
Ssw_ClassesRemoveNode
(
Ssw_Cla_t
*
p
,
Aig_Obj_t
*
pObj
);
extern
Ssw_Cla_t
*
Ssw_ClassesPrepare
(
Aig_Man_t
*
pAig
,
int
fLatchCorr
,
int
nMaxLevs
,
int
fVerbose
);
extern
Ssw_Cla_t
*
Ssw_ClassesPrepareSimple
(
Aig_Man_t
*
pAig
,
int
fLatchCorr
,
int
nMaxLevs
);
extern
Ssw_Cla_t
*
Ssw_ClassesPreparePairs
(
Aig_Man_t
*
pAig
,
Vec_Int_t
**
pvClasses
);
extern
int
Ssw_ClassesRefine
(
Ssw_Cla_t
*
p
,
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
);
...
...
@@ -158,6 +159,8 @@ extern int Ssw_NodeIsConstCex( void * p, Aig_Obj_t * pObj );
extern
int
Ssw_NodesAreEqualCex
(
void
*
p
,
Aig_Obj_t
*
pObj0
,
Aig_Obj_t
*
pObj1
);
/*=== sswCnf.c ===================================================*/
extern
void
Ssw_CnfNodeAddToSolver
(
Ssw_Man_t
*
p
,
Aig_Obj_t
*
pObj
);
/*=== sswCore.c ===================================================*/
extern
Aig_Man_t
*
Ssw_SignalCorrespondenceRefine
(
Ssw_Man_t
*
p
);
/*=== sswMan.c ===================================================*/
extern
Ssw_Man_t
*
Ssw_ManCreate
(
Aig_Man_t
*
pAig
,
Ssw_Pars_t
*
pPars
);
extern
void
Ssw_ManCleanup
(
Ssw_Man_t
*
p
);
...
...
@@ -184,6 +187,7 @@ extern void Ssw_ManResimulateCexTotalSim( Ssw_Man_t * p, Aig_Obj_t * pC
extern
int
Ssw_ManSweepBmc
(
Ssw_Man_t
*
p
);
extern
int
Ssw_ManSweep
(
Ssw_Man_t
*
p
);
#ifdef __cplusplus
}
#endif
...
...
src/aig/ssw/sswPairs.c
0 → 100644
View file @
ce690b29
This diff is collapsed.
Click to expand it.
src/aig/ssw/sswSweep.c
View file @
ce690b29
...
...
@@ -149,7 +149,7 @@ void Ssw_ManSweepNode( Ssw_Man_t * p, Aig_Obj_t * pObj, int f, int fBmc )
Ssw_SmlSavePatternAigPhase
(
p
,
f
);
}
else
{
{
// if the fraiged nodes are the same, return
if
(
Aig_Regular
(
pObjFraig
)
==
Aig_Regular
(
pObjReprFraig
)
)
return
;
...
...
src/base/abci/abc.c
View file @
ce690b29
...
...
@@ -7684,7 +7684,7 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
{
FILE
*
pOut
,
*
pErr
;
Abc_Ntk_t
*
pNtk
;
// Abc_Ntk_t * pNtkRes
;
Abc_Ntk_t
*
pNtkRes
=
NULL
;
int
c
;
int
fBmc
;
int
nFrames
;
...
...
@@ -7712,6 +7712,8 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
extern
Abc_Ntk_t
*
Abc_NtkDarRetimeStep
(
Abc_Ntk_t
*
pNtk
,
int
fVerbose
);
extern
void
Abc_NtkDarTest
(
Abc_Ntk_t
*
pNtk
);
// extern void Aig_ProcedureTest();
extern
void
Abc_NtkDarTest
(
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_NtkDarTestNtk
(
Abc_Ntk_t
*
pNtk
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
...
...
@@ -7912,14 +7914,16 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
}
// replace the current network
Abc_FrameReplaceCurrentNetwork( pAbc, pNtkRes );
*//*
if ( argc != globalUtilOptind + 1 )
goto usage;
pFileName = argv[globalUtilOptind];
Nwk_ManLutMergeGraphTest( pFileName );
*/
// Aig_ProcedureTest();
pNtkRes
=
Abc_NtkDarTestNtk
(
pNtk
);
if
(
pNtkRes
==
NULL
)
{
fprintf
(
pErr
,
"Command has failed.
\n
"
);
return
1
;
}
// replace the current network
Abc_FrameReplaceCurrentNetwork
(
pAbc
,
pNtkRes
);
return
0
;
usage:
...
...
src/base/abci/abcDar.c
View file @
ce690b29
...
...
@@ -2351,20 +2351,58 @@ void Abc_NtkDarReach( Abc_Ntk_t * pNtk, int nBddMax, int nIterMax, int fPartitio
***********************************************************************/
void
Abc_NtkDarTest
(
Abc_Ntk_t
*
pNtk
)
{
Aig_Man_t
*
pMan
;
extern
Aig_Man_t
*
Ssw_SignalCorrespondeceTestPairs
(
Aig_Man_t
*
pAig
);
Aig_Man_t
*
pMan
,
*
pTemp
;
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
pMan
=
Abc_NtkToDar
(
pNtk
,
0
,
1
);
if
(
pMan
==
NULL
)
return
;
/*
Aig_ManSetRegNum( pMan, pMan->nRegs );
Aig_ManPrintStats( pMan );
Saig_ManDumpBlif( pMan, "_temp_.blif" );
Aig_ManStop( pMan );
pMan = Saig_ManReadBlif( "_temp_.blif" );
Aig_ManPrintStats( pMan );
*/
Aig_ManSetRegNum
(
pMan
,
pMan
->
nRegs
);
pTemp
=
Ssw_SignalCorrespondeceTestPairs
(
pMan
);
Aig_ManStop
(
pTemp
);
Aig_ManStop
(
pMan
);
}
/**Function*************************************************************
Synopsis [Performs BDD-based reachability analysis.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Abc_Ntk_t
*
Abc_NtkDarTestNtk
(
Abc_Ntk_t
*
pNtk
)
{
extern
Aig_Man_t
*
Ssw_SignalCorrespondeceTestPairs
(
Aig_Man_t
*
pAig
);
Abc_Ntk_t
*
pNtkAig
;
Aig_Man_t
*
pMan
,
*
pTemp
;
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
pMan
=
Abc_NtkToDar
(
pNtk
,
0
,
1
);
if
(
pMan
==
NULL
)
return
NULL
;
Aig_ManSetRegNum
(
pMan
,
pMan
->
nRegs
);
pMan
=
Ssw_SignalCorrespondeceTestPairs
(
pTemp
=
pMan
);
Aig_ManStop
(
pTemp
);
pNtkAig
=
Abc_NtkFromAigPhase
(
pMan
);
pNtkAig
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkAig
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
Aig_ManStop
(
pMan
);
return
pNtkAig
;
}
////////////////////////////////////////////////////////////////////////
...
...
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