source: vis_dev/vis-2.3/src/tbl/tbl.h @ 36

Last change on this file since 36 was 14, checked in by cecile, 13 years ago

vis2.3

File size: 19.1 KB
Line 
1/**CHeaderFile*****************************************************************
2
3  FileName    [tbl.h]
4
5  PackageName [tbl]
6
7  Synopsis    [Routines for manipulating a multi-valued relation representation.]
8
9  Description [A Tbl_Table_t is a data structure that contains all the
10  information found in the blif_mv tables (refer to blif_mv document), and
11  represents a multivalued function or group of functions.
12  This can be thought of as a table with inputs and outputs, and the
13  entries in this table describe how the inputs are related to the outputs.
14
15  The entries in a table may be of two types: they are either a list of ranges
16  that contain values that an entry may take, or are set equal to some other
17  entry in the table. Notice that blif_mv files also have the complement
18  construct, which is absent in the table struct. There are functions for
19  complementing, and canonicalizing a  list of ranges]
20
21  SeeAlso     [tblInt.h, ntk.h]
22
23  Author      [ Gitanjali M. Swamy]
24
25  Copyright   [Copyright (c) 1994-1996 The Regents of the Univ. of California.
26  All rights reserved.
27
28  Permission is hereby granted, without written agreement and without license
29  or royalty fees, to use, copy, modify, and distribute this software and its
30  documentation for any purpose, provided that the above copyright notice and
31  the following two paragraphs appear in all copies of this software.
32
33  IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
34  DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
35  OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
36  CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
38  THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
39  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
40  FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN
41  "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE
42  MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.]
43
44  Revision    [$Id: tbl.h,v 1.15 2009/04/11 02:01:29 fabio Exp $]
45
46******************************************************************************/
47
48#ifndef _TBL
49#define _TBL
50#include "mvf.h"
51#include "mvfaig.h"
52
53/*---------------------------------------------------------------------------*/
54/* Constant declarations                                                         */
55/*---------------------------------------------------------------------------*/
56typedef enum {
57  Tbl_EntryEqual_c,
58  Tbl_EntryNormal_c,
59  Tbl_EntryUniverse_c,
60  Tbl_EntryUnassigned_c
61} Tbl_EntryType_t;
62
63/*---------------------------------------------------------------------------*/
64/* Type declarations                                                         */
65/*---------------------------------------------------------------------------*/
66typedef struct TblEntryStruct Tbl_Entry_t;
67typedef struct TblTableStruct Tbl_Table_t;
68typedef struct TblDataStruct Tbl_Data_t;
69typedef struct TblRowStruct Tbl_Row_t;
70typedef struct TblRangeStruct Tbl_Range_t;
71
72/*---------------------------------------------------------------------------*/
73/* Macro declarations                                                        */
74/*---------------------------------------------------------------------------*/
75
76/**Macro***********************************************************************
77
78  Synopsis     [ Generates all entries of  the table.  ]
79
80  Description  [ This is an iterator that generates all entries
81                 of the  table in smallest column first, smallest row first
82                 and input first order. This must be
83                 supplied with int colNum, rowNum,i (flag to indicate output
84                 or input,  and Tbl_Entry_t * entry]
85
86  SideEffects  [ ]
87
88  SeeAlso      [ Tbl_TableForeachOutputEntry]
89
90******************************************************************************/
91#define Tbl_TableForEachEntry(                                               \
92/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
93/* int          */ rowNum  /* The row number            */,                  \
94/* int          */ colNum  /* The column number         */,                  \
95/* int          */  i       /* The input output flag     */,                 \
96/* Tbl_Entry_t * */ entry   /* The table entry */                            \
97)                                                                            \
98for(rowNum=0;rowNum<Tbl_TableReadNumRows(table); rowNum++)\
99 for(i=0; i<2; i++)\
100 for(colNum=0; \
101    ((colNum< Tbl_TableReadNumVars(table,i))\
102     &&(entry=Tbl_TableReadEntry(table,rowNum,colNum,i))); colNum++)
103
104/**Macro***********************************************************************
105
106  Synopsis     [ Generates all input entries of  the table.  ]
107
108  Description  [ This is an iterator that generates all input entries
109                 of the  table in smallest column first, smallest row first
110                 order. This must be supplied with int colNum, rowNum,
111                 Tbl_Row_t *row, and Tbl_Entry_t * entry]
112
113  SideEffects  [ ]
114
115  SeeAlso      [ Tbl_TableForeachOutputEntry]
116
117******************************************************************************/
118#define Tbl_TableForEachInputEntry(                                          \
119/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
120/* int           */ rowNum  /* The row number            */,                 \
121/* int           */ colNum  /* The column number         */,                 \
122/* Tbl_Entry_t * */ entry   /* The table entry */                            \
123)                                                                            \
124 for(rowNum=0;rowNum<Tbl_TableReadNumRows(table); rowNum++)\
125 for(colNum=0; \
126    ((colNum< Tbl_TableReadNumVars(table,0))\
127     &&(entry=Tbl_TableReadEntry(table,rowNum,colNum,0))); colNum++)
128
129/**Macro***********************************************************************
130
131  Synopsis     [ Generates all output entries of  the table.  ]
132
133  Description  [ This is an iterator that generates all entries
134                 of the  table in smallest column first, smallest row first.
135                 This must be supplied with int colNum, rowNum, Tbl_Row_t *row, and
136                 Tbl_Entry_t * entry]
137
138  SideEffects  [ ]
139
140  SeeAlso      [ Tbl_TableForEachInputEntry]
141
142******************************************************************************/
143#define Tbl_TableForEachOutputEntry(                                         \
144/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
145/* int           */ rowNum  /* The row number            */,                 \
146/* int           */ colNum  /* The column number         */,                 \
147/* Tbl_Entry_t * */ entry   /* The table entry */                            \
148)                                                                            \
149 for(rowNum=0;rowNum<Tbl_TableReadNumRows(table); rowNum++)\
150 for(colNum=0; \
151    ((colNum< Tbl_TableReadNumVars(table,1))\
152     &&(entry=Tbl_TableReadEntry(table,rowNum,colNum,1))); colNum++)
153
154/**Macro***********************************************************************
155
156  Synopsis     [ Generates all default entries in the table ]
157
158  Description  [ Given a table this iterates over all its default entries]
159
160  SideEffects  [ ]
161
162  SeeAlso      [ ]
163
164******************************************************************************/
165#define Tbl_TableForEachDefaultEntry(                                        \
166/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
167/* Tbl_Entry_t * */ entry   /* The table entry */,                           \
168/* int           */ index   /* The default entry index */                    \
169)                                                                            \
170 arrayForEachItem( Tbl_Entry_t*,Tbl_TableReadDefaults(table),index,entry)
171
172/**Macro***********************************************************************
173
174  Synopsis     [Generates all input Var_Variable_t* associated with the table]
175
176  Description  [Given a table, this function iterates over all its input
177  Var_Variable_t*. This macro also provides the column number associated
178  with the var, and must be supplied with int index, and Var_Variable_t* var.]
179
180  SideEffects  []
181
182  SeeAlso      []
183
184******************************************************************************/
185#define Tbl_TableForEachInputVar(                                            \
186/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
187/* int           */ index   /* The var index */,                             \
188/* Var_Variable_t **/ var   /* The table var */                              \
189)                                                                            \
190 arrayForEachItem( Var_Variable_t*,Tbl_TableReadInputVars(table),index,var)
191
192/**Macro***********************************************************************
193
194  Synopsis     [Generates all output Var_Variable_t* associated with the table]
195
196  Description  [Given a table, this function iterates over all its output
197  Var_Variable_t*. This macro also provides the column number associated
198  with the var, and must be supplied with int index, and Var_Variable_t* var.]
199
200  SideEffects  []
201
202  SeeAlso      []
203
204******************************************************************************/
205#define Tbl_TableForEachOutputVar(                                           \
206/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
207/* int           */ index   /* The var index */,                             \
208/* Var_Variable_t **/ var   /* The table var */                              \
209)                                                                            \
210 arrayForEachItem( Var_Variable_t*,Tbl_TableReadOutputVars(table),index,var)
211
212
213/**Macro***********************************************************************
214
215  Synopsis     [ Generates all items  in the output of a row of a  table ]
216
217  Description  [ Given a row number , this item iterates over all its output
218  entries.It provides the colnum and the entry at each iteration]
219
220  SideEffects  [ ]
221
222  SeeAlso      []
223
224******************************************************************************/
225#define Tbl_RowForEachOutputEntry(                                           \
226/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
227/* int           */ rowNum  /* The row number            */,                 \
228/* Tbl_Entry_t * */ entry   /* The table entry */,                           \
229/* int           */ colNum  /* The column number         */                  \
230)                                                                            \
231 for(colNum=0; \
232    ((colNum< Tbl_TableReadNumVars(table,1))\
233     &&(entry=Tbl_TableReadEntry(table,rowNum,colNum,1))); colNum++)
234
235/**Macro***********************************************************************
236
237  Synopsis     [ Generates all items  in the input of a row of a  table ]
238
239  Description  [ Given a row number, this item iterates over all its input
240  entries. It provides the colnum and the entry at each iteration]
241
242  SideEffects  [ ]
243
244  SeeAlso      []
245
246******************************************************************************/
247#define Tbl_RowForEachInputEntry(                                            \
248/* Tbl_Table_t * */ table   /* The table to iterate over */,                 \
249/* int           */ rowNum  /* The row number            */,                 \
250/* Tbl_Entry_t * */ entry   /* The table entry */,                           \
251/* int           */ colNum  /* The column number         */                  \
252)                                                                            \
253 for(colNum=0; \
254    ((colNum< Tbl_TableReadNumVars(table,0))\
255     &&(entry=Tbl_TableReadEntry(table,rowNum,colNum,0))); colNum++)
256
257
258/**Macro***********************************************************************
259
260  Synopsis     [Iterates over all the values in a Tbl_Entry_t]
261
262  Description  [Given a Tbl_Entry_t, this function iterates over all
263  values in the entry. This function has to supplied an int value, an
264  lsGen gen, and a Tbl_Range_t * range;]
265
266  SideEffects []
267
268  SeeAlso      []
269
270******************************************************************************/
271#define Tbl_EntryForEachValue(                                               \
272/* Tbl_Entry_t * */ entry   /* The table entry to iterate on */,             \
273/* int           */ value   /* The value at given iteration   */,            \
274/* lsGen         */ gen     /* The generator         */,                     \
275/* Tbl_Range_t * */ range   /* The range for each item  */                   \
276)                                                                            \
277 lsForEachItem(Tbl_EntryReadList(entry), gen, range)\
278 for(value=Tbl_RangeBegin(range); value<= Tbl_RangeEnd(range); value++)
279
280#include "var.h"
281
282/**AutomaticStart*************************************************************/
283
284/*---------------------------------------------------------------------------*/
285/* Function prototypes                                                       */
286/*---------------------------------------------------------------------------*/
287
288EXTERN MvfAig_Function_t * Tbl_TableBuildNonDetConstantMvfAig(Tbl_Table_t *table, int outIndex, int mAigId, mAig_Manager_t *manager);
289EXTERN MvfAig_Function_t * Tbl_TableBuildMvfAigFromFanins(Tbl_Table_t * table, int outIndex, array_t * faninArray, mAig_Manager_t *manager);
290EXTERN Tbl_Entry_t* Tbl_EntryAlloc(Tbl_EntryType_t type);
291EXTERN void Tbl_EntryFree(Tbl_Entry_t * entry);
292EXTERN Tbl_Entry_t * Tbl_EntryDup(Tbl_Entry_t *entry);
293EXTERN void Tbl_EntrySetValue(Tbl_Entry_t * entry, int val1, int val2);
294EXTERN Tbl_Entry_t* Tbl_EntryMerge(Tbl_Entry_t* entry1, Tbl_Entry_t* entry2);
295EXTERN void Tbl_EntryComplement(Tbl_Entry_t * entry, int min, int max);
296EXTERN void Tbl_EntrySetEqual(Tbl_Entry_t * entry, int varCol);
297EXTERN boolean Tbl_EntryCheckRange(Tbl_Entry_t * entry, int val1, int val2);
298EXTERN boolean Tbl_EntryIsEqual(Tbl_Entry_t *entry);
299EXTERN Var_Variable_t* Tbl_EntryReadActualVar(Tbl_Table_t *table, Tbl_Entry_t *entry);
300EXTERN Var_Variable_t* Tbl_EntryReadVar(Tbl_Table_t *table, Tbl_Entry_t *entry);
301EXTERN int Tbl_EntryReadVarIndex(Tbl_Entry_t * entry);
302EXTERN int Tbl_EntryReadNumValues(Tbl_Entry_t * entry);
303EXTERN boolean Tbl_EntryTestEqualEntry(Tbl_Entry_t * entrya, Tbl_Entry_t * entryb);
304EXTERN boolean Tbl_EntryTestIntersectEntry(Tbl_Entry_t * entrya, Tbl_Entry_t * entryb);
305EXTERN lsList Tbl_EntryReadList(Tbl_Entry_t * entry);
306EXTERN Tbl_EntryType_t Tbl_EntryReadType(Tbl_Entry_t *entry);
307EXTERN int Tbl_RangeBegin(Tbl_Range_t *range);
308EXTERN int Tbl_RangeEnd(Tbl_Range_t *range);
309EXTERN Tbl_Table_t* Tbl_TableCollapse(Tbl_Table_t* table1, Tbl_Table_t* table2, int index);
310EXTERN Tbl_Table_t * Tbl_TableInvertBinaryInputColumn(Tbl_Table_t *table, int index);
311EXTERN void Tbl_Init(void);
312EXTERN void Tbl_End(void);
313EXTERN Tbl_Table_t* Tbl_TableAlloc(void);
314EXTERN void Tbl_TableFree(Tbl_Table_t * table);
315EXTERN Tbl_Table_t * Tbl_TableSoftDup(Tbl_Table_t * table);
316EXTERN Tbl_Table_t * Tbl_TableHardDup(Tbl_Table_t * table);
317EXTERN boolean Tbl_TableDefaultSetEntry(Tbl_Table_t *table, Tbl_Entry_t *entry, int index);
318EXTERN Tbl_Entry_t* Tbl_TableDefaultReadEntry(Tbl_Table_t *table, int index);
319EXTERN int Tbl_TableAddRow(Tbl_Table_t * table);
320EXTERN int Tbl_TableAddColumn(Tbl_Table_t * table, Var_Variable_t * var, int flag);
321EXTERN Tbl_Table_t * Tbl_TableRowDelete(Tbl_Table_t *originalTable, int rowNumToDelete, array_t *freeArray);
322EXTERN Var_Variable_t* Tbl_TableReadIndexVar(Tbl_Table_t * table, int index, int flag);
323EXTERN Tbl_Entry_t * Tbl_TableReadEntry(Tbl_Table_t * table, int rowNum, int colNum, int flag);
324EXTERN boolean Tbl_TableSetEntry(Tbl_Table_t * table, Tbl_Entry_t * newEntry, int i, int j, int flag);
325EXTERN boolean Tbl_TableSetEntryDc(Tbl_Table_t * table, int i, int j, int flag);
326EXTERN void Tbl_TableAddEntryRange(Tbl_Table_t * table, int i, int j, int val1, int val2, int flag);
327EXTERN void Tbl_TableComplementEntry(Tbl_Table_t * table, int i, int j, int flag);
328EXTERN void Tbl_TableSetEquality(Tbl_Table_t * table, int i, int j, int flag, Var_Variable_t * var);
329EXTERN boolean Tbl_TableEntryIsDc(Tbl_Table_t * table, int i, int j, int flag);
330EXTERN boolean Tbl_TableTestIsConstant(Tbl_Table_t * table, int outputColumnId);
331EXTERN boolean Tbl_TableTestIsNonDeterministicConstant(Tbl_Table_t * table, int outputColumnId);
332EXTERN int Tbl_TableTestIsDeterministic(Tbl_Table_t * table);
333EXTERN boolean Tbl_TableTestIsOutputSpaceComplete(Tbl_Table_t *table, mdd_manager *mddMgr);
334EXTERN array_t * Tbl_TableComputeMvfAndInputDependenciesOfOutput(Tbl_Table_t *table, mdd_manager *mddMgr, int outIndex, int *value);
335EXTERN Tbl_Table_t* Tbl_TableCreateTrueSupportTableForOutput(Tbl_Table_t *table, Mvf_Function_t *outMvf, mdd_manager *mddMgr, int offset, int outIndex, array_t *varMap);
336EXTERN boolean Tbl_TableSwapRows(Tbl_Table_t * table, int i, int j);
337EXTERN boolean Tbl_TableSwapColumns(Tbl_Table_t * table, int i, int j, int flag);
338EXTERN void Tbl_TableCanonicalize(Tbl_Table_t * table);
339EXTERN boolean Tbl_TableRowDominatesRow(Tbl_Table_t *table, int rowa, int rowb, array_t *rowValArray);
340EXTERN boolean Tbl_TableColDominatesCol(Tbl_Table_t *table, int cola, int colb, int flag, Tbl_Row_t *colValArray);
341EXTERN boolean Tbl_TablesAreIdentical(Tbl_Table_t *tablea, Tbl_Table_t *tableb, int a, int b);
342EXTERN mdd_t * Tbl_TableRowToMdd(Tbl_Table_t * table, mdd_manager * manager, int i, array_t * svArray);
343EXTERN Mvf_Function_t * Tbl_TableBuildNonDetConstantMvf(Tbl_Table_t * table, int outIndex, int mddId, mdd_manager * mddMgr);
344EXTERN Mvf_Function_t * Tbl_TableBuildMvfFromFanins(Tbl_Table_t * table, int outIndex, array_t * faninArray, mdd_manager * mddMgr);
345EXTERN int Tbl_TableReadConstValue(Tbl_Table_t * table, int outputColumnId);
346EXTERN Tbl_Table_t * Tbl_MddToTable(mdd_t * mdd, mdd_manager * manager, st_table * idtoVar, array_t * inputids);
347EXTERN boolean Tbl_TableSubstituteVar(Tbl_Table_t * table, Var_Variable_t * oldVar, Var_Variable_t * newVar);
348EXTERN void Tbl_TableSetVar(Tbl_Table_t * table, int i, Var_Variable_t * sv, int flag);
349EXTERN array_t * Tbl_TableSplit(Tbl_Table_t * table);
350EXTERN int Tbl_TableReadNumInputs(Tbl_Table_t * table);
351EXTERN int Tbl_TableReadNumOutputs(Tbl_Table_t * table);
352EXTERN int Tbl_TableReadNumVars(Tbl_Table_t *table, int flag);
353EXTERN int Tbl_TableReadNumRows(Tbl_Table_t * table);
354EXTERN int Tbl_TableReadVarIndex(Tbl_Table_t * table, Var_Variable_t * var, int flag);
355EXTERN void Tbl_TablePrintStats(Tbl_Table_t *table, FILE *fp);
356EXTERN void Tbl_TableWriteBlifMvToFileSpecial(Tbl_Table_t *table, int flag, FILE *fp);
357EXTERN void Tbl_TableWriteBlifMvToFile(Tbl_Table_t *table, int flag, FILE *fp);
358EXTERN void Tbl_TableWriteSmvToFile(Tbl_Table_t *table, int flag, FILE *fp);
359EXTERN void Tbl_TableWriteBlifToFile(Tbl_Table_t *table, FILE *fp);
360EXTERN array_t* Tbl_TableReadDefaults(Tbl_Table_t * table);
361EXTERN array_t* Tbl_TableReadInputVars(Tbl_Table_t * table);
362EXTERN array_t* Tbl_TableReadOutputVars(Tbl_Table_t * table);
363EXTERN boolean Tbl_RowInputIntersect(Tbl_Table_t * table, int a, int b);
364EXTERN boolean Tbl_RowOutputIntersect(Tbl_Table_t * table, int a, int b);
365EXTERN boolean Tbl_TableIsIdentity(Tbl_Table_t *table);
366EXTERN boolean Tbl_TableIsInverter(Tbl_Table_t *table);
367
368/**AutomaticEnd***************************************************************/
369
370#endif /*_TBL */
Note: See TracBrowser for help on using the repository browser.