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
7926d75e
Commit
7926d75e
authored
Mar 02, 2012
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding features related to the communication bridge.
parent
a6f363d4
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
136 additions
and
101 deletions
+136
-101
src/base/abci/abc.c
+7
-2
src/base/main/main.c
+12
-2
src/base/main/main.h
+2
-0
src/base/main/mainFrame.c
+3
-0
src/base/main/mainInt.h
+1
-0
src/base/main/mainUtils.c
+2
-1
src/misc/util/abc_global.h
+8
-8
src/misc/util/utilBridge.c
+101
-88
No files found.
src/base/abci/abc.c
View file @
7926d75e
...
@@ -379,6 +379,12 @@ extern int Abc_CommandAbcLivenessToSafetyWithLTL( Abc_Frame_t * pAbc, int argc,
...
@@ -379,6 +379,12 @@ extern int Abc_CommandAbcLivenessToSafetyWithLTL( Abc_Frame_t * pAbc, int argc,
***********************************************************************/
***********************************************************************/
void
Abc_FrameReplaceCex
(
Abc_Frame_t
*
pAbc
,
Abc_Cex_t
**
ppCex
)
void
Abc_FrameReplaceCex
(
Abc_Frame_t
*
pAbc
,
Abc_Cex_t
**
ppCex
)
{
{
// update bridge
if
(
Abc_FrameIsBridgeMode
()
)
{
extern
int
Gia_ManToBridgeResult
(
FILE
*
pFile
,
int
Result
,
Abc_Cex_t
*
pCex
);
Gia_ManToBridgeResult
(
stdout
,
pAbc
->
Status
,
*
ppCex
);
}
// update CEX
// update CEX
ABC_FREE
(
pAbc
->
pCex
);
ABC_FREE
(
pAbc
->
pCex
);
pAbc
->
pCex
=
*
ppCex
;
pAbc
->
pCex
=
*
ppCex
;
...
@@ -23473,8 +23479,7 @@ int Abc_CommandAbc9Equiv3( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -23473,8 +23479,7 @@ int Abc_CommandAbc9Equiv3( Abc_Frame_t * pAbc, int argc, char ** argv )
// else
// else
// pAbc->Status = Ssw_RarSignalFilterGia2( pAbc->pGia, nFrames, nWords, nBinSize, nRounds, TimeOut, fUseCex? pAbc->pCex: NULL, fLatchOnly, fVerbose );
// pAbc->Status = Ssw_RarSignalFilterGia2( pAbc->pGia, nFrames, nWords, nBinSize, nRounds, TimeOut, fUseCex? pAbc->pCex: NULL, fLatchOnly, fVerbose );
// pAbc->nFrames = pAbc->pGia->pCexSeq->iFrame;
// pAbc->nFrames = pAbc->pGia->pCexSeq->iFrame;
if
(
pAbc
->
pGia
->
pCexSeq
)
Abc_FrameReplaceCex
(
pAbc
,
&
pAbc
->
pGia
->
pCexSeq
);
Abc_FrameReplaceCex
(
pAbc
,
&
pAbc
->
pGia
->
pCexSeq
);
return
0
;
return
0
;
usage:
usage:
...
...
src/base/main/main.c
View file @
7926d75e
...
@@ -35,7 +35,7 @@ ABC_NAMESPACE_IMPL_START
...
@@ -35,7 +35,7 @@ ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
static
int
TypeCheck
(
Abc_Frame_t
*
pAbc
,
const
char
*
s
);
static
int
TypeCheck
(
Abc_Frame_t
*
pAbc
,
const
char
*
s
);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -111,7 +111,7 @@ int Abc_RealMain( int argc, char * argv[] )
...
@@ -111,7 +111,7 @@ int Abc_RealMain( int argc, char * argv[] )
sprintf
(
sWriteCmd
,
"write"
);
sprintf
(
sWriteCmd
,
"write"
);
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
((
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"c:hf:F:o:st:T:x"
))
!=
EOF
)
{
while
((
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"c:hf:F:o:st:T:x
b
"
))
!=
EOF
)
{
switch
(
c
)
{
switch
(
c
)
{
case
'c'
:
case
'c'
:
strcpy
(
sCommandUsr
,
globalUtilOptarg
);
strcpy
(
sCommandUsr
,
globalUtilOptarg
);
...
@@ -177,10 +177,20 @@ int Abc_RealMain( int argc, char * argv[] )
...
@@ -177,10 +177,20 @@ int Abc_RealMain( int argc, char * argv[] )
fBatch
=
1
;
fBatch
=
1
;
break
;
break
;
case
'b'
:
Abc_FrameSetBridgeMode
();
break
;
default:
default:
goto
usage
;
goto
usage
;
}
}
}
}
if
(
Abc_FrameIsBridgeMode
()
)
{
extern
Gia_Man_t
*
Gia_ManFromBridge
(
FILE
*
pFile
,
Vec_Int_t
**
pvInit
);
pAbc
->
pGia
=
Gia_ManFromBridge
(
stdin
,
NULL
);
}
if
(
fBatch
)
if
(
fBatch
)
{
{
...
...
src/base/main/main.h
View file @
7926d75e
...
@@ -104,6 +104,8 @@ extern ABC_DLL void * Abc_FrameReadManDd();
...
@@ -104,6 +104,8 @@ extern ABC_DLL void * Abc_FrameReadManDd();
extern
ABC_DLL
void
*
Abc_FrameReadManDec
();
extern
ABC_DLL
void
*
Abc_FrameReadManDec
();
extern
ABC_DLL
char
*
Abc_FrameReadFlag
(
char
*
pFlag
);
extern
ABC_DLL
char
*
Abc_FrameReadFlag
(
char
*
pFlag
);
extern
ABC_DLL
int
Abc_FrameIsFlagEnabled
(
char
*
pFlag
);
extern
ABC_DLL
int
Abc_FrameIsFlagEnabled
(
char
*
pFlag
);
extern
ABC_DLL
int
Abc_FrameIsBridgeMode
();
extern
ABC_DLL
void
Abc_FrameSetBridgeMode
();
extern
ABC_DLL
int
Abc_FrameReadBmcFrames
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
int
Abc_FrameReadBmcFrames
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
int
Abc_FrameReadProbStatus
(
Abc_Frame_t
*
p
);
extern
ABC_DLL
int
Abc_FrameReadProbStatus
(
Abc_Frame_t
*
p
);
...
...
src/base/main/mainFrame.c
View file @
7926d75e
...
@@ -78,6 +78,9 @@ void Abc_FrameSetLibVer( void * pLib ) { s_GlobalFrame->pL
...
@@ -78,6 +78,9 @@ void Abc_FrameSetLibVer( void * pLib ) { s_GlobalFrame->pL
void
Abc_FrameSetFlag
(
char
*
pFlag
,
char
*
pValue
)
{
Cmd_FlagUpdateValue
(
s_GlobalFrame
,
pFlag
,
pValue
);
}
void
Abc_FrameSetFlag
(
char
*
pFlag
,
char
*
pValue
)
{
Cmd_FlagUpdateValue
(
s_GlobalFrame
,
pFlag
,
pValue
);
}
void
Abc_FrameSetCex
(
Abc_Cex_t
*
pCex
)
{
ABC_FREE
(
s_GlobalFrame
->
pCex
);
s_GlobalFrame
->
pCex
=
pCex
;
}
void
Abc_FrameSetCex
(
Abc_Cex_t
*
pCex
)
{
ABC_FREE
(
s_GlobalFrame
->
pCex
);
s_GlobalFrame
->
pCex
=
pCex
;
}
int
Abc_FrameIsBridgeMode
()
{
return
s_GlobalFrame
->
fBridgeMode
;
}
void
Abc_FrameSetBridgeMode
()
{
s_GlobalFrame
->
fBridgeMode
=
0
;
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns 1 if the flag is enabled without value or with value 1.]
Synopsis [Returns 1 if the flag is enabled without value or with value 1.]
...
...
src/base/main/mainInt.h
View file @
7926d75e
...
@@ -70,6 +70,7 @@ struct Abc_Frame_t_
...
@@ -70,6 +70,7 @@ struct Abc_Frame_t_
int
nSteps
;
// the counter of different network processed
int
nSteps
;
// the counter of different network processed
int
fAutoexac
;
// marks the autoexec mode
int
fAutoexac
;
// marks the autoexec mode
int
fBatchMode
;
// are we invoked in batch mode?
int
fBatchMode
;
// are we invoked in batch mode?
int
fBridgeMode
;
// are we invoked in bridge mode?
// output streams
// output streams
FILE
*
Out
;
FILE
*
Out
;
FILE
*
Err
;
FILE
*
Err
;
...
...
src/base/main/mainUtils.c
View file @
7926d75e
...
@@ -120,7 +120,7 @@ void Abc_UtilsPrintUsage( Abc_Frame_t * pAbc, char * ProgName )
...
@@ -120,7 +120,7 @@ void Abc_UtilsPrintUsage( Abc_Frame_t * pAbc, char * ProgName )
{
{
fprintf
(
pAbc
->
Err
,
"
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\n
"
);
fprintf
(
pAbc
->
Err
,
fprintf
(
pAbc
->
Err
,
"usage: %s [-c cmd] [-f script] [-h] [-o file] [-s] [-t type] [-T type] [-x] [file]
\n
"
,
"usage: %s [-c cmd] [-f script] [-h] [-o file] [-s] [-t type] [-T type] [-x] [
-b] [
file]
\n
"
,
ProgName
);
ProgName
);
fprintf
(
pAbc
->
Err
,
" -c cmd
\t
execute commands `cmd'
\n
"
);
fprintf
(
pAbc
->
Err
,
" -c cmd
\t
execute commands `cmd'
\n
"
);
fprintf
(
pAbc
->
Err
,
" -F script
\t
execute commands from a script file and echo commands
\n
"
);
fprintf
(
pAbc
->
Err
,
" -F script
\t
execute commands from a script file and echo commands
\n
"
);
...
@@ -131,6 +131,7 @@ void Abc_UtilsPrintUsage( Abc_Frame_t * pAbc, char * ProgName )
...
@@ -131,6 +131,7 @@ void Abc_UtilsPrintUsage( Abc_Frame_t * pAbc, char * ProgName )
fprintf
(
pAbc
->
Err
,
" -t type
\t
specify input type (blif_mv (default), blif_mvs, blif, or none)
\n
"
);
fprintf
(
pAbc
->
Err
,
" -t type
\t
specify input type (blif_mv (default), blif_mvs, blif, or none)
\n
"
);
fprintf
(
pAbc
->
Err
,
" -T type
\t
specify output type (blif_mv (default), blif_mvs, blif, or none)
\n
"
);
fprintf
(
pAbc
->
Err
,
" -T type
\t
specify output type (blif_mv (default), blif_mvs, blif, or none)
\n
"
);
fprintf
(
pAbc
->
Err
,
" -x
\t\t
equivalent to '-t none -T none'
\n
"
);
fprintf
(
pAbc
->
Err
,
" -x
\t\t
equivalent to '-t none -T none'
\n
"
);
fprintf
(
pAbc
->
Err
,
" -b
\t\t
running in bridge mode
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\n
"
);
}
}
...
...
src/misc/util/abc_global.h
View file @
7926d75e
...
@@ -256,23 +256,19 @@ enum Abc_VerbLevel
...
@@ -256,23 +256,19 @@ enum Abc_VerbLevel
ABC_VERBOSE
=
2
ABC_VERBOSE
=
2
};
};
extern
int
Gia_ManToBridgeText
(
FILE
*
pFile
,
int
Size
,
unsigned
char
*
pBuffer
);
// string printing
extern
char
*
vnsprintf
(
const
char
*
format
,
va_list
args
);
extern
char
*
nsprintf
(
const
char
*
format
,
...);
static
inline
void
Abc_Print
(
int
level
,
const
char
*
format
,
...
)
static
inline
void
Abc_Print
(
int
level
,
const
char
*
format
,
...
)
{
{
extern
int
in_bridge_mode
;
extern
ABC_DLL
int
Abc_FrameIsBridgeMode
()
;
va_list
args
;
va_list
args
;
if
(
level
==
ABC_ERROR
)
if
(
level
==
ABC_ERROR
)
printf
(
"Error: "
);
printf
(
"Error: "
);
else
if
(
level
==
ABC_WARNING
)
else
if
(
level
==
ABC_WARNING
)
printf
(
"Warning: "
);
printf
(
"Warning: "
);
va_start
(
args
,
format
);
va_start
(
args
,
format
);
if
(
in_bridge_mode
)
if
(
Abc_FrameIsBridgeMode
()
)
{
{
extern
int
Gia_ManToBridgeText
(
FILE
*
pFile
,
int
Size
,
unsigned
char
*
pBuffer
);
extern
char
*
vnsprintf
(
const
char
*
format
,
va_list
args
);
unsigned
char
*
tmp
=
vnsprintf
(
format
,
args
);
unsigned
char
*
tmp
=
vnsprintf
(
format
,
args
);
Gia_ManToBridgeText
(
stdout
,
strlen
(
tmp
),
tmp
);
Gia_ManToBridgeText
(
stdout
,
strlen
(
tmp
),
tmp
);
free
(
tmp
);
free
(
tmp
);
...
@@ -345,6 +341,10 @@ extern void Abc_QuickSort3( word * pData, int nSize, int fDecrease );
...
@@ -345,6 +341,10 @@ extern void Abc_QuickSort3( word * pData, int nSize, int fDecrease );
extern
void
Abc_QuickSortCostData
(
int
*
pCosts
,
int
nSize
,
int
fDecrease
,
word
*
pData
,
int
*
pResult
);
extern
void
Abc_QuickSortCostData
(
int
*
pCosts
,
int
nSize
,
int
fDecrease
,
word
*
pData
,
int
*
pResult
);
extern
int
*
Abc_QuickSortCost
(
int
*
pCosts
,
int
nSize
,
int
fDecrease
);
extern
int
*
Abc_QuickSortCost
(
int
*
pCosts
,
int
nSize
,
int
fDecrease
);
// string printing
extern
char
*
vnsprintf
(
const
char
*
format
,
va_list
args
);
extern
char
*
nsprintf
(
const
char
*
format
,
...);
ABC_NAMESPACE_HEADER_END
ABC_NAMESPACE_HEADER_END
...
...
src/misc/util/utilBridge.c
View file @
7926d75e
...
@@ -23,9 +23,7 @@
...
@@ -23,9 +23,7 @@
#include <stdlib.h>
#include <stdlib.h>
#include <assert.h>
#include <assert.h>
#include "abc_global.h"
#include "src/aig/gia/gia.h"
#include "src/aig/gia/gia.h"
#include "src/misc/vec/vec.h"
ABC_NAMESPACE_IMPL_START
ABC_NAMESPACE_IMPL_START
...
@@ -33,14 +31,20 @@ ABC_NAMESPACE_IMPL_START
...
@@ -33,14 +31,20 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
#define BRIDGE_TEXT_MESSAGE 999996
#define BRIDGE_RESULTS 101
#define BRIDGE_ABS_NETLIST 107
#define BRIDGE_BAD_ABS 105
#define BRIDGE_VALUE_X 0
#define BRIDGE_VALUE_0 2
#define BRIDGE_VALUE_1 3
extern
void
Gia_WriteAigerEncodeStr
(
Vec_Str_t
*
vStr
,
unsigned
x
);
extern
void
Gia_WriteAigerEncodeStr
(
Vec_Str_t
*
vStr
,
unsigned
x
);
extern
unsigned
Gia_ReadAigerDecode
(
unsigned
char
**
ppPos
);
extern
unsigned
Gia_ReadAigerDecode
(
unsigned
char
**
ppPos
);
extern
void
Gia_WriteAigerEncodeStr
(
Vec_Str_t
*
vStr
,
unsigned
x
);
extern
void
Gia_WriteAigerEncodeStr
(
Vec_Str_t
*
vStr
,
unsigned
x
);
// this variable determines where the output goes
int
in_bridge_mode
=
0
;
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -58,63 +62,52 @@ int in_bridge_mode = 0;
...
@@ -58,63 +62,52 @@ int in_bridge_mode = 0;
***********************************************************************/
***********************************************************************/
Vec_Str_t
*
Gia_ManToBridgeVec
(
Gia_Man_t
*
p
)
Vec_Str_t
*
Gia_ManToBridgeVec
(
Gia_Man_t
*
p
)
{
{
Vec_Str_t
*
v
Buffe
r
;
Vec_Str_t
*
v
St
r
;
Gia_Obj_t
*
pObj
;
Gia_Obj_t
*
pObj
;
int
nNodes
=
0
,
i
,
uLit
,
uLit0
,
uLit1
;
int
i
,
uLit0
,
uLit1
,
nNodes
;
// set the node numbers to be used in the output file
assert
(
Gia_ManPoNum
(
p
)
>
0
);
Gia_ManConst0
(
p
)
->
Value
=
nNodes
++
;
// start with const1 node (number 1)
nNodes
=
1
;
// assign literals(!!!) to the value field
Gia_ManConst0
(
p
)
->
Value
=
Abc_Var2Lit
(
nNodes
++
,
1
);
Gia_ManForEachCi
(
p
,
pObj
,
i
)
Gia_ManForEachCi
(
p
,
pObj
,
i
)
pObj
->
Value
=
nNodes
++
;
pObj
->
Value
=
Abc_Var2Lit
(
nNodes
++
,
0
)
;
Gia_ManForEachAnd
(
p
,
pObj
,
i
)
Gia_ManForEachAnd
(
p
,
pObj
,
i
)
pObj
->
Value
=
nNodes
++
;
pObj
->
Value
=
Abc_Var2Lit
(
nNodes
++
,
0
);
// write the header "M I L O A" where M = I + L + A
// write header
vBuffer
=
Vec_StrAlloc
(
3
*
Gia_ManObjNum
(
p
)
);
vStr
=
Vec_StrAlloc
(
1000
);
Vec_StrPrintStr
(
vBuffer
,
"aig "
);
Gia_WriteAigerEncodeStr
(
vStr
,
Gia_ManPiNum
(
p
)
);
Vec_StrPrintNum
(
vBuffer
,
Gia_ManCandNum
(
p
)
);
Gia_WriteAigerEncodeStr
(
vStr
,
Gia_ManRegNum
(
p
)
);
Vec_StrPrintStr
(
vBuffer
,
" "
);
Gia_WriteAigerEncodeStr
(
vStr
,
Gia_ManAndNum
(
p
)
);
Vec_StrPrintNum
(
vBuffer
,
Gia_ManPiNum
(
p
)
);
Vec_StrPrintStr
(
vBuffer
,
" "
);
// write the nodes
Vec_StrPrintNum
(
vBuffer
,
Gia_ManRegNum
(
p
)
);
Gia_ManForEachAnd
(
p
,
pObj
,
i
)
Vec_StrPrintStr
(
vBuffer
,
" "
);
{
Vec_StrPrintNum
(
vBuffer
,
Gia_ManPoNum
(
p
)
);
uLit0
=
Gia_ObjFanin0Copy
(
pObj
);
Vec_StrPrintStr
(
vBuffer
,
" "
);
uLit1
=
Gia_ObjFanin1Copy
(
pObj
);
Vec_StrPrintNum
(
vBuffer
,
Gia_ManAndNum
(
p
)
);
assert
(
uLit0
!=
uLit1
);
Vec_StrPrintStr
(
vBuffer
,
"
\n
"
);
Gia_WriteAigerEncodeStr
(
vStr
,
uLit0
<<
1
);
Gia_WriteAigerEncodeStr
(
vStr
,
uLit1
);
}
// write latch drivers
// write latch drivers
Gia_ManForEachRi
(
p
,
pObj
,
i
)
Gia_ManForEachRi
(
p
,
pObj
,
i
)
{
{
uLit
=
Abc_Var2Lit
(
Gia_ObjValue
(
Gia_ObjFanin0
(
pObj
)),
Gia_ObjFaninC0
(
pObj
)
);
uLit0
=
Gia_ObjFanin0Copy
(
pObj
);
Vec_StrPrintNum
(
vBuffer
,
uLit
);
Gia_WriteAigerEncodeStr
(
vStr
,
(
uLit0
<<
2
)
|
BRIDGE_VALUE_0
);
Vec_StrPrintStr
(
vBuffer
,
"
\n
"
);
}
}
// write PO drivers
// write PO drivers
Gia_WriteAigerEncodeStr
(
vStr
,
Gia_ManPoNum
(
p
)
);
Gia_ManForEachPo
(
p
,
pObj
,
i
)
Gia_ManForEachPo
(
p
,
pObj
,
i
)
{
{
uLit
=
Abc_Var2Lit
(
Gia_ObjValue
(
Gia_ObjFanin0
(
pObj
)),
Gia_ObjFaninC0
(
pObj
)
);
uLit0
=
Gia_ObjFanin0Copy
(
pObj
);
Vec_StrPrintNum
(
vBuffer
,
uLit
);
// complement property output!!!
Vec_StrPrintStr
(
vBuffer
,
"
\n
"
);
Gia_WriteAigerEncodeStr
(
vStr
,
Abc_LitNot
(
uLit0
)
);
}
// write the nodes into the buffer
Gia_ManForEachAnd
(
p
,
pObj
,
i
)
{
uLit
=
Abc_Var2Lit
(
Gia_ObjValue
(
pObj
),
0
);
uLit0
=
Abc_Var2Lit
(
Gia_ObjValue
(
Gia_ObjFanin0
(
pObj
)),
Gia_ObjFaninC0
(
pObj
)
);
uLit1
=
Abc_Var2Lit
(
Gia_ObjValue
(
Gia_ObjFanin1
(
pObj
)),
Gia_ObjFaninC1
(
pObj
)
);
assert
(
uLit0
!=
uLit1
);
if
(
uLit0
>
uLit1
)
{
int
Temp
=
uLit0
;
uLit0
=
uLit1
;
uLit1
=
Temp
;
}
Gia_WriteAigerEncodeStr
(
vBuffer
,
uLit
-
uLit1
);
Gia_WriteAigerEncodeStr
(
vBuffer
,
uLit1
-
uLit0
);
}
}
Vec_StrPrintStr
(
vBuffer
,
"c"
);
return
vStr
;
return
vBuffer
;
}
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -130,11 +123,13 @@ Vec_Str_t * Gia_ManToBridgeVec( Gia_Man_t * p )
...
@@ -130,11 +123,13 @@ Vec_Str_t * Gia_ManToBridgeVec( Gia_Man_t * p )
***********************************************************************/
***********************************************************************/
void
Gia_CreateHeader
(
FILE
*
pFile
,
int
Type
,
int
Size
,
unsigned
char
*
pBuffer
)
void
Gia_CreateHeader
(
FILE
*
pFile
,
int
Type
,
int
Size
,
unsigned
char
*
pBuffer
)
{
{
int
RetValue
;
fprintf
(
pFile
,
"%.6d"
,
Type
);
fprintf
(
pFile
,
"%.6d"
,
Type
);
fprintf
(
pFile
,
" "
);
fprintf
(
pFile
,
" "
);
fprintf
(
pFile
,
"%.16d"
,
Size
);
fprintf
(
pFile
,
"%.16d"
,
Size
);
fprintf
(
pFile
,
" "
);
fprintf
(
pFile
,
" "
);
fwrite
(
pBuffer
,
Size
,
1
,
pFile
);
RetValue
=
fwrite
(
pBuffer
,
Size
,
1
,
pFile
);
assert
(
RetValue
==
1
);
fflush
(
pFile
);
fflush
(
pFile
);
}
}
...
@@ -150,24 +145,6 @@ void Gia_CreateHeader( FILE * pFile, int Type, int Size, unsigned char * pBuffer
...
@@ -150,24 +145,6 @@ void Gia_CreateHeader( FILE * pFile, int Type, int Size, unsigned char * pBuffer
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
#define BRIDGE_TEXT_MESSAGE 999996
#define BRIDGE_RESULTS 101
#define BRIDGE_ABS_NETLIST 107
#define BRIDGE_BAD_ABS 105
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Gia_ManToBridgeText
(
FILE
*
pFile
,
int
Size
,
unsigned
char
*
pBuffer
)
int
Gia_ManToBridgeText
(
FILE
*
pFile
,
int
Size
,
unsigned
char
*
pBuffer
)
{
{
Gia_CreateHeader
(
pFile
,
BRIDGE_TEXT_MESSAGE
,
Size
,
pBuffer
);
Gia_CreateHeader
(
pFile
,
BRIDGE_TEXT_MESSAGE
,
Size
,
pBuffer
);
...
@@ -187,24 +164,35 @@ int Gia_ManToBridgeBadAbs( FILE * pFile )
...
@@ -187,24 +164,35 @@ int Gia_ManToBridgeBadAbs( FILE * pFile )
return
1
;
return
1
;
}
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Gia_ManFromBridgeHolds
(
FILE
*
pFile
)
void
Gia_ManFromBridgeHolds
(
FILE
*
pFile
)
{
{
fputc
(
(
char
)
3
,
pFile
);
// true
fputc
(
(
char
)
BRIDGE_VALUE_1
,
pFile
);
// true
fputc
(
(
char
)
1
,
pFile
);
// size of vector (Armin's encoding)
fputc
(
(
char
)
1
,
pFile
);
// size of vector (Armin's encoding)
fputc
(
(
char
)
0
,
pFile
);
// number of the property (Armin's encoding)
fputc
(
(
char
)
0
,
pFile
);
// number of the property (Armin's encoding)
fputc
(
(
char
)
0
,
pFile
);
// no invariant
fputc
(
(
char
)
0
,
pFile
);
// no invariant
}
}
void
Gia_ManFromBridgeUnknown
(
FILE
*
pFile
)
void
Gia_ManFromBridgeUnknown
(
FILE
*
pFile
)
{
{
fputc
(
(
char
)
0
,
pFile
);
// undef
fputc
(
(
char
)
BRIDGE_VALUE_X
,
pFile
);
// undef
fputc
(
(
char
)
1
,
pFile
);
// size of vector (Armin's encoding)
fputc
(
(
char
)
1
,
pFile
);
// size of vector (Armin's encoding)
fputc
(
(
char
)
0
,
pFile
);
// number of the property (Armin's encoding)
fputc
(
(
char
)
0
,
pFile
);
// number of the property (Armin's encoding)
}
}
void
Gia_ManFromBridgeCex
(
FILE
*
pFile
,
Abc_Cex_t
*
pCex
)
void
Gia_ManFromBridgeCex
(
FILE
*
pFile
,
Abc_Cex_t
*
pCex
)
{
{
int
i
,
f
,
iBit
;
int
i
,
f
,
iBit
,
RetValue
;
Vec_Str_t
*
vStr
=
Vec_StrAlloc
(
1000
);
Vec_Str_t
*
vStr
=
Vec_StrAlloc
(
1000
);
Vec_StrPush
(
vStr
,
(
char
)
2
);
// false
Vec_StrPush
(
vStr
,
(
char
)
BRIDGE_VALUE_0
);
// false
Vec_StrPush
(
vStr
,
(
char
)
1
);
// size of vector (Armin's encoding)
Vec_StrPush
(
vStr
,
(
char
)
1
);
// size of vector (Armin's encoding)
Vec_StrPush
(
vStr
,
(
char
)
0
);
// number of the property (Armin's encoding)
Vec_StrPush
(
vStr
,
(
char
)
0
);
// number of the property (Armin's encoding)
Vec_StrPush
(
vStr
,
(
char
)
1
);
// size of vector (Armin's encoding)
Vec_StrPush
(
vStr
,
(
char
)
1
);
// size of vector (Armin's encoding)
...
@@ -215,14 +203,15 @@ void Gia_ManFromBridgeCex( FILE * pFile, Abc_Cex_t * pCex )
...
@@ -215,14 +203,15 @@ void Gia_ManFromBridgeCex( FILE * pFile, Abc_Cex_t * pCex )
for
(
f
=
0
;
f
<=
pCex
->
iFrame
;
f
++
)
for
(
f
=
0
;
f
<=
pCex
->
iFrame
;
f
++
)
{
{
Gia_WriteAigerEncodeStr
(
vStr
,
pCex
->
nPis
);
// num of inputs
Gia_WriteAigerEncodeStr
(
vStr
,
pCex
->
nPis
);
// num of inputs
for
(
i
=
0
;
i
<
pCex
->
nPis
;
i
++
)
for
(
i
=
0
;
i
<
pCex
->
nPis
;
i
++
,
iBit
++
)
Vec_StrPush
(
vStr
,
(
char
)(
Abc_InfoHasBit
(
pCex
->
pData
,
iBit
++
)
?
3
:
2
)
);
// value
Vec_StrPush
(
vStr
,
(
char
)(
Abc_InfoHasBit
(
pCex
->
pData
,
iBit
)
?
BRIDGE_VALUE_1
:
BRIDGE_VALUE_0
)
);
// value
}
}
assert
(
iBit
==
pCex
->
nBits
);
assert
(
iBit
==
pCex
->
nBits
);
Vec_StrPush
(
vStr
,
(
char
)
1
);
// the number of frames (for a concrete counter-example)
Vec_StrPush
(
vStr
,
(
char
)
1
);
// the number of frames (for a concrete counter-example)
for
(
i
=
0
;
i
<
pCex
->
nRegs
;
i
++
)
for
(
i
=
0
;
i
<
pCex
->
nRegs
;
i
++
)
Vec_StrPush
(
vStr
,
(
char
)
2
);
// always zero ??????????????
Vec_StrPush
(
vStr
,
(
char
)
BRIDGE_VALUE_0
);
// always zero!!!
fwrite
(
Vec_StrArray
(
vStr
),
Vec_StrSize
(
vStr
),
1
,
pFile
);
RetValue
=
fwrite
(
Vec_StrArray
(
vStr
),
Vec_StrSize
(
vStr
),
1
,
pFile
);
assert
(
RetValue
==
1
);
Vec_StrFree
(
vStr
);
Vec_StrFree
(
vStr
);
}
}
int
Gia_ManToBridgeResult
(
FILE
*
pFile
,
int
Result
,
Abc_Cex_t
*
pCex
)
int
Gia_ManToBridgeResult
(
FILE
*
pFile
,
int
Result
,
Abc_Cex_t
*
pCex
)
...
@@ -238,7 +227,6 @@ int Gia_ManToBridgeResult( FILE * pFile, int Result, Abc_Cex_t * pCex )
...
@@ -238,7 +227,6 @@ int Gia_ManToBridgeResult( FILE * pFile, int Result, Abc_Cex_t * pCex )
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis []
Synopsis []
...
@@ -264,11 +252,11 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -264,11 +252,11 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
nGates
=
Gia_ReadAigerDecode
(
&
pBuffer
);
nGates
=
Gia_ReadAigerDecode
(
&
pBuffer
);
vLits
=
Vec_IntAlloc
(
1000
);
vLits
=
Vec_IntAlloc
(
1000
);
Vec_IntPush
(
vLits
,
-
1
);
Vec_IntPush
(
vLits
,
-
999
);
Vec_IntPush
(
vLits
,
1
);
Vec_IntPush
(
vLits
,
1
);
// start the AIG package
// start the AIG package
p
=
Gia_ManStart
(
nInputs
+
nFlops
*
2
+
nGates
+
1
+
1
);
p
=
Gia_ManStart
(
nInputs
+
nFlops
*
2
+
nGates
+
1
+
1
);
// PI+FO+FI+AND+PO+1
p
->
pName
=
Abc_UtilStrsav
(
"temp"
);
p
->
pName
=
Abc_UtilStrsav
(
"temp"
);
// create PIs
// create PIs
...
@@ -286,11 +274,10 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -286,11 +274,10 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
{
{
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan1
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan1
=
Gia_ReadAigerDecode
(
&
pBuffer
);
assert
(
(
iFan0
&
1
)
==
0
);
assert
(
!
(
iFan0
&
1
)
);
iFan0
>>=
1
;
iFan0
>>=
1
;
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
iFan1
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan1
>>
1
),
iFan
0
&
1
);
iFan1
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan1
>>
1
),
iFan
1
&
1
);
if
(
fHash
)
if
(
fHash
)
Vec_IntPush
(
vLits
,
Gia_ManHashAnd
(
p
,
iFan0
,
iFan1
)
);
Vec_IntPush
(
vLits
,
Gia_ManHashAnd
(
p
,
iFan0
,
iFan1
)
);
else
else
...
@@ -302,7 +289,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -302,7 +289,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
// remember where flops begin
// remember where flops begin
pBufferPivot
=
pBuffer
;
pBufferPivot
=
pBuffer
;
// s
t
roll through flops
// s
c
roll through flops
for
(
i
=
0
;
i
<
nFlops
;
i
++
)
for
(
i
=
0
;
i
<
nFlops
;
i
++
)
Gia_ReadAigerDecode
(
&
pBuffer
);
Gia_ReadAigerDecode
(
&
pBuffer
);
...
@@ -312,8 +299,9 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -312,8 +299,9 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
for
(
i
=
0
;
i
<
nProps
;
i
++
)
for
(
i
=
0
;
i
<
nProps
;
i
++
)
{
{
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
Gia_ManAppendCo
(
p
,
iFan0
);
// complement property output!!!
Gia_ManAppendCo
(
p
,
Abc_LitNot
(
iFan0
)
);
}
}
// make sure the end of buffer is reached
// make sure the end of buffer is reached
assert
(
pBufferEnd
==
pBuffer
);
assert
(
pBufferEnd
==
pBuffer
);
...
@@ -324,7 +312,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -324,7 +312,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
for
(
i
=
0
;
i
<
nFlops
;
i
++
)
for
(
i
=
0
;
i
<
nFlops
;
i
++
)
{
{
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
iFan0
=
Gia_ReadAigerDecode
(
&
pBuffer
);
assert
(
(
iFan0
&
3
)
==
2
);
assert
(
(
iFan0
&
3
)
==
BRIDGE_VALUE_0
);
Vec_IntPush
(
vInits
,
iFan0
&
3
);
// 0 = X value; 1 = not used; 2 = false; 3 = true
Vec_IntPush
(
vInits
,
iFan0
&
3
);
// 0 = X value; 1 = not used; 2 = false; 3 = true
iFan0
>>=
2
;
iFan0
>>=
2
;
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
iFan0
=
Abc_LitNotCond
(
Vec_IntEntry
(
vLits
,
iFan0
>>
1
),
iFan0
&
1
);
...
@@ -349,6 +337,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
...
@@ -349,6 +337,7 @@ Gia_Man_t * Gia_ManFromBridgeReadBody( int Size, unsigned char * pBuffer, Vec_I
return
p
;
return
p
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis []
Synopsis []
...
@@ -430,7 +419,6 @@ Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit )
...
@@ -430,7 +419,6 @@ Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit )
{
{
extern void Gia_ManFromBridgeTest( char * pFileName );
extern void Gia_ManFromBridgeTest( char * pFileName );
Gia_ManFromBridgeTest( "C:\\_projects\\abc\\_TEST\\bug\\65\\par.dump" );
Gia_ManFromBridgeTest( "C:\\_projects\\abc\\_TEST\\bug\\65\\par.dump" );
}
}
*/
*/
...
@@ -445,6 +433,29 @@ Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit )
...
@@ -445,6 +433,29 @@ Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Gia_ManToBridgeAbsNetlistTest
(
char
*
pFileName
,
Gia_Man_t
*
p
)
{
FILE
*
pFile
=
fopen
(
pFileName
,
"wb"
);
if
(
pFile
==
NULL
)
{
printf
(
"Cannot open output file
\"
%s
\"
.
\n
"
,
pFileName
);
return
;
}
Gia_ManToBridgeAbsNetlist
(
pFile
,
p
);
fclose
(
pFile
);
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Gia_ManFromBridgeTest
(
char
*
pFileName
)
void
Gia_ManFromBridgeTest
(
char
*
pFileName
)
{
{
Gia_Man_t
*
p
;
Gia_Man_t
*
p
;
...
@@ -459,7 +470,9 @@ void Gia_ManFromBridgeTest( char * pFileName )
...
@@ -459,7 +470,9 @@ void Gia_ManFromBridgeTest( char * pFileName )
fclose
(
pFile
);
fclose
(
pFile
);
Gia_ManPrintStats
(
p
,
0
,
0
);
Gia_ManPrintStats
(
p
,
0
,
0
);
// Gia_WriteAiger( p, "temp.aig", 0, 0 );
Gia_WriteAiger
(
p
,
"temp.aig"
,
0
,
0
);
Gia_ManToBridgeAbsNetlistTest
(
"par_.dump"
,
p
);
Gia_ManStop
(
p
);
Gia_ManStop
(
p
);
}
}
...
...
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