You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							187 lines
						
					
					
						
							7.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							187 lines
						
					
					
						
							7.8 KiB
						
					
					
				
								/**CHeaderFile*****************************************************************
							 | 
						|
								
							 | 
						|
								  FileName    [bnet.h]
							 | 
						|
								
							 | 
						|
								  PackageName [bnet]
							 | 
						|
								
							 | 
						|
								  Synopsis    [Simple-minded package to read a blif file.]
							 | 
						|
								
							 | 
						|
								  Description []
							 | 
						|
								
							 | 
						|
								  SeeAlso     []
							 | 
						|
								
							 | 
						|
								  Author      [Fabio Somenzi]
							 | 
						|
								
							 | 
						|
								  Copyright   [Copyright (c) 1995-2012, Regents of the University of Colorado
							 | 
						|
								
							 | 
						|
								  All rights reserved.
							 | 
						|
								
							 | 
						|
								  Redistribution and use in source and binary forms, with or without
							 | 
						|
								  modification, are permitted provided that the following conditions
							 | 
						|
								  are met:
							 | 
						|
								
							 | 
						|
								  Redistributions of source code must retain the above copyright
							 | 
						|
								  notice, this list of conditions and the following disclaimer.
							 | 
						|
								
							 | 
						|
								  Redistributions in binary form must reproduce the above copyright
							 | 
						|
								  notice, this list of conditions and the following disclaimer in the
							 | 
						|
								  documentation and/or other materials provided with the distribution.
							 | 
						|
								
							 | 
						|
								  Neither the name of the University of Colorado nor the names of its
							 | 
						|
								  contributors may be used to endorse or promote products derived from
							 | 
						|
								  this software without specific prior written permission.
							 | 
						|
								
							 | 
						|
								  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
							 | 
						|
								  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
							 | 
						|
								  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
							 | 
						|
								  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
							 | 
						|
								  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
							 | 
						|
								  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
							 | 
						|
								  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
							 | 
						|
								  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
							 | 
						|
								  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
							 | 
						|
								  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
							 | 
						|
								  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
							 | 
						|
								  POSSIBILITY OF SUCH DAMAGE.]
							 | 
						|
								
							 | 
						|
								  Revision    [$Id: bnet.h,v 1.13 2012/02/05 01:53:01 fabio Exp fabio $]
							 | 
						|
								
							 | 
						|
								******************************************************************************/
							 | 
						|
								
							 | 
						|
								#ifndef _BNET
							 | 
						|
								#define _BNET
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Nested includes                                                           */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								#include "util.h"
							 | 
						|
								#include "st.h"
							 | 
						|
								#include "cudd.h"
							 | 
						|
								
							 | 
						|
								#ifdef __cplusplus
							 | 
						|
								extern "C" {
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Constant declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/* Different types of nodes. (Used in the "BnetNode" type.) */
							 | 
						|
								#define BNET_CONSTANT_NODE 0
							 | 
						|
								#define BNET_INPUT_NODE 1
							 | 
						|
								#define BNET_PRESENT_STATE_NODE 2
							 | 
						|
								#define BNET_INTERNAL_NODE 3
							 | 
						|
								#define BNET_OUTPUT_NODE 4
							 | 
						|
								#define BNET_NEXT_STATE_NODE 5
							 | 
						|
								
							 | 
						|
								/* Type of DD of a node. */
							 | 
						|
								#define BNET_LOCAL_DD 0
							 | 
						|
								#define BNET_GLOBAL_DD 1
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Stucture declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Type declarations                                                         */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/* The following types implement a very simple data structure for a boolean
							 | 
						|
								** network. The intent is to be able to read a minimal subset of the blif
							 | 
						|
								** format in a data structure from which it's easy to build DDs for the
							 | 
						|
								** circuit.
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								/* Type to store a line of the truth table of a node. The entire truth table
							 | 
						|
								** implemented as a linked list of objects of this type.
							 | 
						|
								*/
							 | 
						|
								typedef struct BnetTabline {
							 | 
						|
								    char *values;		/* string of 1, 0, and - */
							 | 
						|
								    struct BnetTabline *next;	/* pointer to next table line */
							 | 
						|
								} BnetTabline;
							 | 
						|
								
							 | 
						|
								/* Node of the boolean network. There is one node in the network for each
							 | 
						|
								** primary input and for each .names directive. This structure
							 | 
						|
								** has a field to point to the DD of the node function. The function may
							 | 
						|
								** be either in terms of primary inputs, or it may be in terms of the local
							 | 
						|
								** inputs. The latter implies that each node has a variable index
							 | 
						|
								** associated to it at some point in time. The field "var" stores that
							 | 
						|
								** variable index, and "active" says if the association is currently valid.
							 | 
						|
								** (It is indeed possible for an index to be associated to different nodes
							 | 
						|
								** at different times.)
							 | 
						|
								*/
							 | 
						|
								typedef struct BnetNode {
							 | 
						|
								    char *name;		/* name of the output signal */
							 | 
						|
								    int type;		/* input, internal, constant, ... */
							 | 
						|
								    int ninp;		/* number of inputs to the node */
							 | 
						|
								    int nfo;		/* number of fanout nodes for this node */
							 | 
						|
								    char **inputs;	/* input names */
							 | 
						|
								    BnetTabline *f;	/* truth table for this node */
							 | 
						|
								    int polarity;	/* f is the onset (0) or the offset (1) */
							 | 
						|
								    int active;		/* node has variable associated to it (1) or not (0) */
							 | 
						|
								    int var;		/* DD variable index associated to this node */
							 | 
						|
								    DdNode *dd;		/* decision diagram for the function of this node */
							 | 
						|
								    int exdc_flag;	/* whether an exdc node or not */
							 | 
						|
								    struct BnetNode *exdc; /* pointer to exdc of dd node */
							 | 
						|
								    int count;		/* auxiliary field for DD dropping */
							 | 
						|
								    int level;		/* maximum distance from the inputs */
							 | 
						|
								    int visited;	/* flag for search */
							 | 
						|
								    struct BnetNode *next; /* pointer to implement the linked list of nodes */
							 | 
						|
								} BnetNode;
							 | 
						|
								
							 | 
						|
								/* Very simple boolean network data structure. */
							 | 
						|
								typedef struct BnetNetwork {
							 | 
						|
								    char *name;		/* network name: from the .model directive */
							 | 
						|
								    int npis;		/* number of primary inputs */
							 | 
						|
								    int ninputs;	/* number of inputs */
							 | 
						|
								    char **inputs;	/* primary input names: from the .inputs directive */
							 | 
						|
								    int npos;		/* number of primary outputs */
							 | 
						|
								    int noutputs;	/* number of outputs */
							 | 
						|
								    char **outputs;	/* primary output names: from the .outputs directive */
							 | 
						|
								    int nlatches;	/* number of latches */
							 | 
						|
								    char ***latches;	/* next state names: from the .latch directives */
							 | 
						|
								    BnetNode *nodes;	/* linked list of the nodes */
							 | 
						|
								    st_table *hash;	/* symbol table to access nodes by name */
							 | 
						|
								    char *slope;	/* wire_load_slope */
							 | 
						|
								} BnetNetwork;
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Variable declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Macro declarations                                                        */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								#ifndef TRUE
							 | 
						|
								#   define TRUE 1
							 | 
						|
								#endif
							 | 
						|
								#ifndef FALSE
							 | 
						|
								#   define FALSE 0
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								/**AutomaticStart*************************************************************/
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Function prototypes                                                       */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								extern BnetNetwork * Bnet_ReadNetwork (FILE *fp, int pr);
							 | 
						|
								extern void Bnet_PrintNetwork (BnetNetwork *net);
							 | 
						|
								extern void Bnet_FreeNetwork (BnetNetwork *net);
							 | 
						|
								extern int Bnet_BuildNodeBDD (DdManager *dd, BnetNode *nd, st_table *hash, int params, int nodrop);
							 | 
						|
								extern int Bnet_DfsVariableOrder (DdManager *dd, BnetNetwork *net);
							 | 
						|
								extern int Bnet_bddDump (DdManager *dd, BnetNetwork *network, char *dfile, int dumpFmt, int reencoded);
							 | 
						|
								extern int Bnet_bddArrayDump (DdManager *dd, BnetNetwork *network, char *dfile, DdNode **outputs, char **onames, int noutputs, int dumpFmt);
							 | 
						|
								extern int Bnet_ReadOrder (DdManager *dd, char *ordFile, BnetNetwork *net, int locGlob, int nodrop);
							 | 
						|
								extern int Bnet_PrintOrder (BnetNetwork * net, DdManager *dd);
							 | 
						|
								
							 | 
						|
								/**AutomaticEnd***************************************************************/
							 | 
						|
								
							 | 
						|
								#ifdef __cplusplus
							 | 
						|
								} /* end of extern "C" */
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								#endif /* _BNET */
							 |