Hello ABT
This commit is contained in:
parent
e3d36af11d
commit
b0da3afe7a
|
@ -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:05:32 ludo Exp $
|
||||||
|
dnl
|
||||||
|
dnl
|
||||||
|
AC_INIT(src/abt.h)
|
||||||
|
AM_INIT_AUTOMAKE(abt, 2.1)
|
||||||
|
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,8 @@
|
||||||
|
CFLAGS = @CFLAGS@ \
|
||||||
|
-DALLIANCE_TOP=\"${ALLIANCE_TOP}\"
|
||||||
|
lib_LIBRARIES = libAbt.a
|
||||||
|
include_HEADERS = abt.h
|
||||||
|
libAbt_a_SOURCES = \
|
||||||
|
abt.h bhl_depend.c bhl_freabl.c bhl_makgex.c \
|
||||||
|
bhl_delaux.c bhl_error.c bhl_makbdd.c bhl_orderbdd.c \
|
||||||
|
bhl_delaux.h bhl_error.h bhl_makbdd.h bhl_orderbdd.h
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* */
|
||||||
|
/* file : bhl200.h */
|
||||||
|
/* date : Feb 15 1995 */
|
||||||
|
/* version : v200 */
|
||||||
|
/* author : Pirouz BAZARGAN SABET */
|
||||||
|
/* contents : defines and structure definitions used in BHL library */
|
||||||
|
/* */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
#ifndef ABT_BHLDEF
|
||||||
|
#define ABT_BHLDEF
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* defines */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* structure definitions */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* functions */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
extern void beh_debug ();
|
||||||
|
extern void beh_makbdd ();
|
||||||
|
extern void beh_makgex ();
|
||||||
|
extern void beh_freabl ();
|
||||||
|
extern struct chain *beh_depend ();
|
||||||
|
extern void beh_delauxabl ();
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,404 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_delaux.c |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "abe.h"
|
||||||
|
# include "abt.h"
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "bhl_error.h"
|
||||||
|
# include "bhl_delaux.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static chain_list *BhlHeadName = (chain_list *)0;
|
||||||
|
static befig_list *BhlBehFigure = (befig_list *)0;
|
||||||
|
static char *BhlDelayedName = (char *)0;
|
||||||
|
static authtable *BhlHashTableInput = (authtable *)0;
|
||||||
|
static authtable *BhlHashTableAux = (authtable *)0;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Bhl DelAux Expr |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static chain_list *bhl_delauxexpr( Expr )
|
||||||
|
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
char *AtomValue;
|
||||||
|
chain_list *FirstExpr;
|
||||||
|
beaux_list *ScanAux;
|
||||||
|
chain_list *ScanChain;
|
||||||
|
authelem *Element;
|
||||||
|
long Oper;
|
||||||
|
|
||||||
|
FirstExpr = Expr;
|
||||||
|
|
||||||
|
if ( Expr == (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_NULL_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
|
||||||
|
if ( ( AtomValue == ABL_ATOM_NAME_ONE ) ||
|
||||||
|
( AtomValue == ABL_ATOM_NAME_ZERO ) ||
|
||||||
|
( AtomValue == ABL_ATOM_NAME_DC ) )
|
||||||
|
{
|
||||||
|
return( FirstExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
Element = searchauthelem( BhlHashTableInput, AtomValue );
|
||||||
|
|
||||||
|
if ( Element != (authelem *)0 )
|
||||||
|
{
|
||||||
|
return( FirstExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanAux = BhlBehFigure->BEAUX;
|
||||||
|
ScanAux != (beaux_list *)0;
|
||||||
|
ScanAux = ScanAux->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanAux->NAME == AtomValue ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ScanAux == (beaux_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanChain = BhlHeadName;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanChain->DATA == AtomValue )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_LOOP_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Element = searchauthelem( BhlHashTableAux, AtomValue );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = addchain( BhlHeadName, AtomValue );
|
||||||
|
ScanAux->ABL = bhl_delauxexpr( ScanAux->ABL );
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
|
||||||
|
addauthelem( BhlHashTableAux, AtomValue, (long)ScanAux->ABL );
|
||||||
|
}
|
||||||
|
|
||||||
|
freeablexpr( FirstExpr );
|
||||||
|
return( dupablexpr( ScanAux->ABL ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
Oper = ABL_OPER( Expr );
|
||||||
|
Expr = ABL_CDR( Expr );
|
||||||
|
|
||||||
|
if ( Oper == ABL_NOT )
|
||||||
|
{
|
||||||
|
if ( ABL_CDR( Expr ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
ABL_CAR( Expr ) = bhl_delauxexpr( ABL_CAR( Expr ) );
|
||||||
|
|
||||||
|
return( FirstExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Oper == ABL_STABLE )
|
||||||
|
{
|
||||||
|
Expr = ABL_CAR( Expr );
|
||||||
|
|
||||||
|
if ( ! ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_ILLEGAL_STABLE_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
Element = searchauthelem( BhlHashTableInput, AtomValue );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlDelayedName = autresizeblock( BhlDelayedName, 0, strlen( AtomValue ) + 9 );
|
||||||
|
sprintf( BhlDelayedName, "%s'delayed", AtomValue );
|
||||||
|
AtomValue = namealloc( BhlDelayedName );
|
||||||
|
|
||||||
|
Element = searchauthelem( BhlHashTableInput, AtomValue );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( FirstExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( isablunaryoper( Oper ) ) ||
|
||||||
|
( ABL_CDR( Expr ) == (chain_list *)0 ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
ABL_CAR( Expr ) = bhl_delauxexpr( ABL_CAR( Expr ) );
|
||||||
|
|
||||||
|
while ( ( Expr = ABL_CDR( Expr ) ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
ABL_CAR( Expr ) = bhl_delauxexpr( ABL_CAR( Expr ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( FirstExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh DelAux Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static chain_list *bhl_delauxabl( Name, Expr )
|
||||||
|
|
||||||
|
char *Name;
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = addchain( BhlHeadName, Name );
|
||||||
|
}
|
||||||
|
|
||||||
|
Expr = bhl_delauxexpr( Expr );
|
||||||
|
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( Expr );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Del Aux Abl |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void beh_delauxabl( BehFigure )
|
||||||
|
|
||||||
|
befig_list *BehFigure;
|
||||||
|
{
|
||||||
|
struct berin *BehRin;
|
||||||
|
struct beaux *BehAux;
|
||||||
|
struct beaux *BehDly;
|
||||||
|
struct bemsg *BehMsg;
|
||||||
|
struct beout *BehOut;
|
||||||
|
struct bebus *BehBus;
|
||||||
|
struct bebux *BehBux;
|
||||||
|
struct bereg *BehReg;
|
||||||
|
struct biabl *BiAbl;
|
||||||
|
authelem *Element;
|
||||||
|
long NumberIn;
|
||||||
|
long NumberAux;
|
||||||
|
|
||||||
|
BhlBehFigure = BehFigure;
|
||||||
|
BhlHeadName = (chain_list *)0;
|
||||||
|
NumberIn = 1;
|
||||||
|
NumberAux = 1;
|
||||||
|
|
||||||
|
BehAux = BehFigure->BEAUX;
|
||||||
|
|
||||||
|
while ( BehAux != NULL )
|
||||||
|
{
|
||||||
|
BehFigure->BERIN = beh_rmvberin( BehFigure->BERIN, BehAux->NAME );
|
||||||
|
|
||||||
|
NumberAux = NumberAux + 1;
|
||||||
|
BehAux = BehAux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehRin = BehFigure->BERIN;
|
||||||
|
|
||||||
|
while ( BehRin != NULL )
|
||||||
|
{
|
||||||
|
NumberIn = NumberIn + 1;
|
||||||
|
BehRin = BehRin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlHashTableInput = createauthtable( NumberIn << 1 );
|
||||||
|
BhlHashTableAux = createauthtable( NumberAux << 1 );
|
||||||
|
|
||||||
|
BehRin = BehFigure->BERIN;
|
||||||
|
|
||||||
|
while ( BehRin != NULL )
|
||||||
|
{
|
||||||
|
addauthelem( BhlHashTableInput, BehRin->NAME, 0 );
|
||||||
|
|
||||||
|
BehRin = BehRin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehAux = BehFigure->BEAUX;
|
||||||
|
|
||||||
|
while ( BehAux != NULL )
|
||||||
|
{
|
||||||
|
Element = searchauthelem( BhlHashTableAux, BehAux->NAME );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
BehAux->ABL = bhl_delauxabl( BehAux->NAME, BehAux->ABL );
|
||||||
|
addauthelem( BhlHashTableAux, BehAux->NAME, (long)BehAux->ABL );
|
||||||
|
}
|
||||||
|
|
||||||
|
BehAux = BehAux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehDly = BehFigure->BEDLY;
|
||||||
|
|
||||||
|
while ( BehDly != NULL )
|
||||||
|
{
|
||||||
|
BehDly->ABL = bhl_delauxabl( BehDly->NAME, BehDly->ABL );
|
||||||
|
|
||||||
|
BehDly = BehDly->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehMsg = BehFigure->BEMSG;
|
||||||
|
|
||||||
|
while ( BehMsg != NULL )
|
||||||
|
{
|
||||||
|
BehMsg->ABL = bhl_delauxabl( (char *)0, BehMsg->ABL );
|
||||||
|
|
||||||
|
BehMsg = BehMsg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehOut = BehFigure->BEOUT;
|
||||||
|
|
||||||
|
while ( BehOut != NULL )
|
||||||
|
{
|
||||||
|
BehOut->ABL = bhl_delauxabl( BehOut->NAME, BehOut->ABL );
|
||||||
|
|
||||||
|
BehOut = BehOut->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehFigure->BEBUS;
|
||||||
|
|
||||||
|
while ( BehBus != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBus->BIABL;
|
||||||
|
|
||||||
|
while ( BiAbl != NULL )
|
||||||
|
{
|
||||||
|
BiAbl->CNDABL = bhl_delauxabl( (char *)0 , BiAbl->CNDABL );
|
||||||
|
BiAbl->VALABL = bhl_delauxabl( BehBus->NAME, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehBus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehFigure->BEBUX;
|
||||||
|
|
||||||
|
while ( BehBux != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBux->BIABL;
|
||||||
|
|
||||||
|
while (BiAbl != NULL)
|
||||||
|
{
|
||||||
|
BiAbl->CNDABL = bhl_delauxabl( (char *)0, BiAbl->CNDABL );
|
||||||
|
BiAbl->VALABL = bhl_delauxabl( (char *)0, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehBux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehFigure->BEREG;
|
||||||
|
|
||||||
|
while ( BehReg != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehReg->BIABL;
|
||||||
|
|
||||||
|
while (BiAbl != NULL)
|
||||||
|
{
|
||||||
|
BiAbl->CNDABL = bhl_delauxabl( (char *)0, BiAbl->CNDABL );
|
||||||
|
BiAbl->VALABL = bhl_delauxabl( (char *)0, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehReg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
destroyauthtable( BhlHashTableInput );
|
||||||
|
destroyauthtable( BhlHashTableAux );
|
||||||
|
|
||||||
|
beh_frebeaux( BehFigure->BEAUX );
|
||||||
|
BehFigure->BEAUX = (beaux_list *)NULL;
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_makbdd.h |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Pirouz Bazargan Sabet |
|
||||||
|
| |
|
||||||
|
| Modified by Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef BHL_MAKBDD_H
|
||||||
|
# define BHL_MAKBDD_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void beh_delauxabl();
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,399 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* */
|
||||||
|
/* file : beh_depend.c */
|
||||||
|
/* date : Apr 15 1995 */
|
||||||
|
/* version : v108 */
|
||||||
|
/* authors : Pirouz BAZARGAN SABET */
|
||||||
|
/* description : high level function */
|
||||||
|
/* */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "mut.h"
|
||||||
|
#include "aut.h"
|
||||||
|
#include "abl.h"
|
||||||
|
#include "bdd.h"
|
||||||
|
#include "abe.h"
|
||||||
|
|
||||||
|
static ht *rin_list = NULL;
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_terminals */
|
||||||
|
/* description : find the list of terminals for an expression */
|
||||||
|
/* called func. : beh_terminals, namealloc, addchain */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct chain *beh_terminals (pt_exp)
|
||||||
|
|
||||||
|
struct chain *pt_exp;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct chain *res_chain = NULL;
|
||||||
|
struct chain *tmp_chain = NULL;
|
||||||
|
struct chain *pt_opr ;
|
||||||
|
char *name ;
|
||||||
|
char buffer [128];
|
||||||
|
static char *str_z = NULL;
|
||||||
|
static char *str_o = NULL;
|
||||||
|
static char *str_d = NULL;
|
||||||
|
|
||||||
|
if (str_z == NULL)
|
||||||
|
{
|
||||||
|
str_z = namealloc ("'0'");
|
||||||
|
str_o = namealloc ("'1'");
|
||||||
|
str_d = namealloc ("'d'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pt_exp->NEXT != NULL)
|
||||||
|
{
|
||||||
|
if (((int) ((struct chain *) pt_exp->DATA)->DATA) == ABL_STABLE)
|
||||||
|
{
|
||||||
|
name = ((struct chain *) pt_exp->NEXT->DATA)->DATA;
|
||||||
|
res_chain = addchain (NULL, name);
|
||||||
|
sprintf (buffer, "%s'delayed", name);
|
||||||
|
name = namealloc (buffer);
|
||||||
|
res_chain = addchain (res_chain, name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pt_opr = pt_exp->NEXT;
|
||||||
|
while (pt_opr != NULL)
|
||||||
|
{
|
||||||
|
tmp_chain = beh_terminals (pt_opr->DATA);
|
||||||
|
res_chain = append (res_chain, tmp_chain);
|
||||||
|
pt_opr = pt_opr->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((pt_exp->DATA != str_z) && (pt_exp->DATA != str_o) &&
|
||||||
|
(pt_exp->DATA != str_d))
|
||||||
|
{
|
||||||
|
res_chain = addchain (NULL, pt_exp->DATA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (res_chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_expdepend */
|
||||||
|
/* description : find dependencies for an expression */
|
||||||
|
/* called func. : beh_terminals, gethtitem */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct chain *beh_expdepend (pt_fig, pt_exp)
|
||||||
|
|
||||||
|
struct befig *pt_fig;
|
||||||
|
struct chain *pt_exp;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct chain *res_chain = NULL;
|
||||||
|
int value ;
|
||||||
|
|
||||||
|
if (pt_fig->ERRFLG == 0)
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* if there is no error in the current figure, find the list */
|
||||||
|
/* of terminals for the expression */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
res_chain = beh_terminals (pt_exp);
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* scan the list of terminals to replace terminal names by */
|
||||||
|
/* pointer on the corresponding primary input (berin). */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
value = gethtitem (rin_list, res_chain->DATA);
|
||||||
|
|
||||||
|
if (value == EMPTYHT)
|
||||||
|
beh_error (3, res_chain->DATA);
|
||||||
|
else
|
||||||
|
res_chain->DATA = (void *) value ;
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return (res_chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_depend */
|
||||||
|
/* description : find dependencies between signals for a behavioural */
|
||||||
|
/* description. */
|
||||||
|
/* called func. : beh_expdepend, addht, addhtitem, addchain, freechain, */
|
||||||
|
/* append, delhtitem */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
void beh_depend (pt_fig)
|
||||||
|
|
||||||
|
struct befig *pt_fig;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct chain *res_chain = NULL;
|
||||||
|
struct beaux *pt_aux;
|
||||||
|
struct beaux *pt_dly;
|
||||||
|
struct bebux *pt_bux;
|
||||||
|
struct bereg *pt_reg;
|
||||||
|
struct bemsg *pt_msg;
|
||||||
|
struct berin *pt_rin;
|
||||||
|
struct beout *pt_out;
|
||||||
|
struct bebus *pt_bus;
|
||||||
|
struct biabl *pt_biabl;
|
||||||
|
unsigned int count = 0;
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* if there is no error in the current figure ... */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
if ((pt_fig != NULL) && (pt_fig->ERRFLG == 0))
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* initialize a hash table with inputs */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
pt_rin = pt_fig->BERIN;
|
||||||
|
while (pt_rin != NULL)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
pt_rin = pt_rin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pt_rin = pt_fig->BERIN;
|
||||||
|
|
||||||
|
if (pt_rin != NULL)
|
||||||
|
rin_list = addht (count);
|
||||||
|
|
||||||
|
while (pt_rin != NULL)
|
||||||
|
{
|
||||||
|
addhtitem (rin_list, pt_rin->NAME, (long)pt_rin);
|
||||||
|
pt_rin = pt_rin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process simple internal signals. */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
pt_aux = pt_fig->BEAUX;
|
||||||
|
while (pt_aux != NULL)
|
||||||
|
{
|
||||||
|
res_chain = beh_expdepend (pt_fig, pt_aux->ABL);
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->AUX_REF == NULL) || (pt_rin->AUX_REF->DATA != pt_aux))
|
||||||
|
pt_rin->AUX_REF = addchain (pt_rin->AUX_REF, pt_aux);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_aux = pt_aux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process delayed internal signals */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
pt_dly = pt_fig->BEDLY;
|
||||||
|
while (pt_dly != NULL)
|
||||||
|
{
|
||||||
|
res_chain = beh_expdepend (pt_fig, pt_dly->ABL);
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->DLY_REF == NULL) || (pt_rin->DLY_REF->DATA != pt_dly))
|
||||||
|
pt_rin->DLY_REF = addchain (pt_rin->DLY_REF, pt_dly);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_dly = pt_dly->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process simple ouputs. */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
pt_out = pt_fig->BEOUT;
|
||||||
|
while (pt_out != NULL)
|
||||||
|
{
|
||||||
|
res_chain = beh_expdepend (pt_fig, pt_out->ABL);
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->OUT_REF == NULL) || (pt_rin->OUT_REF->DATA != pt_out))
|
||||||
|
pt_rin->OUT_REF = addchain (pt_rin->OUT_REF, pt_out);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_out = pt_out->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process bussed ouputs. */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
res_chain = NULL;
|
||||||
|
pt_bus = pt_fig->BEBUS;
|
||||||
|
while (pt_bus != NULL)
|
||||||
|
{
|
||||||
|
pt_biabl = pt_bus->BIABL;
|
||||||
|
while (pt_biabl != NULL)
|
||||||
|
{
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->VALABL));
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->CNDABL));
|
||||||
|
pt_biabl = pt_biabl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->BUS_REF == NULL) || (pt_rin->BUS_REF->DATA != pt_bus))
|
||||||
|
pt_rin->BUS_REF = addchain (pt_rin->BUS_REF, pt_bus);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_bus = pt_bus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process bussed internal signals. */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
res_chain = NULL;
|
||||||
|
pt_bux = pt_fig->BEBUX;
|
||||||
|
while (pt_bux != NULL)
|
||||||
|
{
|
||||||
|
pt_biabl = pt_bux->BIABL;
|
||||||
|
while (pt_biabl != NULL)
|
||||||
|
{
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->VALABL));
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->CNDABL));
|
||||||
|
pt_biabl = pt_biabl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->BUX_REF == NULL) || (pt_rin->BUX_REF->DATA != pt_bux))
|
||||||
|
pt_rin->BUX_REF = addchain (pt_rin->BUX_REF, pt_bux);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_bux = pt_bux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process internal registers. */
|
||||||
|
/* check that the signal does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
res_chain = NULL;
|
||||||
|
pt_reg = pt_fig->BEREG;
|
||||||
|
while (pt_reg != NULL)
|
||||||
|
{
|
||||||
|
pt_biabl = pt_reg->BIABL;
|
||||||
|
while (pt_biabl != NULL)
|
||||||
|
{
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->VALABL));
|
||||||
|
res_chain = append (res_chain, beh_expdepend (pt_fig,pt_biabl->CNDABL));
|
||||||
|
pt_biabl = pt_biabl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->REG_REF == NULL) || (pt_rin->REG_REF->DATA != pt_reg))
|
||||||
|
pt_rin->REG_REF = addchain (pt_rin->REG_REF, pt_reg);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_reg = pt_reg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* process assert statements. */
|
||||||
|
/* check that the statement does not already belong to the */
|
||||||
|
/* dependency list before adding it to the list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
res_chain = NULL;
|
||||||
|
pt_msg = pt_fig->BEMSG;
|
||||||
|
while (pt_msg != NULL)
|
||||||
|
{
|
||||||
|
res_chain = beh_expdepend (pt_fig, pt_msg->ABL);
|
||||||
|
while (res_chain != NULL)
|
||||||
|
{
|
||||||
|
pt_rin = (struct berin *) res_chain->DATA;
|
||||||
|
|
||||||
|
if ((pt_rin->MSG_REF == NULL) || (pt_rin->MSG_REF->DATA != pt_msg))
|
||||||
|
pt_rin->MSG_REF = addchain (pt_rin->MSG_REF, pt_msg);
|
||||||
|
|
||||||
|
res_chain = res_chain->NEXT;
|
||||||
|
}
|
||||||
|
freechain (res_chain);
|
||||||
|
pt_msg = pt_msg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release hash tables and lists that they contain */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
if (pt_fig->BERIN != NULL)
|
||||||
|
delht(rin_list);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : Bhl Errors |
|
||||||
|
| |
|
||||||
|
| Authors : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <string.h>
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bhl_error.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void bhl_error( Error, Text, File, Line )
|
||||||
|
|
||||||
|
int Error;
|
||||||
|
char *Text;
|
||||||
|
char *File;
|
||||||
|
int Line;
|
||||||
|
{
|
||||||
|
char *Name;
|
||||||
|
|
||||||
|
Name = strdup( File );
|
||||||
|
Name[ strlen( File ) - 1 ] = '\0';
|
||||||
|
|
||||||
|
fprintf( stderr, "%s%d ", Name, Line );
|
||||||
|
|
||||||
|
switch( Error )
|
||||||
|
{
|
||||||
|
case BHL_EXPR_NULL_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "null expression !\n" );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BHL_EXPR_LOOP_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "combinatory loop on %s !\n", Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BHL_UNKNOWN_ATOM_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "unknown atom %s !\n", Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BHL_SIMPLIFY_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "cannot simplify internal signals\n" );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BHL_ILLEGAL_STABLE_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "illegal use of STABLE operator\n" );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BHL_OPERATOR_ERROR :
|
||||||
|
|
||||||
|
fprintf( stderr, "illegal use of operator %ld\n", (long)Text );
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
|
||||||
|
fprintf( stderr, "unknown internal error %d !\n", Error );
|
||||||
|
}
|
||||||
|
|
||||||
|
autexit( 1 );
|
||||||
|
}
|
|
@ -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. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Tool : Bhl |
|
||||||
|
| |
|
||||||
|
| File : Bhl Errors |
|
||||||
|
| |
|
||||||
|
| Authors : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef BHL_ERROR_H
|
||||||
|
# define BHL_ERROR_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define BHL_EXPR_NULL_ERROR 0
|
||||||
|
# define BHL_EXPR_LOOP_ERROR 1
|
||||||
|
# define BHL_UNKNOWN_ATOM_ERROR 2
|
||||||
|
# define BHL_SIMPLIFY_ERROR 3
|
||||||
|
# define BHL_ILLEGAL_STABLE_ERROR 4
|
||||||
|
# define BHL_OPERATOR_ERROR 5
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Macros |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# define bhlerror( E, V ) (bhl_error( (E), (V), __FILE__, __LINE__ ))
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void bhl_error();
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,205 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* */
|
||||||
|
/* file : beh_freabl.c */
|
||||||
|
/* date : Sep 9 1993 */
|
||||||
|
/* version : v106 */
|
||||||
|
/* authors : Pirouz BAZARGAN SABET */
|
||||||
|
/* description : high level function */
|
||||||
|
/* */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "mut.h"
|
||||||
|
#include "aut.h"
|
||||||
|
#include "abl.h"
|
||||||
|
#include "bdd.h"
|
||||||
|
#include "abe.h"
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_freabl */
|
||||||
|
/* description : free all ABLs in BEFIG structure */
|
||||||
|
/* called func. : freeablexpr */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
void beh_freabl (ptr_befig)
|
||||||
|
|
||||||
|
struct befig *ptr_befig; /* pointer on current BEFIG */
|
||||||
|
{
|
||||||
|
struct beaux *ptr_beaux;
|
||||||
|
struct bemsg *ptr_bemsg;
|
||||||
|
struct beout *ptr_beout;
|
||||||
|
struct bebus *ptr_bebus;
|
||||||
|
struct biabl *ptr_biabl;
|
||||||
|
struct bebux *ptr_bebux;
|
||||||
|
struct bereg *ptr_bereg;
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* check that the unit exists */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
if (ptr_befig != NULL)
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in simple internal signals' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_beaux = ptr_befig->BEAUX;
|
||||||
|
while (ptr_beaux != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_beaux->ABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_beaux->ABL);
|
||||||
|
ptr_beaux->ABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_beaux = ptr_beaux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in delayed signals' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_beaux = ptr_befig->BEDLY;
|
||||||
|
while (ptr_beaux != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_beaux->ABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_beaux->ABL);
|
||||||
|
ptr_beaux->ABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_beaux = ptr_beaux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in assertions' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bemsg = ptr_befig->BEMSG;
|
||||||
|
while (ptr_bemsg != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_bemsg->ABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_bemsg->ABL);
|
||||||
|
ptr_bemsg->ABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_bemsg = ptr_bemsg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in simple output ports' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_beout = ptr_befig->BEOUT;
|
||||||
|
while (ptr_beout != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_beout->ABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_beout->ABL);
|
||||||
|
ptr_beout->ABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_beout = ptr_beout->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in bussed output ports' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bebus = ptr_befig->BEBUS;
|
||||||
|
while (ptr_bebus != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bebus->BIABL;
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_biabl->CNDABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr(ptr_biabl->CNDABL);
|
||||||
|
ptr_biabl->CNDABL = NULL;
|
||||||
|
}
|
||||||
|
if (ptr_biabl->VALABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr(ptr_biabl->VALABL);
|
||||||
|
ptr_biabl->VALABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bebus = ptr_bebus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in bussed internal signals' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bebux = ptr_befig->BEBUX;
|
||||||
|
while (ptr_bebux != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bebux->BIABL;
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
if (ptr_biabl->CNDABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_biabl->CNDABL);
|
||||||
|
ptr_biabl->CNDABL = NULL;
|
||||||
|
}
|
||||||
|
if (ptr_biabl->VALABL != NULL)
|
||||||
|
{
|
||||||
|
freeablexpr (ptr_biabl->VALABL);
|
||||||
|
ptr_biabl->VALABL = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bebux = ptr_bebux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* release expression in internal registers' list */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bereg = ptr_befig->BEREG;
|
||||||
|
while (ptr_bereg != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bereg->BIABL;
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
if ( ptr_biabl->CNDABL != NULL )
|
||||||
|
{
|
||||||
|
freeablexpr(ptr_biabl->CNDABL);
|
||||||
|
ptr_biabl->CNDABL = NULL;
|
||||||
|
}
|
||||||
|
if ( ptr_biabl->VALABL != NULL )
|
||||||
|
{
|
||||||
|
freeablexpr(ptr_biabl->VALABL);
|
||||||
|
ptr_biabl->VALABL = NULL;
|
||||||
|
}
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bereg = ptr_bereg->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,494 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_makbdd.c |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Pirouz Bazargan Sabet |
|
||||||
|
| |
|
||||||
|
| Modified by Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bdd.h"
|
||||||
|
# include "abe.h"
|
||||||
|
# include "abt.h"
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "bhl_error.h"
|
||||||
|
# include "bhl_makbdd.h"
|
||||||
|
# include "bhl_orderbdd.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static chain_list *BhlHeadName = (chain_list *)0;
|
||||||
|
static befig_list *BhlBehFigure = (befig_list *)0;
|
||||||
|
static char *BhlDelayedName = (char *)0;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Bhl Abl 2 Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static bddnode *bhl_expr2bdd( Expr )
|
||||||
|
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
bddnode *BddNode;
|
||||||
|
bddnode *BddFirst;
|
||||||
|
char *AtomValue;
|
||||||
|
beaux_list *ScanAux;
|
||||||
|
chain_list *ScanChain;
|
||||||
|
long Oper;
|
||||||
|
int Negative;
|
||||||
|
|
||||||
|
if ( Expr == (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_NULL_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
|
||||||
|
if ( AtomValue == ABL_ATOM_NAME_ONE )
|
||||||
|
{
|
||||||
|
return( BddLocalSystem->ONE );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( AtomValue == ABL_ATOM_NAME_ZERO ) ||
|
||||||
|
( AtomValue == ABL_ATOM_NAME_DC ) )
|
||||||
|
{
|
||||||
|
return( BddLocalSystem->ZERO );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddNode = searchbddcircuitin( (bddcircuit *)0, AtomValue );
|
||||||
|
|
||||||
|
if ( BddNode != (bddnode *)0 )
|
||||||
|
{
|
||||||
|
return( incbddrefext( BddNode ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanAux = BhlBehFigure->BEAUX;
|
||||||
|
ScanAux != (beaux_list *)0;
|
||||||
|
ScanAux = ScanAux->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanAux->NAME == AtomValue ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ScanAux == (beaux_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanChain = BhlHeadName;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanChain->DATA == AtomValue )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_LOOP_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ScanAux->NODE == (void *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = addchain( BhlHeadName, AtomValue );
|
||||||
|
ScanAux->NODE = bhl_expr2bdd( ScanAux->ABL );
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( incbddrefext( ScanAux->NODE ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
Oper = ABL_OPER( Expr );
|
||||||
|
Expr = ABL_CDR( Expr );
|
||||||
|
|
||||||
|
if ( Oper == ABL_NOT )
|
||||||
|
{
|
||||||
|
if ( ABL_CDR( Expr ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddFirst = bhl_expr2bdd( ABL_CAR( Expr ) );
|
||||||
|
BddNode = applybddnodenot( (bddsystem *)0, decbddrefext( BddFirst ) );
|
||||||
|
|
||||||
|
return( BddNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Oper == ABL_STABLE )
|
||||||
|
{
|
||||||
|
Expr = ABL_CAR( Expr );
|
||||||
|
|
||||||
|
if ( ! ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_ILLEGAL_STABLE_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
BddFirst = searchbddcircuitin( (bddcircuit *)0, AtomValue );
|
||||||
|
|
||||||
|
if ( BddFirst == (bddnode *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlDelayedName = autresizeblock( BhlDelayedName, 0, strlen( AtomValue ) + 9 );
|
||||||
|
sprintf( BhlDelayedName, "%s'delayed", AtomValue );
|
||||||
|
AtomValue = namealloc( BhlDelayedName );
|
||||||
|
|
||||||
|
BddNode = searchbddcircuitin( (bddcircuit *)0, AtomValue );
|
||||||
|
|
||||||
|
if ( BddNode == (bddnode *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddNode = applybddnode( (bddsystem *)0, ABL_NXOR, BddNode, BddFirst );
|
||||||
|
|
||||||
|
return( BddNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( isablunaryoper( Oper ) ) ||
|
||||||
|
( ABL_CDR( Expr ) == (chain_list *)0 ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( getabloperpolar( Oper ) == ABL_POLAR_POSITIVE ) ||
|
||||||
|
( ABL_CDDR( Expr ) == (chain_list *)0 ) )
|
||||||
|
{
|
||||||
|
Negative = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Negative = 1;
|
||||||
|
Oper = getablopernot( Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddFirst = bhl_expr2bdd( ABL_CAR( Expr ) );
|
||||||
|
|
||||||
|
while ( ( Expr = ABL_CDR( Expr ) ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
BddNode = bhl_expr2bdd( ABL_CAR( Expr ) );
|
||||||
|
BddFirst = applybddnode( (bddsystem *)0, Oper,
|
||||||
|
decbddrefext( BddFirst ),
|
||||||
|
decbddrefext( BddNode ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Negative )
|
||||||
|
{
|
||||||
|
BddFirst = applybddnodenot( (bddsystem *)0,
|
||||||
|
decbddrefext( BddFirst ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( BddFirst );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Abl 2 Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static bddnode *bhl_abl2bdd( Name, Expr )
|
||||||
|
|
||||||
|
char *Name;
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
bddnode *BddNode;
|
||||||
|
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = addchain( BhlHeadName, Name );
|
||||||
|
}
|
||||||
|
|
||||||
|
BddNode = bhl_expr2bdd( Expr );
|
||||||
|
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
|
||||||
|
BddNode = addbddcircuitout( (bddcircuit *)0, Name, BddNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( BddNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Make Bdd Total |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void bhl_mbddtot( BehFigure )
|
||||||
|
|
||||||
|
befig_list *BehFigure;
|
||||||
|
{
|
||||||
|
struct beaux *BehAux;
|
||||||
|
struct beaux *BehDly;
|
||||||
|
struct bemsg *BehMsg;
|
||||||
|
struct beout *BehOut;
|
||||||
|
struct bebus *BehBus;
|
||||||
|
struct bebux *BehBux;
|
||||||
|
struct bereg *BehReg;
|
||||||
|
struct biabl *BiAbl;
|
||||||
|
struct binode *BiNode;
|
||||||
|
|
||||||
|
BhlBehFigure = BehFigure;
|
||||||
|
BhlHeadName = (chain_list *)0;
|
||||||
|
|
||||||
|
BehAux = BehFigure->BEAUX;
|
||||||
|
|
||||||
|
while ( BehAux != NULL )
|
||||||
|
{
|
||||||
|
if ( BehAux->NODE == NULL )
|
||||||
|
{
|
||||||
|
BehAux->NODE = bhl_abl2bdd( BehAux->NAME, BehAux->ABL );
|
||||||
|
}
|
||||||
|
BehAux = BehAux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehDly = BehFigure->BEDLY;
|
||||||
|
|
||||||
|
while ( BehDly != NULL )
|
||||||
|
{
|
||||||
|
if ( BehDly->NODE == NULL )
|
||||||
|
{
|
||||||
|
BehDly->NODE = bhl_abl2bdd( BehDly->NAME, BehDly->ABL );
|
||||||
|
}
|
||||||
|
BehDly = BehDly->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehMsg = BehFigure->BEMSG;
|
||||||
|
|
||||||
|
while ( BehMsg != NULL )
|
||||||
|
{
|
||||||
|
if ( BehMsg->NODE == NULL )
|
||||||
|
{
|
||||||
|
BehMsg->NODE = bhl_abl2bdd( (char *)0, BehMsg->ABL );
|
||||||
|
}
|
||||||
|
BehMsg = BehMsg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehOut = BehFigure->BEOUT;
|
||||||
|
|
||||||
|
while ( BehOut != NULL )
|
||||||
|
{
|
||||||
|
if ( BehOut->NODE == NULL )
|
||||||
|
{
|
||||||
|
BehOut->NODE = bhl_abl2bdd( BehOut->NAME, BehOut->ABL );
|
||||||
|
}
|
||||||
|
|
||||||
|
BehOut = BehOut->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehFigure->BEBUS;
|
||||||
|
|
||||||
|
while ( BehBus != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBus->BIABL;
|
||||||
|
BiNode = BehBus->BINODE;
|
||||||
|
|
||||||
|
while (BiAbl != NULL)
|
||||||
|
{
|
||||||
|
BiNode->CNDNODE = bhl_abl2bdd( (char *)0, BiAbl->CNDABL );
|
||||||
|
BiNode->VALNODE = bhl_abl2bdd( BehBus->NAME, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
BiNode = BiNode->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehBus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehFigure->BEBUX;
|
||||||
|
|
||||||
|
while ( BehBux != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBux->BIABL;
|
||||||
|
BiNode = BehBux->BINODE;
|
||||||
|
|
||||||
|
while ( BiAbl != NULL )
|
||||||
|
{
|
||||||
|
BiNode->CNDNODE = bhl_abl2bdd( (char *)0 , BiAbl->CNDABL );
|
||||||
|
BiNode->VALNODE = bhl_abl2bdd( BehBux->NAME, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
BiNode = BiNode->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehBux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehFigure->BEREG;
|
||||||
|
|
||||||
|
while ( BehReg != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehReg->BIABL;
|
||||||
|
BiNode = BehReg->BINODE;
|
||||||
|
|
||||||
|
while ( BiAbl != NULL )
|
||||||
|
{
|
||||||
|
BiNode->CNDNODE = bhl_abl2bdd( (char *)0 , BiAbl->CNDABL );
|
||||||
|
BiNode->VALNODE = bhl_abl2bdd( BehReg->NAME, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
BiNode = BiNode->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehReg->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Make Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void beh_makbdd( ptr_befig, aux_flag, order_flag )
|
||||||
|
|
||||||
|
befig_list *ptr_befig;
|
||||||
|
char aux_flag;
|
||||||
|
char order_flag;
|
||||||
|
{
|
||||||
|
berin_list *ptr_rin;
|
||||||
|
beaux_list *ptr_aux;
|
||||||
|
beout_list *ptr_out;
|
||||||
|
bebus_list *ptr_bus;
|
||||||
|
|
||||||
|
long count_rin = 1;
|
||||||
|
long count_out = 1;
|
||||||
|
|
||||||
|
if ( ! aux_flag )
|
||||||
|
{
|
||||||
|
if ( ptr_befig->BEDLY == NULL )
|
||||||
|
{
|
||||||
|
ptr_aux = ptr_befig->BEAUX;
|
||||||
|
while ( ptr_aux != NULL )
|
||||||
|
{
|
||||||
|
ptr_befig->BERIN = beh_rmvberin( ptr_befig->BERIN, ptr_aux->NAME );
|
||||||
|
ptr_aux = ptr_aux->NEXT;
|
||||||
|
count_out++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bhlerror( BHL_SIMPLIFY_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ptr_aux = ptr_befig->BEAUX;
|
||||||
|
while ( ptr_aux != NULL )
|
||||||
|
{
|
||||||
|
ptr_aux = ptr_aux->NEXT;
|
||||||
|
count_out++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr_rin = ptr_befig->BERIN;
|
||||||
|
while (ptr_rin != NULL)
|
||||||
|
{
|
||||||
|
ptr_rin = ptr_rin->NEXT;
|
||||||
|
count_rin++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr_out = ptr_befig->BEOUT;
|
||||||
|
while (ptr_out != NULL)
|
||||||
|
{
|
||||||
|
ptr_out = ptr_out->NEXT;
|
||||||
|
count_out++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr_bus = ptr_befig->BEBUS;
|
||||||
|
while (ptr_bus != NULL)
|
||||||
|
{
|
||||||
|
ptr_bus = ptr_bus->NEXT;
|
||||||
|
count_out++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr_befig->CIRCUI = createbddcircuit( ptr_befig->NAME,
|
||||||
|
count_rin, count_out, (bddsystem *)0 );
|
||||||
|
|
||||||
|
bhl_orderbdd( ptr_befig, aux_flag, order_flag );
|
||||||
|
|
||||||
|
bhl_mbddtot( ptr_befig );
|
||||||
|
|
||||||
|
if ( ! aux_flag )
|
||||||
|
{
|
||||||
|
ptr_aux = ptr_befig->BEAUX;
|
||||||
|
while ( ptr_aux != NULL )
|
||||||
|
{
|
||||||
|
if ( ptr_aux->NODE != (void *)0 )
|
||||||
|
{
|
||||||
|
decbddrefext( ptr_aux->NODE );
|
||||||
|
delbddcircuitout( (bddcircuit *)0, ptr_aux->NAME );
|
||||||
|
}
|
||||||
|
ptr_aux = ptr_aux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
beh_frebeaux( ptr_befig->BEAUX );
|
||||||
|
ptr_befig->BEAUX = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sweepbddsystem( (bddsystem *)0 );
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_makbdd.h |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Pirouz Bazargan Sabet |
|
||||||
|
| |
|
||||||
|
| Modified by Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef BHL_MAKBDD_H
|
||||||
|
# define BHL_MAKBDD_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# endif
|
|
@ -0,0 +1,758 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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. |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* */
|
||||||
|
/* file : beh_makgex.c */
|
||||||
|
/* date : Mar 20 1994 */
|
||||||
|
/* version : v108 */
|
||||||
|
/* authors : Xavier Picat */
|
||||||
|
/* description : high level function */
|
||||||
|
/* */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "mut.h"
|
||||||
|
#include "aut.h"
|
||||||
|
#include "abl.h"
|
||||||
|
#include "bdd.h"
|
||||||
|
#include "abe.h"
|
||||||
|
|
||||||
|
#define BEH_GEXBLK 256
|
||||||
|
|
||||||
|
static struct begex *BEH_GEXHED = NULL;
|
||||||
|
static ht *HashTable = NULL;
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_addgexex */
|
||||||
|
/* description : create a GEX expression */
|
||||||
|
/* called func. : mbkalloc */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct begex *beh_addgexex (oper, type)
|
||||||
|
|
||||||
|
unsigned int oper;
|
||||||
|
unsigned short type;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct begex *ptgex;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (BEH_GEXHED == NULL)
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* if there is no more structure allocate a new block */
|
||||||
|
/* (use OPERAND field to chain structures in a list) */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
BEH_GEXHED = mbkalloc (sizeof (struct begex) * BEH_GEXBLK);
|
||||||
|
|
||||||
|
ptgex = BEH_GEXHED;
|
||||||
|
for (i=1 ; i<BEH_GEXBLK ; i++)
|
||||||
|
{
|
||||||
|
ptgex->OPERAND = (struct chain *) (ptgex + 1);
|
||||||
|
ptgex++;
|
||||||
|
}
|
||||||
|
ptgex->OPERAND = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptgex = BEH_GEXHED;
|
||||||
|
BEH_GEXHED = (struct begex *) BEH_GEXHED->OPERAND;
|
||||||
|
|
||||||
|
ptgex->TERM = oper;
|
||||||
|
ptgex->TYPE = type;
|
||||||
|
ptgex->OPERAND = NULL;
|
||||||
|
|
||||||
|
return (ptgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_addterm */
|
||||||
|
/* description : create a GEX for a terminal. For each terminal there */
|
||||||
|
/* is a unique GEX */
|
||||||
|
/* called func. : beh_addgexex, mbkalloc, addchain */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct begex *beh_addterm (oper)
|
||||||
|
|
||||||
|
unsigned int oper;
|
||||||
|
|
||||||
|
{
|
||||||
|
static struct chain *term_tab = NULL;
|
||||||
|
static unsigned int bank_nbr = 0;
|
||||||
|
struct chain *tmp_chn = NULL;
|
||||||
|
struct begex *locl_tab;
|
||||||
|
unsigned int bank;
|
||||||
|
struct begex *resgex;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
bank = oper / 64;
|
||||||
|
if (bank >= bank_nbr)
|
||||||
|
{
|
||||||
|
for (i=bank_nbr ; i<=bank ; i++)
|
||||||
|
{
|
||||||
|
locl_tab = (struct begex *) mbkalloc (64 * sizeof (struct begex));
|
||||||
|
|
||||||
|
for (j=0 ; j<64 ; j++)
|
||||||
|
{
|
||||||
|
(locl_tab [j]).TERM = j + (i * 64);
|
||||||
|
(locl_tab [j]).TYPE = 0;
|
||||||
|
(locl_tab [j]).OPERAND = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (term_tab == NULL)
|
||||||
|
term_tab = addchain (NULL, locl_tab);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp_chn = term_tab;
|
||||||
|
while (tmp_chn->NEXT != NULL)
|
||||||
|
tmp_chn = tmp_chn->NEXT;
|
||||||
|
tmp_chn->NEXT = addchain (NULL, locl_tab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_nbr = bank + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp_chn = term_tab;
|
||||||
|
for (i=0 ; i<bank ; i++)
|
||||||
|
tmp_chn = tmp_chn->NEXT;
|
||||||
|
|
||||||
|
locl_tab = (struct begex *) tmp_chn->DATA;
|
||||||
|
|
||||||
|
resgex = & (locl_tab [oper % 64]);
|
||||||
|
|
||||||
|
return (resgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : mad_fregex */
|
||||||
|
/* description : release a GEX expression (excluding terminals) */
|
||||||
|
/* called func. : none */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
void mad_fregex (ptgex, mode)
|
||||||
|
|
||||||
|
struct begex *ptgex;
|
||||||
|
char mode ;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct chain *tmpchn;
|
||||||
|
|
||||||
|
if (ptgex != NULL)
|
||||||
|
{
|
||||||
|
if ((tmpchn = ptgex->OPERAND) != NULL)
|
||||||
|
{
|
||||||
|
if (mode == 'a')
|
||||||
|
{
|
||||||
|
while (tmpchn != NULL)
|
||||||
|
{
|
||||||
|
mad_fregex ((struct begex *) tmpchn->DATA, 'a');
|
||||||
|
tmpchn = tmpchn->NEXT;
|
||||||
|
}
|
||||||
|
freechain (ptgex->OPERAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptgex->OPERAND = (struct chain *) BEH_GEXHED;
|
||||||
|
BEH_GEXHED = ptgex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : flatgex */
|
||||||
|
/* description : flatten the top level of a complex expression */
|
||||||
|
/* called func. : mbkalloc */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct begex *flatgex (gexpnt)
|
||||||
|
|
||||||
|
struct begex *gexpnt;
|
||||||
|
|
||||||
|
{
|
||||||
|
int top_operator;
|
||||||
|
int operator;
|
||||||
|
struct chain *tmp_chn;
|
||||||
|
struct chain *cur_oper;
|
||||||
|
struct chain *oper_list = NULL;
|
||||||
|
struct begex *operand;
|
||||||
|
struct begex *resgex = gexpnt;
|
||||||
|
char flatflag = 0;
|
||||||
|
|
||||||
|
if ((gexpnt != NULL) && (gexpnt->OPERAND != NULL))
|
||||||
|
{
|
||||||
|
cur_oper = gexpnt->OPERAND;
|
||||||
|
|
||||||
|
while (cur_oper != NULL)
|
||||||
|
{
|
||||||
|
flatflag = 0;
|
||||||
|
top_operator = gexpnt->TERM;
|
||||||
|
operand = (struct begex *) cur_oper->DATA;
|
||||||
|
|
||||||
|
if (operand->OPERAND != NULL)
|
||||||
|
{
|
||||||
|
operator = operand->TERM;
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_OR :
|
||||||
|
if (top_operator == ABL_NOT)
|
||||||
|
{
|
||||||
|
gexpnt->TERM = ABL_NOR;
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((top_operator == ABL_OR) || (top_operator == ABL_NOR))
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ABL_AND :
|
||||||
|
if (top_operator == ABL_NOT)
|
||||||
|
{
|
||||||
|
gexpnt->TERM = ABL_NAND;
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((top_operator == ABL_AND) || (top_operator == ABL_NAND))
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ABL_XOR :
|
||||||
|
if (top_operator == ABL_NOT)
|
||||||
|
{
|
||||||
|
gexpnt->TERM = ABL_NXOR;
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((top_operator == ABL_XOR) || (top_operator == ABL_NXOR))
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ABL_NXOR :
|
||||||
|
if (top_operator == ABL_XOR)
|
||||||
|
{
|
||||||
|
gexpnt->TERM = ABL_NXOR;
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((top_operator == ABL_NXOR) || (top_operator == ABL_NOT))
|
||||||
|
{
|
||||||
|
gexpnt->TERM = ABL_XOR;
|
||||||
|
flatflag = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flatflag == 1)
|
||||||
|
{
|
||||||
|
tmp_chn = operand->OPERAND;
|
||||||
|
while (tmp_chn->NEXT != NULL)
|
||||||
|
tmp_chn = tmp_chn->NEXT;
|
||||||
|
|
||||||
|
tmp_chn->NEXT = oper_list;
|
||||||
|
oper_list = operand->OPERAND;
|
||||||
|
mad_fregex (operand, 'p');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
oper_list = addchain (oper_list, operand);
|
||||||
|
|
||||||
|
cur_oper = cur_oper->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
freechain (gexpnt->OPERAND);
|
||||||
|
|
||||||
|
gexpnt->OPERAND = oper_list;
|
||||||
|
resgex = gexpnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (resgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : rmvconst */
|
||||||
|
/* description : remove constantes that appear at the top level of a */
|
||||||
|
/* espression */
|
||||||
|
/* called func. : addchain, freechain, mad_fregex */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct begex *rmvconst (gexpnt)
|
||||||
|
|
||||||
|
struct begex *gexpnt;
|
||||||
|
|
||||||
|
{
|
||||||
|
struct begex *resgex;
|
||||||
|
struct begex *operand;
|
||||||
|
struct begex *gex_zero;
|
||||||
|
struct begex *gex_one ;
|
||||||
|
struct chain *new_oper = NULL;
|
||||||
|
struct chain *cur_oper;
|
||||||
|
struct chain *tmp_chn = NULL;
|
||||||
|
int operator;
|
||||||
|
char freflag = 0;
|
||||||
|
|
||||||
|
resgex = gexpnt;
|
||||||
|
gex_zero = beh_addterm (0);
|
||||||
|
gex_one = beh_addterm (1);
|
||||||
|
|
||||||
|
if (gexpnt != NULL)
|
||||||
|
{
|
||||||
|
if (gexpnt->OPERAND != NULL)
|
||||||
|
{
|
||||||
|
cur_oper = gexpnt->OPERAND;
|
||||||
|
|
||||||
|
while (cur_oper != NULL)
|
||||||
|
{
|
||||||
|
operator = gexpnt->TERM;
|
||||||
|
operand = (struct begex *) cur_oper->DATA;
|
||||||
|
freflag = 0;
|
||||||
|
|
||||||
|
if (operand == gex_zero)
|
||||||
|
{
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_AND :
|
||||||
|
freflag = 2; resgex = gex_zero; break;
|
||||||
|
case ABL_NAND :
|
||||||
|
case ABL_NOT :
|
||||||
|
freflag = 2; resgex = gex_one ; break;
|
||||||
|
case ABL_OR :
|
||||||
|
case ABL_XOR :
|
||||||
|
case ABL_NOR :
|
||||||
|
case ABL_NXOR :
|
||||||
|
freflag = 1; break;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operand == gex_one)
|
||||||
|
{
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_OR :
|
||||||
|
freflag = 2; resgex = gex_one ; break;
|
||||||
|
case ABL_NOR :
|
||||||
|
case ABL_NOT :
|
||||||
|
freflag = 2; resgex = gex_zero; break;
|
||||||
|
case ABL_NAND :
|
||||||
|
case ABL_AND :
|
||||||
|
freflag = 1; break;
|
||||||
|
break;
|
||||||
|
case ABL_XOR :
|
||||||
|
gexpnt->TERM = ABL_NXOR; freflag = 1; break;
|
||||||
|
break;
|
||||||
|
case ABL_NXOR :
|
||||||
|
gexpnt->TERM = ABL_XOR ; freflag = 1; break;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (freflag == 2)
|
||||||
|
{
|
||||||
|
mad_fregex (gexpnt);
|
||||||
|
freechain (new_oper);
|
||||||
|
gexpnt = NULL;
|
||||||
|
new_oper = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (freflag == 0)
|
||||||
|
new_oper = addchain (new_oper, cur_oper->DATA);
|
||||||
|
cur_oper = cur_oper->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gexpnt != NULL)
|
||||||
|
{
|
||||||
|
operator = gexpnt->TERM;
|
||||||
|
if (new_oper == NULL)
|
||||||
|
{
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_AND :
|
||||||
|
case ABL_NOR :
|
||||||
|
case ABL_NXOR :
|
||||||
|
resgex = gex_one ;
|
||||||
|
break;
|
||||||
|
case ABL_OR :
|
||||||
|
case ABL_XOR :
|
||||||
|
case ABL_NAND :
|
||||||
|
resgex = gex_zero;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mad_fregex (gexpnt);
|
||||||
|
gexpnt = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (new_oper->NEXT == NULL)
|
||||||
|
{
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_AND :
|
||||||
|
case ABL_OR :
|
||||||
|
case ABL_XOR :
|
||||||
|
resgex = (struct begex *) new_oper->DATA;
|
||||||
|
freechain (new_oper);
|
||||||
|
gexpnt = NULL;
|
||||||
|
new_oper = NULL;
|
||||||
|
break;
|
||||||
|
case ABL_NOR :
|
||||||
|
case ABL_NXOR :
|
||||||
|
case ABL_NAND :
|
||||||
|
case ABL_NOT :
|
||||||
|
tmp_chn = gexpnt->OPERAND;
|
||||||
|
gexpnt->OPERAND = new_oper;
|
||||||
|
gexpnt->TERM = ABL_NOT;
|
||||||
|
freechain (tmp_chn);
|
||||||
|
tmp_chn = NULL;
|
||||||
|
resgex = gexpnt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (resgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_abl2gex */
|
||||||
|
/* description : transform recursively abl in gex */
|
||||||
|
/* called func. : beh_toolbug, beh_abl2gex, gethtitem beh_addgexex, */
|
||||||
|
/* namealloc , addchain */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
static struct begex *beh_abl2gex (ptr_befig, expr)
|
||||||
|
|
||||||
|
struct befig *ptr_befig;
|
||||||
|
struct chain *expr;
|
||||||
|
|
||||||
|
{
|
||||||
|
char delayed [128];
|
||||||
|
static char *str_zero = NULL;
|
||||||
|
static char *str_dc = NULL;
|
||||||
|
static char *str_one = NULL;
|
||||||
|
struct begex *resgex ;
|
||||||
|
struct begex *gex_elt ;
|
||||||
|
struct chain *oper_list ;
|
||||||
|
struct chain *operand ;
|
||||||
|
char *term ;
|
||||||
|
long term_idx ;
|
||||||
|
long operator ;
|
||||||
|
|
||||||
|
if (expr == NULL)
|
||||||
|
beh_toolbug (103, "beh_abl2gex", NULL, 0);
|
||||||
|
|
||||||
|
if (str_zero == NULL)
|
||||||
|
{
|
||||||
|
str_zero = namealloc ("'0'");
|
||||||
|
str_dc = namealloc ("'d'");
|
||||||
|
str_one = namealloc ("'1'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expr->NEXT != NULL)
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* if the expression is not a terminal ... */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
operator = (long) ((struct chain *)expr->DATA)->DATA;
|
||||||
|
switch (operator)
|
||||||
|
{
|
||||||
|
case ABL_STABLE:
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* translate signal'stable into a logical expression. */
|
||||||
|
/* notice : */
|
||||||
|
/* signal'stable = not (signal xor signal'delayed) */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
resgex = beh_addgexex (ABL_NXOR, 0);
|
||||||
|
|
||||||
|
operand = (struct chain *) expr->NEXT->DATA;
|
||||||
|
|
||||||
|
if (operand->NEXT != NULL)
|
||||||
|
beh_toolbug (100, "beh_abl2gex", NULL, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
term = (char *) operand->DATA;
|
||||||
|
term_idx = gethtitem (HashTable, term);
|
||||||
|
|
||||||
|
if (term_idx == EMPTYHT)
|
||||||
|
beh_toolbug (101, "beh_abl2gex", term, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gex_elt = beh_addterm (term_idx);
|
||||||
|
|
||||||
|
resgex->OPERAND = addchain (NULL, gex_elt);
|
||||||
|
|
||||||
|
sprintf (delayed, "%s'delayed", term);
|
||||||
|
term = namealloc (delayed);
|
||||||
|
term_idx = gethtitem (HashTable, term);
|
||||||
|
|
||||||
|
if (term_idx == EMPTYHT)
|
||||||
|
beh_toolbug (101, "beh_abl2gex", term, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gex_elt = beh_addterm (term_idx);
|
||||||
|
resgex->OPERAND->NEXT = addchain (NULL, gex_elt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ABL_OR:
|
||||||
|
case ABL_AND:
|
||||||
|
case ABL_XOR:
|
||||||
|
case ABL_NOR:
|
||||||
|
case ABL_NAND:
|
||||||
|
case ABL_NXOR:
|
||||||
|
case ABL_NOT:
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* for other operator make the top level, then, translate */
|
||||||
|
/* each operand */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
resgex = beh_addgexex (operator, 0);
|
||||||
|
oper_list = expr->NEXT;
|
||||||
|
while (oper_list != NULL)
|
||||||
|
{
|
||||||
|
gex_elt = beh_abl2gex (ptr_befig, oper_list->DATA);
|
||||||
|
resgex->OPERAND = addchain (resgex->OPERAND, gex_elt);
|
||||||
|
oper_list = oper_list->NEXT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
beh_toolbug (102, "beh_abl2gex", NULL, operator);
|
||||||
|
}
|
||||||
|
|
||||||
|
resgex = rmvconst (resgex);
|
||||||
|
resgex = flatgex (resgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* if the expression is a terminal create a terminal gex */
|
||||||
|
/* with the index correspnding to the terminal */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
term = (char *) expr->DATA;
|
||||||
|
term_idx = gethtitem (HashTable, term);
|
||||||
|
if (term_idx == EMPTYHT)
|
||||||
|
{
|
||||||
|
if (expr->DATA == str_one)
|
||||||
|
resgex = beh_addterm (1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((expr->DATA == str_zero) || (expr->DATA == str_dc))
|
||||||
|
resgex = beh_addterm (0);
|
||||||
|
else
|
||||||
|
beh_toolbug (101, "beh_abl2gex", term, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
resgex = beh_addterm (term_idx);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return (resgex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
/* function : beh_makgex */
|
||||||
|
/* description : make gex for each signal of a befig structure */
|
||||||
|
/* called func. : beh_abl2gex, addht, addhtitem, delht */
|
||||||
|
/* ###--------------------------------------------------------------### */
|
||||||
|
|
||||||
|
void beh_makgex (ptr_befig, aux_flg, trace_flg)
|
||||||
|
|
||||||
|
struct befig *ptr_befig; /* befig containing expressions */
|
||||||
|
char aux_flg ; /* ignored */
|
||||||
|
char trace_flg; /* ignored */
|
||||||
|
|
||||||
|
{
|
||||||
|
struct beaux *ptr_beaux;
|
||||||
|
struct beaux *ptr_bedly;
|
||||||
|
struct bemsg *ptr_bemsg;
|
||||||
|
struct beout *ptr_beout;
|
||||||
|
struct bebus *ptr_bebus;
|
||||||
|
struct bebux *ptr_bebux;
|
||||||
|
struct bereg *ptr_bereg;
|
||||||
|
struct biabl *ptr_biabl;
|
||||||
|
struct binode *ptr_binode;
|
||||||
|
struct berin *ptr_rin;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* initialize hash table */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
i = 1;
|
||||||
|
ptr_rin = ptr_befig->BERIN;
|
||||||
|
|
||||||
|
while (ptr_rin != NULL)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
ptr_rin = ptr_rin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashTable = addht (i);
|
||||||
|
|
||||||
|
i = 2;
|
||||||
|
ptr_rin = ptr_befig->BERIN;
|
||||||
|
|
||||||
|
while (ptr_rin != NULL)
|
||||||
|
{
|
||||||
|
addhtitem (HashTable, ptr_rin->NAME, i);
|
||||||
|
i++;
|
||||||
|
ptr_rin = ptr_rin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each simple internal signal */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_beaux = ptr_befig->BEAUX;
|
||||||
|
while (ptr_beaux != NULL)
|
||||||
|
{
|
||||||
|
ptr_beaux->NODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_beaux->ABL);
|
||||||
|
ptr_beaux = ptr_beaux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each delayed internal signal */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bedly = ptr_befig->BEDLY;
|
||||||
|
while (ptr_bedly != NULL)
|
||||||
|
{
|
||||||
|
ptr_bedly->NODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_bedly->ABL);
|
||||||
|
ptr_bedly = ptr_bedly->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each assertion */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bemsg = ptr_befig->BEMSG;
|
||||||
|
while (ptr_bemsg != NULL)
|
||||||
|
{
|
||||||
|
ptr_bemsg->NODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_bemsg->ABL);
|
||||||
|
ptr_bemsg = ptr_bemsg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each simple output */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_beout = ptr_befig->BEOUT;
|
||||||
|
while (ptr_beout != NULL)
|
||||||
|
{
|
||||||
|
ptr_beout->NODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_beout->ABL);
|
||||||
|
ptr_beout = ptr_beout->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each bussed output */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bebus = ptr_befig->BEBUS;
|
||||||
|
while (ptr_bebus != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bebus->BIABL;
|
||||||
|
ptr_binode = ptr_bebus->BINODE;
|
||||||
|
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
ptr_binode->CNDNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->CNDABL);
|
||||||
|
ptr_binode->VALNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->VALABL);
|
||||||
|
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
ptr_binode = ptr_binode->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bebus = ptr_bebus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each bussed internal signal */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bebux = ptr_befig->BEBUX;
|
||||||
|
while (ptr_bebux != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bebux->BIABL;
|
||||||
|
ptr_binode = ptr_bebux->BINODE;
|
||||||
|
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
ptr_binode->CNDNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->CNDABL);
|
||||||
|
ptr_binode->VALNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->VALABL);
|
||||||
|
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
ptr_binode = ptr_binode->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bebux = ptr_bebux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
/* make a gex for each internal register */
|
||||||
|
/* ###------------------------------------------------------### */
|
||||||
|
|
||||||
|
ptr_bereg = ptr_befig->BEREG;
|
||||||
|
while (ptr_bereg != NULL)
|
||||||
|
{
|
||||||
|
ptr_biabl = ptr_bereg->BIABL;
|
||||||
|
ptr_binode = ptr_bereg->BINODE;
|
||||||
|
|
||||||
|
while (ptr_biabl != NULL)
|
||||||
|
{
|
||||||
|
ptr_binode->CNDNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->CNDABL);
|
||||||
|
ptr_binode->VALNODE = (bddnode *) beh_abl2gex (ptr_befig, ptr_biabl->VALABL);
|
||||||
|
|
||||||
|
ptr_biabl = ptr_biabl->NEXT;
|
||||||
|
ptr_binode = ptr_binode->NEXT;
|
||||||
|
}
|
||||||
|
ptr_bereg = ptr_bereg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
delht (HashTable);
|
||||||
|
}
|
|
@ -0,0 +1,437 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_orderbdd.c |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Include Files |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# include "mut.h"
|
||||||
|
# include "aut.h"
|
||||||
|
# include "abl.h"
|
||||||
|
# include "bdd.h"
|
||||||
|
# include "abe.h"
|
||||||
|
# include "abt.h"
|
||||||
|
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "bhl_error.h"
|
||||||
|
# include "bhl_orderbdd.h"
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static chain_list *BhlHeadName = (chain_list *)0;
|
||||||
|
static befig_list *BhlBehFigure = (befig_list *)0;
|
||||||
|
static char *BhlDelayedName = (char *)0;
|
||||||
|
static authtable *BhlHashTableOrder = (authtable *)0;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Bhl Order Expr Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void bhl_orderexprbdd( Expr )
|
||||||
|
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
char *AtomValue;
|
||||||
|
beaux_list *ScanAux;
|
||||||
|
chain_list *ScanChain;
|
||||||
|
authelem *Element;
|
||||||
|
long Oper;
|
||||||
|
|
||||||
|
if ( Expr == (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_NULL_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
|
||||||
|
if ( ( AtomValue == ABL_ATOM_NAME_ONE ) ||
|
||||||
|
( AtomValue == ABL_ATOM_NAME_ZERO ) ||
|
||||||
|
( AtomValue == ABL_ATOM_NAME_DC ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Element = searchauthelem( BhlHashTableOrder, AtomValue );
|
||||||
|
|
||||||
|
if ( Element != (authelem *)0 )
|
||||||
|
{
|
||||||
|
Element->VALUE++;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanAux = BhlBehFigure->BEAUX;
|
||||||
|
ScanAux != (beaux_list *)0;
|
||||||
|
ScanAux = ScanAux->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanAux->NAME == AtomValue ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ScanAux == (beaux_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ScanChain = BhlHeadName;
|
||||||
|
ScanChain != (chain_list *)0;
|
||||||
|
ScanChain = ScanChain->NEXT )
|
||||||
|
{
|
||||||
|
if ( ScanChain->DATA == AtomValue )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_EXPR_LOOP_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlHeadName = addchain( BhlHeadName, AtomValue );
|
||||||
|
bhl_orderexprbdd( ScanAux->ABL );
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Oper = ABL_OPER( Expr );
|
||||||
|
Expr = ABL_CDR( Expr );
|
||||||
|
|
||||||
|
if ( Oper == ABL_NOT )
|
||||||
|
{
|
||||||
|
if ( ABL_CDR( Expr ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
bhl_orderexprbdd( ABL_CAR( Expr ) );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Oper == ABL_STABLE )
|
||||||
|
{
|
||||||
|
Expr = ABL_CAR( Expr );
|
||||||
|
|
||||||
|
if ( ! ABL_ATOM( Expr ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_ILLEGAL_STABLE_ERROR, (char *)0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomValue = ABL_ATOM_VALUE( Expr );
|
||||||
|
Element = searchauthelem( BhlHashTableOrder, AtomValue );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlDelayedName = autresizeblock( BhlDelayedName, 0, strlen( AtomValue ) + 9 );
|
||||||
|
sprintf( BhlDelayedName, "%s'delayed", AtomValue );
|
||||||
|
AtomValue = namealloc( BhlDelayedName );
|
||||||
|
|
||||||
|
Element = searchauthelem( BhlHashTableOrder, AtomValue );
|
||||||
|
|
||||||
|
if ( Element == (authelem *)0 )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_UNKNOWN_ATOM_ERROR, AtomValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( isablunaryoper( Oper ) ) ||
|
||||||
|
( ABL_CDR( Expr ) == (chain_list *)0 ) )
|
||||||
|
{
|
||||||
|
bhlerror( BHL_OPERATOR_ERROR, Oper );
|
||||||
|
}
|
||||||
|
|
||||||
|
bhl_orderexprbdd( ABL_CAR( Expr ) );
|
||||||
|
|
||||||
|
while ( ( Expr = ABL_CDR( Expr ) ) != (chain_list *)0 )
|
||||||
|
{
|
||||||
|
bhl_orderexprbdd( ABL_CAR( Expr ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Order Bdd |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void bhl_orderablbdd( Name, Expr )
|
||||||
|
|
||||||
|
char *Name;
|
||||||
|
chain_list *Expr;
|
||||||
|
{
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = addchain( BhlHeadName, Name );
|
||||||
|
}
|
||||||
|
|
||||||
|
bhl_orderexprbdd( Expr );
|
||||||
|
|
||||||
|
if ( Name != (char *)0 )
|
||||||
|
{
|
||||||
|
BhlHeadName = delchain( BhlHeadName, BhlHeadName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Sort Compare |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static long bhl_sortcompare( ValueArray, Index1, Index2 )
|
||||||
|
|
||||||
|
authelem *ValueArray;
|
||||||
|
long Index1;
|
||||||
|
long Index2;
|
||||||
|
{
|
||||||
|
return( ValueArray[ Index1 ].VALUE -
|
||||||
|
ValueArray[ Index2 ].VALUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Beh Order Bdd Total |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void bhl_orderbdd( BehFigure, AuxFlag, OrderFlag )
|
||||||
|
|
||||||
|
befig_list *BehFigure;
|
||||||
|
int AuxFlag;
|
||||||
|
int OrderFlag;
|
||||||
|
{
|
||||||
|
struct berin *BehRin;
|
||||||
|
struct beaux *BehAux;
|
||||||
|
struct beaux *BehDly;
|
||||||
|
struct bemsg *BehMsg;
|
||||||
|
struct beout *BehOut;
|
||||||
|
struct bebus *BehBus;
|
||||||
|
struct bebux *BehBux;
|
||||||
|
struct bereg *BehReg;
|
||||||
|
struct biabl *BiAbl;
|
||||||
|
authelem *Element;
|
||||||
|
authelem *ValueArray;
|
||||||
|
long *IndexArray;
|
||||||
|
long SizeArray;
|
||||||
|
long Index;
|
||||||
|
long NumberIn;
|
||||||
|
bddindex BddIndex;
|
||||||
|
|
||||||
|
BhlBehFigure = BehFigure;
|
||||||
|
BhlHeadName = (chain_list *)0;
|
||||||
|
NumberIn = BehFigure->CIRCUI->NAME_IN_SIZE;
|
||||||
|
|
||||||
|
BehFigure->BERIN = (berin_list *)reverse( (chain_list*)BehFigure->BERIN );
|
||||||
|
BehRin = BehFigure->BERIN;
|
||||||
|
|
||||||
|
if ( ! OrderFlag )
|
||||||
|
{
|
||||||
|
while ( BehRin != NULL )
|
||||||
|
{
|
||||||
|
BddIndex = BddLocalCircuit->NUMBER_NAME_IN + BDD_INDEX_MIN;
|
||||||
|
|
||||||
|
addbddcircuitin( (bddcircuit *)0, BehRin->NAME, BddIndex,
|
||||||
|
BDD_IN_MODE_IMPOSE | BDD_IN_MODE_LAST );
|
||||||
|
|
||||||
|
BehRin = BehRin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehFigure->BERIN = (berin_list *)reverse( (chain_list*)BehFigure->BERIN );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BhlHashTableOrder = createauthtable( NumberIn << 1 );
|
||||||
|
|
||||||
|
while ( BehRin != NULL )
|
||||||
|
{
|
||||||
|
addauthelem( BhlHashTableOrder, BehRin->NAME, 0 );
|
||||||
|
|
||||||
|
BehRin = BehRin->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( AuxFlag )
|
||||||
|
{
|
||||||
|
BehAux = BehFigure->BEAUX;
|
||||||
|
|
||||||
|
while ( BehAux != NULL )
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( BehAux->NAME, BehAux->ABL );
|
||||||
|
|
||||||
|
BehAux = BehAux->NEXT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BehDly = BehFigure->BEDLY;
|
||||||
|
|
||||||
|
while ( BehDly != NULL )
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( BehDly->NAME, BehDly->ABL );
|
||||||
|
|
||||||
|
BehDly = BehDly->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehMsg = BehFigure->BEMSG;
|
||||||
|
|
||||||
|
while ( BehMsg != NULL )
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( (char *)0, BehMsg->ABL );
|
||||||
|
|
||||||
|
BehMsg = BehMsg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehOut = BehFigure->BEOUT;
|
||||||
|
|
||||||
|
while ( BehOut != NULL )
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( BehOut->NAME, BehOut->ABL );
|
||||||
|
|
||||||
|
BehOut = BehOut->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehFigure->BEBUS;
|
||||||
|
|
||||||
|
while ( BehBus != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBus->BIABL;
|
||||||
|
|
||||||
|
while ( BiAbl != NULL )
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( (char *)0 , BiAbl->CNDABL );
|
||||||
|
bhl_orderablbdd( BehBus->NAME, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBus = BehBus->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehFigure->BEBUX;
|
||||||
|
|
||||||
|
while ( BehBux != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehBux->BIABL;
|
||||||
|
|
||||||
|
while (BiAbl != NULL)
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( (char *)0, BiAbl->CNDABL );
|
||||||
|
bhl_orderablbdd( (char *)0, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehBux = BehBux->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehFigure->BEREG;
|
||||||
|
|
||||||
|
while ( BehReg != NULL )
|
||||||
|
{
|
||||||
|
BiAbl = BehReg->BIABL;
|
||||||
|
|
||||||
|
while (BiAbl != NULL)
|
||||||
|
{
|
||||||
|
bhl_orderablbdd( (char *)0, BiAbl->CNDABL );
|
||||||
|
bhl_orderablbdd( (char *)0, BiAbl->VALABL );
|
||||||
|
|
||||||
|
BiAbl = BiAbl->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehReg = BehReg->NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
BehRin = BehFigure->BERIN;
|
||||||
|
|
||||||
|
# ifdef BHL_ORDER_DEBUG
|
||||||
|
viewauthtable( BhlHashTableOrder, viewauthelem );
|
||||||
|
# endif
|
||||||
|
|
||||||
|
SizeArray = BhlHashTableOrder->TABLE_SIZE;
|
||||||
|
ValueArray = BhlHashTableOrder->TABLE;
|
||||||
|
IndexArray = (long *)autallocblock( sizeof( long ) * SizeArray );
|
||||||
|
|
||||||
|
sortautarray( ValueArray, IndexArray, SizeArray, bhl_sortcompare );
|
||||||
|
|
||||||
|
for ( Index = 0; Index < SizeArray; Index++ )
|
||||||
|
{
|
||||||
|
Element = &ValueArray[ IndexArray[ Index ] ];
|
||||||
|
|
||||||
|
if ( Element->KEY != AUT_HASH_KEY_EMPTY )
|
||||||
|
{
|
||||||
|
BddIndex = BddLocalCircuit->NUMBER_NAME_IN + BDD_INDEX_MIN;
|
||||||
|
|
||||||
|
addbddcircuitin( (bddcircuit *)0, Element->KEY, BddIndex,
|
||||||
|
BDD_IN_MODE_IMPOSE | BDD_IN_MODE_LAST );
|
||||||
|
|
||||||
|
# ifdef BHL_ORDER_DEBUG
|
||||||
|
fprintf( stdout, "Var: %s Order: %d\n",
|
||||||
|
Element->KEY, Element->VALUE );
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
autfreeblock( IndexArray );
|
||||||
|
destroyauthtable( BhlHashTableOrder );
|
||||||
|
|
||||||
|
BehFigure->BERIN = (berin_list *)reverse( (chain_list*)BehFigure->BERIN );
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| 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 : Bhl |
|
||||||
|
| |
|
||||||
|
| File : bhl_makbdd.h |
|
||||||
|
| |
|
||||||
|
| Date : 01.02.95 |
|
||||||
|
| |
|
||||||
|
| Author : Pirouz Bazargan Sabet |
|
||||||
|
| |
|
||||||
|
| Modified by Jacomme Ludovic |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
# ifndef BHL_ORDERBDD_H
|
||||||
|
# define BHL_ORDERBDD_H
|
||||||
|
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Constants |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Types |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Variables |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------\
|
||||||
|
| |
|
||||||
|
| Functions |
|
||||||
|
| |
|
||||||
|
\------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void bhl_orderbdd();
|
||||||
|
|
||||||
|
# endif
|
Loading…
Reference in New Issue