Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/Toriya/func_des.v

Parent Directory Parent Directory | Revision Log Revision Log


Revision 118 - (show annotations) (download)
Wed Apr 11 04:55:06 2007 UTC (17 years, 1 month ago) by chapuni
File size: 23345 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
1 /**********************************************************-*-verilog-*-
2 *
3 * DES functions
4 * ビット並びなどを教科書通りにするために
5 * 序数・エンディアンが特異なので注意せよ。
6 * すなわち、序数は1から、エンディアンはリトル(左から右へ)。
7 * $Id$
8 *
9 */
10
11 /*
12 * F 中の拡大転置 E
13 * crypt(3)12ビットのSaltにより変化するが
14 * このモジュールでは、Salt固定でも十分実用的である。
15 */
16 function [1:48] tr_e;
17 input [1:32] n;
18 tr_e = {n[32], n[ 1], n[ 2], n[ 3], n[ 4], n[ 5],
19 n[ 4], n[ 5], n[ 6], n[ 7], n[ 8], n[ 9],
20 n[ 8], n[ 9], n[10], n[11], n[12], n[13],
21 n[12], n[13], n[14], n[15], n[16], n[17],
22 n[16], n[17], n[18], n[19], n[20], n[21],
23 n[20], n[21], n[22], n[23], n[24], n[25],
24 n[24], n[25], n[26], n[27], n[28], n[29],
25 n[28], n[29], n[30], n[31], n[32], n[ 1]};
26 endfunction
27
28 /*
29 * F 中の転置 P
30 */
31 function [1:32] tr_p;
32 input [1:32] n;
33 tr_p = {n[16], n[ 7], n[20], n[21],
34 n[29], n[12], n[28], n[17],
35 n[ 1], n[15], n[23], n[26],
36 n[ 5], n[18], n[31], n[10],
37 n[ 2], n[ 8], n[24], n[14],
38 n[32], n[27], n[ 3], n[ 9],
39 n[19], n[13], n[30], n[ 6],
40 n[22], n[11], n[ 4], n[25]};
41 endfunction
42
43 /*
44 * P-1
45 * パイプラインのステージを移動させるために用いる。
46 */
47 function [1:32] ir_p;
48 input [1:32] n;
49 {ir_p[16], ir_p[ 7], ir_p[20], ir_p[21],
50 ir_p[29], ir_p[12], ir_p[28], ir_p[17],
51 ir_p[ 1], ir_p[15], ir_p[23], ir_p[26],
52 ir_p[ 5], ir_p[18], ir_p[31], ir_p[10],
53 ir_p[ 2], ir_p[ 8], ir_p[24], ir_p[14],
54 ir_p[32], ir_p[27], ir_p[ 3], ir_p[ 9],
55 ir_p[19], ir_p[13], ir_p[30], ir_p[ 6],
56 ir_p[22], ir_p[11], ir_p[ 4], ir_p[25]} = n;
57 /*
58 ir_p = {n[ 9], n[17], n[23], n[31],
59 n[13], n[28], n[ 2], n[18],
60 n[24], n[16], n[30], n[ 6],
61 n[26], n[20], n[10], n[ 1],
62 n[ 8], n[14], n[25], n[ 3],
63 n[ 4], n[29], n[11], n[19],
64 n[32], n[12], n[22], n[ 7],
65 n[ 5], n[27], n[15], n[21]};
66 */
67 endfunction
68
69 /*
70 * 鍵のPC2(L=C, R=D)
71 * L, R独立しているのがミソだ。
72 */
73 function [1:24] tr_pc2l;
74 input [1:28] l;
75 tr_pc2l = {l[14], l[17], l[11], l[24], l[ 1], l[ 5],
76 l[ 3], l[28], l[15], l[ 6], l[21], l[10],
77 l[23], l[19], l[12], l[ 4], l[26], l[ 8],
78 l[16], l[ 7], l[27], l[20], l[13], l[ 2]};
79 endfunction
80
81 function [25:48] tr_pc2r;
82 input [29:56] r;
83 tr_pc2r = {r[41], r[52], r[31], r[37], r[47], r[55],
84 r[30], r[40], r[51], r[45], r[33], r[48],
85 r[44], r[49], r[39], r[56], r[34], r[53],
86 r[46], r[42], r[50], r[36], r[29], r[32]};
87 endfunction
88
89 /*
90 * 最終転置 P-1
91 */
92 function [1:64] fp;
93 input [1:64] n;
94 fp = {n[40], n[ 8], n[48], n[16], n[56], n[24], n[64], n[32],
95 n[39], n[ 7], n[47], n[15], n[55], n[23], n[63], n[31],
96 n[38], n[ 6], n[46], n[14], n[54], n[22], n[62], n[30],
97 n[37], n[ 5], n[45], n[13], n[53], n[21], n[61], n[29],
98 n[36], n[ 4], n[44], n[12], n[52], n[20], n[60], n[28],
99 n[35], n[ 3], n[43], n[11], n[51], n[19], n[59], n[27],
100 n[34], n[ 2], n[42], n[10], n[50], n[18], n[58], n[26],
101 n[33], n[ 1], n[41], n[ 9], n[49], n[17], n[57], n[25]};
102 endfunction
103
104 /*
105 * 鍵の初期縮約転置PC1
106 * 教科書のものと互換ではない。鍵の並びは
107 * 順次計算に都合のいいようにつくられている。
108 * 具体的には、Salt bitは上位に固まるようにつくられている。
109 */
110 function [1:28] pc1_l;
111 input [27:0] n;
112 {pc1_l[ 7], pc1_l[15], pc1_l[23], // SALT
113 pc1_l[ 6], pc1_l[14], pc1_l[22], // SALT
114 pc1_l[ 8], pc1_l[16], pc1_l[24],
115 pc1_l[ 5], pc1_l[13], pc1_l[21],
116 pc1_l[ 4], pc1_l[12], pc1_l[20],
117 pc1_l[ 3], pc1_l[11], pc1_l[19],
118 pc1_l[ 2], pc1_l[10], pc1_l[18],
119 pc1_l[ 1], pc1_l[ 9], pc1_l[17],
120 pc1_l[28], pc1_l[27], pc1_l[26], pc1_l[25]} = n;
121 endfunction
122
123 function [29:56] pc1_r;
124 input [27:0] n;
125 {pc1_r[55], pc1_r[51], pc1_r[43], pc1_r[35], // SALT
126 pc1_r[54], pc1_r[50], pc1_r[42], pc1_r[34], // SALT
127 pc1_r[56], pc1_r[52], pc1_r[44], pc1_r[36],
128 pc1_r[53], pc1_r[49], pc1_r[41], pc1_r[33],
129 /********/ pc1_r[48], pc1_r[40], pc1_r[32],
130 /********/ pc1_r[47], pc1_r[39], pc1_r[31],
131 /********/ pc1_r[46], pc1_r[38], pc1_r[30],
132 /********/ pc1_r[45], pc1_r[37], pc1_r[29]} = n;
133 endfunction
134
135 function [1:56] pc1;
136 input [55:0] n;
137 pc1 = {pc1_l(n[27:0]), pc1_r(n[55:28])};
138 endfunction
139
140 /*
141 * 鍵の逆転置(PC1-1)
142 * パイプライン中で用いる。pc1_l の逆変換。
143 */
144
145 /* KL専用 */
146 function [27:0] i_pc1_l;
147 input [1:28] n;
148 i_pc1_l = {n[ 7], n[15], n[23], // SALT
149 n[ 6], n[14], n[22], // SALT
150 n[ 8], n[16], n[24],
151 n[ 5], n[13], n[21],
152 n[ 4], n[12], n[20],
153 n[ 3], n[11], n[19],
154 n[ 2], n[10], n[18],
155 n[ 1], n[ 9], n[17],
156 n[28], n[27], n[26], n[25]};
157 endfunction
158
159 /*
160 * 鍵の逆転置(PC1-1)
161 * 入力はLITTLE ENDIAN, 出力はBIG ENDIAN
162 */
163 function [63:0] i_pc1;
164 input [1:56] n;
165 input salt;
166 i_pc1 = {1'b0, n[ 8], n[16], n[24], n[56], n[52], n[44], n[36],
167 salt, n[ 7], n[15], n[23], n[55], n[51], n[43], n[35],
168 salt, n[ 6], n[14], n[22], n[54], n[50], n[42], n[34],
169 1'b0, n[ 5], n[13], n[21], n[53], n[49], n[41], n[33],
170 1'b0, n[ 4], n[12], n[20], n[28], n[48], n[40], n[32],
171 1'b0, n[ 3], n[11], n[19], n[27], n[47], n[39], n[31],
172 1'b0, n[ 2], n[10], n[18], n[26], n[46], n[38], n[30],
173 1'b0, n[ 1], n[ 9], n[17], n[25], n[45], n[37], n[29]};
174 endfunction
175
176 /*
177 * 鍵MUX
178 * 固定鍵とレジスタ鍵を織り交ぜる
179 */
180
181 function [55:0] kmux;
182 input [55:0] m;
183 input [55:0] fk; // 固定鍵
184 input [55:0] k; // 自由鍵
185 kmux = (k & m) | (fk & ~m);
186 endfunction
187
188 /*
189 * rotate left
190 */
191 function [0:27] roln;
192 input [0:27] d;
193 input [4:0] n;
194 case (n)
195 5'd01: roln = {d[ 1:27], d[0: 0]};
196 5'd02: roln = {d[ 2:27], d[0: 1]};
197 5'd03: roln = {d[ 3:27], d[0: 2]};
198 5'd04: roln = {d[ 4:27], d[0: 3]};
199 5'd05: roln = {d[ 5:27], d[0: 4]};
200 5'd06: roln = {d[ 6:27], d[0: 5]};
201 5'd07: roln = {d[ 7:27], d[0: 6]};
202 5'd08: roln = {d[ 8:27], d[0: 7]};
203 5'd09: roln = {d[ 9:27], d[0: 8]};
204 5'd10: roln = {d[10:27], d[0: 9]};
205 5'd11: roln = {d[11:27], d[0:10]};
206 5'd12: roln = {d[12:27], d[0:11]};
207 5'd13: roln = {d[13:27], d[0:12]};
208 5'd14: roln = {d[14:27], d[0:13]};
209 5'd15: roln = {d[15:27], d[0:14]};
210 5'd16: roln = {d[16:27], d[0:15]};
211 5'd17: roln = {d[17:27], d[0:16]};
212 5'd18: roln = {d[18:27], d[0:17]};
213 5'd19: roln = {d[19:27], d[0:18]};
214 5'd20: roln = {d[20:27], d[0:19]};
215 5'd21: roln = {d[21:27], d[0:20]};
216 5'd22: roln = {d[22:27], d[0:21]};
217 5'd23: roln = {d[23:27], d[0:22]};
218 5'd24: roln = {d[24:27], d[0:23]};
219 5'd25: roln = {d[25:27], d[0:24]};
220 5'd26: roln = {d[26:27], d[0:25]};
221 5'd27: roln = {d[27:27], d[0:26]};
222 default: roln = d;
223 endcase
224 endfunction
225
226 /*
227 * DES 用の鍵回転
228 * ソフトウェア実装と違い、ループでない場合は
229 * Hardwired shiftの方が都合がよい。
230 */
231 function [0:27] rolk;
232 input [0:27] d;
233 input [3:0] st;
234 case (st)
235 4'hF: rolk = roln(d, 1);
236 4'h0: rolk = roln(d, 1);
237 4'h1: rolk = roln(d, 2);
238 4'h2: rolk = roln(d, 2);
239 4'h3: rolk = roln(d, 2);
240 4'h4: rolk = roln(d, 2);
241 4'h5: rolk = roln(d, 2);
242 4'h6: rolk = roln(d, 2);
243 4'h7: rolk = roln(d, 1);
244 4'h8: rolk = roln(d, 2);
245 4'h9: rolk = roln(d, 2);
246 4'hA: rolk = roln(d, 2);
247 4'hB: rolk = roln(d, 2);
248 4'hC: rolk = roln(d, 2);
249 4'hD: rolk = roln(d, 2);
250 4'hE: rolk = roln(d, 1);
251 endcase
252 endfunction
253
254 // SBox 互換のための conversion
255 function [5:0] sa;
256 input [0:5] n;
257 sa = {n[0], n[5], n[1:4]};
258 endfunction
259
260 function [0:47] sae;
261 input [0:47] e;
262 sae = {sa(e[ 0: 5]),
263 sa(e[ 6:11]),
264 sa(e[12:17]),
265 sa(e[18:23]),
266 sa(e[24:29]),
267 sa(e[30:35]),
268 sa(e[36:41]),
269 sa(e[42:47])};
270 endfunction
271
272 /*
273 * SBox にセットアップするアドレスをつくるための逆変換
274 */
275 function [0:5] ra;
276 input [5:0] sa;
277 {ra[0], ra[5], ra[1:4]} = sa;
278 endfunction
279
280 /*
281 * SBoxes
282 * 記述は2進数だが、並びは教科書通り。
283 * 同様の物がROMになっていたりするので注意
284 */
285 function [0:3] s1;
286 input [0:5] n6;
287 case (sa(n6))
288 6'b000000: s1 = 4'b1110;
289 6'b000001: s1 = 4'b0100;
290 6'b000010: s1 = 4'b1101;
291 6'b000011: s1 = 4'b0001;
292 6'b000100: s1 = 4'b0010;
293 6'b000101: s1 = 4'b1111;
294 6'b000110: s1 = 4'b1011;
295 6'b000111: s1 = 4'b1000;
296 6'b001000: s1 = 4'b0011;
297 6'b001001: s1 = 4'b1010;
298 6'b001010: s1 = 4'b0110;
299 6'b001011: s1 = 4'b1100;
300 6'b001100: s1 = 4'b0101;
301 6'b001101: s1 = 4'b1001;
302 6'b001110: s1 = 4'b0000;
303 6'b001111: s1 = 4'b0111;
304 6'b010000: s1 = 4'b0000;
305 6'b010001: s1 = 4'b1111;
306 6'b010010: s1 = 4'b0111;
307 6'b010011: s1 = 4'b0100;
308 6'b010100: s1 = 4'b1110;
309 6'b010101: s1 = 4'b0010;
310 6'b010110: s1 = 4'b1101;
311 6'b010111: s1 = 4'b0001;
312 6'b011000: s1 = 4'b1010;
313 6'b011001: s1 = 4'b0110;
314 6'b011010: s1 = 4'b1100;
315 6'b011011: s1 = 4'b1011;
316 6'b011100: s1 = 4'b1001;
317 6'b011101: s1 = 4'b0101;
318 6'b011110: s1 = 4'b0011;
319 6'b011111: s1 = 4'b1000;
320 6'b100000: s1 = 4'b0100;
321 6'b100001: s1 = 4'b0001;
322 6'b100010: s1 = 4'b1110;
323 6'b100011: s1 = 4'b1000;
324 6'b100100: s1 = 4'b1101;
325 6'b100101: s1 = 4'b0110;
326 6'b100110: s1 = 4'b0010;
327 6'b100111: s1 = 4'b1011;
328 6'b101000: s1 = 4'b1111;
329 6'b101001: s1 = 4'b1100;
330 6'b101010: s1 = 4'b1001;
331 6'b101011: s1 = 4'b0111;
332 6'b101100: s1 = 4'b0011;
333 6'b101101: s1 = 4'b1010;
334 6'b101110: s1 = 4'b0101;
335 6'b101111: s1 = 4'b0000;
336 6'b110000: s1 = 4'b1111;
337 6'b110001: s1 = 4'b1100;
338 6'b110010: s1 = 4'b1000;
339 6'b110011: s1 = 4'b0010;
340 6'b110100: s1 = 4'b0100;
341 6'b110101: s1 = 4'b1001;
342 6'b110110: s1 = 4'b0001;
343 6'b110111: s1 = 4'b0111;
344 6'b111000: s1 = 4'b0101;
345 6'b111001: s1 = 4'b1011;
346 6'b111010: s1 = 4'b0011;
347 6'b111011: s1 = 4'b1110;
348 6'b111100: s1 = 4'b1010;
349 6'b111101: s1 = 4'b0000;
350 6'b111110: s1 = 4'b0110;
351 6'b111111: s1 = 4'b1101;
352 endcase
353 endfunction
354
355 function [0:3] s2;
356 input [0:5] n6;
357 case (sa(n6))
358 6'b000000: s2 = 4'b1111;
359 6'b000001: s2 = 4'b0001;
360 6'b000010: s2 = 4'b1000;
361 6'b000011: s2 = 4'b1110;
362 6'b000100: s2 = 4'b0110;
363 6'b000101: s2 = 4'b1011;
364 6'b000110: s2 = 4'b0011;
365 6'b000111: s2 = 4'b0100;
366 6'b001000: s2 = 4'b1001;
367 6'b001001: s2 = 4'b0111;
368 6'b001010: s2 = 4'b0010;
369 6'b001011: s2 = 4'b1101;
370 6'b001100: s2 = 4'b1100;
371 6'b001101: s2 = 4'b0000;
372 6'b001110: s2 = 4'b0101;
373 6'b001111: s2 = 4'b1010;
374 6'b010000: s2 = 4'b0011;
375 6'b010001: s2 = 4'b1101;
376 6'b010010: s2 = 4'b0100;
377 6'b010011: s2 = 4'b0111;
378 6'b010100: s2 = 4'b1111;
379 6'b010101: s2 = 4'b0010;
380 6'b010110: s2 = 4'b1000;
381 6'b010111: s2 = 4'b1110;
382 6'b011000: s2 = 4'b1100;
383 6'b011001: s2 = 4'b0000;
384 6'b011010: s2 = 4'b0001;
385 6'b011011: s2 = 4'b1010;
386 6'b011100: s2 = 4'b0110;
387 6'b011101: s2 = 4'b1001;
388 6'b011110: s2 = 4'b1011;
389 6'b011111: s2 = 4'b0101;
390 6'b100000: s2 = 4'b0000;
391 6'b100001: s2 = 4'b1110;
392 6'b100010: s2 = 4'b0111;
393 6'b100011: s2 = 4'b1011;
394 6'b100100: s2 = 4'b1010;
395 6'b100101: s2 = 4'b0100;
396 6'b100110: s2 = 4'b1101;
397 6'b100111: s2 = 4'b0001;
398 6'b101000: s2 = 4'b0101;
399 6'b101001: s2 = 4'b1000;
400 6'b101010: s2 = 4'b1100;
401 6'b101011: s2 = 4'b0110;
402 6'b101100: s2 = 4'b1001;
403 6'b101101: s2 = 4'b0011;
404 6'b101110: s2 = 4'b0010;
405 6'b101111: s2 = 4'b1111;
406 6'b110000: s2 = 4'b1101;
407 6'b110001: s2 = 4'b1000;
408 6'b110010: s2 = 4'b1010;
409 6'b110011: s2 = 4'b0001;
410 6'b110100: s2 = 4'b0011;
411 6'b110101: s2 = 4'b1111;
412 6'b110110: s2 = 4'b0100;
413 6'b110111: s2 = 4'b0010;
414 6'b111000: s2 = 4'b1011;
415 6'b111001: s2 = 4'b0110;
416 6'b111010: s2 = 4'b0111;
417 6'b111011: s2 = 4'b1100;
418 6'b111100: s2 = 4'b0000;
419 6'b111101: s2 = 4'b0101;
420 6'b111110: s2 = 4'b1110;
421 6'b111111: s2 = 4'b1001;
422 endcase
423 endfunction
424
425 function [0:3] s3;
426 input [0:5] n6;
427 case (sa(n6))
428 6'b000000: s3 = 4'b1010;
429 6'b000001: s3 = 4'b0000;
430 6'b000010: s3 = 4'b1001;
431 6'b000011: s3 = 4'b1110;
432 6'b000100: s3 = 4'b0110;
433 6'b000101: s3 = 4'b0011;
434 6'b000110: s3 = 4'b1111;
435 6'b000111: s3 = 4'b0101;
436 6'b001000: s3 = 4'b0001;
437 6'b001001: s3 = 4'b1101;
438 6'b001010: s3 = 4'b1100;
439 6'b001011: s3 = 4'b0111;
440 6'b001100: s3 = 4'b1011;
441 6'b001101: s3 = 4'b0100;
442 6'b001110: s3 = 4'b0010;
443 6'b001111: s3 = 4'b1000;
444 6'b010000: s3 = 4'b1101;
445 6'b010001: s3 = 4'b0111;
446 6'b010010: s3 = 4'b0000;
447 6'b010011: s3 = 4'b1001;
448 6'b010100: s3 = 4'b0011;
449 6'b010101: s3 = 4'b0100;
450 6'b010110: s3 = 4'b0110;
451 6'b010111: s3 = 4'b1010;
452 6'b011000: s3 = 4'b0010;
453 6'b011001: s3 = 4'b1000;
454 6'b011010: s3 = 4'b0101;
455 6'b011011: s3 = 4'b1110;
456 6'b011100: s3 = 4'b1100;
457 6'b011101: s3 = 4'b1011;
458 6'b011110: s3 = 4'b1111;
459 6'b011111: s3 = 4'b0001;
460 6'b100000: s3 = 4'b1101;
461 6'b100001: s3 = 4'b0110;
462 6'b100010: s3 = 4'b0100;
463 6'b100011: s3 = 4'b1001;
464 6'b100100: s3 = 4'b1000;
465 6'b100101: s3 = 4'b1111;
466 6'b100110: s3 = 4'b0011;
467 6'b100111: s3 = 4'b0000;
468 6'b101000: s3 = 4'b1011;
469 6'b101001: s3 = 4'b0001;
470 6'b101010: s3 = 4'b0010;
471 6'b101011: s3 = 4'b1100;
472 6'b101100: s3 = 4'b0101;
473 6'b101101: s3 = 4'b1010;
474 6'b101110: s3 = 4'b1110;
475 6'b101111: s3 = 4'b0111;
476 6'b110000: s3 = 4'b0001;
477 6'b110001: s3 = 4'b1010;
478 6'b110010: s3 = 4'b1101;
479 6'b110011: s3 = 4'b0000;
480 6'b110100: s3 = 4'b0110;
481 6'b110101: s3 = 4'b1001;
482 6'b110110: s3 = 4'b1000;
483 6'b110111: s3 = 4'b0111;
484 6'b111000: s3 = 4'b0100;
485 6'b111001: s3 = 4'b1111;
486 6'b111010: s3 = 4'b1110;
487 6'b111011: s3 = 4'b0011;
488 6'b111100: s3 = 4'b1011;
489 6'b111101: s3 = 4'b0101;
490 6'b111110: s3 = 4'b0010;
491 6'b111111: s3 = 4'b1100;
492 endcase
493 endfunction
494
495 function [0:3] s4;
496 input [0:5] n6;
497 case (sa(n6))
498 6'b000000: s4 = 4'b0111;
499 6'b000001: s4 = 4'b1101;
500 6'b000010: s4 = 4'b1110;
501 6'b000011: s4 = 4'b0011;
502 6'b000100: s4 = 4'b0000;
503 6'b000101: s4 = 4'b0110;
504 6'b000110: s4 = 4'b1001;
505 6'b000111: s4 = 4'b1010;
506 6'b001000: s4 = 4'b0001;
507 6'b001001: s4 = 4'b0010;
508 6'b001010: s4 = 4'b1000;
509 6'b001011: s4 = 4'b0101;
510 6'b001100: s4 = 4'b1011;
511 6'b001101: s4 = 4'b1100;
512 6'b001110: s4 = 4'b0100;
513 6'b001111: s4 = 4'b1111;
514 6'b010000: s4 = 4'b1101;
515 6'b010001: s4 = 4'b1000;
516 6'b010010: s4 = 4'b1011;
517 6'b010011: s4 = 4'b0101;
518 6'b010100: s4 = 4'b0110;
519 6'b010101: s4 = 4'b1111;
520 6'b010110: s4 = 4'b0000;
521 6'b010111: s4 = 4'b0011;
522 6'b011000: s4 = 4'b0100;
523 6'b011001: s4 = 4'b0111;
524 6'b011010: s4 = 4'b0010;
525 6'b011011: s4 = 4'b1100;
526 6'b011100: s4 = 4'b0001;
527 6'b011101: s4 = 4'b1010;
528 6'b011110: s4 = 4'b1110;
529 6'b011111: s4 = 4'b1001;
530 6'b100000: s4 = 4'b1010;
531 6'b100001: s4 = 4'b0110;
532 6'b100010: s4 = 4'b1001;
533 6'b100011: s4 = 4'b0000;
534 6'b100100: s4 = 4'b1100;
535 6'b100101: s4 = 4'b1011;
536 6'b100110: s4 = 4'b0111;
537 6'b100111: s4 = 4'b1101;
538 6'b101000: s4 = 4'b1111;
539 6'b101001: s4 = 4'b0001;
540 6'b101010: s4 = 4'b0011;
541 6'b101011: s4 = 4'b1110;
542 6'b101100: s4 = 4'b0101;
543 6'b101101: s4 = 4'b0010;
544 6'b101110: s4 = 4'b1000;
545 6'b101111: s4 = 4'b0100;
546 6'b110000: s4 = 4'b0011;
547 6'b110001: s4 = 4'b1111;
548 6'b110010: s4 = 4'b0000;
549 6'b110011: s4 = 4'b0110;
550 6'b110100: s4 = 4'b1010;
551 6'b110101: s4 = 4'b0001;
552 6'b110110: s4 = 4'b1101;
553 6'b110111: s4 = 4'b1000;
554 6'b111000: s4 = 4'b1001;
555 6'b111001: s4 = 4'b0100;
556 6'b111010: s4 = 4'b0101;
557 6'b111011: s4 = 4'b1011;
558 6'b111100: s4 = 4'b1100;
559 6'b111101: s4 = 4'b0111;
560 6'b111110: s4 = 4'b0010;
561 6'b111111: s4 = 4'b1110;
562 endcase
563 endfunction
564
565 function [0:3] s5;
566 input [0:5] n6;
567 case (sa(n6))
568 6'b000000: s5 = 4'b0010;
569 6'b000001: s5 = 4'b1100;
570 6'b000010: s5 = 4'b0100;
571 6'b000011: s5 = 4'b0001;
572 6'b000100: s5 = 4'b0111;
573 6'b000101: s5 = 4'b1010;
574 6'b000110: s5 = 4'b1011;
575 6'b000111: s5 = 4'b0110;
576 6'b001000: s5 = 4'b1000;
577 6'b001001: s5 = 4'b0101;
578 6'b001010: s5 = 4'b0011;
579 6'b001011: s5 = 4'b1111;
580 6'b001100: s5 = 4'b1101;
581 6'b001101: s5 = 4'b0000;
582 6'b001110: s5 = 4'b1110;
583 6'b001111: s5 = 4'b1001;
584 6'b010000: s5 = 4'b1110;
585 6'b010001: s5 = 4'b1011;
586 6'b010010: s5 = 4'b0010;
587 6'b010011: s5 = 4'b1100;
588 6'b010100: s5 = 4'b0100;
589 6'b010101: s5 = 4'b0111;
590 6'b010110: s5 = 4'b1101;
591 6'b010111: s5 = 4'b0001;
592 6'b011000: s5 = 4'b0101;
593 6'b011001: s5 = 4'b0000;
594 6'b011010: s5 = 4'b1111;
595 6'b011011: s5 = 4'b1010;
596 6'b011100: s5 = 4'b0011;
597 6'b011101: s5 = 4'b1001;
598 6'b011110: s5 = 4'b1000;
599 6'b011111: s5 = 4'b0110;
600 6'b100000: s5 = 4'b0100;
601 6'b100001: s5 = 4'b0010;
602 6'b100010: s5 = 4'b0001;
603 6'b100011: s5 = 4'b1011;
604 6'b100100: s5 = 4'b1010;
605 6'b100101: s5 = 4'b1101;
606 6'b100110: s5 = 4'b0111;
607 6'b100111: s5 = 4'b1000;
608 6'b101000: s5 = 4'b1111;
609 6'b101001: s5 = 4'b1001;
610 6'b101010: s5 = 4'b1100;
611 6'b101011: s5 = 4'b0101;
612 6'b101100: s5 = 4'b0110;
613 6'b101101: s5 = 4'b0011;
614 6'b101110: s5 = 4'b0000;
615 6'b101111: s5 = 4'b1110;
616 6'b110000: s5 = 4'b1011;
617 6'b110001: s5 = 4'b1000;
618 6'b110010: s5 = 4'b1100;
619 6'b110011: s5 = 4'b0111;
620 6'b110100: s5 = 4'b0001;
621 6'b110101: s5 = 4'b1110;
622 6'b110110: s5 = 4'b0010;
623 6'b110111: s5 = 4'b1101;
624 6'b111000: s5 = 4'b0110;
625 6'b111001: s5 = 4'b1111;
626 6'b111010: s5 = 4'b0000;
627 6'b111011: s5 = 4'b1001;
628 6'b111100: s5 = 4'b1010;
629 6'b111101: s5 = 4'b0100;
630 6'b111110: s5 = 4'b0101;
631 6'b111111: s5 = 4'b0011;
632 endcase
633 endfunction
634
635 function [0:3] s6;
636 input [0:5] n6;
637 case (sa(n6))
638 6'b000000: s6 = 4'b1100;
639 6'b000001: s6 = 4'b0001;
640 6'b000010: s6 = 4'b1010;
641 6'b000011: s6 = 4'b1111;
642 6'b000100: s6 = 4'b1001;
643 6'b000101: s6 = 4'b0010;
644 6'b000110: s6 = 4'b0110;
645 6'b000111: s6 = 4'b1000;
646 6'b001000: s6 = 4'b0000;
647 6'b001001: s6 = 4'b1101;
648 6'b001010: s6 = 4'b0011;
649 6'b001011: s6 = 4'b0100;
650 6'b001100: s6 = 4'b1110;
651 6'b001101: s6 = 4'b0111;
652 6'b001110: s6 = 4'b0101;
653 6'b001111: s6 = 4'b1011;
654 6'b010000: s6 = 4'b1010;
655 6'b010001: s6 = 4'b1111;
656 6'b010010: s6 = 4'b0100;
657 6'b010011: s6 = 4'b0010;
658 6'b010100: s6 = 4'b0111;
659 6'b010101: s6 = 4'b1100;
660 6'b010110: s6 = 4'b1001;
661 6'b010111: s6 = 4'b0101;
662 6'b011000: s6 = 4'b0110;
663 6'b011001: s6 = 4'b0001;
664 6'b011010: s6 = 4'b1101;
665 6'b011011: s6 = 4'b1110;
666 6'b011100: s6 = 4'b0000;
667 6'b011101: s6 = 4'b1011;
668 6'b011110: s6 = 4'b0011;
669 6'b011111: s6 = 4'b1000;
670 6'b100000: s6 = 4'b1001;
671 6'b100001: s6 = 4'b1110;
672 6'b100010: s6 = 4'b1111;
673 6'b100011: s6 = 4'b0101;
674 6'b100100: s6 = 4'b0010;
675 6'b100101: s6 = 4'b1000;
676 6'b100110: s6 = 4'b1100;
677 6'b100111: s6 = 4'b0011;
678 6'b101000: s6 = 4'b0111;
679 6'b101001: s6 = 4'b0000;
680 6'b101010: s6 = 4'b0100;
681 6'b101011: s6 = 4'b1010;
682 6'b101100: s6 = 4'b0001;
683 6'b101101: s6 = 4'b1101;
684 6'b101110: s6 = 4'b1011;
685 6'b101111: s6 = 4'b0110;
686 6'b110000: s6 = 4'b0100;
687 6'b110001: s6 = 4'b0011;
688 6'b110010: s6 = 4'b0010;
689 6'b110011: s6 = 4'b1100;
690 6'b110100: s6 = 4'b1001;
691 6'b110101: s6 = 4'b0101;
692 6'b110110: s6 = 4'b1111;
693 6'b110111: s6 = 4'b1010;
694 6'b111000: s6 = 4'b1011;
695 6'b111001: s6 = 4'b1110;
696 6'b111010: s6 = 4'b0001;
697 6'b111011: s6 = 4'b0111;
698 6'b111100: s6 = 4'b0110;
699 6'b111101: s6 = 4'b0000;
700 6'b111110: s6 = 4'b1000;
701 6'b111111: s6 = 4'b1101;
702 endcase
703 endfunction
704
705 function [0:3] s7;
706 input [0:5] n6;
707 case (sa(n6))
708 6'b000000: s7 = 4'b0100;
709 6'b000001: s7 = 4'b1011;
710 6'b000010: s7 = 4'b0010;
711 6'b000011: s7 = 4'b1110;
712 6'b000100: s7 = 4'b1111;
713 6'b000101: s7 = 4'b0000;
714 6'b000110: s7 = 4'b1000;
715 6'b000111: s7 = 4'b1101;
716 6'b001000: s7 = 4'b0011;
717 6'b001001: s7 = 4'b1100;
718 6'b001010: s7 = 4'b1001;
719 6'b001011: s7 = 4'b0111;
720 6'b001100: s7 = 4'b0101;
721 6'b001101: s7 = 4'b1010;
722 6'b001110: s7 = 4'b0110;
723 6'b001111: s7 = 4'b0001;
724 6'b010000: s7 = 4'b1101;
725 6'b010001: s7 = 4'b0000;
726 6'b010010: s7 = 4'b1011;
727 6'b010011: s7 = 4'b0111;
728 6'b010100: s7 = 4'b0100;
729 6'b010101: s7 = 4'b1001;
730 6'b010110: s7 = 4'b0001;
731 6'b010111: s7 = 4'b1010;
732 6'b011000: s7 = 4'b1110;
733 6'b011001: s7 = 4'b0011;
734 6'b011010: s7 = 4'b0101;
735 6'b011011: s7 = 4'b1100;
736 6'b011100: s7 = 4'b0010;
737 6'b011101: s7 = 4'b1111;
738 6'b011110: s7 = 4'b1000;
739 6'b011111: s7 = 4'b0110;
740 6'b100000: s7 = 4'b0001;
741 6'b100001: s7 = 4'b0100;
742 6'b100010: s7 = 4'b1011;
743 6'b100011: s7 = 4'b1101;
744 6'b100100: s7 = 4'b1100;
745 6'b100101: s7 = 4'b0011;
746 6'b100110: s7 = 4'b0111;
747 6'b100111: s7 = 4'b1110;
748 6'b101000: s7 = 4'b1010;
749 6'b101001: s7 = 4'b1111;
750 6'b101010: s7 = 4'b0110;
751 6'b101011: s7 = 4'b1000;
752 6'b101100: s7 = 4'b0000;
753 6'b101101: s7 = 4'b0101;
754 6'b101110: s7 = 4'b1001;
755 6'b101111: s7 = 4'b0010;
756 6'b110000: s7 = 4'b0110;
757 6'b110001: s7 = 4'b1011;
758 6'b110010: s7 = 4'b1101;
759 6'b110011: s7 = 4'b1000;
760 6'b110100: s7 = 4'b0001;
761 6'b110101: s7 = 4'b0100;
762 6'b110110: s7 = 4'b1010;
763 6'b110111: s7 = 4'b0111;
764 6'b111000: s7 = 4'b1001;
765 6'b111001: s7 = 4'b0101;
766 6'b111010: s7 = 4'b0000;
767 6'b111011: s7 = 4'b1111;
768 6'b111100: s7 = 4'b1110;
769 6'b111101: s7 = 4'b0010;
770 6'b111110: s7 = 4'b0011;
771 6'b111111: s7 = 4'b1100;
772 endcase
773 endfunction
774
775 function [0:3] s8;
776 input [0:5] n6;
777 case (sa(n6))
778 6'b000000: s8 = 4'b1101;
779 6'b000001: s8 = 4'b0010;
780 6'b000010: s8 = 4'b1000;
781 6'b000011: s8 = 4'b0100;
782 6'b000100: s8 = 4'b0110;
783 6'b000101: s8 = 4'b1111;
784 6'b000110: s8 = 4'b1011;
785 6'b000111: s8 = 4'b0001;
786 6'b001000: s8 = 4'b1010;
787 6'b001001: s8 = 4'b1001;
788 6'b001010: s8 = 4'b0011;
789 6'b001011: s8 = 4'b1110;
790 6'b001100: s8 = 4'b0101;
791 6'b001101: s8 = 4'b0000;
792 6'b001110: s8 = 4'b1100;
793 6'b001111: s8 = 4'b0111;
794 6'b010000: s8 = 4'b0001;
795 6'b010001: s8 = 4'b1111;
796 6'b010010: s8 = 4'b1101;
797 6'b010011: s8 = 4'b1000;
798 6'b010100: s8 = 4'b1010;
799 6'b010101: s8 = 4'b0011;
800 6'b010110: s8 = 4'b0111;
801 6'b010111: s8 = 4'b0100;
802 6'b011000: s8 = 4'b1100;
803 6'b011001: s8 = 4'b0101;
804 6'b011010: s8 = 4'b0110;
805 6'b011011: s8 = 4'b1011;
806 6'b011100: s8 = 4'b0000;
807 6'b011101: s8 = 4'b1110;
808 6'b011110: s8 = 4'b1001;
809 6'b011111: s8 = 4'b0010;
810 6'b100000: s8 = 4'b0111;
811 6'b100001: s8 = 4'b1011;
812 6'b100010: s8 = 4'b0100;
813 6'b100011: s8 = 4'b0001;
814 6'b100100: s8 = 4'b1001;
815 6'b100101: s8 = 4'b1100;
816 6'b100110: s8 = 4'b1110;
817 6'b100111: s8 = 4'b0010;
818 6'b101000: s8 = 4'b0000;
819 6'b101001: s8 = 4'b0110;
820 6'b101010: s8 = 4'b1010;
821 6'b101011: s8 = 4'b1101;
822 6'b101100: s8 = 4'b1111;
823 6'b101101: s8 = 4'b0011;
824 6'b101110: s8 = 4'b0101;
825 6'b101111: s8 = 4'b1000;
826 6'b110000: s8 = 4'b0010;
827 6'b110001: s8 = 4'b0001;
828 6'b110010: s8 = 4'b1110;
829 6'b110011: s8 = 4'b0111;
830 6'b110100: s8 = 4'b0100;
831 6'b110101: s8 = 4'b1010;
832 6'b110110: s8 = 4'b1000;
833 6'b110111: s8 = 4'b1101;
834 6'b111000: s8 = 4'b1111;
835 6'b111001: s8 = 4'b1100;
836 6'b111010: s8 = 4'b1001;
837 6'b111011: s8 = 4'b0000;
838 6'b111100: s8 = 4'b0011;
839 6'b111101: s8 = 4'b0101;
840 6'b111110: s8 = 4'b0110;
841 6'b111111: s8 = 4'b1011;
842 endcase
843 endfunction
844
845 /*
846 * Local variables:
847 * tab-width: 4
848 * End:
849 */

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Rev URL

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26