source: vis_dev/vis-2.3/share/help/write_blifCmd.txt @ 41

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

vis2.3

File size: 7.3 KB
Line 
1
2  write_blif - determinize, encode and write an hnode to a blif file
3     _________________________________________________________________
4
5   write_blif   [-c]   [-l]   [-e  <encoding_file_name>]  [-R]  [-h]  [-v
6   <verbosity_value>] [<file>]
7
8   Encodes, determinizes, and writes all tables in the current hnode to a BLIF
9   file. With the '-l' or '-c' options, or when 'write_blif' is used with no
10   options, only the current hnode is written out as a blif file. The '-R'
11   option writes the entire hierarchy rooted at the current hnode to the blif
12   file, assuming all tables are deterministic and all variables are boolean.
13
14   Encoding the Multi-Valued Variables:
15
16   First, all multi-valued variables in the hnode are binary encoded. Each
17   multi-valued variable requires 'm' binary variables in its encoding, where m
18   =  log2(n).  Here  'n'  is  the  number of values in the domain of the
19   multi-valued variable. If variable X has n binary variables in its encoding,
20   these  are  called X0, X1, ... X. X0 is the least significant encoding
21   variable. The value i of multi-valued variable X is encoded such that X0 +
22   2^1 * X1 + ... + 2^(n-1) * X = i. After encoding, each table in the hnode is
23   written out to the blif file.
24
25   Determinizing Non-Deterministic Tables:
26
27   Non-deterministic tables are determinized by adding more binary variables to
28   a particular variable's encoding. The variable that is chosen is the one
29   that  has  the  smallest  number  of binary variables in its encoding.
30   Determinization is explained by means of an example:
31
32   Consider the BLIF-MV table, where each of a, b, and c can have 4 values.
33   Each multi-valued variable has two binary variables in its encoding. These
34   are called a0, a1, b0, b1, c0 and c1.
35
36   .model foo
37
38   .inputs a b
39
40   .outputs c
41
42   .mv a, b, c 4
43
44   .table a b ->c
45
46   2 1 (1,2)
47
48   (1,2) 1 3
49
50   .end
51
52   The first row of this table represents non-determinism, since for a given
53   assignment of input values (i.e. a=2, b=1), the output can take on two
54   values (1 or 2). To determinize this row, it is split into two rows, each
55   with a unique singleton output value. A new binary variable is added to the
56   encoding of a (or b, since in this case each of them has the same number of
57   binary variables in its encoding). The new variable a2 is given separate
58   values in each of the new rows. The resulting blif table looks like:
59
60   .model foo
61
62   .inputs a0 a1 a2 b0 b1
63
64   .outputs c0 c1
65
66   .names a0 a1 a2 b0 b1 ->c0 c1
67
68   0 1 0 1 0 1 0 (these two rows represent
69
70   0 1 1 1 0 0 1 row 1 of the MV table)
71
72   1 0 - 1 0 1 1 (these two rows represent
73
74   0 1 - 1 0 1 1 row 2 of the MV table)
75
76   .end
77
78   Note that this table is still not deterministic, since rows 1 and 4 have
79   input minterm(s) in common, but the corresponding outputs are different. To
80   resolve this, a new binary variable is added to the encoding for b (since b
81   currently  has  the smallest encoding). For the conflicting rows, this
82   variable b2 is assigned different values, and for all other rows, it is
83   assigned a '-' value. After this change, rows 1 and 4 no longer have common
84   input minterm(s). The intermediate table now looks like:
85
86   .model foo
87
88   .inputs a0 a1 a2 b0 b1 b2
89
90   .outputs c0 c1
91
92   .names a0 a1 a2 b0 b1 b2->c0 c1
93
94   0 1 0 1 0 1 1 0
95
96   0 1 1 1 0 - 0 1
97
98   1 0 - 1 0 - 1 1
99
100   0 1 - 1 0 0 1 1
101
102   .end
103
104   This process is continued until the table is determinized. In this example,
105   the final blif file looks like:
106
107   .model foo
108
109   .inputs a0 a1 a2 a3 b0 b1 b2
110
111   .outputs c0 c1
112
113   .table a0 a1 a2 a3 b0 b1 b2 ->c0 c1
114
115   0 1 0 - 1 0 1 1 0
116
117   0 1 1 1 1 0 - 0 1
118
119   1 0 - - 1 0 - 1 1
120
121   0 1 - 0 1 0 0 1 1
122
123   .end
124
125   Blif allows only single output tables, so in reality the above table is
126   split into two single output tables before being written out to the blif
127   file. The new binary variables that are thus introduced are treated as
128   primary inputs in the blif file.
129
130   We make no claim on the optimality of this process, just that it is simple.
131   It may turn out that the number of new variables is much larger than the
132   optimum one.
133
134   Interfacing Between Binary and Multi-Valued Variables:
135
136   In order for the SIS-optimized version of this file to be read back into
137   VIS, we need to re-create the corresponding multi-valued variables. For this
138   purpose, interface information (model name, input and output declarations
139   for the hnode) is written out to a special encoding file (e.g. foo.enc).
140   Additionally,  binary->multi-valued encoding tables are written to the
141   encoding file for each PO. In the above example, the binary->multi-valued
142   table for variable c looks like
143
144   .table c0 c1 -> c
145
146   0 0 0
147
148   1 0 1
149
150   0 1 2
151
152   1 1 3
153
154   and  this can be seen as a decoder of the binary variables. Similarly,
155   multi-valued->binary encoding tables are written to the encoding file for
156   each PI. The multi-valued->binary table for variable b in the above example
157   is:
158
159   .table b -> b0 b1
160
161   0 0 0
162
163   1 1 0
164
165   2 0 1
166
167   3 1 1
168
169   and this can be seen as an encoder of the multi-valued variables. Similar
170   tables are written to the encoding file for sub-circuit inputs and outputs.
171   Likewise, such tables are written out for latch inputs and outputs. This is
172   needed so that the original multi-valued latches can be reinstated while the
173   blif file is being read back into VIS. These multi-valued latch declarations
174   are written to the encoding file during the write_blif process.
175
176   The combination of this encoding file and the blif file results in a legal
177   BLIF-MV hnode description.
178
179   If  no file is specified, the blif file is written out to the standard
180   output. If the encoding file is not specified, encoding information is
181   written out to .enc.
182
183   Options:
184
185   The '-R' option writes the entire hierarchy rooted at the current hnode to
186   the blif file, first checking that all tables are deterministic and all
187   variables are boolean. Other options ('-c', '-l', or write_blif with no
188   options) only write out the current hnode. Also, when the '-R' option is
189   specified, no encoding file is written since none is needed.
190
191   Command options:
192
193   -c
194          Writes only combinational part to blif file.
195
196   -l
197          Writes out latches, making latch IOs primary outputs in the blif
198          file.
199
200   -e <encoding_file_name>
201          If set, the program writes the encoding information into this file.
202          The default is the model name for the current node extended by .enc.
203
204   -R
205          Recursively writes out the entire hierarchy rooted at the current
206          hnode to the blif file. In this sub-hierarchy, all tables must be
207          deterministic and all variables must be boolean. Either of the -c, -l
208          or -e options cannot be used together with this option.
209
210   -h
211          Prints the command usage.
212
213   -v <verbosity_value>
214          Specifies verbosity level, an integer less than 3.
215
216   <file>
217          name of blif file to be written, default is standard output.
218
219          Note  that if neither the -c or the -l options are chosen, then
220          latches are written out, without making latch IOs primary outputs in
221          the blif file. Currently the files written out using this option
222          cannot be read back into VIS.
223     _________________________________________________________________
224
225   Last updated on 20100410 00h02
Note: See TracBrowser for help on using the repository browser.