Hello
This commit is contained in:
parent
e68472d2fd
commit
3d8c01051e
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS = src
|
|
@ -0,0 +1,45 @@
|
||||||
|
dnl
|
||||||
|
/*
|
||||||
|
dnl This file is part of the Alliance CAD System
|
||||||
|
dnl Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||||
|
dnl Universite Pierre et Marie Curie
|
||||||
|
dnl
|
||||||
|
dnl Home page : http://www-asim.lip6.fr/alliance/
|
||||||
|
dnl E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||||
|
dnl
|
||||||
|
dnl This library is free software; you can redistribute it and/or modify it
|
||||||
|
dnl under the terms of the GNU Library General Public License as published
|
||||||
|
dnl by the Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
dnl your option) any later version.
|
||||||
|
dnl
|
||||||
|
dnl Alliance VLSI CAD System is distributed in the hope that it will be
|
||||||
|
dnl useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
dnl Public License for more details.
|
||||||
|
dnl
|
||||||
|
dnl You should have received a copy of the GNU General Public License along
|
||||||
|
dnl with the GNU C Library; see the file COPYING. If not, write to the Free
|
||||||
|
dnl Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
dnl
|
||||||
|
dnl Purpose : Auto stuffing Alliance
|
||||||
|
dnl Almost ten years since I wrote this stuff, I just can't
|
||||||
|
dnl believe it
|
||||||
|
dnl Date : 01/02/2002
|
||||||
|
dnl Author : Frederic Petrot <Frederic.Petrot@lip6.fr>
|
||||||
|
dnl $Id: configure.in,v 1.1 2002/03/20 14:28:19 ludo Exp $
|
||||||
|
dnl
|
||||||
|
dnl
|
||||||
|
AC_INIT(src/fks.h)
|
||||||
|
AM_INIT_AUTOMAKE(fks, 1.4)
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_C_CONST
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
|
||||||
|
AM_ALLIANCE
|
||||||
|
|
||||||
|
AC_OUTPUT([
|
||||||
|
Makefile
|
||||||
|
src/Makefile
|
||||||
|
])
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
#ifndef __P
|
||||||
|
# if defined(__STDC__) || defined(__GNUC__)
|
||||||
|
# define __P(x) x
|
||||||
|
# else
|
||||||
|
# define __P(x) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Title : Structures and fonctions for FKS |
|
||||||
|
| |
|
||||||
|
| Date : 28.01.95 |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef FKS_103_H
|
||||||
|
# define FKS_103_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Structures |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Global Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void kissloadfsmfig __P((fsmfig_list *FsmFigure, char *FigureName));
|
||||||
|
extern void kisssavefsmfig __P((fsmfig_list *FsmFigure));
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,397 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fksdrive.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bdd.h"
|
||||||
|
# include "fsm.h"
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <memory.h>
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <string.h>
|
||||||
|
# include "fkserror.h"
|
||||||
|
# include "fksdrive.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static FILE *KissFile;
|
||||||
|
|
||||||
|
static char *KissBitString;
|
||||||
|
static long KissBitLength;
|
||||||
|
|
||||||
|
static char *KissStateFrom;
|
||||||
|
static char *KissStateTo;
|
||||||
|
|
||||||
|
static long KissBitInput;
|
||||||
|
|
||||||
|
static bddsystem *KissBddSystem;
|
||||||
|
static bddcircuit *KissBddCircuit;
|
||||||
|
|
||||||
|
static long KissNumberLine;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissMakeFsmBddNode |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void KissMakeFsmBddNode( FsmFigure )
|
||||||
|
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
|
{
|
||||||
|
fsmin_list *ScanIn;
|
||||||
|
fsmout_list *ScanOut;
|
||||||
|
fsmstate_list *ScanState;
|
||||||
|
fsmtrans_list *ScanTrans;
|
||||||
|
fsmlocout_list *ScanLocout;
|
||||||
|
bddnode *BddNode;
|
||||||
|
bddnode *BddNodeOut;
|
||||||
|
bddnode *BddNodeLocOn;
|
||||||
|
bddnode *BddNodeLocOff;
|
||||||
|
bddnode *BddNodeLocDc;
|
||||||
|
bddnode *BddNodeLocout;
|
||||||
|
|
||||||
|
KissBddSystem = createbddsystem( FKS_BDD_MODEL_VAR, FKS_BDD_MODEL_OPER,
|
||||||
|
FKS_BDD_MAX_VAR , FKS_BDD_MAX_NODE );
|
||||||
|
|
||||||
|
KissBddCircuit = createbddcircuit( FsmFigure->NAME,
|
||||||
|
FsmFigure->NUMBER_IN,
|
||||||
|
FsmFigure->NUMBER_OUT, KissBddSystem );
|
||||||
|
|
||||||
|
for ( ScanIn = FsmFigure->IN;
|
||||||
|
ScanIn != (fsmin_list *)0;
|
||||||
|
ScanIn = ScanIn->NEXT )
|
||||||
|
{
|
||||||
|
addbddcircuitin( (bddcircuit *)0, ScanIn->NAME,
|
||||||
|
(bddindex )0, BDD_IN_MODE_LAST );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanOut = FsmFigure->OUT;
|
||||||
|
ScanOut != (fsmout_list *)0;
|
||||||
|
ScanOut = ScanOut->NEXT )
|
||||||
|
{
|
||||||
|
addbddcircuitin( (bddcircuit *)0, ScanOut->NAME,
|
||||||
|
(bddindex )0, BDD_IN_MODE_LAST );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanTrans = FsmFigure->TRANS;
|
||||||
|
ScanTrans != (fsmtrans_list *)0;
|
||||||
|
ScanTrans = ScanTrans->NEXT )
|
||||||
|
{
|
||||||
|
ScanTrans->USER = (void *)addbddcircuitabl( (bddcircuit *)0, ScanTrans->ABL );
|
||||||
|
}
|
||||||
|
|
||||||
|
ScanState = FsmFigure->STATE;
|
||||||
|
|
||||||
|
while ( ScanState != (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
BddNode = BddLocalSystem->ONE;
|
||||||
|
|
||||||
|
for ( ScanLocout = ScanState->LOCOUT;
|
||||||
|
ScanLocout != (fsmlocout_list *)0;
|
||||||
|
ScanLocout = ScanLocout->NEXT )
|
||||||
|
{
|
||||||
|
BddNodeOut = searchbddcircuitin( (bddcircuit *)0, ScanLocout->OUT->NAME );
|
||||||
|
|
||||||
|
if ( ScanLocout->ABL != (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
BddNodeLocOn = addbddcircuitabl( (bddcircuit *)0, ScanLocout->ABL );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BddNodeLocOn = BddLocalSystem->ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ScanLocout->ABL_DC != (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
BddNodeLocDc = addbddcircuitabl( (bddcircuit *)0, ScanLocout->ABL_DC );
|
||||||
|
BddNodeLocOff = applybddnode( (bddsystem *)0, ABL_OR,
|
||||||
|
BddNodeLocDc , BddNodeOut );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BddNodeLocDc = BddLocalSystem->ZERO;
|
||||||
|
BddNodeLocOff = BddNodeOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
BddNodeLocOff = applybddnode( (bddsystem *)0, ABL_NOR,
|
||||||
|
decbddrefext( BddNodeLocOff ),
|
||||||
|
BddNodeLocOn );
|
||||||
|
|
||||||
|
BddNodeLocOn = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNodeLocOn ),
|
||||||
|
BddNodeOut );
|
||||||
|
|
||||||
|
BddNodeLocout = applybddnode( (bddsystem *)0, ABL_OR ,
|
||||||
|
decbddrefext( BddNodeLocOn ),
|
||||||
|
decbddrefext( BddNodeLocOff ) );
|
||||||
|
|
||||||
|
BddNodeLocout = applybddnode( (bddsystem *)0, ABL_OR,
|
||||||
|
decbddrefext( BddNodeLocout ),
|
||||||
|
decbddrefext( BddNodeLocDc ) );
|
||||||
|
|
||||||
|
BddNode = applybddnode( (bddsystem *)0, ABL_AND,
|
||||||
|
decbddrefext( BddNode ),
|
||||||
|
decbddrefext( BddNodeLocout ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddNode = addbddcircuitout( (bddcircuit *)0, ScanState->NAME, BddNode );
|
||||||
|
|
||||||
|
ScanState->USER = (void *)BddNode;
|
||||||
|
ScanState = ScanState->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissDestroyFsmBddNode |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void KissDestroyFsmBddNode( FsmFigure )
|
||||||
|
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
|
{
|
||||||
|
fsmstate_list *ScanState;
|
||||||
|
fsmtrans_list *ScanTrans;
|
||||||
|
|
||||||
|
for ( ScanTrans = FsmFigure->TRANS;
|
||||||
|
ScanTrans != (fsmtrans_list *)0;
|
||||||
|
ScanTrans = ScanTrans->NEXT )
|
||||||
|
{
|
||||||
|
ScanTrans->USER = (void *)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScanState = FsmFigure->STATE;
|
||||||
|
|
||||||
|
while ( ScanState != (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
ScanState->USER = (void *)0;
|
||||||
|
ScanState = ScanState->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
destroybddcircuit( KissBddCircuit );
|
||||||
|
destroybddsystem( KissBddSystem );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissDriveBitString |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void KissDriveBitString( BddNode )
|
||||||
|
|
||||||
|
bddnode *BddNode;
|
||||||
|
{
|
||||||
|
bddindex Index;
|
||||||
|
char Cut;
|
||||||
|
|
||||||
|
if ( BddNode->INDEX < BDD_INDEX_MIN )
|
||||||
|
{
|
||||||
|
if ( BddNode->INDEX == BDD_INDEX_ONE )
|
||||||
|
{
|
||||||
|
KissNumberLine++;
|
||||||
|
|
||||||
|
Cut = KissBitString[ KissBitInput ];
|
||||||
|
KissBitString[ KissBitInput ] = '\0';;
|
||||||
|
|
||||||
|
fprintf( KissFile, "%s %s %s",
|
||||||
|
KissBitString, KissStateFrom, KissStateTo );
|
||||||
|
|
||||||
|
KissBitString[ KissBitInput ] = Cut;
|
||||||
|
|
||||||
|
fprintf( KissFile, " %s\n", KissBitString + KissBitInput );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Index = BddNode->INDEX - BDD_INDEX_MIN;
|
||||||
|
|
||||||
|
KissBitString[ Index ] = '1';
|
||||||
|
KissDriveBitString( BddNode->HIGH );
|
||||||
|
|
||||||
|
KissBitString[ Index ] = '0';
|
||||||
|
KissDriveBitString( BddNode->LOW );
|
||||||
|
|
||||||
|
KissBitString[ Index ] = '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissDriveFigure |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void KissDriveFigure( FsmFigure )
|
||||||
|
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
|
{
|
||||||
|
fsmtrans_list *ScanTrans;
|
||||||
|
bddnode *BddNode;
|
||||||
|
bddnode *BddTrans;
|
||||||
|
bddnode *BddOut;
|
||||||
|
|
||||||
|
KissNumberLine = 0;
|
||||||
|
KissBitInput = FsmFigure->NUMBER_IN;
|
||||||
|
KissBitLength = KissBitInput + FsmFigure->NUMBER_OUT + 1;
|
||||||
|
KissBitString = (char *)autallocblock( KissBitLength );
|
||||||
|
|
||||||
|
memset( (void *)KissBitString, '-', (size_t)( KissBitLength - 1 ) );
|
||||||
|
|
||||||
|
FsmFigure->TRANS = (fsmtrans_list *)reverse( (chain_list *)FsmFigure->TRANS );
|
||||||
|
|
||||||
|
for ( ScanTrans = FsmFigure->TRANS;
|
||||||
|
ScanTrans != (fsmtrans_list *)0;
|
||||||
|
ScanTrans = ScanTrans->NEXT )
|
||||||
|
{
|
||||||
|
KissStateFrom = ScanTrans->FROM->NAME;
|
||||||
|
KissStateTo = ScanTrans->TO->NAME;
|
||||||
|
|
||||||
|
BddOut = (bddnode *)ScanTrans->FROM->USER;
|
||||||
|
BddTrans = (bddnode *)ScanTrans->USER;
|
||||||
|
|
||||||
|
/*\
|
||||||
|
if ( BddOut->INDEX < BDD_INDEX_MIN )
|
||||||
|
{
|
||||||
|
BddNode = BddTrans;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
\*/
|
||||||
|
{
|
||||||
|
BddNode = applybddnode( (bddsystem *)0 , ABL_AND, BddTrans, BddOut );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissDriveBitString( BddNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
FsmFigure->TRANS = (fsmtrans_list *)reverse( (chain_list *)FsmFigure->TRANS );
|
||||||
|
|
||||||
|
autfreeblock( KissBitString );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| kisssavefsmfig |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void kisssavefsmfig( FsmFigure )
|
||||||
|
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
|
{
|
||||||
|
bddsystem *BddSystem;
|
||||||
|
bddcircuit *BddCircuit;
|
||||||
|
long Position;
|
||||||
|
long NumberState;
|
||||||
|
|
||||||
|
if ( FsmFigure->STACK != (fsmstack_list *)0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_FSM_STACK, FsmFigure->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissFile = mbkfopen( FsmFigure->NAME, "kiss2", "w" );
|
||||||
|
|
||||||
|
if ( KissFile == (FILE *)0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_OPEN_FILE, FsmFigure->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
|
NumberState = FsmFigure->NUMBER_STATE;
|
||||||
|
|
||||||
|
if ( FsmFigure->STAR_STATE != (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
NumberState = NumberState - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf( KissFile, ".i %ld\n", FsmFigure->NUMBER_IN );
|
||||||
|
fprintf( KissFile, ".o %ld\n", FsmFigure->NUMBER_OUT );
|
||||||
|
fprintf( KissFile, ".s %ld\n", NumberState );
|
||||||
|
|
||||||
|
if ( FsmFigure->FIRST_STATE != (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
fprintf( KissFile, ".r %s\n", FsmFigure->FIRST_STATE->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
|
Position = ftell( KissFile );
|
||||||
|
fprintf( KissFile, ".p \n" );
|
||||||
|
|
||||||
|
BddSystem = BddLocalSystem;
|
||||||
|
BddCircuit = BddLocalCircuit;
|
||||||
|
|
||||||
|
KissMakeFsmBddNode( FsmFigure );
|
||||||
|
KissDriveFigure( FsmFigure );
|
||||||
|
KissDestroyFsmBddNode( FsmFigure );
|
||||||
|
|
||||||
|
BddLocalSystem = BddSystem;
|
||||||
|
BddLocalCircuit = BddCircuit;
|
||||||
|
|
||||||
|
fprintf( KissFile, ".e\n" );
|
||||||
|
|
||||||
|
fseek( KissFile, Position, 0 );
|
||||||
|
fprintf( KissFile, ".p %ld\n", KissNumberLine );
|
||||||
|
|
||||||
|
fclose( KissFile );
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
#ifndef __P
|
||||||
|
# if defined(__STDC__) || defined(__GNUC__)
|
||||||
|
# define __P(x) x
|
||||||
|
# else
|
||||||
|
# define __P(x) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fksdrive.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef FKS_DRIVE_H
|
||||||
|
# define FKS_DRIVE_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define FKS_BDD_MODEL_VAR 50
|
||||||
|
# define FKS_BDD_MODEL_OPER 1000
|
||||||
|
# define FKS_BDD_MAX_VAR (BDD_MAX_VAR - 1)
|
||||||
|
# define FKS_BDD_MAX_NODE 9000000
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Macro |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,148 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fkserror.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bdd.h"
|
||||||
|
# include "fsm.h"
|
||||||
|
|
||||||
|
# include "fkserror.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void fks_error( Error, Text, File, Line )
|
||||||
|
|
||||||
|
char Error;
|
||||||
|
char *Text;
|
||||||
|
char *File;
|
||||||
|
long Line;
|
||||||
|
{
|
||||||
|
char *Name;
|
||||||
|
|
||||||
|
Name = mbkstrdup( File );
|
||||||
|
Name[ strlen( File ) - 1 ] = '\0';
|
||||||
|
|
||||||
|
fprintf( stderr, "%s%ld ", Name, Line );
|
||||||
|
|
||||||
|
switch ( Error )
|
||||||
|
{
|
||||||
|
case KISS_ERROR_OPEN_FILE :
|
||||||
|
|
||||||
|
fprintf( stderr, "unable to open file \"%s\"\n", Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_PARSE :
|
||||||
|
|
||||||
|
fprintf( stderr, "parse error line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_END :
|
||||||
|
|
||||||
|
fprintf( stderr, "unexpected end of file line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_VALUE :
|
||||||
|
|
||||||
|
fprintf( stderr, "bad value line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_NAME :
|
||||||
|
|
||||||
|
fprintf( stderr, "bad name line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_PORT :
|
||||||
|
|
||||||
|
fprintf( stderr, "missing port(s) declaration line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_STATE :
|
||||||
|
|
||||||
|
fprintf( stderr, "missing state(s) declaration line %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KISS_ERROR_FSM_STACK :
|
||||||
|
|
||||||
|
fprintf( stderr, "unable to drive FSM stack of \"%s\"\n", Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
default :
|
||||||
|
|
||||||
|
fprintf( stderr, "unknown internal error %d !\n", Error );
|
||||||
|
}
|
||||||
|
|
||||||
|
autexit( 1 );
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
#ifndef __P
|
||||||
|
# if defined(__STDC__) || defined(__GNUC__)
|
||||||
|
# define __P(x) x
|
||||||
|
# else
|
||||||
|
# define __P(x) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fkserror.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef FKS_ERROR_H
|
||||||
|
# define FKS_ERROR_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define KISS_ERROR_OPEN_FILE 0
|
||||||
|
# define KISS_ERROR_PARSE 1
|
||||||
|
# define KISS_ERROR_END 2
|
||||||
|
# define KISS_ERROR_VALUE 3
|
||||||
|
# define KISS_ERROR_NAME 4
|
||||||
|
# define KISS_ERROR_PORT 5
|
||||||
|
# define KISS_ERROR_STATE 6
|
||||||
|
# define KISS_ERROR_FSM_STACK 7
|
||||||
|
|
||||||
|
# define KISS_MAX_ERROR 8
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Macro |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define fkserror( E, V ) (fks_error( (int)(E), (char *)(V), __FILE__, __LINE__ ))
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void fks_error __P((char Error, char *Text, char *File, long Line));
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,538 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fksparse.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <string.h>
|
||||||
|
# include <ctype.h>
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bdd.h"
|
||||||
|
# include "fsm.h"
|
||||||
|
|
||||||
|
# include "fkserror.h"
|
||||||
|
# include "fksparse.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Privates |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static int KissLineNumber = 0;
|
||||||
|
static char KissBuffer[ KISS_BUFFER_SIZE ];
|
||||||
|
static char *KissScanBuffer;
|
||||||
|
static FILE *KissFile;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissSpipBlank |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void KissSkipBlank( End )
|
||||||
|
|
||||||
|
int End;
|
||||||
|
{
|
||||||
|
int Index;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( ( KissScanBuffer == (char *)0 ) ||
|
||||||
|
( *KissScanBuffer == '\0' ) )
|
||||||
|
{
|
||||||
|
KissScanBuffer = fgets( KissBuffer, KISS_BUFFER_SIZE, KissFile );
|
||||||
|
|
||||||
|
KissLineNumber++;
|
||||||
|
|
||||||
|
if ( KissScanBuffer == (char *)0 )
|
||||||
|
{
|
||||||
|
if ( End ) return;
|
||||||
|
|
||||||
|
fkserror( KISS_ERROR_END, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( Index = 0; KissScanBuffer[ Index ] != '\0'; Index++ )
|
||||||
|
{
|
||||||
|
KissScanBuffer[ Index ] = tolower( KissScanBuffer[ Index ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( ( *KissScanBuffer != '\0' ) &&
|
||||||
|
( isspace( *KissScanBuffer ) ) )
|
||||||
|
{
|
||||||
|
KissScanBuffer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ( *KissScanBuffer == '\0' );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissGetValue |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static int KissGetValue()
|
||||||
|
{
|
||||||
|
char *Scan;
|
||||||
|
int Value;
|
||||||
|
|
||||||
|
Value = 0;
|
||||||
|
|
||||||
|
for ( Scan = KissScanBuffer; *Scan != '\0'; Scan++ )
|
||||||
|
{
|
||||||
|
if ( isspace( *Scan ) ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Scan != KissScanBuffer )
|
||||||
|
{
|
||||||
|
*Scan = '\0';
|
||||||
|
Value = atoi( KissScanBuffer );
|
||||||
|
*Scan = ' ';
|
||||||
|
|
||||||
|
KissScanBuffer = Scan;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Value <= 0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_VALUE, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( Value );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| KissGetName |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static char *KissGetName()
|
||||||
|
{
|
||||||
|
char *Scan;
|
||||||
|
char *Name;
|
||||||
|
|
||||||
|
Name = (char *)0;
|
||||||
|
|
||||||
|
for ( Scan = KissScanBuffer; *Scan != '\0'; Scan++ )
|
||||||
|
{
|
||||||
|
if ( isspace( *Scan ) ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Scan != KissScanBuffer )
|
||||||
|
{
|
||||||
|
*Scan = '\0';
|
||||||
|
Name = namealloc( KissScanBuffer );
|
||||||
|
*Scan = ' ';
|
||||||
|
|
||||||
|
KissScanBuffer = Scan;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Name == (char *)0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_NAME, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( Name );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| kissloadfsmfig |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void kissloadfsmfig( FsmFigure, FigureName )
|
||||||
|
|
||||||
|
fsmfig_list *FsmFigure;
|
||||||
|
char *FigureName;
|
||||||
|
{
|
||||||
|
fsmstate_list *StateFrom;
|
||||||
|
fsmstate_list *StateTo;
|
||||||
|
fsmstate_list *StarState;
|
||||||
|
fsmout_list *Output;
|
||||||
|
fsmin_list *Input;
|
||||||
|
ablexpr *Atom;
|
||||||
|
ablexpr *Equation;
|
||||||
|
ablexpr *Transition;
|
||||||
|
char *StateName;
|
||||||
|
char *StateVoidName;
|
||||||
|
char *StarStateName;
|
||||||
|
char *PortName;
|
||||||
|
int NumberIn;
|
||||||
|
int NumberOut;
|
||||||
|
int NumberState;
|
||||||
|
char Instruction;
|
||||||
|
char DeclarationType;
|
||||||
|
int Index;
|
||||||
|
int Value;
|
||||||
|
char BufferName[ 30 ];
|
||||||
|
|
||||||
|
KissFile = mbkfopen( FigureName, "kiss2", "r" );
|
||||||
|
|
||||||
|
if ( KissFile == (FILE *)0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_OPEN_FILE, FigureName );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissLineNumber = 0;
|
||||||
|
Instruction = 0;
|
||||||
|
KissScanBuffer = (char *)0;
|
||||||
|
Atom = (ablexpr *)0;
|
||||||
|
|
||||||
|
StateVoidName = namealloc( "void" );
|
||||||
|
StarStateName = namealloc( "*" );
|
||||||
|
|
||||||
|
StarState = addfsmstate( FsmFigure, StarStateName );
|
||||||
|
FsmFigure->STAR_STATE = StarState;
|
||||||
|
SetFsmStarState( StarState );
|
||||||
|
/*
|
||||||
|
** clock AND NOT clock'STABLE )
|
||||||
|
*/
|
||||||
|
FsmFigure->CLOCK = namealloc( "clock" );
|
||||||
|
|
||||||
|
Equation = createabloper( ABL_STABLE );
|
||||||
|
addablhexpr( Equation, createablatom( FsmFigure->CLOCK ) );
|
||||||
|
Equation = optimablnotexpr( Equation );
|
||||||
|
Equation = optimablbinexpr( ABL_AND, Equation,
|
||||||
|
createablatom( FsmFigure->CLOCK ) );
|
||||||
|
|
||||||
|
FsmFigure->CLOCK_ABL = Equation;
|
||||||
|
|
||||||
|
addfsmport( FsmFigure, FsmFigure->CLOCK, FSM_DIR_IN, FSM_TYPE_BIT );
|
||||||
|
|
||||||
|
KissSkipBlank( 0 );
|
||||||
|
|
||||||
|
while ( KissScanBuffer != (char *)0 )
|
||||||
|
{
|
||||||
|
if ( Instruction == 0 )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Declaration Part
|
||||||
|
*/
|
||||||
|
if ( KissScanBuffer[ 0 ] == '.' )
|
||||||
|
{
|
||||||
|
DeclarationType = KissScanBuffer[ 1 ];
|
||||||
|
KissScanBuffer = KissScanBuffer + 2;
|
||||||
|
|
||||||
|
if ( ( DeclarationType == KISS_KEYWORD_IN ) ||
|
||||||
|
( DeclarationType == KISS_KEYWORD_OUT ) ||
|
||||||
|
( DeclarationType == KISS_KEYWORD_STATE ) ||
|
||||||
|
( DeclarationType == KISS_KEYWORD_R ) ||
|
||||||
|
( DeclarationType == KISS_KEYWORD_P ) )
|
||||||
|
{
|
||||||
|
KissSkipBlank( 0 );
|
||||||
|
|
||||||
|
if ( DeclarationType != KISS_KEYWORD_R )
|
||||||
|
{
|
||||||
|
Value = KissGetValue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StateName = KissGetName();
|
||||||
|
FsmFigure->FIRST_STATE = addfsmstate( FsmFigure, StateName );
|
||||||
|
SetFsmFirstState( FsmFigure->FIRST_STATE );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( DeclarationType == KISS_KEYWORD_IN )
|
||||||
|
{
|
||||||
|
NumberIn = Value;
|
||||||
|
/*
|
||||||
|
** Initialize input
|
||||||
|
*/
|
||||||
|
for ( Index = 0; Index < NumberIn; Index++ )
|
||||||
|
{
|
||||||
|
sprintf( BufferName, "I%d", Index );
|
||||||
|
PortName = namealloc( BufferName );
|
||||||
|
addfsmin( FsmFigure, PortName );
|
||||||
|
addfsmport( FsmFigure, PortName, FSM_DIR_IN, FSM_TYPE_BIT );
|
||||||
|
}
|
||||||
|
|
||||||
|
FsmFigure->IN =
|
||||||
|
(fsmin_list *)reverse( (chain_list *)FsmFigure->IN );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( DeclarationType == KISS_KEYWORD_OUT )
|
||||||
|
{
|
||||||
|
NumberOut = Value;
|
||||||
|
|
||||||
|
for ( Index = 0; Index < NumberOut; Index++ )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Initialize output
|
||||||
|
*/
|
||||||
|
sprintf( BufferName, "O%d", Index );
|
||||||
|
PortName = namealloc( BufferName );
|
||||||
|
addfsmout( FsmFigure, PortName );
|
||||||
|
addfsmport( FsmFigure, PortName, FSM_DIR_OUT, FSM_TYPE_BIT );
|
||||||
|
|
||||||
|
FsmFigure->OUT =
|
||||||
|
(fsmout_list *)reverse( (chain_list *)FsmFigure->OUT );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( DeclarationType == KISS_KEYWORD_STATE )
|
||||||
|
{
|
||||||
|
NumberState = Value;
|
||||||
|
/*
|
||||||
|
** Initialize state
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KissScanBuffer = (char *)0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( NumberState == 0 )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_STATE, FsmFigure->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( NumberIn == 0 ) ||
|
||||||
|
( NumberOut == 0 ) )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_PORT, FsmFigure->NAME );
|
||||||
|
}
|
||||||
|
|
||||||
|
Instruction = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Instruction == 1 )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Instruction Part
|
||||||
|
*/
|
||||||
|
if ( ( KissScanBuffer[0] == '.' ) &&
|
||||||
|
( KissScanBuffer[1] == 'e' ) ) break;
|
||||||
|
/*
|
||||||
|
** Input list
|
||||||
|
*/
|
||||||
|
Input = FsmFigure->IN;
|
||||||
|
Equation = createabloper( ABL_AND );
|
||||||
|
|
||||||
|
for ( Index = 0; Index < NumberIn; Index++ )
|
||||||
|
{
|
||||||
|
if ( *KissScanBuffer == '0' )
|
||||||
|
{
|
||||||
|
addablhexpr( Equation, optimablnotexpr( createablatom( Input->NAME ) ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( *KissScanBuffer == '1' )
|
||||||
|
{
|
||||||
|
addablhexpr( Equation, createablatom( Input->NAME ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( *KissScanBuffer != '-' )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_PARSE, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissScanBuffer++;
|
||||||
|
Input = Input->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ABL_CDR( Equation ) == (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
delablexpr( Equation );
|
||||||
|
Transition = createablatomone();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( ABL_CDDR( Equation ) == (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
Transition = dupablexpr( ABL_CADR( Equation ) );
|
||||||
|
delablexpr( Equation );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Transition = Equation;
|
||||||
|
}
|
||||||
|
|
||||||
|
KissSkipBlank();
|
||||||
|
/*
|
||||||
|
** State From
|
||||||
|
*/
|
||||||
|
StateName = KissGetName();
|
||||||
|
|
||||||
|
if ( StateName == StarStateName )
|
||||||
|
{
|
||||||
|
StateFrom = StarState;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StateFrom = searchfsmstate( FsmFigure, StateName );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StateFrom == (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
if ( FsmFigure->NUMBER_STATE > NumberState )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_NAME, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
StateFrom = searchfsmstate( FsmFigure, StateName );
|
||||||
|
|
||||||
|
if ( StateFrom == (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
StateFrom = addfsmstate( FsmFigure, StateName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
KissSkipBlank();
|
||||||
|
/*
|
||||||
|
** State To
|
||||||
|
*/
|
||||||
|
StateName = KissGetName();
|
||||||
|
|
||||||
|
if ( StateName != StateVoidName )
|
||||||
|
{
|
||||||
|
if ( StateName == StarStateName )
|
||||||
|
{
|
||||||
|
StateTo = StarState;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StateTo = searchfsmstate( FsmFigure, StateName );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StateTo == (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
if ( FsmFigure->NUMBER_STATE > NumberState )
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_NAME, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
StateTo = searchfsmstate( FsmFigure, StateName );
|
||||||
|
|
||||||
|
if ( StateTo == (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
StateTo = addfsmstate( FsmFigure, StateName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StateTo != (fsmstate_list *)0 )
|
||||||
|
{
|
||||||
|
Equation = dupablexpr( Transition );
|
||||||
|
addfsmtrans( FsmFigure, StateFrom, StateTo, Equation );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissSkipBlank();
|
||||||
|
/*
|
||||||
|
** Output
|
||||||
|
*/
|
||||||
|
Output = FsmFigure->OUT;
|
||||||
|
|
||||||
|
for ( Index = 0; Index < NumberOut; Index++ )
|
||||||
|
{
|
||||||
|
if ( *KissScanBuffer == '1' )
|
||||||
|
{
|
||||||
|
if ( Transition != (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
Equation = dupablexpr( Transition );
|
||||||
|
addfsmlocout( StateFrom, Output, Equation, (ablexpr *)0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( *KissScanBuffer == '-' )
|
||||||
|
{
|
||||||
|
if ( Transition != (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
Equation = dupablexpr( Transition );
|
||||||
|
addfsmlocout( StateFrom, Output, (ablexpr *)0, Equation );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( *KissScanBuffer == '0' )
|
||||||
|
{
|
||||||
|
Atom = createablatomzero();
|
||||||
|
addfsmlocout( StateFrom, Output, Atom, (ablexpr *)0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fkserror( KISS_ERROR_PARSE, KissLineNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
KissScanBuffer++;
|
||||||
|
Output = Output->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Transition != (ablexpr *)0 )
|
||||||
|
{
|
||||||
|
delablexpr( Transition );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
KissSkipBlank( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
FsmFigure->PORT = (fsmport_list *)reverse( (chain_list *)FsmFigure->PORT );
|
||||||
|
|
||||||
|
fclose( KissFile );
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| This file is part of the Alliance CAD System Copyright |
|
||||||
|
| (C) Laboratoire LIP6 - Département ASIM Universite P&M Curie|
|
||||||
|
| |
|
||||||
|
| Home page : http://www-asim.lip6.fr/alliance/ |
|
||||||
|
| E-mail support : mailto:alliance-support@asim.lip6.fr |
|
||||||
|
| |
|
||||||
|
| This progam is free software; you can redistribute it |
|
||||||
|
| and/or modify it under the terms of the GNU Library General|
|
||||||
|
| Public License as published by the Free Software Foundation |
|
||||||
|
| either version 2 of the License, or (at your option) any |
|
||||||
|
| later version. |
|
||||||
|
| |
|
||||||
|
| Alliance VLSI CAD System is distributed in the hope that |
|
||||||
|
| it will be useful, but WITHOUT ANY WARRANTY; |
|
||||||
|
| without even the implied warranty of MERCHANTABILITY or |
|
||||||
|
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
||||||
|
| Public License for more details. |
|
||||||
|
| |
|
||||||
|
| You should have received a copy of the GNU General Public |
|
||||||
|
| License along with the GNU C Library; see the file COPYING. |
|
||||||
|
| If not, write to the Free Software Foundation, Inc., |
|
||||||
|
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
#ifndef __P
|
||||||
|
# if defined(__STDC__) || defined(__GNUC__)
|
||||||
|
# define __P(x) x
|
||||||
|
# else
|
||||||
|
# define __P(x) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : FSM |
|
||||||
|
| |
|
||||||
|
| File : fksparse.c |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 04.12.96 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef FKS_PARSE_H
|
||||||
|
# define FKS_PARSE_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define KISS_BUFFER_SIZE 256
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Keywords |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define KISS_KEYWORD_IN 'i'
|
||||||
|
# define KISS_KEYWORD_OUT 'o'
|
||||||
|
# define KISS_KEYWORD_STATE 's'
|
||||||
|
# define KISS_KEYWORD_R 'r'
|
||||||
|
# define KISS_KEYWORD_P 'p'
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Macro |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# endif
|
Loading…
Reference in New Issue