This commit is contained in:
parent
33e30974b3
commit
542b1e4355
|
@ -0,0 +1 @@
|
|||
SUBDIRS = src man1
|
|
@ -0,0 +1,2 @@
|
|||
man_MANS = fsp.1
|
||||
EXTRA_DIST = $(man_MANS)
|
|
@ -0,0 +1,47 @@
|
|||
.TH FSP 1 "October 1, 1997" "ASIM/LIP6" "CAO\-VLSI Reference Manual"
|
||||
.SH NAME
|
||||
.TP
|
||||
fsp
|
||||
\- Formal proof between two FSM descriptions
|
||||
.so man1/alc_origin.1
|
||||
.SH SYNOPSIS
|
||||
.TP
|
||||
\fBfsp\fP [\fI-V\fP] \fIformat1\fP \fIformat2\fP \fIfile1\fP \fIfile2\fP
|
||||
.br
|
||||
.SH DESCRIPTION
|
||||
.br
|
||||
Made to run on FSM descriptions, \fBfsp\fP supports the same subset of VHDL as syf
|
||||
(for further informations about this subset see SYF(1) and FSM(5)).
|
||||
\fBfsp\fP uses a Reduced Ordered Binary Decision Diagrams representation and
|
||||
computes the product of the two FSM descriptions.
|
||||
After this step, it explores the resulting FSM product and proves formally the equivalence
|
||||
between the two initial FSM descriptions.
|
||||
Those two descriptions must have the same interface (VHDL entity).
|
||||
|
||||
.SH ENVIRONMENT VARIABLES
|
||||
.br
|
||||
.HP
|
||||
.ti 7
|
||||
\fIMBK_WORK_LIB\fP gives the path for the FSM descriptions.
|
||||
The default value is the current directory.
|
||||
.br
|
||||
.HP
|
||||
.ti 7
|
||||
\fIMBK_CATA_LIB\fP gives some auxiliary pathes for the FSM descriptions.
|
||||
The default value is the current directory.
|
||||
.SH OPTIONS
|
||||
.ti 7
|
||||
\-V
|
||||
Sets verbose mode on. Each step of the formal proof is displayed on the
|
||||
standard output.
|
||||
.br
|
||||
.SH EXAMPLE
|
||||
.br
|
||||
fsp fsm fsm digi digi2
|
||||
|
||||
.SH SEE ALSO
|
||||
.br
|
||||
\fBsyf\fP (1), \fBfmi\fP (1), \fBfsm\fP (5), \fBxfsm\fP (1).
|
||||
|
||||
.so man1/alc_bug_report.1
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | 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 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 : FSP |
|
||||
# | |
|
||||
# | File : Makefile |
|
||||
# | |
|
||||
# | Author : Jacomme Ludovic |
|
||||
# | |
|
||||
# | Date : 28.10.94 |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
include $(ALLIANCE_TOP)/etc/$(ALLIANCE_OS).mk
|
||||
include $(ALLIANCE_TOP)/etc/libraries.mk
|
||||
include local.mk
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Variables |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_CFLAGS = $(CFLAGS) -g -D$(ALLIANCE_OS)
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Binary |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_FSP_BIN = fsp
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Include |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_INCLUDE = -I$(ALLIANCE_INCLUDE) -I$(LOCAL_TARGET_INC)
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Library |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_MBK_LIB = -L$(ALLIANCE_LIB) \
|
||||
$(MUT_L)
|
||||
|
||||
LOCAL_ABL_LIB = -L$(LOCAL_TARGET_LIB) \
|
||||
$(ABL_L) \
|
||||
$(AUT_L)
|
||||
|
||||
LOCAL_BDD_LIB = -L$(LOCAL_TARGET_LIB) \
|
||||
$(BDD_L)
|
||||
|
||||
LOCAL_FSM_LIB = -L$(LOCAL_TARGET_LIB) \
|
||||
$(FTL_L) \
|
||||
$(FKS_L) \
|
||||
$(FVH_L) \
|
||||
$(FSM_L) \
|
||||
$(FBL_L) \
|
||||
$(FVH_L)
|
||||
|
||||
LOCAL_LIB = $(LOCAL_FSM_LIB) $(LOCAL_BDD_LIB) $(LOCAL_ABL_LIB) $(LOCAL_MBK_LIB)
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Define |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_MBK_DEFINE = -DMUT_H='"$(MUT_H)"'
|
||||
|
||||
LOCAL_FSM_DEFINE = -DFSM_H='"$(FSM_H)"' \
|
||||
-DFTL_H='"$(FTL_H)"' \
|
||||
-DFVH_H='"$(FVH_H)"'
|
||||
|
||||
LOCAL_BDD_DEFINE = -DBDD_H='"$(BDD_H)"'
|
||||
|
||||
LOCAL_ABL_DEFINE = -DAUT_H='"$(AUT_H)"' \
|
||||
-DABL_H='"$(ABL_H)"'
|
||||
|
||||
LOCAL_FSP_DEFINE = -DALLIANCE_VERSION=$(ALLIANCE_VERSION) \
|
||||
-DFSP_VERSION='"1.01"'
|
||||
|
||||
LOCAL_DEFINE = $(LOCAL_MBK_DEFINE) $(LOCAL_BDD_DEFINE) \
|
||||
$(LOCAL_FSP_DEFINE) $(LOCAL_FSM_DEFINE) \
|
||||
$(LOCAL_ABL_DEFINE)
|
||||
|
||||
LOCAL_HEADER = $(LOCAL_INCLUDE) $(LOCAL_DEFINE)
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Object |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
LOCAL_FSP_OBJ = fsp_debug.o fsp_proof.o fsp_comp.o fsp_main.o
|
||||
|
||||
LOCAL_OBJ = $(LOCAL_FSP_OBJ)
|
||||
|
||||
.c.o:
|
||||
$(CC) -c $(LOCAL_CFLAGS) $(LOCAL_HEADER) $<
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Fsp |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
distrib : $(LOCAL_TARGET_BIN)/$(LOCAL_FSP_BIN)
|
||||
|
||||
$(LOCAL_TARGET_BIN)/$(LOCAL_FSP_BIN) : $(LOCAL_OBJ)
|
||||
$(CC) $(LOCAL_CFLAGS) -o $(LOCAL_TARGET_BIN)/$(LOCAL_FSP_BIN) \
|
||||
$(LOCAL_OBJ) $(LOCAL_LIB) -lm
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Clean |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
clean :
|
||||
$(RM) -f $(LOCAL_OBJ)
|
||||
|
||||
realclean :
|
||||
$(RM) -f $(LOCAL_OBJ) $(LOCAL_TARGET_BIN)/$(LOCAL_FSP_BIN)
|
|
@ -0,0 +1,12 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
bin_PROGRAMS = fsp
|
||||
|
||||
fsp_LDADD = @LIBS@ \
|
||||
-lFtl -lFks -lFvh -lFsm \
|
||||
-lBdd -lAbl -lAut -lMut
|
||||
|
||||
|
||||
fsp_SOURCES = \
|
||||
fsp_comp.c fsp_debug.c fsp_main.c fsp_proof.c \
|
||||
fsp_comp.h fsp_debug.h fsp_main.h fsp_proof.h
|
|
@ -0,0 +1,129 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_comp.c |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Include Files |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# include MUT_H
|
||||
# include AUT_H
|
||||
# include ABL_H
|
||||
# include BDD_H
|
||||
# include FSM_H
|
||||
# include FTL_H
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include "fsp_debug.h"
|
||||
# include "fsp_comp.h"
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
static char FspBuffer[ 1024 ];
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspRenameState |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
static void FspRenameState( FsmFigure )
|
||||
|
||||
fsmfig_list *FsmFigure;
|
||||
{
|
||||
fsmstate_list *ScanState;
|
||||
|
||||
ScanState = FsmFigure->STATE;
|
||||
|
||||
while ( ScanState != (fsmstate_list *)0 )
|
||||
{
|
||||
sprintf( FspBuffer, "%s.%s", FsmFigure->NAME, ScanState->NAME );
|
||||
ScanState->NAME = namealloc( FspBuffer );
|
||||
|
||||
ScanState = ScanState->NEXT;
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspCompile |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
fsmfig_list *FspCompile( FileName, FileFormat )
|
||||
|
||||
char *FileName;
|
||||
char *FileFormat;
|
||||
{
|
||||
fsmfig_list *FsmFigure;
|
||||
char *SaveFormat;
|
||||
|
||||
SaveFormat = FSM_IN;
|
||||
FSM_IN = namealloc( FileFormat );
|
||||
FsmFigure = getfsmfig( FileName );
|
||||
FSM_IN = SaveFormat;
|
||||
|
||||
sprintf( FspBuffer, "%s.%s", FileName, FileFormat );
|
||||
FsmFigure->NAME = namealloc( FspBuffer );
|
||||
|
||||
FspRenameState( FsmFigure );
|
||||
|
||||
return( FsmFigure );
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_comp.h |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# ifndef FSP_COMP_H
|
||||
# define FSP_COMP_H
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Macro |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
extern fsmfig_list *FspCompile();
|
||||
|
||||
# endif
|
|
@ -0,0 +1,96 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_debug.c |
|
||||
| |
|
||||
| Authors : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Include Files |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <string.h>
|
||||
# include MUT_H
|
||||
# include AUT_H
|
||||
# include "fsp_debug.h"
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Private variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspDebugPrint |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspDebugPrint( FileName, Line )
|
||||
|
||||
char *FileName;
|
||||
int Line;
|
||||
{
|
||||
char Buffer[ 32 ];
|
||||
int Length;
|
||||
|
||||
FileName = FileName + 4;
|
||||
Length = strlen( FileName );
|
||||
strcpy( Buffer, FileName );
|
||||
Buffer[ Length - 2 ] = '\0';
|
||||
|
||||
fprintf( stdout, "%-8s%4d ", Buffer, Line );
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_debug.h |
|
||||
| |
|
||||
| Authors : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# ifndef FSP_DEBUG_H
|
||||
# define FSP_DEBUG_H
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Errors |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Warnings |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Macro |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# define FspPrintf FspDebugPrint( __FILE__, __LINE__ ); fprintf
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
extern void FspDebugPrint();
|
||||
|
||||
# endif
|
|
@ -0,0 +1,212 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_main.c |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Include Files |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# include MUT_H
|
||||
# include AUT_H
|
||||
# include ABL_H
|
||||
# include BDD_H
|
||||
# include FSM_H
|
||||
# include FTL_H
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include "fsp_debug.h"
|
||||
# include "fsp_comp.h"
|
||||
# include "fsp_proof.h"
|
||||
# include "fsp_main.h"
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
fsmfig_list *FspFsmFigure1 = (fsmfig_list *)0;
|
||||
fsmfig_list *FspFsmFigure2 = (fsmfig_list *)0;
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Fsp Usage |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspUsage()
|
||||
{
|
||||
fprintf( stderr, "\t\tfsp [Options] format1 format2 filename1 filename2\n\n" );
|
||||
|
||||
fprintf( stdout, "\t\tOptions : -V Sets Verbose mode on\n" );
|
||||
fprintf( stdout, "\t\t -D Sets Debug mode on\n" );
|
||||
fprintf( stdout, "\n" );
|
||||
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Main |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
int main( argc, argv )
|
||||
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
char *InputFileName1;
|
||||
char *InputFileName2;
|
||||
char *InputFormat1;
|
||||
char *InputFormat2;
|
||||
int Number;
|
||||
int Index;
|
||||
char Option;
|
||||
|
||||
int FlagVerbose = 0;
|
||||
int FlagDebug = 0;
|
||||
|
||||
alliancebanner_with_authors( "FSP", FSP_VERSION, "FSM formal Proof", "1999",
|
||||
ALLIANCE_VERSION, "Ludovic Jacomme" );
|
||||
|
||||
mbkenv();
|
||||
autenv();
|
||||
ablenv();
|
||||
bddenv();
|
||||
fsmenv();
|
||||
|
||||
if ( argc < 4 ) FspUsage();
|
||||
|
||||
InputFileName1 = (char *)0;
|
||||
InputFileName2 = (char *)0;
|
||||
InputFormat1 = (char *)0;
|
||||
InputFormat2 = (char *)0;
|
||||
|
||||
for ( Number = 1; Number < argc; Number++ )
|
||||
{
|
||||
if ( argv[ Number ][ 0 ] == '-' )
|
||||
{
|
||||
for ( Index = 1; argv[ Number ][ Index ] != '\0'; Index++ )
|
||||
{
|
||||
Option = argv[ Number ][ Index ];
|
||||
|
||||
switch ( Option )
|
||||
{
|
||||
case 'V' : FlagVerbose = 1;
|
||||
break;
|
||||
case 'D' : FlagDebug = 1;
|
||||
break;
|
||||
default : FspUsage();
|
||||
}
|
||||
|
||||
if ( Option == 'r' ) break;
|
||||
}
|
||||
}
|
||||
else
|
||||
if ( InputFormat1 == (char *)0 ) InputFormat1 = argv[ Number ];
|
||||
else
|
||||
if ( InputFormat2 == (char *)0 ) InputFormat2 = argv[ Number ];
|
||||
else
|
||||
if ( InputFileName1 == (char *)0 ) InputFileName1 = argv[ Number ];
|
||||
else
|
||||
if ( InputFileName2 == (char *)0 ) InputFileName2 = argv[ Number ];
|
||||
else
|
||||
FspUsage();
|
||||
}
|
||||
|
||||
if ( ( InputFormat1 == (char *)0 ) ||
|
||||
( InputFormat2 == (char *)0 ) ||
|
||||
( InputFileName1 == (char *)0 ) ||
|
||||
( InputFileName2 == (char *)0 ) ) FspUsage();
|
||||
|
||||
if ( FlagVerbose )
|
||||
{
|
||||
fprintf( stdout, "\t--> Run FSM Compiler\n" );
|
||||
fprintf( stdout, "\t--> Compile file %s\n", InputFileName1 );
|
||||
}
|
||||
|
||||
FspFsmFigure1 = FspCompile( InputFileName1, InputFormat1 );
|
||||
|
||||
if ( FlagVerbose )
|
||||
{
|
||||
fprintf( stdout, "\t--> Run FSM Compiler\n" );
|
||||
fprintf( stdout, "\t--> Compile file %s\n", InputFileName2 );
|
||||
}
|
||||
|
||||
FspFsmFigure2 = FspCompile( InputFileName2, InputFormat2 );
|
||||
|
||||
if ( FlagVerbose )
|
||||
{
|
||||
fprintf( stdout, "\t--> Formal proof between \"%s\" and \"%s\"\n",
|
||||
FspFsmFigure1->NAME, FspFsmFigure2->NAME );
|
||||
}
|
||||
|
||||
if ( FspFormalProof( FspFsmFigure1, FspFsmFigure2, FlagDebug ) )
|
||||
{
|
||||
fprintf( stdout, "\n\t==> \"%s\" and \"%s\" are identicals\n\n",
|
||||
FspFsmFigure1->NAME, FspFsmFigure2->NAME );
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf( stdout, "\n\t==> \"%s\" and \"%s\" are not identicals\n\n",
|
||||
FspFsmFigure1->NAME, FspFsmFigure2->NAME );
|
||||
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
return( 0 );
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_main.h |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# ifndef FSP_MAIN_H
|
||||
# define FSP_MAIN_H
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Macro |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# endif
|
|
@ -0,0 +1,598 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| 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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_proof.c |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Include Files |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# include MUT_H
|
||||
# include AUT_H
|
||||
# include ABL_H
|
||||
# include BDD_H
|
||||
# include FSM_H
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include "fsp_debug.h"
|
||||
# include "fsp_proof.h"
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
static fspstate_list *FspHeadState = (fspstate_list *)0;
|
||||
static int FspFlagDebug = 0;
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspAddState |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
fspstate_list *FspAddState( State1, State2 )
|
||||
|
||||
fsmstate_list *State1;
|
||||
fsmstate_list *State2;
|
||||
{
|
||||
fspstate_list *FspState;
|
||||
|
||||
FspState = (fspstate_list *)autallocheap( sizeof( fspstate_list ) );
|
||||
|
||||
FspState->STATE1 = State1;
|
||||
FspState->STATE2 = State2;
|
||||
|
||||
FspState->NEXT = FspHeadState;
|
||||
FspHeadState = FspState;
|
||||
|
||||
return( FspState );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspDelState |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspDelState( FspState )
|
||||
|
||||
fspstate_list *FspState;
|
||||
{
|
||||
fspstate_list **FspPrevious;
|
||||
fspstate_list *FspScan;
|
||||
|
||||
FspPrevious = &FspHeadState;
|
||||
|
||||
for ( FspScan = FspHeadState;
|
||||
FspScan != (fspstate_list *)0;
|
||||
FspScan = FspScan->NEXT )
|
||||
{
|
||||
if ( FspScan == FspState )
|
||||
{
|
||||
*FspPrevious = FspState->NEXT;
|
||||
autfreeheap( FspState, sizeof( fspstate_list ) );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
FspPrevious = &FspScan->NEXT;
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspFreeState |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspFreeState()
|
||||
{
|
||||
while ( FspHeadState != (fspstate_list *)0 )
|
||||
{
|
||||
FspDelState( FspHeadState );
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspExplodeStarState |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspExplodeStarState( FsmFigure )
|
||||
|
||||
fsmfig_list *FsmFigure;
|
||||
{
|
||||
fsmstate_list *ScanState;
|
||||
fsmstate_list *StarState;
|
||||
chain_list *StarChain;
|
||||
fsmtrans_list *StarTrans;
|
||||
fsmlocout_list *StarLocout;
|
||||
|
||||
StarState = FsmFigure->STAR_STATE;
|
||||
|
||||
if ( StarState != (fsmstate_list *)0 )
|
||||
{
|
||||
for ( StarChain = StarState->FROM;
|
||||
StarChain != (chain_list *)0;
|
||||
StarChain = StarChain->NEXT )
|
||||
{
|
||||
StarTrans = (fsmtrans_list *)StarChain->DATA;
|
||||
|
||||
for ( ScanState = FsmFigure->STATE;
|
||||
ScanState != (fsmstate_list *)0;
|
||||
ScanState = ScanState->NEXT )
|
||||
{
|
||||
addfsmtrans( FsmFigure, ScanState, StarTrans->TO,
|
||||
StarTrans->ABL );
|
||||
}
|
||||
}
|
||||
|
||||
for ( StarLocout = StarState->LOCOUT;
|
||||
StarLocout != (fsmlocout_list *)0;
|
||||
StarLocout = StarLocout->NEXT )
|
||||
{
|
||||
for ( ScanState = FsmFigure->STATE;
|
||||
ScanState != (fsmstate_list *)0;
|
||||
ScanState = ScanState->NEXT )
|
||||
{
|
||||
addfsmlocout( ScanState, StarLocout->OUT,
|
||||
StarLocout->ABL, StarLocout->ABL_DC );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspProduct |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
int FspProduct( FsmFigure1, FsmFigure2 )
|
||||
|
||||
fsmfig_list *FsmFigure1;
|
||||
fsmfig_list *FsmFigure2;
|
||||
{
|
||||
auth2table *HashTable;
|
||||
auth2elem *Element;
|
||||
fsmstate_list *State1;
|
||||
fsmstate_list *State2;
|
||||
fsmstate_list *StateSucc1;
|
||||
fsmstate_list *StateSucc2;
|
||||
fsmtrans_list *ScanTrans1;
|
||||
fsmtrans_list *ScanTrans2;
|
||||
chain_list *ScanChain1;
|
||||
chain_list *ScanChain2;
|
||||
bddnode *StateCond1;
|
||||
bddnode *StateCond2;
|
||||
bddnode *BddNode;
|
||||
long MaxState;
|
||||
int Error;
|
||||
|
||||
if ( FsmFigure1->NUMBER_STATE > FsmFigure2->NUMBER_STATE )
|
||||
{
|
||||
MaxState = FsmFigure1->NUMBER_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
MaxState = FsmFigure2->NUMBER_STATE;
|
||||
}
|
||||
|
||||
HashTable = createauth2table( MaxState << 1 );
|
||||
FspHeadState = (fspstate_list *)0;
|
||||
Error = 0;
|
||||
|
||||
FspAddState( FsmFigure1->FIRST_STATE, FsmFigure2->FIRST_STATE );
|
||||
State1 = FspHeadState->STATE1;
|
||||
State2 = FspHeadState->STATE2;
|
||||
|
||||
if ( State1->USER != State2->USER )
|
||||
{
|
||||
Error = 1;
|
||||
|
||||
FspPrintf( stdout, "Error output conflicts between state '%s' and state '%s'\n",
|
||||
State1->NAME, State2->NAME );
|
||||
|
||||
if ( FspFlagDebug )
|
||||
{
|
||||
addbddcircuitout( (bddcircuit *)0, "conflict1", State1->USER );
|
||||
addbddcircuitout( (bddcircuit *)0, "conflict2", State2->USER );
|
||||
|
||||
testbddcircuit( (bddcircuit *)0 );
|
||||
}
|
||||
}
|
||||
|
||||
Element = addauth2elem( HashTable, (char *)State1, (char *)State2, 0 );
|
||||
|
||||
while ( ( FspHeadState != (fspstate_list *)0 ) &&
|
||||
( Error == 0 ) )
|
||||
{
|
||||
State1 = FspHeadState->STATE1;
|
||||
State2 = FspHeadState->STATE2;
|
||||
|
||||
if ( ( State1->TO == (chain_list *)0 ) &&
|
||||
( State2->TO != (chain_list *)0 ) )
|
||||
{
|
||||
Error = 1;
|
||||
}
|
||||
|
||||
FspDelState( FspHeadState );
|
||||
|
||||
for ( ScanChain1 = State1->FROM;
|
||||
ScanChain1 != (chain_list *)0;
|
||||
ScanChain1 = ScanChain1->NEXT )
|
||||
{
|
||||
ScanTrans1 = (fsmtrans_list *)ScanChain1->DATA;
|
||||
StateSucc1 = ScanTrans1->TO;
|
||||
StateCond1 = ScanTrans1->BDD;
|
||||
|
||||
for ( ScanChain2 = State2->FROM;
|
||||
ScanChain2 != (chain_list *)0;
|
||||
ScanChain2 = ScanChain2->NEXT )
|
||||
{
|
||||
ScanTrans2 = (fsmtrans_list *)ScanChain2->DATA;
|
||||
StateSucc2 = ScanTrans2->TO;
|
||||
StateCond2 = ScanTrans2->BDD;
|
||||
|
||||
BddNode = applybddnode( (bddsystem *)0, ABL_AND, StateCond1, StateCond2 );
|
||||
|
||||
if ( BddNode != BddLocalSystem->ZERO )
|
||||
{
|
||||
Element = searchauth2elem( HashTable, (char *)StateSucc1, (char *)StateSucc2 );
|
||||
|
||||
if ( Element == (auth2elem *)0 )
|
||||
{
|
||||
if ( StateSucc1->USER != StateSucc2->USER )
|
||||
{
|
||||
FspPrintf( stdout, "Output conflicts between \"%s\" and \"%s\"\n",
|
||||
StateSucc1->NAME, StateSucc2->NAME );
|
||||
|
||||
if ( FspFlagDebug )
|
||||
{
|
||||
addbddcircuitout( (bddcircuit *)0, "conflict1", StateSucc1->USER );
|
||||
addbddcircuitout( (bddcircuit *)0, "conflict2", StateSucc2->USER );
|
||||
|
||||
testbddcircuit( (bddcircuit *)0 );
|
||||
}
|
||||
|
||||
Error = 1;
|
||||
}
|
||||
|
||||
FspAddState( StateSucc1, StateSucc2 );
|
||||
Element = addauth2elem( HashTable, (char *)StateSucc1, (char *)StateSucc2, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
destroyauth2table( HashTable );
|
||||
FspFreeState();
|
||||
|
||||
return( Error );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspVerifyInputOutput |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
int FspVerifyInputOutput( FsmFigure1, FsmFigure2 )
|
||||
|
||||
fsmfig_list *FsmFigure1;
|
||||
fsmfig_list *FsmFigure2;
|
||||
{
|
||||
fsmin_list *ScanIn;
|
||||
fsmout_list *ScanOut;
|
||||
authtable *HashTable;
|
||||
|
||||
if ( ( FsmFigure1->NUMBER_IN != FsmFigure2->NUMBER_IN ) ||
|
||||
( FsmFigure2->NUMBER_OUT != FsmFigure2->NUMBER_OUT ) )
|
||||
{
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
HashTable = createauthtable( FsmFigure1->NUMBER_IN << 1 );
|
||||
|
||||
for ( ScanIn = FsmFigure1->IN;
|
||||
ScanIn != (fsmin_list *)0;
|
||||
ScanIn = ScanIn->NEXT )
|
||||
{
|
||||
addauthelem( HashTable, ScanIn->NAME, 0 );
|
||||
}
|
||||
|
||||
for ( ScanIn = FsmFigure2->IN;
|
||||
ScanIn != (fsmin_list *)0;
|
||||
ScanIn = ScanIn->NEXT )
|
||||
{
|
||||
addauthelem( HashTable, ScanIn->NAME, 0 );
|
||||
}
|
||||
|
||||
if ( ( HashTable->NUMBER_ELEM == FsmFigure1->NUMBER_IN ) &&
|
||||
( HashTable->NUMBER_ELEM == FsmFigure2->NUMBER_IN ) )
|
||||
{
|
||||
destroyauthtable( HashTable );
|
||||
HashTable = createauthtable( FsmFigure1->NUMBER_OUT << 1 );
|
||||
|
||||
for ( ScanOut = FsmFigure1->OUT;
|
||||
ScanOut != (fsmout_list *)0;
|
||||
ScanOut = ScanOut->NEXT )
|
||||
{
|
||||
addauthelem( HashTable, ScanOut->NAME, 0 );
|
||||
}
|
||||
|
||||
for ( ScanOut = FsmFigure2->OUT;
|
||||
ScanOut != (fsmout_list *)0;
|
||||
ScanOut = ScanOut->NEXT )
|
||||
{
|
||||
addauthelem( HashTable, ScanOut->NAME, 0 );
|
||||
}
|
||||
|
||||
if ( ( HashTable->NUMBER_ELEM == FsmFigure1->NUMBER_OUT ) &&
|
||||
( HashTable->NUMBER_ELEM == FsmFigure2->NUMBER_OUT ) )
|
||||
{
|
||||
destroyauthtable( HashTable );
|
||||
|
||||
return( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
destroyauthtable( HashTable );
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspMakeBddNode |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void FspMakeBddNode( FsmFigure )
|
||||
|
||||
fsmfig_list *FsmFigure;
|
||||
{
|
||||
fsmstate_list *ScanState;
|
||||
fsmlocout_list *ScanLocout;
|
||||
fsmtrans_list *ScanTrans;
|
||||
bddnode *BddNode;
|
||||
bddnode *BddNodeOut;
|
||||
bddnode *BddNodeLocOn;
|
||||
bddnode *BddNodeLocOff;
|
||||
bddnode *BddNodeLocDc;
|
||||
bddnode *BddNodeLocout;
|
||||
|
||||
for ( ScanTrans = FsmFigure->TRANS;
|
||||
ScanTrans != (fsmtrans_list *)0;
|
||||
ScanTrans = ScanTrans->NEXT )
|
||||
{
|
||||
ScanTrans->BDD = addbddcircuitabl( (bddcircuit *)0, ScanTrans->ABL );
|
||||
}
|
||||
|
||||
for ( ScanState = FsmFigure->STATE;
|
||||
ScanState != (fsmstate_list *)0;
|
||||
ScanState = ScanState->NEXT )
|
||||
{
|
||||
BddNode = BddLocalSystem->ONE;
|
||||
|
||||
for ( ScanLocout = ScanState->LOCOUT;
|
||||
ScanLocout != (fsmlocout_list *)0;
|
||||
ScanLocout = ScanLocout->NEXT )
|
||||
{
|
||||
BddNodeOut = searchbddcircuitin( (bddcircuit *)0, ScanLocout->OUT->NAME );
|
||||
|
||||
if ( ScanLocout->ABL != (chain_list *)0 )
|
||||
{
|
||||
BddNodeLocOn = addbddcircuitabl( (bddcircuit *)0, ScanLocout->ABL );
|
||||
}
|
||||
else
|
||||
{
|
||||
BddNodeLocOn = BddLocalSystem->ZERO;
|
||||
}
|
||||
|
||||
if ( ScanLocout->ABL_DC != (chain_list *)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;
|
||||
}
|
||||
|
||||
# ifdef DEBUG
|
||||
testbddcircuit( (bddcircuit *)0 );
|
||||
# endif
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspMakeBddCircuit |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
bddcircuit *FspMakeBddCircuit( FsmFigure1, FsmFigure2, BddSystem )
|
||||
|
||||
fsmfig_list *FsmFigure1;
|
||||
fsmfig_list *FsmFigure2;
|
||||
bddsystem *BddSystem;
|
||||
{
|
||||
fsmin_list *ScanIn;
|
||||
fsmout_list *ScanOut;
|
||||
bddcircuit *BddCircuit;
|
||||
|
||||
BddCircuit = createbddcircuit( FsmFigure1->NAME,
|
||||
FsmFigure1->NUMBER_IN + FsmFigure1->NUMBER_OUT,
|
||||
FsmFigure1->NUMBER_STATE, BddSystem );
|
||||
|
||||
for ( ScanIn = FsmFigure1->IN;
|
||||
ScanIn != (fsmin_list *)0;
|
||||
ScanIn = ScanIn->NEXT )
|
||||
{
|
||||
addbddcircuitin( (bddcircuit *)0, ScanIn->NAME,
|
||||
(bddindex )0, BDD_IN_MODE_LAST );
|
||||
}
|
||||
|
||||
for ( ScanOut = FsmFigure1->OUT;
|
||||
ScanOut != (fsmout_list *)0;
|
||||
ScanOut = ScanOut->NEXT )
|
||||
{
|
||||
addbddcircuitin( (bddcircuit *)0, ScanOut->NAME,
|
||||
(bddindex )0, BDD_IN_MODE_LAST );
|
||||
}
|
||||
|
||||
FsmFigure1->CIRCUIT = BddCircuit;
|
||||
FsmFigure2->CIRCUIT = BddCircuit;
|
||||
|
||||
FspMakeBddNode( FsmFigure1 );
|
||||
FspMakeBddNode( FsmFigure2 );
|
||||
|
||||
return( BddCircuit );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| FspFormalProof |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
int FspFormalProof( FsmFigure1, FsmFigure2, FlagDebug )
|
||||
|
||||
fsmfig_list *FsmFigure1;
|
||||
fsmfig_list *FsmFigure2;
|
||||
int FlagDebug;
|
||||
{
|
||||
bddsystem *BddSystem;
|
||||
bddcircuit *BddCircuit;
|
||||
int Error;
|
||||
|
||||
FspFlagDebug = FlagDebug;
|
||||
|
||||
if ( FsmFigure1->STACK != (fsmstack_list *)0 )
|
||||
{
|
||||
FspPrintf( stdout, "Error unable to treat FSM with stack !\n" );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
if ( FsmFigure2->STACK != (fsmstack_list *)0 )
|
||||
{
|
||||
FspPrintf( stdout, "Error unable to treat FSM with stack !\n" );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
if ( FsmFigure1->FIRST_STATE == (fsmstate_list *)0 )
|
||||
{
|
||||
FspPrintf( stdout, "Error missing first state in %s !\n", FsmFigure1->NAME );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
if ( FsmFigure2->FIRST_STATE == (fsmstate_list *)0 )
|
||||
{
|
||||
FspPrintf( stdout, "Error missing first state in %s !\n", FsmFigure2->NAME );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
if ( ! FspVerifyInputOutput( FsmFigure1, FsmFigure2 ) )
|
||||
{
|
||||
FspPrintf( stdout, "Error port mismatch between %s and %s\n\n",
|
||||
FsmFigure1->NAME, FsmFigure2->NAME );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
FspExplodeStarState( FsmFigure1 );
|
||||
FspExplodeStarState( FsmFigure2 );
|
||||
|
||||
BddSystem = createbddsystem( 100, 1000, 1000, 900000 );
|
||||
SetBddSystemNoWarning( BddSystem );
|
||||
reorderbddsystemdynamic( BddSystem, reorderbddsystemsimple, 100000, 50 );
|
||||
BddCircuit = FspMakeBddCircuit( FsmFigure1, FsmFigure2, BddSystem );
|
||||
|
||||
Error = FspProduct( FsmFigure1, FsmFigure2 );
|
||||
|
||||
destroybddsystem( BddSystem );
|
||||
destroybddcircuit( BddCircuit );
|
||||
|
||||
return( ! Error );
|
||||
}
|
|
@ -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 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 : FSP |
|
||||
| |
|
||||
| File : fsp_proof.h |
|
||||
| |
|
||||
| Author : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 01.11.94 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# ifndef FSP_PROOF_H
|
||||
# define FSP_PROOF_H
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Macro |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
typedef struct fspstate_list
|
||||
{
|
||||
struct fspstate_list *NEXT;
|
||||
struct fsmstate_list *STATE1;
|
||||
struct fsmstate_list *STATE2;
|
||||
|
||||
} fspstate_list;
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
extern int FspFormalProof();
|
||||
|
||||
# endif
|
Loading…
Reference in New Issue