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