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
e2e3f6a2
Commit
e2e3f6a2
authored
May 06, 2011
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements in sequential verification.
parent
a0cc6215
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
11 deletions
+60
-11
src/aig/saig/saigMiter.c
+13
-3
src/base/abci/abc.c
+15
-3
src/base/abci/abcDar.c
+32
-5
No files found.
src/aig/saig/saigMiter.c
View file @
e2e3f6a2
...
...
@@ -870,8 +870,11 @@ int Ssw_SecSpecial( Aig_Man_t * pPart0, Aig_Man_t * pPart1, int nFrames, int fVe
int
iOut
,
nOuts
;
Aig_Man_t
*
pMiterCec
;
int
RetValue
,
clkTotal
=
clock
();
if
(
fVerbose
)
{
Aig_ManPrintStats
(
pPart0
);
Aig_ManPrintStats
(
pPart1
);
}
// Aig_ManDumpBlif( pPart0, "file0.blif", NULL, NULL );
// Aig_ManDumpBlif( pPart1, "file1.blif", NULL, NULL );
// assert( Aig_ManNodeNum(pPart0) <= Aig_ManNodeNum(pPart1) );
...
...
@@ -879,8 +882,8 @@ int Ssw_SecSpecial( Aig_Man_t * pPart0, Aig_Man_t * pPart1, int nFrames, int fVe
{
printf
(
"Warning: The design after synthesis is smaller!
\n
"
);
printf
(
"This warning may indicate that the order of designs is changed.
\n
"
);
printf
(
"The solver expects the original d
i
sign as first argument and
\n
"
);
printf
(
"the modified design as the second argument in
Ssw_SecSpecial()
.
\n
"
);
printf
(
"The solver expects the original d
e
sign as first argument and
\n
"
);
printf
(
"the modified design as the second argument in
\"
absec
\"
.
\n
"
);
}
// create two-level miter
pMiterCec
=
Saig_ManCreateMiterTwo
(
pPart0
,
pPart1
,
nFrames
);
...
...
@@ -950,7 +953,7 @@ int Ssw_SecSpecialMiter( Aig_Man_t * p0, Aig_Man_t * p1, int nFrames, int fVerbo
Aig_Man_t
*
pPart0
,
*
pPart1
;
int
RetValue
;
if
(
fVerbose
)
printf
(
"Performing sequential verification combinational A/B miter.
\n
"
);
printf
(
"Performing sequential verification
using
combinational A/B miter.
\n
"
);
// consider the case when a miter is given
if
(
p1
==
NULL
)
{
...
...
@@ -964,6 +967,13 @@ int Ssw_SecSpecialMiter( Aig_Man_t * p0, Aig_Man_t * p1, int nFrames, int fVerbo
printf
(
"Demitering has failed.
\n
"
);
return
-
1
;
}
if
(
Aig_ManRegNum
(
pPart0
)
!=
Aig_ManRegNum
(
pPart1
)
)
{
Aig_ManStop
(
pPart0
);
Aig_ManStop
(
pPart1
);
printf
(
"After demitering AIGs have different number of flops. Quitting.
\n
"
);
return
-
1
;
}
}
else
{
...
...
src/base/abci/abc.c
View file @
e2e3f6a2
...
...
@@ -17016,7 +17016,7 @@ int Abc_CommandAbSec( Abc_Frame_t * pAbc, int argc, char ** argv )
// set defaults
fMiter
=
1
;
nFrames
=
2
;
fVerbose
=
1
;
fVerbose
=
0
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"Fmvh"
)
)
!=
EOF
)
{
...
...
@@ -17046,12 +17046,24 @@ int Abc_CommandAbSec( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
fMiter
)
{
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
if
(
argc
==
globalUtilOptind
+
1
)
{
Abc_Print
(
-
1
,
"This command works only for structrally hashed networks. Run
\"
st
\"
.
\n
"
);
pNtk
=
Io_Read
(
argv
[
globalUtilOptind
],
Io_ReadFileType
(
argv
[
globalUtilOptind
]),
1
);
if
(
pNtk
==
NULL
)
{
Abc_Print
(
-
1
,
"Cannot read network from file
\"
%s
\"
.
\n
"
,
argv
[
globalUtilOptind
]
);
return
0
;
}
}
else
pNtk
=
Abc_NtkDup
(
pNtk
);
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
{
pNtk
=
Abc_NtkStrash
(
pNtk2
=
pNtk
,
0
,
1
,
0
);
Abc_NtkDelete
(
pNtk2
);
}
Abc_NtkDarAbSec
(
pNtk
,
NULL
,
nFrames
,
fVerbose
);
Abc_NtkDelete
(
pNtk
);
}
else
{
...
...
src/base/abci/abcDar.c
View file @
e2e3f6a2
...
...
@@ -2017,6 +2017,7 @@ int Abc_NtkDarBmcInter( Abc_Ntk_t * pNtk, Inter_ManParams_t * pPars, Abc_Ntk_t *
***********************************************************************/
int
Abc_NtkDarDemiter
(
Abc_Ntk_t
*
pNtk
)
{
char
*
pFileNameGeneric
,
pFileName0
[
1000
],
pFileName1
[
1000
];
Aig_Man_t
*
pMan
,
*
pPart0
,
*
pPart1
;
//, * pMiter;
// derive the AIG manager
pMan
=
Abc_NtkToDar
(
pNtk
,
0
,
1
);
...
...
@@ -2031,15 +2032,20 @@ int Abc_NtkDarDemiter( Abc_Ntk_t * pNtk )
printf
(
"Demitering has failed.
\n
"
);
return
0
;
}
Aig_ManDumpBlif
(
pPart0
,
"part0.blif"
,
NULL
,
NULL
);
Aig_ManDumpBlif
(
pPart1
,
"part1.blif"
,
NULL
,
NULL
);
printf
(
"The result of demitering is written into files
\"
%s
\"
and
\"
%s
\"
.
\n
"
,
"part0.blif"
,
"part1.blif"
);
// create file names
pFileNameGeneric
=
Extra_FileNameGeneric
(
pNtk
->
pSpec
);
sprintf
(
pFileName0
,
"%s%s"
,
pFileNameGeneric
,
"_part0.aig"
);
sprintf
(
pFileName1
,
"%s%s"
,
pFileNameGeneric
,
"_part1.aig"
);
ABC_FREE
(
pFileNameGeneric
);
// dump files
Ioa_WriteAiger
(
pPart0
,
pFileName0
,
0
,
0
);
Ioa_WriteAiger
(
pPart1
,
pFileName1
,
0
,
0
);
printf
(
"Demitering produced two files
\"
%s
\"
and
\"
%s
\"
.
\n
"
,
pFileName0
,
pFileName1
);
// create two-level miter
// pMiter = Saig_ManCreateMiterTwo( pPart0, pPart1, 2 );
// Aig_ManDumpBlif( pMiter, "miter01.blif", NULL, NULL );
// Aig_ManStop( pMiter );
// printf( "The new miter is written into file \"%s\".\n", "miter01.blif" );
Aig_ManStop
(
pPart0
);
Aig_ManStop
(
pPart1
);
Aig_ManStop
(
pMan
);
...
...
@@ -2315,12 +2321,33 @@ int Abc_NtkDarAbSec( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nFrames, int fVer
pMan2
=
Abc_NtkToDar
(
pNtk2
,
0
,
1
);
if
(
pMan2
==
NULL
)
{
Aig_ManStop
(
pMan1
);
printf
(
"Converting miter into AIG has failed.
\n
"
);
return
-
1
;
}
assert
(
Aig_ManRegNum
(
pMan2
)
>
0
);
if
(
Saig_ManPiNum
(
pMan1
)
!=
Saig_ManPiNum
(
pMan2
)
)
{
Aig_ManStop
(
pMan1
);
Aig_ManStop
(
pMan2
);
printf
(
"The networks have different number of PIs.
\n
"
);
return
-
1
;
}
if
(
Saig_ManPoNum
(
pMan1
)
!=
Saig_ManPoNum
(
pMan2
)
)
{
Aig_ManStop
(
pMan1
);
Aig_ManStop
(
pMan2
);
printf
(
"The networks have different number of POs.
\n
"
);
return
-
1
;
}
if
(
Aig_ManRegNum
(
pMan1
)
!=
Aig_ManRegNum
(
pMan2
)
)
{
Aig_ManStop
(
pMan1
);
Aig_ManStop
(
pMan2
);
printf
(
"The networks have different number of flops.
\n
"
);
return
-
1
;
}
}
// perform verification
RetValue
=
Ssw_SecSpecialMiter
(
pMan1
,
pMan2
,
nFrames
,
fVerbose
);
Aig_ManStop
(
pMan1
);
...
...
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