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 */
 |