Toujours plus de fruit !
This commit is contained in:
parent
2cc200ee82
commit
dff1011767
|
@ -391,6 +391,50 @@ static void MochaCheckComputeReachableStates( MochaFigure )
|
||||||
addbddcircuitout( (bddcircuit *)0, "reached", BddReachedSet );
|
addbddcircuitout( (bddcircuit *)0, "reached", BddReachedSet );
|
||||||
testbddcircuit( (bddcircuit *)0 );
|
testbddcircuit( (bddcircuit *)0 );
|
||||||
# endif
|
# endif
|
||||||
|
fprintf( stdout, "First state " );
|
||||||
|
MochaCheckViewBddNode( MochaFigure->BDD_FIRST_STATE );
|
||||||
|
fprintf( stdout, "Reachable states " );
|
||||||
|
MochaCheckViewBddNode( BddReachedSet );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| MochaCheckCtlBddEX |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static bddnode *MochaCheckCtlBddEX( BddNode )
|
||||||
|
|
||||||
|
bddnode *BddNode;
|
||||||
|
{
|
||||||
|
bddnode *BddNew;
|
||||||
|
bddnode *BddReached;
|
||||||
|
bddnode *BddAssume;
|
||||||
|
btrtransfunc *BtrTransFunc;
|
||||||
|
bddassoc *BddAssoc;
|
||||||
|
|
||||||
|
BtrTransFunc = MochaMochaFigure->BTR_TRANS_FUNC;
|
||||||
|
BddAssoc = MochaMochaFigure->BDD_ASSOC_REG;
|
||||||
|
BddReached = MochaMochaFigure->BDD_REACHED_STATE;
|
||||||
|
BddAssume = MochaMochaFigure->BDD_ASSUME;
|
||||||
|
|
||||||
|
BddNew = preimagebtrtransfunc( BtrTransFunc, BddNode );
|
||||||
|
|
||||||
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNew ), BddAssume );
|
||||||
|
|
||||||
|
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
||||||
|
decbddrefext( BddNew ), BddAssoc );
|
||||||
|
|
||||||
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNew ), BddReached );
|
||||||
|
|
||||||
|
# if 1
|
||||||
|
fprintf( stdout, "MochaCheckCtlBddEX -> " );
|
||||||
|
MochaCheckViewBddNode( BddNew );
|
||||||
|
# endif
|
||||||
|
|
||||||
|
return( BddNew );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
/*------------------------------------------------------------\
|
||||||
|
@ -405,7 +449,6 @@ static bddnode *MochaCheckCtlBddEG( BddNode )
|
||||||
{
|
{
|
||||||
bddnode *BddOld;
|
bddnode *BddOld;
|
||||||
bddnode *BddNew;
|
bddnode *BddNew;
|
||||||
bddnode *BddPred;
|
|
||||||
bddnode *BddReached;
|
bddnode *BddReached;
|
||||||
bddnode *BddAssume;
|
bddnode *BddAssume;
|
||||||
btrtransfunc *BtrTransFunc;
|
btrtransfunc *BtrTransFunc;
|
||||||
|
@ -418,89 +461,39 @@ static bddnode *MochaCheckCtlBddEG( BddNode )
|
||||||
BddOld = BddLocalSystem->ONE;
|
BddOld = BddLocalSystem->ONE;
|
||||||
BddNew = incbddrefext( BddNode );
|
BddNew = incbddrefext( BddNode );
|
||||||
|
|
||||||
# ifdef DEBUG
|
|
||||||
fprintf( stdout, "> MochaCheckCtlBddEG\n" );
|
fprintf( stdout, "> MochaCheckCtlBddEG\n" );
|
||||||
fprintf( stdout, "EG:\n" );
|
fprintf( stdout, "EG:\n" );
|
||||||
MochaCheckViewBddNode( BddNode );
|
MochaCheckViewBddNode( BddNode );
|
||||||
|
# ifdef DEBUG
|
||||||
fprintf( stdout, "REACHED:\n" );
|
fprintf( stdout, "REACHED:\n" );
|
||||||
MochaCheckViewBddNode( BddReached );
|
MochaCheckViewBddNode( BddReached );
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
while ( BddNew != BddOld )
|
while ( BddNew != BddOld )
|
||||||
{
|
{
|
||||||
BddOld = BddNew;
|
BddOld = BddNew;
|
||||||
BddPred = preimagebtrtransfunc( BtrTransFunc, BddOld );
|
|
||||||
BddPred = applybddnode( (bddsystem *)0, ABL_AND,
|
|
||||||
decbddrefext( BddPred ), BddAssume );
|
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
BddNew = preimagebtrtransfunc( BtrTransFunc, BddOld );
|
||||||
decbddrefext( BddPred ), BddNode );
|
|
||||||
|
|
||||||
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
decbddrefext( BddNew ), BddAssoc );
|
decbddrefext( BddNew ), BddAssume );
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNew ), BddNode );
|
||||||
|
|
||||||
|
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
||||||
|
decbddrefext( BddNew ), BddAssoc );
|
||||||
|
|
||||||
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
decbddrefext( BddNew ), BddReached );
|
decbddrefext( BddNew ), BddReached );
|
||||||
|
|
||||||
# if DEBUG
|
fprintf( stdout, "MochaCheckCtlBddEG:\n" );
|
||||||
fprintf( stdout, "NEW:\n" );
|
|
||||||
MochaCheckViewBddNode( BddNew );
|
MochaCheckViewBddNode( BddNew );
|
||||||
# endif
|
|
||||||
|
|
||||||
decbddrefext( BddOld );
|
decbddrefext( BddOld );
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef DEBUG
|
|
||||||
fprintf( stdout, "< MochaCheckCtlBddEG\n" );
|
fprintf( stdout, "< MochaCheckCtlBddEG\n" );
|
||||||
# endif
|
|
||||||
|
|
||||||
return( BddNew );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
|
||||||
| |
|
|
||||||
| MochaCheckCtlBddEX |
|
|
||||||
| |
|
|
||||||
\------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static bddnode *MochaCheckCtlBddEX( BddNode )
|
|
||||||
|
|
||||||
bddnode *BddNode;
|
|
||||||
{
|
|
||||||
bddnode *BddOld;
|
|
||||||
bddnode *BddNew;
|
|
||||||
bddnode *BddPred;
|
|
||||||
bddnode *BddReached;
|
|
||||||
bddnode *BddAssume;
|
|
||||||
btrtransfunc *BtrTransFunc;
|
|
||||||
bddassoc *BddAssoc;
|
|
||||||
|
|
||||||
BtrTransFunc = MochaMochaFigure->BTR_TRANS_FUNC;
|
|
||||||
BddAssoc = MochaMochaFigure->BDD_ASSOC_REG;
|
|
||||||
BddReached = MochaMochaFigure->BDD_REACHED_STATE;
|
|
||||||
BddAssume = MochaMochaFigure->BDD_ASSUME;
|
|
||||||
BddOld = BddLocalSystem->ONE;
|
|
||||||
BddNew = incbddrefext( BddReached );
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
BddOld = BddNew;
|
|
||||||
BddPred = preimagebtrtransfunc( BtrTransFunc, BddOld );
|
|
||||||
BddPred = applybddnode( (bddsystem *)0, ABL_AND,
|
|
||||||
decbddrefext( BddPred ), BddAssume );
|
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
|
||||||
decbddrefext( BddPred ), BddNode );
|
|
||||||
|
|
||||||
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
|
||||||
decbddrefext( BddNew ), BddAssoc );
|
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
|
||||||
decbddrefext( BddNew ), BddReached );
|
|
||||||
|
|
||||||
decbddrefext( BddOld );
|
|
||||||
}
|
|
||||||
while ( BddNew != BddOld );
|
|
||||||
|
|
||||||
return( BddNew );
|
return( BddNew );
|
||||||
}
|
}
|
||||||
|
@ -518,7 +511,6 @@ static bddnode *MochaCheckCtlBddEU( BddNodeP, BddNodeQ )
|
||||||
{
|
{
|
||||||
bddnode *BddOld;
|
bddnode *BddOld;
|
||||||
bddnode *BddNew;
|
bddnode *BddNew;
|
||||||
bddnode *BddPred;
|
|
||||||
bddnode *BddReached;
|
bddnode *BddReached;
|
||||||
bddnode *BddAssume;
|
bddnode *BddAssume;
|
||||||
btrtransfunc *BtrTransFunc;
|
btrtransfunc *BtrTransFunc;
|
||||||
|
@ -533,23 +525,28 @@ static bddnode *MochaCheckCtlBddEU( BddNodeP, BddNodeQ )
|
||||||
|
|
||||||
while ( BddNew != BddOld )
|
while ( BddNew != BddOld )
|
||||||
{
|
{
|
||||||
BddOld = BddNew;
|
BddOld = BddNew;
|
||||||
BddPred = preimagebtrtransfunc( BtrTransFunc, BddOld );
|
|
||||||
BddPred = applybddnode( (bddsystem *)0, ABL_AND,
|
|
||||||
decbddrefext( BddPred ), BddAssume );
|
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
BddNew = preimagebtrtransfunc( BtrTransFunc, BddOld );
|
||||||
decbddrefext( BddPred ), BddNodeP );
|
|
||||||
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNew ), BddAssume );
|
||||||
|
|
||||||
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNew ), BddNodeP );
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_OR,
|
BddNew = applybddnode( (bddsystem *)0, ABL_OR,
|
||||||
decbddrefext( BddNew ), BddNodeQ );
|
decbddrefext( BddNew ), BddNodeQ );
|
||||||
|
|
||||||
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
BddNew = existbddnodemissassoc( (bddsystem *)0,
|
||||||
decbddrefext( BddNew ), BddAssoc );
|
decbddrefext( BddNew ), BddAssoc );
|
||||||
|
|
||||||
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
BddNew = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
decbddrefext( BddNew ), BddReached );
|
decbddrefext( BddNew ), BddReached );
|
||||||
|
|
||||||
|
fprintf( stdout, "MochaCheckCtlBddEU:\n" );
|
||||||
|
MochaCheckViewBddNode( BddNew );
|
||||||
|
|
||||||
decbddrefext( BddOld );
|
decbddrefext( BddOld );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -808,8 +805,10 @@ static bddnode *MochaCheckCtlAblEG( Expr )
|
||||||
bddnode *BddNode;
|
bddnode *BddNode;
|
||||||
bddnode *BddResult;
|
bddnode *BddResult;
|
||||||
|
|
||||||
|
# ifdef DEBUG
|
||||||
fprintf( stdout, "MochaCheckCtlAblEG: " );
|
fprintf( stdout, "MochaCheckCtlAblEG: " );
|
||||||
viewablexprln( Expr, ABL_VIEW_VHDL );
|
viewablexprln( Expr, ABL_VIEW_VHDL );
|
||||||
|
# endif
|
||||||
|
|
||||||
Expr = ABL_CDR( Expr );
|
Expr = ABL_CDR( Expr );
|
||||||
|
|
||||||
|
@ -933,9 +932,10 @@ static bddnode *MochaCheckCtlAbl( Expr )
|
||||||
| |
|
| |
|
||||||
\------------------------------------------------------------*/
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
static void MochaCheckCtlFormulae( MochaFigure )
|
static void MochaCheckCtlFormulae( MochaFigure, FlagVerbose )
|
||||||
|
|
||||||
mochafig_list *MochaFigure;
|
mochafig_list *MochaFigure;
|
||||||
|
int FlagVerbose;
|
||||||
{
|
{
|
||||||
ctlfig_list *CtlFigure;
|
ctlfig_list *CtlFigure;
|
||||||
ctlform_list *CtlForm;
|
ctlform_list *CtlForm;
|
||||||
|
@ -959,17 +959,22 @@ static void MochaCheckCtlFormulae( MochaFigure )
|
||||||
|
|
||||||
MochaMochaFigure = MochaFigure;
|
MochaMochaFigure = MochaFigure;
|
||||||
|
|
||||||
|
# ifdef DEBUG
|
||||||
fprintf( stdout, "Reachable states:\n" );
|
fprintf( stdout, "Reachable states:\n" );
|
||||||
MochaCheckViewBddNode( BddReached );
|
MochaCheckViewBddNode( BddReached );
|
||||||
|
|
||||||
fprintf( stdout, "First state:\n" );
|
fprintf( stdout, "First state:\n" );
|
||||||
MochaCheckViewBddNode( BddFirst );
|
MochaCheckViewBddNode( BddFirst );
|
||||||
|
# endif
|
||||||
|
|
||||||
for ( CtlForm = CtlFigure->FORM;
|
for ( CtlForm = CtlFigure->FORM;
|
||||||
CtlForm != (ctlform_list *)0;
|
CtlForm != (ctlform_list *)0;
|
||||||
CtlForm = CtlForm->NEXT )
|
CtlForm = CtlForm->NEXT )
|
||||||
{
|
{
|
||||||
fprintf( stdout, "Verify formula %s\n", CtlForm->NAME );
|
if ( FlagVerbose )
|
||||||
|
{
|
||||||
|
fprintf( stdout, "\t Verifying formula %s\n", CtlForm->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
BiAblArray = MOCHA_CTL_BIABLA( CtlForm );
|
BiAblArray = MOCHA_CTL_BIABLA( CtlForm );
|
||||||
AblArray = BiAblArray->EXPR;
|
AblArray = BiAblArray->EXPR;
|
||||||
|
@ -989,11 +994,19 @@ static void MochaCheckCtlFormulae( MochaFigure )
|
||||||
|
|
||||||
decbddrefext( BddNode );
|
decbddrefext( BddNode );
|
||||||
|
|
||||||
|
# ifdef DEBUG
|
||||||
MochaCheckViewBddNode( BddNode );
|
MochaCheckViewBddNode( BddNode );
|
||||||
|
# endif
|
||||||
|
|
||||||
if ( BddNode != BddFirst )
|
if ( BddNode != BddFirst )
|
||||||
{
|
{
|
||||||
fprintf( stdout, " formula not verified !\n" );
|
fprintf( stdout, "\t Formula %s IS FALSE !\n", CtlForm->NAME );
|
||||||
|
MochaCheckViewBddNode( BddNode );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( FlagVerbose )
|
||||||
|
{
|
||||||
|
fprintf( stdout, "\t OK\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1012,7 +1025,7 @@ int MochaCheckModel( MochaFigure, FlagVerbose )
|
||||||
MochaCheckBuildTransFunc( MochaFigure );
|
MochaCheckBuildTransFunc( MochaFigure );
|
||||||
MochaCheckComputeFirstState( MochaFigure );
|
MochaCheckComputeFirstState( MochaFigure );
|
||||||
MochaCheckComputeReachableStates( MochaFigure );
|
MochaCheckComputeReachableStates( MochaFigure );
|
||||||
MochaCheckCtlFormulae( MochaFigure );
|
MochaCheckCtlFormulae( MochaFigure, FlagVerbose );
|
||||||
/* TO BE DONE */
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,24 +118,8 @@ void MochaCompileFsm( MochaFigure, FileName, FlagVerbose )
|
||||||
{
|
{
|
||||||
if ( IsFsmFigMixedRtl( FsmFigure ) )
|
if ( IsFsmFigMixedRtl( FsmFigure ) )
|
||||||
{
|
{
|
||||||
fprintf( stdout, "\t\t--> Mixed DataFlow / Fsm\n\n" );
|
fprintf( stdout, "\t\tMixed DataFlow / Fsm\n\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ScanChain = FsmFigure->MULTI;
|
|
||||||
ScanChain != (chain_list *)0;
|
|
||||||
ScanChain = ScanChain->NEXT )
|
|
||||||
{
|
|
||||||
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
|
||||||
|
|
||||||
fprintf( stdout, "\t\t--> Name : %s\n" , ScanFigure->NAME );
|
|
||||||
fprintf( stdout, "\t\t--> States : %ld\n", ScanFigure->NUMBER_STATE );
|
|
||||||
fprintf( stdout, "\t\t--> Inputs : %ld\n", ScanFigure->NUMBER_IN );
|
|
||||||
fprintf( stdout, "\t\t--> Outputs : %ld\n", ScanFigure->NUMBER_OUT );
|
|
||||||
fprintf( stdout, "\t\t--> Edges : %ld\n", ScanFigure->NUMBER_TRANS );
|
|
||||||
fprintf( stdout, "\n" );
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf( stdout, "\t\t--> Encode FSM figure\n" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ScanChain = FsmFigure->MULTI;
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
|
@ -143,6 +127,12 @@ void MochaCompileFsm( MochaFigure, FileName, FlagVerbose )
|
||||||
ScanChain = ScanChain->NEXT )
|
ScanChain = ScanChain->NEXT )
|
||||||
{
|
{
|
||||||
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
|
||||||
|
if ( FlagVerbose )
|
||||||
|
{
|
||||||
|
fprintf( stdout, "\t --> Encoding FSM figure %s\n", ScanFigure->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
MochaSyfFsmEncode( ScanFigure, FlagVerbose );
|
MochaSyfFsmEncode( ScanFigure, FlagVerbose );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -478,6 +478,7 @@ void MochaSyfFsmEncode( FsmFigure, FlagVerbose )
|
||||||
|
|
||||||
NumberState = FsmFigure->NUMBER_STATE;
|
NumberState = FsmFigure->NUMBER_STATE;
|
||||||
NumberBit = MochaSyfGetNumberBit( NumberState - 1 );
|
NumberBit = MochaSyfGetNumberBit( NumberState - 1 );
|
||||||
|
|
||||||
CodeMax = ( 1 << NumberBit );
|
CodeMax = ( 1 << NumberBit );
|
||||||
|
|
||||||
CodeArray = (mochasyfcode *)autallocblock( sizeof( mochasyfcode ) * CodeMax );
|
CodeArray = (mochasyfcode *)autallocblock( sizeof( mochasyfcode ) * CodeMax );
|
||||||
|
@ -498,7 +499,10 @@ void MochaSyfFsmEncode( FsmFigure, FlagVerbose )
|
||||||
{
|
{
|
||||||
MOCHA_SYF_STATE( ScanState )->CODE = &CodeArray[ NumberState - Index - 1 ];
|
MOCHA_SYF_STATE( ScanState )->CODE = &CodeArray[ NumberState - Index - 1 ];
|
||||||
|
|
||||||
CodeArray[ Index ].USED = 1;
|
CodeArray[ NumberState - Index - 1 ].USED = 1;
|
||||||
|
|
||||||
|
fprintf( stdout, "ScanState %s Code %ld\n",
|
||||||
|
ScanState->NAME, CodeArray[ NumberState - Index - 1 ].VALUE );
|
||||||
|
|
||||||
ScanState = ScanState->NEXT;
|
ScanState = ScanState->NEXT;
|
||||||
Index = Index + 1;
|
Index = Index + 1;
|
||||||
|
|
Loading…
Reference in New Issue