Browse Subversion Repository
Contents of /trunk/Toriya/func_des.v
Parent Directory
| 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
| svn:eol-style |
native
|
| svn:keywords |
Author Date Id Rev URL
|
| |