| 1 |
/**********************************************************-*-verilog-*- |
| 2 |
* |
| 3 |
* 困った困ったSaltの処理 |
| 4 |
* |
| 5 |
* $Id$ |
| 6 |
* |
| 7 |
*/ |
| 8 |
|
| 9 |
/* |
| 10 |
* 01234567 -- Salt のひみつ |
| 11 |
* ./012345 0 |
| 12 |
* 6789ABCD 1 |
| 13 |
* EFGHIJKL 2 |
| 14 |
* MNOPQRST 3 |
| 15 |
* UVWXYZab 4 |
| 16 |
* cdefghij 5 |
| 17 |
* klmnopqr 6 |
| 18 |
* stuvwxyz 7 |
| 19 |
* |
| 20 |
* |
| 21 |
* 新鯖の鍵→Salt変換表 |
| 22 |
* (旧鯖は、0x2E-0x7A以外が . になる) |
| 23 |
* |
| 24 |
* 0123456789ABCDEF --- Region 0(22-22; 0x2E 以降は互換) |
| 25 |
* |
| 26 |
* GHIJKLMNOPQRSTUV 0 |
| 27 |
* WXYZabcdefghijkl 1 |
| 28 |
* mnopqrstuvwxyz./ 2 |
| 29 |
* 0123456789ABCDEF 3 |
| 30 |
* G 4 |
| 31 |
* |
| 32 |
* 0123456789ABCDEF --- Region 1(14-53; 互換) |
| 33 |
* |
| 34 |
* ABCDEFGHIJKLMNO 4 |
| 35 |
* PQRSTUVWXYZabcde 5 |
| 36 |
* f 6 |
| 37 |
* |
| 38 |
* 0123456789ABCDEF --- Region 2(46-04; 0x7Bまでは互換) |
| 39 |
* |
| 40 |
* abcdefghijklmno 6 |
| 41 |
* pqrstuvwxyz./012 7 (0x7F(04) は出現不可) |
| 42 |
* |
| 43 |
* 0123456789ABCDEF --- Region 3(22-21; Region 0 と連続) |
| 44 |
* |
| 45 |
* GHIJKLMNOPQRSTUV 8 |
| 46 |
* WXYZabcdefghijkl 9 |
| 47 |
* mnopqrstuvwxyz./ A |
| 48 |
* 0123456789ABCDEF B |
| 49 |
* GHIJKLMNOPQRSTUV C |
| 50 |
* WXYZabcdefghijkl D |
| 51 |
* mnopqrstuvwxyz./ E |
| 52 |
* 0123456789ABCDEF F |
| 53 |
*/ |
| 54 |
|
| 55 |
/* |
| 56 |
* 鍵の一部からSaltビットをつくりだす |
| 57 |
* これはトリップ特有の仕様である。 |
| 58 |
* っていうか悪の元凶!!! |
| 59 |
*/ |
| 60 |
|
| 61 |
function [5:0] mksalt; |
| 62 |
input [7:0] n; |
| 63 |
if (n < 8'h2E |
| 64 |
|| 8'h7A < n |
| 65 |
|| n == 8'h3C |
| 66 |
|| n == 8'h3E) |
| 67 |
mksalt = 6'o00; // 強制旧鯖仕様 |
| 68 |
else if (8'h61 <= n && n <= 8'h7F) |
| 69 |
mksalt = n - (8'h61 - 6'o46); |
| 70 |
else if (8'h41 <= n && n < 8'h61) |
| 71 |
mksalt = n - (8'h41 - 6'o14); |
| 72 |
else |
| 73 |
mksalt = n - 8'h2E; |
| 74 |
endfunction |
| 75 |
|
| 76 |
/* |
| 77 |
* Saltビットに応じてビットの入れ替えを行う |
| 78 |
*/ |
| 79 |
function salt_mux0; |
| 80 |
input salt; |
| 81 |
input e0; |
| 82 |
input e1; |
| 83 |
salt_mux0 = (salt ? e1 : e0); |
| 84 |
endfunction |
| 85 |
|
| 86 |
function salt_mux1; |
| 87 |
input salt; |
| 88 |
input e0; |
| 89 |
input e1; |
| 90 |
salt_mux1 = (salt ? e0 : e1); |
| 91 |
endfunction |
| 92 |
|
| 93 |
function [0:47] add_salt; |
| 94 |
input [11:0] salt; |
| 95 |
input [0:47] e; |
| 96 |
add_salt = {salt_mux0(salt[ 0], e[ 0], e[24]), |
| 97 |
salt_mux0(salt[ 1], e[ 1], e[25]), |
| 98 |
salt_mux0(salt[ 2], e[ 2], e[26]), |
| 99 |
salt_mux0(salt[ 3], e[ 3], e[27]), |
| 100 |
salt_mux0(salt[ 4], e[ 4], e[28]), |
| 101 |
salt_mux0(salt[ 5], e[ 5], e[29]), |
| 102 |
salt_mux0(salt[ 6], e[ 6], e[30]), |
| 103 |
salt_mux0(salt[ 7], e[ 7], e[31]), |
| 104 |
salt_mux0(salt[ 8], e[ 8], e[32]), |
| 105 |
salt_mux0(salt[ 9], e[ 9], e[33]), |
| 106 |
salt_mux0(salt[10], e[10], e[34]), |
| 107 |
salt_mux0(salt[11], e[11], e[35]), |
| 108 |
e[12:23], |
| 109 |
salt_mux1(salt[ 0], e[ 0], e[24]), |
| 110 |
salt_mux1(salt[ 1], e[ 1], e[25]), |
| 111 |
salt_mux1(salt[ 2], e[ 2], e[26]), |
| 112 |
salt_mux1(salt[ 3], e[ 3], e[27]), |
| 113 |
salt_mux1(salt[ 4], e[ 4], e[28]), |
| 114 |
salt_mux1(salt[ 5], e[ 5], e[29]), |
| 115 |
salt_mux1(salt[ 6], e[ 6], e[30]), |
| 116 |
salt_mux1(salt[ 7], e[ 7], e[31]), |
| 117 |
salt_mux1(salt[ 8], e[ 8], e[32]), |
| 118 |
salt_mux1(salt[ 9], e[ 9], e[33]), |
| 119 |
salt_mux1(salt[10], e[10], e[34]), |
| 120 |
salt_mux1(salt[11], e[11], e[35]), |
| 121 |
e[36:47]}; |
| 122 |
endfunction |
| 123 |
|
| 124 |
/* |
| 125 |
* Local variables: |
| 126 |
* tab-width: 4 |
| 127 |
* End: |
| 128 |
*/ |