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
65687f72
Commit
65687f72
authored
Dec 08, 2007
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Version abc71208
parent
369f008e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
299 additions
and
129 deletions
+299
-129
abc.dsp
+4
-0
src/aig/aig/aigHaig.c
+1
-1
src/aig/cnf/cnf.h
+1
-1
src/aig/cnf/cnfMan.c
+61
-3
src/aig/cnf/cnfWrite.c
+2
-0
src/aig/fra/fraCec.c
+1
-1
src/aig/fra/fraClau.c
+37
-15
src/aig/fra/fraClaus.c
+0
-0
src/aig/fra/fraInd.c
+2
-2
src/base/abci/abc.c
+29
-5
src/base/abci/abcDar.c
+13
-3
src/base/io/ioReadAiger.c
+2
-2
src/misc/vec/vecPtr.h
+146
-96
No files found.
abc.dsp
View file @
65687f72
...
...
@@ -2626,6 +2626,10 @@ SOURCE=.\src\aig\fra\fraClau.c
# End Source File
# Begin Source File
SOURCE=.\src\aig\fra\fraClaus.c
# End Source File
# Begin Source File
SOURCE=.\src\aig\fra\fraCnf.c
# End Source File
# Begin Source File
...
...
src/aig/aig/aigHaig.c
View file @
65687f72
...
...
@@ -192,7 +192,7 @@ clk = clock();
// pCnf = Cnf_Derive( pFrames, Aig_ManPoNum(pFrames) - pFrames->nAsserts );
//Cnf_DataWriteIntoFile( pCnf, "temp.cnf", 1 );
// create the SAT solver to be used for this problem
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
);
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
,
1
,
0
);
printf
(
"HAIG regs = %d. HAIG nodes = %d. Outputs = %d.
\n
"
,
Aig_ManRegNum
(
pHaig
),
Aig_ManNodeNum
(
pHaig
),
Aig_ManPoNum
(
pHaig
)
);
...
...
src/aig/cnf/cnf.h
View file @
65687f72
...
...
@@ -134,7 +134,7 @@ extern void Cnf_ManStop( Cnf_Man_t * p );
extern
Vec_Int_t
*
Cnf_DataCollectPiSatNums
(
Cnf_Dat_t
*
pCnf
,
Aig_Man_t
*
p
);
extern
void
Cnf_DataFree
(
Cnf_Dat_t
*
p
);
extern
void
Cnf_DataWriteIntoFile
(
Cnf_Dat_t
*
p
,
char
*
pFileName
,
int
fReadable
);
void
*
Cnf_DataWriteIntoSolver
(
Cnf_Dat_t
*
p
);
void
*
Cnf_DataWriteIntoSolver
(
Cnf_Dat_t
*
p
,
int
nFrames
,
int
fInit
);
/*=== cnfMap.c ========================================================*/
extern
void
Cnf_DeriveMapping
(
Cnf_Man_t
*
p
);
extern
int
Cnf_ManMapForCnf
(
Cnf_Man_t
*
p
);
...
...
src/aig/cnf/cnfMan.c
View file @
65687f72
...
...
@@ -172,12 +172,13 @@ void Cnf_DataWriteIntoFile( Cnf_Dat_t * p, char * pFileName, int fReadable )
SeeAlso []
***********************************************************************/
void
*
Cnf_DataWriteIntoSolver
(
Cnf_Dat_t
*
p
)
void
*
Cnf_DataWriteIntoSolver
(
Cnf_Dat_t
*
p
,
int
nFrames
,
int
fInit
)
{
sat_solver
*
pSat
;
int
i
,
status
;
int
i
,
f
,
status
;
assert
(
nFrames
>
0
);
pSat
=
sat_solver_new
();
sat_solver_setnvars
(
pSat
,
p
->
nVars
);
sat_solver_setnvars
(
pSat
,
p
->
nVars
*
nFrames
);
for
(
i
=
0
;
i
<
p
->
nClauses
;
i
++
)
{
if
(
!
sat_solver_addclause
(
pSat
,
p
->
pClauses
[
i
],
p
->
pClauses
[
i
+
1
]
)
)
...
...
@@ -186,6 +187,63 @@ void * Cnf_DataWriteIntoSolver( Cnf_Dat_t * p )
return
NULL
;
}
}
if
(
nFrames
>
1
)
{
Aig_Obj_t
*
pObjLo
,
*
pObjLi
;
int
nLitsAll
,
*
pLits
,
Lits
[
2
];
nLitsAll
=
2
*
p
->
nVars
;
pLits
=
p
->
pClauses
[
0
];
for
(
f
=
1
;
f
<
nFrames
;
f
++
)
{
// add equality of register inputs/outputs for different timeframes
Aig_ManForEachLiLoSeq
(
p
->
pMan
,
pObjLi
,
pObjLo
,
i
)
{
Lits
[
0
]
=
(
f
-
1
)
*
nLitsAll
+
toLitCond
(
p
->
pVarNums
[
pObjLi
->
Id
],
0
);
Lits
[
1
]
=
f
*
nLitsAll
+
toLitCond
(
p
->
pVarNums
[
pObjLo
->
Id
],
1
);
if
(
!
sat_solver_addclause
(
pSat
,
Lits
,
Lits
+
2
)
)
{
sat_solver_delete
(
pSat
);
return
NULL
;
}
Lits
[
0
]
++
;
Lits
[
1
]
--
;
if
(
!
sat_solver_addclause
(
pSat
,
Lits
,
Lits
+
2
)
)
{
sat_solver_delete
(
pSat
);
return
NULL
;
}
}
// add clauses for the next timeframe
for
(
i
=
0
;
i
<
p
->
nLiterals
;
i
++
)
pLits
[
i
]
+=
nLitsAll
;
for
(
i
=
0
;
i
<
p
->
nClauses
;
i
++
)
{
if
(
!
sat_solver_addclause
(
pSat
,
p
->
pClauses
[
i
],
p
->
pClauses
[
i
+
1
]
)
)
{
sat_solver_delete
(
pSat
);
return
NULL
;
}
}
}
// return literals to their original state
nLitsAll
=
(
f
-
1
)
*
nLitsAll
;
for
(
i
=
0
;
i
<
p
->
nLiterals
;
i
++
)
pLits
[
i
]
-=
nLitsAll
;
}
if
(
fInit
)
{
Aig_Obj_t
*
pObjLo
;
int
Lits
[
1
];
Aig_ManForEachLoSeq
(
p
->
pMan
,
pObjLo
,
i
)
{
Lits
[
0
]
=
toLitCond
(
p
->
pVarNums
[
pObjLo
->
Id
],
1
);
if
(
!
sat_solver_addclause
(
pSat
,
Lits
,
Lits
+
1
)
)
{
sat_solver_delete
(
pSat
);
return
NULL
;
}
}
}
status
=
sat_solver_simplify
(
pSat
);
if
(
status
==
0
)
{
...
...
src/aig/cnf/cnfWrite.c
View file @
65687f72
...
...
@@ -207,6 +207,7 @@ Cnf_Dat_t * Cnf_ManWriteCnf( Cnf_Man_t * p, Vec_Ptr_t * vMapped, int nOutputs )
// allocate CNF
pCnf
=
ALLOC
(
Cnf_Dat_t
,
1
);
memset
(
pCnf
,
0
,
sizeof
(
Cnf_Dat_t
)
);
pCnf
->
pMan
=
p
->
pManAig
;
pCnf
->
nLiterals
=
nLiterals
;
pCnf
->
nClauses
=
nClauses
;
pCnf
->
pClauses
=
ALLOC
(
int
*
,
nClauses
+
1
);
...
...
@@ -346,6 +347,7 @@ Cnf_Dat_t * Cnf_DeriveSimple( Aig_Man_t * p, int nOutputs )
// allocate CNF
pCnf
=
ALLOC
(
Cnf_Dat_t
,
1
);
memset
(
pCnf
,
0
,
sizeof
(
Cnf_Dat_t
)
);
pCnf
->
pMan
=
p
;
pCnf
->
nLiterals
=
nLiterals
;
pCnf
->
nClauses
=
nClauses
;
pCnf
->
pClauses
=
ALLOC
(
int
*
,
nClauses
+
1
);
...
...
src/aig/fra/fraCec.c
View file @
65687f72
...
...
@@ -54,7 +54,7 @@ int Fra_FraigSat( Aig_Man_t * pMan, sint64 nConfLimit, sint64 nInsLimit, int fVe
pCnf
=
Cnf_Derive
(
pMan
,
0
);
// pCnf = Cnf_DeriveSimple( pMan, 0 );
// convert into the SAT solver
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
);
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
,
1
,
0
);
vCiIds
=
Cnf_DataCollectPiSatNums
(
pCnf
,
pMan
);
Cnf_DataFree
(
pCnf
);
// solve SAT
...
...
src/aig/fra/fraClau.c
View file @
65687f72
...
...
@@ -233,7 +233,7 @@ Cla_Man_t * Fra_ClauStart( Aig_Man_t * pMan )
Aig_ObjChild0Flip
(
Aig_ManPo
(
pFramesMain
,
0
)
);
// complement the first output
pCnfMain
=
Cnf_DeriveSimple
(
pFramesMain
,
0
);
//Cnf_DataWriteIntoFile( pCnfMain, "temp.cnf", 1 );
p
->
pSatMain
=
Cnf_DataWriteIntoSolver
(
pCnfMain
);
p
->
pSatMain
=
Cnf_DataWriteIntoSolver
(
pCnfMain
,
1
,
0
);
/*
{
int i;
...
...
@@ -248,7 +248,7 @@ Cla_Man_t * Fra_ClauStart( Aig_Man_t * pMan )
pFramesTest
=
Aig_ManFrames
(
pMan
,
1
,
0
,
0
,
1
,
NULL
);
assert
(
Aig_ManPoNum
(
pFramesTest
)
==
Aig_ManRegNum
(
pMan
)
);
pCnfTest
=
Cnf_DeriveSimple
(
pFramesTest
,
Aig_ManRegNum
(
pMan
)
);
p
->
pSatTest
=
Cnf_DataWriteIntoSolver
(
pCnfTest
);
p
->
pSatTest
=
Cnf_DataWriteIntoSolver
(
pCnfTest
,
1
,
0
);
p
->
nSatVarsTestBeg
=
p
->
nSatVarsTestCur
=
sat_solver_nvars
(
p
->
pSatTest
);
// derive one timeframe to be checked for BMC
...
...
@@ -256,7 +256,7 @@ Cla_Man_t * Fra_ClauStart( Aig_Man_t * pMan )
//Aig_ManShow( pFramesBmc, 0, NULL );
assert
(
Aig_ManPoNum
(
pFramesBmc
)
==
Aig_ManRegNum
(
pMan
)
);
pCnfBmc
=
Cnf_DeriveSimple
(
pFramesBmc
,
Aig_ManRegNum
(
pMan
)
);
p
->
pSatBmc
=
Cnf_DataWriteIntoSolver
(
pCnfBmc
);
p
->
pSatBmc
=
Cnf_DataWriteIntoSolver
(
pCnfBmc
,
1
,
0
);
// create variable sets
p
->
vSatVarsMainCs
=
Fra_ClauSaveInputVars
(
pFramesMain
,
pCnfMain
,
2
*
(
Aig_ManPiNum
(
pMan
)
-
Aig_ManRegNum
(
pMan
))
);
...
...
@@ -496,11 +496,11 @@ void Fra_ClauReduceClause( Vec_Int_t * vMain, Vec_Int_t * vNew )
LitN
=
Vec_IntEntry
(
vNew
,
j
);
VarM
=
lit_var
(
LitM
);
VarN
=
lit_var
(
LitN
);
if
(
VarM
>
VarN
)
if
(
VarM
<
VarN
)
{
assert
(
0
);
}
else
if
(
VarM
<
VarN
)
else
if
(
VarM
>
VarN
)
{
j
++
;
}
...
...
@@ -587,14 +587,14 @@ void Fra_ClauMinimizeClause( Cla_Man_t * p, Vec_Int_t * vBasis, Vec_Int_t * vExt
// copy literals without the given one
Vec_IntClear
(
vBasis
);
Vec_IntForEachEntry
(
vExtra
,
iLit2
,
k
)
if
(
iLit2
!=
iLit
)
if
(
k
!=
i
)
Vec_IntPush
(
vBasis
,
iLit2
);
// try whether it is inductive
if
(
!
Fra_ClauCheckClause
(
p
,
vBasis
,
NULL
)
)
continue
;
// the clause is inductive
// remove the literal
for
(
k
=
i
Lit
;
k
<
Vec_IntSize
(
vExtra
)
-
1
;
k
++
)
for
(
k
=
i
;
k
<
Vec_IntSize
(
vExtra
)
-
1
;
k
++
)
Vec_IntWriteEntry
(
vExtra
,
k
,
Vec_IntEntry
(
vExtra
,
k
+
1
)
);
Vec_IntShrink
(
vExtra
,
Vec_IntSize
(
vExtra
)
-
1
);
}
...
...
@@ -620,11 +620,11 @@ void Fra_ClauPrintClause( Vec_Int_t * vSatCsVars, Vec_Int_t * vCex )
LitM
=
Vec_IntEntry
(
vCex
,
i
);
VarM
=
lit_var
(
LitM
);
VarN
=
Vec_IntEntry
(
vSatCsVars
,
j
);
if
(
VarM
>
VarN
)
if
(
VarM
<
VarN
)
{
assert
(
0
);
}
else
if
(
VarM
<
VarN
)
else
if
(
VarM
>
VarN
)
{
j
++
;
printf
(
"-"
);
...
...
@@ -650,7 +650,7 @@ void Fra_ClauPrintClause( Vec_Int_t * vSatCsVars, Vec_Int_t * vCex )
SeeAlso []
***********************************************************************/
int
Fra_Clau
(
Aig_Man_t
*
pMan
,
int
nIters
,
int
fVerbose
)
int
Fra_Clau
(
Aig_Man_t
*
pMan
,
int
nIters
,
int
fVerbose
,
int
fVeryVerbose
)
{
Cla_Man_t
*
p
;
int
Iter
,
RetValue
,
fFailed
,
i
;
...
...
@@ -669,7 +669,7 @@ int Fra_Clau( Aig_Man_t * pMan, int nIters, int fVerbose )
printf
(
"%4d : "
,
Iter
);
// remap clause into the test manager
Fra_ClauRemapClause
(
p
->
pMapCsMainToCsTest
,
p
->
vCexMain0
,
p
->
vCexMain
,
0
);
if
(
fVerbose
)
if
(
fVerbose
&&
fVeryVerbose
)
Fra_ClauPrintClause
(
p
->
vSatVarsTestCs
,
p
->
vCexMain
);
// the main counter-example is in p->vCexMain
// intermediate counter-examples are in p->vCexTest
...
...
@@ -679,8 +679,17 @@ int Fra_Clau( Aig_Man_t * pMan, int nIters, int fVerbose )
{
Fra_ClauReduceClause
(
p
->
vCexMain
,
p
->
vCexTest
);
Fra_ClauRemapClause
(
p
->
pMapCsTestToNsBmc
,
p
->
vCexMain
,
p
->
vCexBmc
,
0
);
if
(
!
Fra_ClauCheckBmc
(
p
,
p
->
vCexBmc
)
)
// if ( !Fra_ClauCheckBmc(p, p->vCexBmc) )
if
(
Vec_IntSize
(
p
->
vCexMain
)
<
1
)
{
Vec_IntComplement
(
p
->
vCexMain0
);
RetValue
=
sat_solver_addclause
(
p
->
pSatMain
,
Vec_IntArray
(
p
->
vCexMain0
),
Vec_IntArray
(
p
->
vCexMain0
)
+
Vec_IntSize
(
p
->
vCexMain0
)
);
if
(
RetValue
==
0
)
{
printf
(
"
\n
Property is proved after %d iterations.
\n
"
,
Iter
+
1
);
return
0
;
}
fFailed
=
1
;
break
;
}
...
...
@@ -698,14 +707,21 @@ int Fra_Clau( Aig_Man_t * pMan, int nIters, int fVerbose )
continue
;
}
if
(
fVerbose
)
printf
(
" LitsAfterRed = %3d. "
,
Vec_IntSize
(
p
->
vCexMain
)
);
printf
(
" "
);
if
(
fVerbose
&&
fVeryVerbose
)
Fra_ClauPrintClause
(
p
->
vSatVarsTestCs
,
p
->
vCexMain
);
if
(
fVerbose
)
printf
(
" LitsInd = %3d. "
,
Vec_IntSize
(
p
->
vCexMain
)
);
// minimize the inductive property
Vec_IntClear
(
p
->
vCexBase
);
if
(
Vec_IntSize
(
p
->
vCexMain
)
>
1
)
// Fra_ClauMinimizeClause_rec( p, p->vCexBase, p->vCexMain );
//
Fra_ClauMinimizeClause( p, p->vCexBase, p->vCexMain );
Fra_ClauMinimizeClause
(
p
,
p
->
vCexBase
,
p
->
vCexMain
);
assert
(
Vec_IntSize
(
p
->
vCexMain
)
>
0
);
if
(
fVerbose
&&
fVeryVerbose
)
Fra_ClauPrintClause
(
p
->
vSatVarsTestCs
,
p
->
vCexMain
);
if
(
fVerbose
)
printf
(
" Lits
AfterMin
= %3d. "
,
Vec_IntSize
(
p
->
vCexMain
)
);
printf
(
" Lits
Red
= %3d. "
,
Vec_IntSize
(
p
->
vCexMain
)
);
if
(
fVerbose
)
printf
(
"
\n
"
);
// add the clause to the solver
...
...
@@ -716,6 +732,12 @@ int Fra_Clau( Aig_Man_t * pMan, int nIters, int fVerbose )
Iter
++
;
break
;
}
if
(
p
->
pSatMain
->
qtail
!=
p
->
pSatMain
->
qhead
)
{
RetValue
=
sat_solver_simplify
(
p
->
pSatMain
);
assert
(
RetValue
!=
0
);
assert
(
p
->
pSatMain
->
qtail
==
p
->
pSatMain
->
qhead
);
}
}
// report the results
...
...
src/aig/fra/fraClaus.c
0 → 100644
View file @
65687f72
This diff is collapsed.
Click to expand it.
src/aig/fra/fraInd.c
View file @
65687f72
...
...
@@ -339,7 +339,7 @@ PRT( "Time", clock() - clk );
// Aig_ManDumpBlif( pManAigNew, "frame_aig.blif" );
// Fra_ManPartitionTest2( pManAigNew );
// Aig_ManStop( pManAigNew );
// iterate the inductive case
p
->
pCla
->
fRefinement
=
1
;
for
(
nIter
=
0
;
p
->
pCla
->
fRefinement
;
nIter
++
)
...
...
@@ -365,7 +365,7 @@ p->timeTrav += clock() - clk2;
pCnf
=
Cnf_Derive
(
p
->
pManFraig
,
Aig_ManRegNum
(
p
->
pManFraig
)
);
//Cnf_DataWriteIntoFile( pCnf, "temp.cnf", 1 );
p
->
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
);
p
->
pSat
=
Cnf_DataWriteIntoSolver
(
pCnf
,
1
,
0
);
p
->
nSatVars
=
pCnf
->
nVars
;
assert
(
p
->
pSat
!=
NULL
);
if
(
p
->
pSat
==
NULL
)
...
...
src/base/abci/abc.c
View file @
65687f72
...
...
@@ -6193,8 +6193,11 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
FILE
*
pOut
,
*
pErr
;
Abc_Ntk_t
*
pNtk
;
//, * pNtkRes;
int
c
;
int
fBmc
;
int
nFrames
;
int
nLevels
;
int
fVerbose
;
int
fVeryVerbose
;
// extern Abc_Ntk_t * Abc_NtkNewAig( Abc_Ntk_t * pNtk );
// extern Abc_Ntk_t * Abc_NtkIvy( Abc_Ntk_t * pNtk );
// extern void Abc_NtkMaxFlowTest( Abc_Ntk_t * pNtk );
...
...
@@ -6207,20 +6210,34 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
extern
Abc_Ntk_t
*
Abc_NtkDarRetime
(
Abc_Ntk_t
*
pNtk
,
int
nStepsMax
,
int
fVerbose
);
extern
Abc_Ntk_t
*
Abc_NtkPcmTest
(
Abc_Ntk_t
*
pNtk
,
int
fVerbose
);
extern
Abc_NtkDarHaigRecord
(
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_NtkDarClau
(
Abc_Ntk_t
*
pNtk
,
int
n
StepsMax
,
int
f
Verbose
);
extern
int
Abc_NtkDarClau
(
Abc_Ntk_t
*
pNtk
,
int
n
Frames
,
int
nStepsMax
,
int
fBmc
,
int
fVerbose
,
int
fVery
Verbose
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
pOut
=
Abc_FrameReadOut
(
pAbc
);
pErr
=
Abc_FrameReadErr
(
pAbc
);
// set defaults
fVeryVerbose
=
0
;
fVerbose
=
1
;
nLevels
=
1000
;
fBmc
=
1
;
nFrames
=
1
;
nLevels
=
200
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"
Nv
h"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"
FNbvw
h"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'F'
:
if
(
globalUtilOptind
>=
argc
)
{
fprintf
(
pErr
,
"Command line switch
\"
-F
\"
should be followed by an integer.
\n
"
);
goto
usage
;
}
nFrames
=
atoi
(
argv
[
globalUtilOptind
]);
globalUtilOptind
++
;
if
(
nFrames
<
0
)
goto
usage
;
break
;
case
'N'
:
if
(
globalUtilOptind
>=
argc
)
{
...
...
@@ -6232,9 +6249,15 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
nLevels
<
0
)
goto
usage
;
break
;
case
'b'
:
fBmc
^=
1
;
break
;
case
'v'
:
fVerbose
^=
1
;
break
;
case
'w'
:
fVeryVerbose
^=
1
;
break
;
case
'h'
:
goto
usage
;
default:
...
...
@@ -6355,12 +6378,13 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_FrameReplaceCurrentNetwork( pAbc, pNtkRes );
*/
// Abc_NtkDarHaigRecord( pNtk );
Abc_NtkDarClau
(
pNtk
,
1000
,
f
Verbose
);
Abc_NtkDarClau
(
pNtk
,
nFrames
,
nLevels
,
fBmc
,
fVerbose
,
fVery
Verbose
);
return
0
;
usage:
fprintf
(
pErr
,
"usage: test [-h]
\n
"
);
fprintf
(
pErr
,
"usage: test [-
vw
h]
\n
"
);
fprintf
(
pErr
,
"
\t
testbench for new procedures
\n
"
);
fprintf
(
pErr
,
"
\t
-v : toggle printing verbose information [default = %s]
\n
"
,
fVerbose
?
"yes"
:
"no"
);
fprintf
(
pErr
,
"
\t
-w : toggle printing very verbose information [default = %s]
\n
"
,
fVeryVerbose
?
"yes"
:
"no"
);
fprintf
(
pErr
,
"
\t
-h : print the command usage
\n
"
);
return
1
;
}
...
...
src/base/abci/abcDar.c
View file @
65687f72
...
...
@@ -56,12 +56,20 @@ Aig_Man_t * Abc_NtkToDar( Abc_Ntk_t * pNtk, int fRegisters )
assert
(
Abc_NtkBoxNum
(
pNtk
)
==
Abc_NtkLatchNum
(
pNtk
)
);
Abc_NtkForEachCi
(
pNtk
,
pObj
,
i
)
if
(
i
<
Abc_NtkPiNum
(
pNtk
)
)
{
assert
(
Abc_ObjIsPi
(
pObj
)
);
if
(
!
Abc_ObjIsPi
(
pObj
)
)
printf
(
"Abc_NtkToDar(): Temporary bug: The PI ordering is wrong!
\n
"
);
}
else
assert
(
Abc_ObjIsBo
(
pObj
)
);
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
if
(
i
<
Abc_NtkPoNum
(
pNtk
)
)
{
assert
(
Abc_ObjIsPo
(
pObj
)
);
if
(
!
Abc_ObjIsPo
(
pObj
)
)
printf
(
"Abc_NtkToDar(): Temporary bug: The PO ordering is wrong!
\n
"
);
}
else
assert
(
Abc_ObjIsBi
(
pObj
)
);
// print warning about initial values
...
...
@@ -1401,9 +1409,10 @@ int Abc_NtkDarSeqSim( Abc_Ntk_t * pNtk, int nFrames, int nWords, int fVerbose )
SeeAlso []
***********************************************************************/
int
Abc_NtkDarClau
(
Abc_Ntk_t
*
pNtk
,
int
n
StepsMax
,
int
f
Verbose
)
int
Abc_NtkDarClau
(
Abc_Ntk_t
*
pNtk
,
int
n
Frames
,
int
nStepsMax
,
int
fBmc
,
int
fVerbose
,
int
fVery
Verbose
)
{
extern
int
Fra_Clau
(
Aig_Man_t
*
pMan
,
int
nIters
,
int
fVerbose
);
extern
int
Fra_Clau
(
Aig_Man_t
*
pMan
,
int
nIters
,
int
fVerbose
,
int
fVeryVerbose
);
extern
int
Fra_Claus
(
Aig_Man_t
*
pAig
,
int
nFrames
,
int
nClauses
,
int
fBmc
,
int
fVerbose
,
int
fVeryVerbose
);
Aig_Man_t
*
pMan
;
if
(
Abc_NtkPoNum
(
pNtk
)
!=
1
)
{
...
...
@@ -1418,7 +1427,8 @@ int Abc_NtkDarClau( Abc_Ntk_t * pNtk, int nStepsMax, int fVerbose )
Vec_IntFree
(
pMan
->
vFlopNums
);
pMan
->
vFlopNums
=
NULL
;
Fra_Clau
(
pMan
,
nStepsMax
,
fVerbose
);
// Fra_Clau( pMan, nStepsMax, fVerbose, fVeryVerbose );
Fra_Claus
(
pMan
,
nFrames
,
nStepsMax
,
fBmc
,
fVerbose
,
fVeryVerbose
);
Aig_ManStop
(
pMan
);
return
1
;
}
...
...
src/base/io/ioReadAiger.c
View file @
65687f72
...
...
@@ -237,8 +237,8 @@ Abc_Ntk_t * Io_ReadAiger( char * pFileName, int fCheck )
Abc_ObjAssignName
(
pObj
,
Abc_ObjName
(
pObj
),
NULL
);
Counter
++
;
}
if
(
Counter
)
printf
(
"Io_ReadAiger(): Added %d default names for nameless I/O/register objects.
\n
"
,
Counter
);
//
if ( Counter )
//
printf( "Io_ReadAiger(): Added %d default names for nameless I/O/register objects.\n", Counter );
}
else
{
...
...
src/misc/vec/vecPtr.h
View file @
65687f72
...
...
@@ -151,71 +151,6 @@ static inline Vec_Ptr_t * Vec_PtrAllocArrayCopy( void ** pArray, int nSize )
/**Function*************************************************************
Synopsis [Allocates the array of simulation info.]
Description [Allocates the array containing given number of entries,
each of which contains given number of unsigned words of simulation data.
The resulting array can be freed using regular procedure Vec_PtrFree().
It is the responsibility of the user to ensure this array is never grown.]
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
Vec_Ptr_t
*
Vec_PtrAllocSimInfo
(
int
nEntries
,
int
nWords
)
{
void
**
pMemory
;
unsigned
*
pInfo
;
int
i
;
pMemory
=
(
void
**
)
ALLOC
(
char
,
(
sizeof
(
void
*
)
+
sizeof
(
unsigned
)
*
nWords
)
*
nEntries
);
pInfo
=
(
unsigned
*
)(
pMemory
+
nEntries
);
for
(
i
=
0
;
i
<
nEntries
;
i
++
)
pMemory
[
i
]
=
pInfo
+
i
*
nWords
;
return
Vec_PtrAllocArray
(
pMemory
,
nEntries
);
}
/**Function*************************************************************
Synopsis [Allocates the array of truth tables for the given number of vars.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
Vec_Ptr_t
*
Vec_PtrAllocTruthTables
(
int
nVars
)
{
Vec_Ptr_t
*
p
;
unsigned
Masks
[
5
]
=
{
0xAAAAAAAA
,
0xCCCCCCCC
,
0xF0F0F0F0
,
0xFF00FF00
,
0xFFFF0000
};
unsigned
*
pTruth
;
int
i
,
k
,
nWords
;
nWords
=
(
nVars
<=
5
?
1
:
(
1
<<
(
nVars
-
5
)));
p
=
Vec_PtrAllocSimInfo
(
nVars
,
nWords
);
for
(
i
=
0
;
i
<
nVars
;
i
++
)
{
pTruth
=
(
unsigned
*
)
p
->
pArray
[
i
];
if
(
i
<
5
)
{
for
(
k
=
0
;
k
<
nWords
;
k
++
)
pTruth
[
k
]
=
Masks
[
i
];
}
else
{
for
(
k
=
0
;
k
<
nWords
;
k
++
)
if
(
k
&
(
1
<<
(
i
-
5
))
)
pTruth
[
k
]
=
~
(
unsigned
)
0
;
else
pTruth
[
k
]
=
0
;
}
}
return
p
;
}
/**Function*************************************************************
Synopsis [Duplicates the integer array.]
Description []
...
...
@@ -348,37 +283,6 @@ static inline void * Vec_PtrEntry( Vec_Ptr_t * p, int i )
/**Function*************************************************************
Synopsis [Resizes the array of simulation info.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
void
Vec_PtrDoubleSimInfo
(
Vec_Ptr_t
*
vInfo
)
{
Vec_Ptr_t
*
vInfoNew
;
int
nWords
;
assert
(
Vec_PtrSize
(
vInfo
)
>
2
);
// get the new array
nWords
=
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
1
)
-
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
0
);
vInfoNew
=
Vec_PtrAllocSimInfo
(
2
*
Vec_PtrSize
(
vInfo
),
nWords
);
// copy the simulation info
memcpy
(
Vec_PtrEntry
(
vInfoNew
,
0
),
Vec_PtrEntry
(
vInfo
,
0
),
Vec_PtrSize
(
vInfo
)
*
nWords
*
4
);
// replace the array
free
(
vInfo
->
pArray
);
vInfo
->
pArray
=
vInfoNew
->
pArray
;
vInfo
->
nSize
*=
2
;
vInfo
->
nCap
*=
2
;
// free the old array
vInfoNew
->
pArray
=
NULL
;
free
(
vInfoNew
);
}
/**Function*************************************************************
Synopsis []
Description []
...
...
@@ -753,6 +657,152 @@ static inline void Vec_PtrUniqify( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)() )
p
->
nSize
=
k
;
}
/**Function*************************************************************
Synopsis [Allocates the array of simulation info.]
Description [Allocates the array containing given number of entries,
each of which contains given number of unsigned words of simulation data.
The resulting array can be freed using regular procedure Vec_PtrFree().
It is the responsibility of the user to ensure this array is never grown.]
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
Vec_Ptr_t
*
Vec_PtrAllocSimInfo
(
int
nEntries
,
int
nWords
)
{
void
**
pMemory
;
unsigned
*
pInfo
;
int
i
;
pMemory
=
(
void
**
)
ALLOC
(
char
,
(
sizeof
(
void
*
)
+
sizeof
(
unsigned
)
*
nWords
)
*
nEntries
);
pInfo
=
(
unsigned
*
)(
pMemory
+
nEntries
);
for
(
i
=
0
;
i
<
nEntries
;
i
++
)
pMemory
[
i
]
=
pInfo
+
i
*
nWords
;
return
Vec_PtrAllocArray
(
pMemory
,
nEntries
);
}
/**Function*************************************************************
Synopsis [Cleans simulation info of each entry beginning with iWord.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
void
Vec_PtrCleanSimInfo
(
Vec_Ptr_t
*
vInfo
,
int
iWord
,
int
nWords
)
{
int
i
;
for
(
i
=
0
;
i
<
vInfo
->
nSize
;
i
++
)
memset
(
(
char
*
)
Vec_PtrEntry
(
vInfo
,
i
)
+
4
*
iWord
,
0
,
4
*
(
nWords
-
iWord
)
);
}
/**Function*************************************************************
Synopsis [Resizes the array of simulation info.]
Description [Doubles the number of objects for which siminfo is allocated.]
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
void
Vec_PtrDoubleSimInfo
(
Vec_Ptr_t
*
vInfo
)
{
Vec_Ptr_t
*
vInfoNew
;
int
nWords
;
assert
(
Vec_PtrSize
(
vInfo
)
>
1
);
// get the new array
nWords
=
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
1
)
-
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
0
);
vInfoNew
=
Vec_PtrAllocSimInfo
(
2
*
Vec_PtrSize
(
vInfo
),
nWords
);
// copy the simulation info
memcpy
(
Vec_PtrEntry
(
vInfoNew
,
0
),
Vec_PtrEntry
(
vInfo
,
0
),
Vec_PtrSize
(
vInfo
)
*
nWords
*
4
);
// replace the array
free
(
vInfo
->
pArray
);
vInfo
->
pArray
=
vInfoNew
->
pArray
;
vInfo
->
nSize
*=
2
;
vInfo
->
nCap
*=
2
;
// free the old array
vInfoNew
->
pArray
=
NULL
;
free
(
vInfoNew
);
}
/**Function*************************************************************
Synopsis [Resizes the array of simulation info.]
Description [Doubles the number of simulation patterns stored for each object.]
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
void
Vec_PtrReallocSimInfo
(
Vec_Ptr_t
*
vInfo
)
{
Vec_Ptr_t
*
vInfoNew
;
int
nWords
,
i
;
assert
(
Vec_PtrSize
(
vInfo
)
>
1
);
// get the new array
nWords
=
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
1
)
-
(
unsigned
*
)
Vec_PtrEntry
(
vInfo
,
0
);
vInfoNew
=
Vec_PtrAllocSimInfo
(
Vec_PtrSize
(
vInfo
),
2
*
nWords
);
// copy the simulation info
for
(
i
=
0
;
i
<
vInfo
->
nSize
;
i
++
)
memcpy
(
Vec_PtrEntry
(
vInfoNew
,
i
),
Vec_PtrEntry
(
vInfo
,
i
),
nWords
*
4
);
// replace the array
free
(
vInfo
->
pArray
);
vInfo
->
pArray
=
vInfoNew
->
pArray
;
// free the old array
vInfoNew
->
pArray
=
NULL
;
free
(
vInfoNew
);
}
/**Function*************************************************************
Synopsis [Allocates the array of truth tables for the given number of vars.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static
inline
Vec_Ptr_t
*
Vec_PtrAllocTruthTables
(
int
nVars
)
{
Vec_Ptr_t
*
p
;
unsigned
Masks
[
5
]
=
{
0xAAAAAAAA
,
0xCCCCCCCC
,
0xF0F0F0F0
,
0xFF00FF00
,
0xFFFF0000
};
unsigned
*
pTruth
;
int
i
,
k
,
nWords
;
nWords
=
(
nVars
<=
5
?
1
:
(
1
<<
(
nVars
-
5
)));
p
=
Vec_PtrAllocSimInfo
(
nVars
,
nWords
);
for
(
i
=
0
;
i
<
nVars
;
i
++
)
{
pTruth
=
(
unsigned
*
)
p
->
pArray
[
i
];
if
(
i
<
5
)
{
for
(
k
=
0
;
k
<
nWords
;
k
++
)
pTruth
[
k
]
=
Masks
[
i
];
}
else
{
for
(
k
=
0
;
k
<
nWords
;
k
++
)
if
(
k
&
(
1
<<
(
i
-
5
))
)
pTruth
[
k
]
=
~
(
unsigned
)
0
;
else
pTruth
[
k
]
=
0
;
}
}
return
p
;
}
#endif
...
...
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