Encore plus de fruits !
This commit is contained in:
parent
33e32ba92e
commit
fe367c577c
|
@ -110,6 +110,7 @@
|
||||||
|
|
||||||
# define FSM_MIXED_RTL_MASK (long)( 0x0001 )
|
# define FSM_MIXED_RTL_MASK (long)( 0x0001 )
|
||||||
# define FSM_MULTI_MASK (long)( 0x0002 )
|
# define FSM_MULTI_MASK (long)( 0x0002 )
|
||||||
|
# define FSM_MULTI_LEAF_MASK (long)( 0x0004 )
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
|
@ -164,6 +165,10 @@
|
||||||
# define SetFsmFigMulti( F ) ( (F)->FLAGS |= FSM_MULTI_MASK )
|
# define SetFsmFigMulti( F ) ( (F)->FLAGS |= FSM_MULTI_MASK )
|
||||||
# define ClearFsmFigMulti( F ) ( (F)->FLAGS &= ~FSM_MULTI_MASK )
|
# define ClearFsmFigMulti( F ) ( (F)->FLAGS &= ~FSM_MULTI_MASK )
|
||||||
|
|
||||||
|
# define IsFsmFigMultiLeaf( F ) ( (F)->FLAGS & FSM_MULTI_LEAF_MASK )
|
||||||
|
# define SetFsmFigMultiLeaf( F ) ( (F)->FLAGS |= FSM_MULTI_LEAF_MASK )
|
||||||
|
# define ClearFsmFigMultiLeaf( F ) ( (F)->FLAGS &= ~FSM_MULTI_LEAF_MASK )
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Structures |
|
| Structures |
|
||||||
|
@ -297,6 +302,23 @@
|
||||||
|
|
||||||
} fsmstack_list;
|
} fsmstack_list;
|
||||||
|
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Fsm Pragma List |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
|
||||||
|
typedef struct fsmpragma_list
|
||||||
|
{
|
||||||
|
struct fsmpragma_list *NEXT;
|
||||||
|
char *TYPE;
|
||||||
|
char *NAME;
|
||||||
|
char *VALUE;
|
||||||
|
long FLAGS;
|
||||||
|
void *USER;
|
||||||
|
|
||||||
|
} fsmpragma_list;
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Fsm Figure List |
|
| Fsm Figure List |
|
||||||
|
@ -337,7 +359,7 @@
|
||||||
bddcircuit *CIRCUIT;
|
bddcircuit *CIRCUIT;
|
||||||
|
|
||||||
long FLAGS;
|
long FLAGS;
|
||||||
ptype_list *PRAGMA;
|
fsmpragma_list *PRAGMA;
|
||||||
|
|
||||||
chain_list *MULTI;
|
chain_list *MULTI;
|
||||||
void *FIGURE;
|
void *FIGURE;
|
||||||
|
@ -373,6 +395,7 @@
|
||||||
extern fsmlocout_list * allocfsmlocout __P(());
|
extern fsmlocout_list * allocfsmlocout __P(());
|
||||||
extern fsmout_list * allocfsmout __P(());
|
extern fsmout_list * allocfsmout __P(());
|
||||||
extern fsmin_list * allocfsmin __P(());
|
extern fsmin_list * allocfsmin __P(());
|
||||||
|
extern fsmpragma_list * allocfsmpragma __P(());
|
||||||
extern fsmport_list * allocfsmport __P(());
|
extern fsmport_list * allocfsmport __P(());
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
|
@ -388,6 +411,7 @@
|
||||||
extern void freefsmlocout __P((fsmlocout_list *Locout));
|
extern void freefsmlocout __P((fsmlocout_list *Locout));
|
||||||
extern void freefsmout __P((fsmout_list *Output));
|
extern void freefsmout __P((fsmout_list *Output));
|
||||||
extern void freefsmin __P((fsmin_list *Input));
|
extern void freefsmin __P((fsmin_list *Input));
|
||||||
|
extern void freefsmpragma __P((fsmpragma_list *Pragma));
|
||||||
extern void freefsmport __P((fsmport_list *Port));
|
extern void freefsmport __P((fsmport_list *Port));
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
|
@ -403,6 +427,7 @@
|
||||||
extern fsmlocout_list * addfsmlocout __P((fsmstate_list *State, fsmout_list *Output, ablexpr *Equation, ablexpr *EquationDC));
|
extern fsmlocout_list * addfsmlocout __P((fsmstate_list *State, fsmout_list *Output, ablexpr *Equation, ablexpr *EquationDC));
|
||||||
extern fsmout_list * addfsmout __P((fsmfig_list *Figure, char *Name));
|
extern fsmout_list * addfsmout __P((fsmfig_list *Figure, char *Name));
|
||||||
extern fsmin_list * addfsmin __P((fsmfig_list *Figure, char *Name));
|
extern fsmin_list * addfsmin __P((fsmfig_list *Figure, char *Name));
|
||||||
|
extern fsmpragma_list * addfsmpragma __P((fsmfig_list *Figure, char *Type, char *Name, char *Value ));
|
||||||
extern fsmport_list * addfsmport __P((fsmfig_list *Figure, char *Name, char Dir, char Type));
|
extern fsmport_list * addfsmport __P((fsmfig_list *Figure, char *Name, char Dir, char Type));
|
||||||
|
|
||||||
/*------------------------------------------------------\
|
/*------------------------------------------------------\
|
||||||
|
|
|
@ -333,6 +333,36 @@ fsmlocout_list *addfsmlocout( State, Output, Equation, EquationDC )
|
||||||
return( Locout );
|
return( Locout );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Fsm Add Pragma |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
fsmpragma_list *addfsmpragma( Figure, Type, Name, Value )
|
||||||
|
|
||||||
|
fsmfig_list *Figure;
|
||||||
|
char *Type;
|
||||||
|
char *Name;
|
||||||
|
char *Value;
|
||||||
|
{
|
||||||
|
fsmpragma_list *Pragma;
|
||||||
|
|
||||||
|
Type = namealloc( Type );
|
||||||
|
Name = namealloc( Name );
|
||||||
|
Value = namealloc( Value );
|
||||||
|
|
||||||
|
Pragma = allocfsmpragma();
|
||||||
|
|
||||||
|
Pragma->TYPE = namealloc( Type );
|
||||||
|
Pragma->NAME = namealloc( Name );
|
||||||
|
Pragma->VALUE = namealloc( Value );
|
||||||
|
Pragma->NEXT = Figure->PRAGMA;
|
||||||
|
Figure->PRAGMA = Pragma;
|
||||||
|
|
||||||
|
return( Pragma );
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
/*------------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Fsm Add Output |
|
| Fsm Add Output |
|
||||||
|
|
|
@ -157,6 +157,18 @@ fsmlocout_list *allocfsmlocout()
|
||||||
return( (fsmlocout_list *)(autallocheap( sizeof( fsmlocout_list ) ) ) );
|
return( (fsmlocout_list *)(autallocheap( sizeof( fsmlocout_list ) ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Fsm Alloc Pragma |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
fsmpragma_list *allocfsmpragma()
|
||||||
|
{
|
||||||
|
return( (fsmpragma_list *)(autallocblock( sizeof( fsmpragma_list ) ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
/*------------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Fsm Alloc Input |
|
| Fsm Alloc Input |
|
||||||
|
|
|
@ -102,6 +102,8 @@ int delfsmfig( Name )
|
||||||
fsmstack_list *DelStack;
|
fsmstack_list *DelStack;
|
||||||
fsmlocout_list *Locout;
|
fsmlocout_list *Locout;
|
||||||
fsmlocout_list *DelLocout;
|
fsmlocout_list *DelLocout;
|
||||||
|
fsmpragma_list *ScanPragma;
|
||||||
|
fsmpragma_list *DelPragma;
|
||||||
|
|
||||||
Name = namealloc( Name );
|
Name = namealloc( Name );
|
||||||
Previous = &HEAD_FSMFIG;
|
Previous = &HEAD_FSMFIG;
|
||||||
|
@ -200,9 +202,14 @@ int delfsmfig( Name )
|
||||||
freefsmstack( DelStack );
|
freefsmstack( DelStack );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Figure->PRAGMA != (ptype_list *)0 )
|
ScanPragma = Figure->PRAGMA;
|
||||||
|
|
||||||
|
while ( ScanPragma != (fsmpragma_list *)0 )
|
||||||
{
|
{
|
||||||
freeptype( Figure->PRAGMA );
|
DelPragma = ScanPragma;
|
||||||
|
ScanPragma = ScanPragma->NEXT;
|
||||||
|
|
||||||
|
freefsmpragma( DelPragma );
|
||||||
}
|
}
|
||||||
|
|
||||||
destroyauthtable( Figure->HASH_PORT );
|
destroyauthtable( Figure->HASH_PORT );
|
||||||
|
|
|
@ -170,6 +170,19 @@ void freefsmin( Input )
|
||||||
autfreeblock( (char *)Input );
|
autfreeblock( (char *)Input );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Fsm Free Pragma |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void freefsmpragma( Pragma )
|
||||||
|
|
||||||
|
fsmpragma_list *Pragma;
|
||||||
|
{
|
||||||
|
autfreeblock( (char *)Pragma );
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
/*------------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Fsm Free Port |
|
| Fsm Free Port |
|
||||||
|
|
|
@ -207,6 +207,27 @@ void viewfsmtrans( Trans )
|
||||||
fprintf( stdout, "\n<-- Transition" );
|
fprintf( stdout, "\n<-- Transition" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Fsm View Pragma |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void viewfsmpragma( Pragma )
|
||||||
|
|
||||||
|
fsmpragma_list *Pragma;
|
||||||
|
{
|
||||||
|
fprintf( stdout, "\n--> Pragma" );
|
||||||
|
fprintf( stdout, "\n\t\tFLAGS : %lx", Pragma->FLAGS );
|
||||||
|
fprintf( stdout, "\n\t\tUSER : %lx", (long)Pragma->USER );
|
||||||
|
|
||||||
|
fprintf( stdout, "\n\t\tTYPE : %s", Pragma->TYPE ? Pragma->TYPE : "NULL" );
|
||||||
|
fprintf( stdout, "\n\t\tNAME : %s", Pragma->NAME ? Pragma->NAME : "NULL" );
|
||||||
|
fprintf( stdout, "\n\t\tVALUE : %s", Pragma->VALUE ? Pragma->VALUE : "NULL" );
|
||||||
|
|
||||||
|
fprintf( stdout, "\n<-- Pragma" );
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------\
|
/*------------------------------------------------------------\
|
||||||
| |
|
| |
|
||||||
| Fsm View Stack |
|
| Fsm View Stack |
|
||||||
|
@ -323,6 +344,7 @@ void viewfsmfig( Figure )
|
||||||
fsmstate_list *State;
|
fsmstate_list *State;
|
||||||
fsmtrans_list *Trans;
|
fsmtrans_list *Trans;
|
||||||
fsmstack_list *Stack;
|
fsmstack_list *Stack;
|
||||||
|
fsmpragma_list *Pragma;
|
||||||
fsmin_list *Input;
|
fsmin_list *Input;
|
||||||
fsmout_list *Output;
|
fsmout_list *Output;
|
||||||
fsmport_list *Port;
|
fsmport_list *Port;
|
||||||
|
@ -346,6 +368,16 @@ void viewfsmfig( Figure )
|
||||||
viewablexpr( Figure->CLOCK_ABL, ABL_VIEW_VHDL );
|
viewablexpr( Figure->CLOCK_ABL, ABL_VIEW_VHDL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fprintf( stdout, "\n\tPRAGMA : " );
|
||||||
|
|
||||||
|
for ( Pragma = Figure->PRAGMA;
|
||||||
|
Pragma != (fsmpragma_list *)0;
|
||||||
|
Pragma = Pragma->NEXT )
|
||||||
|
{
|
||||||
|
viewfsmpragma( Pragma );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fprintf( stdout, "\n\tPORT : " );
|
fprintf( stdout, "\n\tPORT : " );
|
||||||
|
|
||||||
for ( Port = Figure->PORT;
|
for ( Port = Figure->PORT;
|
||||||
|
|
|
@ -392,10 +392,7 @@ void FvhFbhTreatPragma( FbhFigure, FsmFigure, NumberProc )
|
||||||
ScanFigList->STACK_CONTROL[ FSM_CTRL_POP ] = ScanPragma->NAME;
|
ScanFigList->STACK_CONTROL[ FSM_CTRL_POP ] = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SHOULD BE DONE BETTER !! */
|
addfsmpragma( FsmFigure, ScanPragma->TYPE, ScanPragma->NAME, ScanPragma->VALUE );
|
||||||
FsmFigure->PRAGMA = addptype( FsmFigure->PRAGMA,
|
|
||||||
(long)ScanPragma->TYPE,
|
|
||||||
ScanPragma->NAME );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,6 +512,8 @@ void FvhFbhTreatAux( FbhFigure, FsmFigure )
|
||||||
Figure = addfsmfig( ScanFigList->NAME );
|
Figure = addfsmfig( ScanFigList->NAME );
|
||||||
ScanFigList->FSM_FIGURE = Figure;
|
ScanFigList->FSM_FIGURE = Figure;
|
||||||
FsmFigure->MULTI = addchain( FsmFigure->MULTI, (void *)Figure );
|
FsmFigure->MULTI = addchain( FsmFigure->MULTI, (void *)Figure );
|
||||||
|
|
||||||
|
SetFsmFigMultiLeaf( Figure );
|
||||||
}
|
}
|
||||||
|
|
||||||
Figure->STAR_STATE = addfsmstate( Figure, "*" );
|
Figure->STAR_STATE = addfsmstate( Figure, "*" );
|
||||||
|
@ -1860,6 +1859,17 @@ void FvhFbhPostTreat( FsmFigure )
|
||||||
|
|
||||||
delablexpr( Equation );
|
delablexpr( Equation );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( IsFsmFigMulti( FsmFigure ) )
|
||||||
|
{
|
||||||
|
Figure = ScanFigList->FSM_FIGURE;
|
||||||
|
|
||||||
|
addfsmpragma( Figure, FvhClockKeyword , ScanFigList->CLOCK , ScanFigList->NAME );
|
||||||
|
addfsmpragma( Figure, FvhCurrentStateKeyword, ScanFigList->CURRENT_STATE, ScanFigList->NAME );
|
||||||
|
addfsmpragma( Figure, FvhNextStateKeyword , ScanFigList->NEXT_STATE , ScanFigList->NAME );
|
||||||
|
addfsmpragma( Figure, FvhFirstStateKeyword , ScanFigList->FIRST_STATE , ScanFigList->NAME );
|
||||||
|
/* TO BE DONE for STACK */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -200,71 +200,71 @@ void SyfFbhTreatPragma( FsmFigure )
|
||||||
|
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
{
|
{
|
||||||
ptype_list *ScanPragma;
|
fsmpragma_list *ScanPragma;
|
||||||
syfinfo *SyfInfo;
|
syfinfo *SyfInfo;
|
||||||
char *PragmaType;
|
char *PragmaType;
|
||||||
|
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
||||||
|
|
||||||
for ( ScanPragma = FsmFigure->PRAGMA;
|
for ( ScanPragma = FsmFigure->PRAGMA;
|
||||||
ScanPragma != (ptype_list *)0;
|
ScanPragma != (fsmpragma_list *)0;
|
||||||
ScanPragma = ScanPragma->NEXT )
|
ScanPragma = ScanPragma->NEXT )
|
||||||
{
|
{
|
||||||
PragmaType = (char *)ScanPragma->TYPE;
|
PragmaType = ScanPragma->TYPE;
|
||||||
|
|
||||||
if ( PragmaType == SyfCurrentStateKeyword )
|
if ( PragmaType == SyfCurrentStateKeyword )
|
||||||
{
|
{
|
||||||
SyfCurrentStateName = ScanPragma->DATA;
|
SyfCurrentStateName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfNextStateKeyword )
|
if ( PragmaType == SyfNextStateKeyword )
|
||||||
{
|
{
|
||||||
SyfNextStateName = ScanPragma->DATA;
|
SyfNextStateName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfReturnStateKeyword )
|
if ( PragmaType == SyfReturnStateKeyword )
|
||||||
{
|
{
|
||||||
SyfReturnStateName = ScanPragma->DATA;
|
SyfReturnStateName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfControlKeyword )
|
if ( PragmaType == SyfControlKeyword )
|
||||||
{
|
{
|
||||||
SyfControlName = ScanPragma->DATA;
|
SyfControlName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfClockKeyword )
|
if ( PragmaType == SyfClockKeyword )
|
||||||
{
|
{
|
||||||
SyfClockName = ScanPragma->DATA;
|
SyfClockName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_NOP ] )
|
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_NOP ] )
|
||||||
{
|
{
|
||||||
SyfStackControlName[ FSM_CTRL_NOP ] = ScanPragma->DATA;
|
SyfStackControlName[ FSM_CTRL_NOP ] = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_PUSH ] )
|
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_PUSH ] )
|
||||||
{
|
{
|
||||||
SyfStackControlName[ FSM_CTRL_PUSH ] = ScanPragma->DATA;
|
SyfStackControlName[ FSM_CTRL_PUSH ] = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_POP ] )
|
if ( PragmaType == SyfStackControlKeyword[ FSM_CTRL_POP ] )
|
||||||
{
|
{
|
||||||
SyfStackControlName[ FSM_CTRL_POP ] = ScanPragma->DATA;
|
SyfStackControlName[ FSM_CTRL_POP ] = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfScanInKeyword )
|
if ( PragmaType == SyfScanInKeyword )
|
||||||
{
|
{
|
||||||
SyfScanInName = ScanPragma->DATA;
|
SyfScanInName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfScanOutKeyword )
|
if ( PragmaType == SyfScanOutKeyword )
|
||||||
{
|
{
|
||||||
SyfScanOutName = ScanPragma->DATA;
|
SyfScanOutName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( PragmaType == SyfScanTestKeyword )
|
if ( PragmaType == SyfScanTestKeyword )
|
||||||
{
|
{
|
||||||
SyfScanTestName = ScanPragma->DATA;
|
SyfScanTestName = ScanPragma->NAME;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,19 +289,42 @@ fsmfig_list *SyfFbhParse( Name, FlagScan )
|
||||||
char FlagScan;
|
char FlagScan;
|
||||||
{
|
{
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
|
fsmfig_list *ScanFigure;
|
||||||
|
chain_list *ScanChain;
|
||||||
syfinfo *SyfInfo;
|
syfinfo *SyfInfo;
|
||||||
fsmstate_list *ScanState;
|
fsmstate_list *ScanState;
|
||||||
|
|
||||||
SyfInitializeKeyword();
|
SyfInitializeKeyword();
|
||||||
|
|
||||||
FsmFigure = Syfaddfsmfig( Name );
|
FsmFigure = Syfaddfsmfig( Name );
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
|
||||||
|
|
||||||
SyfInfo->SCAN_PATH = FlagScan;
|
|
||||||
|
|
||||||
loadfsmfig( FsmFigure, Name );
|
loadfsmfig( FsmFigure, Name );
|
||||||
|
|
||||||
ScanState = FsmFigure->STAR_STATE;
|
if ( IsFsmFigMulti( FsmFigure ) )
|
||||||
|
{
|
||||||
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfInfo = Syfaddfsmsyfinfo( ScanFigure );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FsmFigure->MULTI = addchain( (chain_list *)0, FsmFigure );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfInfo = FSM_SYF_INFO( ScanFigure );
|
||||||
|
|
||||||
|
SyfInfo->SCAN_PATH = FlagScan;
|
||||||
|
|
||||||
|
ScanState = ScanFigure->STAR_STATE;
|
||||||
|
|
||||||
if ( ScanState != (fsmstate_list *)0 )
|
if ( ScanState != (fsmstate_list *)0 )
|
||||||
{
|
{
|
||||||
|
@ -312,19 +335,20 @@ fsmfig_list *SyfFbhParse( Name, FlagScan )
|
||||||
ScanState->NEXT->PREV = ScanState->PREV;
|
ScanState->NEXT->PREV = ScanState->PREV;
|
||||||
}
|
}
|
||||||
|
|
||||||
FsmFigure->NUMBER_STATE--;
|
ScanFigure->NUMBER_STATE--;
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfInfo->STACK = ( FsmFigure->STACK_SIZE != 0 );
|
SyfInfo->STACK = ( ScanFigure->STACK_SIZE != 0 );
|
||||||
|
|
||||||
SyfFbhTreatPragma( FsmFigure );
|
SyfFbhTreatPragma( ScanFigure );
|
||||||
SyfFbhTreatPort( FsmFigure );
|
SyfFbhTreatPort( ScanFigure );
|
||||||
|
|
||||||
for ( ScanState = FsmFigure->STATE;
|
for ( ScanState = ScanFigure->STATE;
|
||||||
ScanState != (fsmstate_list *)0;
|
ScanState != (fsmstate_list *)0;
|
||||||
ScanState = ScanState->NEXT )
|
ScanState = ScanState->NEXT )
|
||||||
{
|
{
|
||||||
Syfaddfsmsyfstate( FsmFigure, ScanState );
|
Syfaddfsmsyfstate( ScanFigure, ScanState );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return( FsmFigure );
|
return( FsmFigure );
|
||||||
|
|
|
@ -152,5 +152,7 @@ fsmfig_list *SyfKissParse( Name, FlagScan )
|
||||||
Syfaddfsmsyfout( ScanOut );
|
Syfaddfsmsyfout( ScanOut );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FsmFigure->MULTI = addchain( (chain_list *)0, FsmFigure );
|
||||||
|
|
||||||
return( FsmFigure );
|
return( FsmFigure );
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,8 @@ static void SyfRemoveStable( Expr )
|
||||||
|
|
||||||
ablexpr *Expr;
|
ablexpr *Expr;
|
||||||
{
|
{
|
||||||
|
if ( Expr == (ablexpr *)0 ) return;
|
||||||
|
|
||||||
if ( ! ABL_ATOM( Expr ) )
|
if ( ! ABL_ATOM( Expr ) )
|
||||||
{
|
{
|
||||||
if ( ABL_OPER( Expr ) == ABL_STABLE )
|
if ( ABL_OPER( Expr ) == ABL_STABLE )
|
||||||
|
@ -125,7 +127,8 @@ fsmfig_list *SyfCompile( FileName, FlagScan, FlagSynopsys )
|
||||||
char FlagSynopsys;
|
char FlagSynopsys;
|
||||||
{
|
{
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
syfinfo *SyfInfo;
|
fsmfig_list *ScanFigure;
|
||||||
|
chain_list *ScanChain;
|
||||||
|
|
||||||
if ( FSM_IN == FSM_VHDL_FORMAT )
|
if ( FSM_IN == FSM_VHDL_FORMAT )
|
||||||
{
|
{
|
||||||
|
@ -138,8 +141,16 @@ fsmfig_list *SyfCompile( FileName, FlagScan, FlagSynopsys )
|
||||||
|
|
||||||
if ( FlagSynopsys )
|
if ( FlagSynopsys )
|
||||||
{
|
{
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
|
||||||
SyfRemoveStable( FsmFigure->CLOCK_ABL );
|
SyfRemoveStable( FsmFigure->CLOCK_ABL );
|
||||||
|
|
||||||
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
|
||||||
|
SyfRemoveStable( ScanFigure->CLOCK_ABL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return( FsmFigure );
|
return( FsmFigure );
|
||||||
|
|
|
@ -148,40 +148,24 @@ syfstate *Syfaddfsmsyfstate( Figure, State )
|
||||||
{
|
{
|
||||||
syfstate *SyfState;
|
syfstate *SyfState;
|
||||||
syfinfo *SyfInfo;
|
syfinfo *SyfInfo;
|
||||||
char *Buffer;
|
char Buffer[ 1024 ];
|
||||||
int Length;
|
|
||||||
|
|
||||||
SyfInfo = FSM_SYF_INFO( Figure );
|
SyfInfo = FSM_SYF_INFO( Figure );
|
||||||
|
|
||||||
SyfState = (void *)autallocblock( sizeof( syfstate ) );
|
SyfState = (void *)autallocblock( sizeof( syfstate ) );
|
||||||
State->USER = (void *)SyfState;
|
State->USER = (void *)SyfState;
|
||||||
|
|
||||||
Length = strlen( State->NAME ) + strlen( SyfInfo->CURRENT_STATE );
|
sprintf( Buffer, "%s_%s_%s", Figure->NAME, SyfInfo->CURRENT_STATE, State->NAME );
|
||||||
Buffer = autallocblock( Length + 2 );
|
|
||||||
|
|
||||||
sprintf( Buffer, "%s_%s", SyfInfo->CURRENT_STATE, State->NAME );
|
|
||||||
SyfState->CURRENT_NAME = namealloc( Buffer );
|
SyfState->CURRENT_NAME = namealloc( Buffer );
|
||||||
|
|
||||||
autfreeblock( Buffer );
|
sprintf( Buffer, "%s_%s_%s", Figure->NAME, SyfInfo->RETURN_STATE, State->NAME );
|
||||||
|
|
||||||
Length = strlen( State->NAME ) + strlen( SyfInfo->RETURN_STATE );
|
|
||||||
Buffer = autallocblock( Length + 2 );
|
|
||||||
|
|
||||||
sprintf( Buffer, "%s_%s", SyfInfo->RETURN_STATE, State->NAME );
|
|
||||||
SyfState->RETURN_NAME = namealloc( Buffer );
|
SyfState->RETURN_NAME = namealloc( Buffer );
|
||||||
|
|
||||||
autfreeblock( Buffer );
|
sprintf( Buffer, "%s_%s_%s", Figure->NAME, SyfInfo->NEXT_STATE, State->NAME );
|
||||||
|
|
||||||
Length = strlen( State->NAME ) + strlen( SyfInfo->NEXT_STATE );
|
|
||||||
Buffer = autallocblock( Length + 5 );
|
|
||||||
|
|
||||||
sprintf( Buffer, "%s_%s", SyfInfo->NEXT_STATE, State->NAME );
|
|
||||||
SyfState->NEXT_NAME = namealloc( Buffer );
|
SyfState->NEXT_NAME = namealloc( Buffer );
|
||||||
|
|
||||||
sprintf( Buffer, "%s_in_%s", SyfInfo->NEXT_STATE, State->NAME );
|
sprintf( Buffer, "%s_%s_in_%s", Figure->NAME, SyfInfo->NEXT_STATE, State->NAME );
|
||||||
SyfState->NEXT_IN_NAME = namealloc( Buffer );
|
SyfState->NEXT_IN_NAME = namealloc( Buffer );
|
||||||
|
|
||||||
autfreeblock( Buffer );
|
|
||||||
|
|
||||||
return( SyfState );
|
return( SyfState );
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,6 @@ void SyfFsmTreatPort( FsmFigure, FbhFigure )
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
fbfig_list *FbhFigure;
|
fbfig_list *FbhFigure;
|
||||||
{
|
{
|
||||||
syfinfo *SyfInfo;
|
|
||||||
fbpor_list *FbhPort;
|
fbpor_list *FbhPort;
|
||||||
fbrin_list *FbhRin;
|
fbrin_list *FbhRin;
|
||||||
fsmport_list *ScanPort;
|
fsmport_list *ScanPort;
|
||||||
|
@ -97,7 +96,6 @@ void SyfFsmTreatPort( FsmFigure, FbhFigure )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
|
||||||
FbhPort = (fbpor_list *)0;
|
FbhPort = (fbpor_list *)0;
|
||||||
FbhRin = FbhFigure->BERIN;
|
FbhRin = FbhFigure->BERIN;
|
||||||
|
|
||||||
|
@ -381,6 +379,8 @@ fbfig_list *SyfFsm2Fbh( FsmFigure )
|
||||||
|
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
{
|
{
|
||||||
|
fsmfig_list *ScanFigure;
|
||||||
|
chain_list *ScanChain;
|
||||||
fbfig_list *FbhFigure;
|
fbfig_list *FbhFigure;
|
||||||
|
|
||||||
if ( ! IsFsmFigMixedRtl( FsmFigure ) )
|
if ( ! IsFsmFigMixedRtl( FsmFigure ) )
|
||||||
|
@ -393,9 +393,17 @@ fbfig_list *SyfFsm2Fbh( FsmFigure )
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmTreatPort( FsmFigure, FbhFigure );
|
SyfFsmTreatPort( FsmFigure, FbhFigure );
|
||||||
SyfFsmTreatOutput( FsmFigure, FbhFigure );
|
|
||||||
SyfFsmTreatRegister( FsmFigure, FbhFigure );
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
SyfFsmTreatAux( FsmFigure, FbhFigure );
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
|
||||||
|
SyfFsmTreatOutput( ScanFigure, FbhFigure );
|
||||||
|
SyfFsmTreatRegister( ScanFigure, FbhFigure );
|
||||||
|
SyfFsmTreatAux( ScanFigure, FbhFigure );
|
||||||
|
}
|
||||||
|
|
||||||
return( FbhFigure );
|
return( FbhFigure );
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,8 @@ int main( argc, argv )
|
||||||
int argc;
|
int argc;
|
||||||
char *argv[];
|
char *argv[];
|
||||||
{
|
{
|
||||||
|
chain_list *ScanChain;
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
char *InputFileName;
|
char *InputFileName;
|
||||||
char *OutputFileName;
|
char *OutputFileName;
|
||||||
char *FileName;
|
char *FileName;
|
||||||
|
@ -254,8 +256,6 @@ int main( argc, argv )
|
||||||
|
|
||||||
SyfFsmFigure = SyfCompile( InputFileName, FlagScan, FlagFormat );
|
SyfFsmFigure = SyfCompile( InputFileName, FlagScan, FlagFormat );
|
||||||
|
|
||||||
SyfFsmFigure->NAME = namealloc( OutputFileName );
|
|
||||||
|
|
||||||
if ( FlagInvPolar )
|
if ( FlagInvPolar )
|
||||||
{
|
{
|
||||||
if ( FlagVerbose )
|
if ( FlagVerbose )
|
||||||
|
@ -263,7 +263,13 @@ int main( argc, argv )
|
||||||
fprintf( stdout, "\t\t--> Check FSM figure outputs\n" );
|
fprintf( stdout, "\t\t--> Check FSM figure outputs\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmOutputPolarity( SyfFsmFigure );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfFsmOutputPolarity( FsmFigure );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( FlagVerbose )
|
if ( FlagVerbose )
|
||||||
|
@ -274,21 +280,39 @@ int main( argc, argv )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmSimplify( SyfFsmFigure, FlagSimplify );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfFsmSimplify( FsmFigure, FlagSimplify );
|
||||||
|
}
|
||||||
|
|
||||||
if ( FlagVerbose )
|
if ( FlagVerbose )
|
||||||
{
|
{
|
||||||
fprintf( stdout, "\t\t--> Verify FSM figure\n" );
|
fprintf( stdout, "\t\t--> Verify FSM figure\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmVerify( SyfFsmFigure, FlagCheck );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfFsmVerify( FsmFigure, FlagCheck );
|
||||||
|
}
|
||||||
|
|
||||||
if ( FlagVerbose )
|
if ( FlagVerbose )
|
||||||
{
|
{
|
||||||
fprintf( stdout, "\t\t--> Identify reset conditions\n" );
|
fprintf( stdout, "\t\t--> Identify reset conditions\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmTreatReset( SyfFsmFigure );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfFsmTreatReset( FsmFigure );
|
||||||
|
}
|
||||||
|
|
||||||
if ( FlagVerbose )
|
if ( FlagVerbose )
|
||||||
{
|
{
|
||||||
|
@ -298,17 +322,33 @@ int main( argc, argv )
|
||||||
{
|
{
|
||||||
fprintf( stdout, "\t\t--> Mixed DataFlow / Fsm\n\n" );
|
fprintf( stdout, "\t\t--> Mixed DataFlow / Fsm\n\n" );
|
||||||
}
|
}
|
||||||
fprintf( stdout, "\t\t--> States : %ld\n", SyfFsmFigure->NUMBER_STATE );
|
|
||||||
fprintf( stdout, "\t\t--> Inputs : %ld\n", SyfFsmFigure->NUMBER_IN );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
fprintf( stdout, "\t\t--> Outputs : %ld\n", SyfFsmFigure->NUMBER_OUT );
|
ScanChain != (chain_list *)0;
|
||||||
fprintf( stdout, "\t\t--> Edges : %ld\n", SyfFsmFigure->NUMBER_TRANS );
|
ScanChain = ScanChain->NEXT )
|
||||||
fprintf( stdout, "\t\t--> Stacks : %ld\n", SyfFsmFigure->NUMBER_STACK );
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
|
||||||
|
fprintf( stdout, "\t\t--> Name : %s\n" , FsmFigure->NAME );
|
||||||
|
fprintf( stdout, "\t\t--> States : %ld\n", FsmFigure->NUMBER_STATE );
|
||||||
|
fprintf( stdout, "\t\t--> Inputs : %ld\n", FsmFigure->NUMBER_IN );
|
||||||
|
fprintf( stdout, "\t\t--> Outputs : %ld\n", FsmFigure->NUMBER_OUT );
|
||||||
|
fprintf( stdout, "\t\t--> Edges : %ld\n", FsmFigure->NUMBER_TRANS );
|
||||||
|
fprintf( stdout, "\t\t--> Stacks : %ld\n", FsmFigure->NUMBER_STACK );
|
||||||
fprintf( stdout, "\n" );
|
fprintf( stdout, "\n" );
|
||||||
|
}
|
||||||
|
|
||||||
fprintf( stdout, "\t\t--> Encode FSM figure\n" );
|
fprintf( stdout, "\t\t--> Encode FSM figure\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfFsmEncode( SyfFsmFigure, FlagCode, FlagVerbose,
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfFsmEncode( FsmFigure, FlagCode, FlagVerbose,
|
||||||
FlagDc, FlagRegOut, FlagMustCost, InputFileName );
|
FlagDc, FlagRegOut, FlagMustCost, InputFileName );
|
||||||
|
}
|
||||||
|
|
||||||
if ( FlagSave )
|
if ( FlagSave )
|
||||||
{
|
{
|
||||||
|
@ -325,9 +365,15 @@ int main( argc, argv )
|
||||||
fprintf( stdout, "\t\t--> Translate FSM to BEH\n" );
|
fprintf( stdout, "\t\t--> Translate FSM to BEH\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SyfSynthFsmInit( SyfFsmFigure );
|
for ( ScanChain = SyfFsmFigure->MULTI;
|
||||||
SyfSynthCode2Abl( SyfFsmFigure, FlagDc );
|
ScanChain != (chain_list *)0;
|
||||||
SyfSynthFsm2Abl( SyfFsmFigure );
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
FsmFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfSynthFsmInit( FsmFigure );
|
||||||
|
SyfSynthCode2Abl( FsmFigure, FlagDc );
|
||||||
|
SyfSynthFsm2Abl( FsmFigure );
|
||||||
|
}
|
||||||
|
|
||||||
SyfFbhFigure = SyfFsm2Fbh( SyfFsmFigure );
|
SyfFbhFigure = SyfFsm2Fbh( SyfFsmFigure );
|
||||||
|
|
||||||
|
@ -349,6 +395,8 @@ int main( argc, argv )
|
||||||
|
|
||||||
fprintf( stdout, "\t\t--> Save BEH file %s\n\n", OutputFileName );
|
fprintf( stdout, "\t\t--> Save BEH file %s\n\n", OutputFileName );
|
||||||
|
|
||||||
|
SyfFbhFigure->NAME = namealloc( OutputFileName );
|
||||||
|
|
||||||
vhdlsavefbfig( SyfFbhFigure, OutputFileName, FlagFormat );
|
vhdlsavefbfig( SyfFbhFigure, OutputFileName, FlagFormat );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
|
|
@ -1533,9 +1533,9 @@ void SyfSynthFsmInit( FsmFigure )
|
||||||
|
|
||||||
for ( Index = 0; Index < RegMax; Index++ )
|
for ( Index = 0; Index < RegMax; Index++ )
|
||||||
{
|
{
|
||||||
sprintf( Buffer, "%s %ld", SyfInfo->CURRENT_STATE, Index );
|
sprintf( Buffer, "%s_%s %ld", FsmFigure->NAME, SyfInfo->CURRENT_STATE, Index );
|
||||||
RegArray[ Index ].NAME_OUT = namealloc( Buffer );
|
RegArray[ Index ].NAME_OUT = namealloc( Buffer );
|
||||||
sprintf( Buffer, "%s %ld", SyfInfo->NEXT_STATE, Index );
|
sprintf( Buffer, "%s_%s %ld", FsmFigure->NAME, SyfInfo->NEXT_STATE, Index );
|
||||||
RegArray[ Index ].NAME_IN = namealloc( Buffer );
|
RegArray[ Index ].NAME_IN = namealloc( Buffer );
|
||||||
RegArray[ Index ].NAME_MASTER = RegArray[ Index ].NAME_OUT;
|
RegArray[ Index ].NAME_MASTER = RegArray[ Index ].NAME_OUT;
|
||||||
}
|
}
|
||||||
|
@ -1558,7 +1558,7 @@ void SyfSynthFsmInit( FsmFigure )
|
||||||
|
|
||||||
for ( Index = 0; Index < OutMax; Index++ )
|
for ( Index = 0; Index < OutMax; Index++ )
|
||||||
{
|
{
|
||||||
sprintf( Buffer, "regouts_%ld", Index );
|
sprintf( Buffer, "%s_regouts_%ld", FsmFigure->NAME, Index );
|
||||||
OutArray[ Index ].NAME_OUT = namealloc( Buffer );
|
OutArray[ Index ].NAME_OUT = namealloc( Buffer );
|
||||||
OutArray[ Index ].NAME_MASTER = OutArray[ Index ].NAME_OUT;
|
OutArray[ Index ].NAME_MASTER = OutArray[ Index ].NAME_OUT;
|
||||||
}
|
}
|
||||||
|
@ -1576,7 +1576,7 @@ void SyfSynthFsmInit( FsmFigure )
|
||||||
|
|
||||||
for ( Index = 0; Index < CtrlMax; Index++ )
|
for ( Index = 0; Index < CtrlMax; Index++ )
|
||||||
{
|
{
|
||||||
sprintf( Buffer, "ctrl_%s", FSM_CTRL_NAME[ Index ] );
|
sprintf( Buffer, "%s_ctrl_%s", FsmFigure->NAME, FSM_CTRL_NAME[ Index ] );
|
||||||
CtrlArray[ Index ].NAME = namealloc( Buffer );
|
CtrlArray[ Index ].NAME = namealloc( Buffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1589,7 +1589,7 @@ void SyfSynthFsmInit( FsmFigure )
|
||||||
{
|
{
|
||||||
for ( ScanBit = 0; ScanBit < SyfInfo->NUMBER_REG; ScanBit++ )
|
for ( ScanBit = 0; ScanBit < SyfInfo->NUMBER_REG; ScanBit++ )
|
||||||
{
|
{
|
||||||
sprintf( Buffer, "stacks_%ld_%ld", Stack, ScanBit );
|
sprintf( Buffer, "%s_stacks_%ld_%ld", FsmFigure->NAME, Stack, ScanBit );
|
||||||
StackArray[ Index ].NAME_OUT = namealloc( Buffer );
|
StackArray[ Index ].NAME_OUT = namealloc( Buffer );
|
||||||
StackArray[ Index ].NAME_MASTER = StackArray[ Index ].NAME_OUT;
|
StackArray[ Index ].NAME_MASTER = StackArray[ Index ].NAME_OUT;
|
||||||
|
|
||||||
|
|
|
@ -91,14 +91,15 @@ void SyfFsmUserSaveCode( FsmFigure, FileName )
|
||||||
fsmfig_list *FsmFigure;
|
fsmfig_list *FsmFigure;
|
||||||
char *FileName;
|
char *FileName;
|
||||||
{
|
{
|
||||||
|
fsmfig_list *ScanFigure;
|
||||||
FILE *UserFile;
|
FILE *UserFile;
|
||||||
fsmstate_list *ScanState;
|
fsmstate_list *ScanState;
|
||||||
|
chain_list *ScanChain;
|
||||||
syfinfo *SyfInfo;
|
syfinfo *SyfInfo;
|
||||||
long Value;
|
long Value;
|
||||||
long Bit;
|
long Bit;
|
||||||
char OneHot;
|
char OneHot;
|
||||||
|
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
|
||||||
UserFile = mbkfopen( FileName, "enc", "w" );
|
UserFile = mbkfopen( FileName, "enc", "w" );
|
||||||
|
|
||||||
if ( UserFile == (FILE *)0 )
|
if ( UserFile == (FILE *)0 )
|
||||||
|
@ -106,12 +107,19 @@ void SyfFsmUserSaveCode( FsmFigure, FileName )
|
||||||
SyfError( SYF_ERROR_OPEN_FILE, FileName );
|
SyfError( SYF_ERROR_OPEN_FILE, FileName );
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf( UserFile, "# Encoding figure \"%s\"\n", FsmFigure->NAME );
|
for ( ScanChain = FsmFigure->MULTI;
|
||||||
fprintf( UserFile, "-%c %ld\n" , SyfInfo->ENCODE, SyfInfo->NUMBER_BIT );
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
ScanFigure = (fsmfig_list *)ScanChain->DATA;
|
||||||
|
SyfInfo = FSM_SYF_INFO( ScanFigure );
|
||||||
|
|
||||||
|
fprintf( UserFile, "# Encoding figure \"%s\"\n", ScanFigure->NAME );
|
||||||
|
fprintf( UserFile, "-%s %c %ld\n" , ScanFigure->NAME, SyfInfo->ENCODE, SyfInfo->NUMBER_BIT );
|
||||||
|
|
||||||
OneHot = ( SyfInfo->ENCODE == SYF_ENCODE_ONE_HOT );
|
OneHot = ( SyfInfo->ENCODE == SYF_ENCODE_ONE_HOT );
|
||||||
|
|
||||||
for ( ScanState = FsmFigure->STATE;
|
for ( ScanState = ScanFigure->STATE;
|
||||||
ScanState != (fsmstate_list *)0;
|
ScanState != (fsmstate_list *)0;
|
||||||
ScanState = ScanState->NEXT )
|
ScanState = ScanState->NEXT )
|
||||||
{
|
{
|
||||||
|
@ -139,6 +147,7 @@ void SyfFsmUserSaveCode( FsmFigure, FileName )
|
||||||
|
|
||||||
fprintf( UserFile, "\n" );
|
fprintf( UserFile, "\n" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fclose( UserFile );
|
fclose( UserFile );
|
||||||
}
|
}
|
||||||
|
@ -163,6 +172,8 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
authtable *HashTable;
|
authtable *HashTable;
|
||||||
authelem *Element;
|
authelem *Element;
|
||||||
char *StateName;
|
char *StateName;
|
||||||
|
char *ScanName;
|
||||||
|
char *FigureName;
|
||||||
unsigned long StateCode;
|
unsigned long StateCode;
|
||||||
long NumberState;
|
long NumberState;
|
||||||
long NumberBit;
|
long NumberBit;
|
||||||
|
@ -170,6 +181,8 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
unsigned long CodeMax;
|
unsigned long CodeMax;
|
||||||
long Index;
|
long Index;
|
||||||
long Error;
|
long Error;
|
||||||
|
long Skip;
|
||||||
|
|
||||||
|
|
||||||
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
SyfInfo = FSM_SYF_INFO( FsmFigure );
|
||||||
CodeMax = SyfInfo->NUMBER_CODE;
|
CodeMax = SyfInfo->NUMBER_CODE;
|
||||||
|
@ -199,6 +212,7 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
|
|
||||||
CurrentLine = 1;
|
CurrentLine = 1;
|
||||||
Error = 0;
|
Error = 0;
|
||||||
|
Skip = 1;
|
||||||
|
|
||||||
while ( fgets( SyfUserBuffer,
|
while ( fgets( SyfUserBuffer,
|
||||||
SYF_USER_BUFFER_SIZE,
|
SYF_USER_BUFFER_SIZE,
|
||||||
|
@ -213,7 +227,21 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
|
|
||||||
if ( ScanBuffer[ 0 ] == '-' )
|
if ( ScanBuffer[ 0 ] == '-' )
|
||||||
{
|
{
|
||||||
if ( ScanBuffer[ 1 ] == SYF_ENCODE_ONE_HOT )
|
ScanBuffer = ScanBuffer + 1;
|
||||||
|
ScanName = strchr( ScanBuffer, ' ' );
|
||||||
|
|
||||||
|
if ( ScanName == (char *)0 )
|
||||||
|
{
|
||||||
|
Error = SYF_ERROR_SYNTAX; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ScanName = '\0';
|
||||||
|
FigureName = namealloc( ScanBuffer );
|
||||||
|
ScanBuffer = ScanName + 1;
|
||||||
|
|
||||||
|
if ( FigureName == FsmFigure->NAME )
|
||||||
|
{
|
||||||
|
if ( ScanBuffer[ 0 ] == SYF_ENCODE_ONE_HOT )
|
||||||
{
|
{
|
||||||
CodeMax = NumberState;
|
CodeMax = NumberState;
|
||||||
|
|
||||||
|
@ -229,9 +257,11 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
{
|
{
|
||||||
CodeArray[ Index ].VALUE = Index;
|
CodeArray[ Index ].VALUE = Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Skip = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( ScanBuffer[ 1 ] == SYF_ENCODE_FRANCK )
|
if ( ScanBuffer[ 0 ] == SYF_ENCODE_FRANCK )
|
||||||
{
|
{
|
||||||
NumberBit = atoi( &ScanBuffer[ 2 ] );
|
NumberBit = atoi( &ScanBuffer[ 2 ] );
|
||||||
|
|
||||||
|
@ -247,14 +277,27 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
SyfInfo->NUMBER_CODE = NumberState;
|
SyfInfo->NUMBER_CODE = NumberState;
|
||||||
SyfInfo->NUMBER_BIT = NumberBit;
|
SyfInfo->NUMBER_BIT = NumberBit;
|
||||||
SyfInfo->ENCODE = SYF_ENCODE_FRANCK;
|
SyfInfo->ENCODE = SYF_ENCODE_FRANCK;
|
||||||
|
|
||||||
|
Skip = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Error = SYF_ERROR_SYNTAX; break;
|
Error = SYF_ERROR_SYNTAX; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Skip = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
Skip = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( ! Skip )
|
||||||
|
{
|
||||||
if ( ( ScanBuffer[ 0 ] != '#' ) &&
|
if ( ( ScanBuffer[ 0 ] != '#' ) &&
|
||||||
( ScanBuffer[ 0 ] != '\0' ) )
|
( ScanBuffer[ 0 ] != '\0' ) )
|
||||||
{
|
{
|
||||||
|
@ -320,6 +363,7 @@ void SyfFsmUserEncode( FsmFigure, FileName )
|
||||||
|
|
||||||
NumberState--;
|
NumberState--;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CurrentLine++;
|
CurrentLine++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue