Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/Toriya/des24.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: 3294 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
1 /**********************************************************-*-verilog-*-
2 *
3 * DES x 2’i (latency=4)
4 * $Id$
5 *
6 */
7
8 module des24(i_l, i_r, i_fk, i_k,
9 l, r, k,
10 clk5, salt, kp);
11
12 input [1:32] i_l;
13 input [1:32] i_r;
14 input [55:0] i_fk;
15 input [55:0] i_k;
16
17 output [1:32] l;
18 output [1:32] r;
19 output [55:0] k;
20
21 input clk5;
22 input [11:0] salt;
23 input [55:0] kp; // phase cache
24
25 parameter kmsk = 56'b0000_0000_1111_1111_111_111_111_111_000_000_000_000_000_000_000_000_0000;
26 parameter f_ram = 8'b1111_1111;
27 parameter krna = 1;
28 parameter krnb = krna + 2;
29
30 `include "conf.v"
31 `include "func_des.v"
32 `include "func_salt.v"
33
34 wire [27:0] i_kl, i_kr;
35 wire [1:48] ea, eb;
36 wire [1:32] lna, lnb;
37
38 reg [1:32] lna1, lnb1;
39 reg [1:32] ra1, ra2, rb1, rb2;
40 reg [55:0] ka1, ka2, kb1, kb2;
41
42 wire [1:32] qa1, qa4, qb1, qb4;
43
44 // phase cache
45 wire [27:0] kp1, kp0;
46 assign {kp1, kp0} = kp;
47
48 /****************************************************************
49 *
50 * Stage A
51 *
52 */
53
54 assign {i_kr, i_kl} = kmux(kmsk, i_fk, i_k);
55 assign ea = add_salt(salt, tr_e(i_r)) ^ {tr_pc2l(roln(pc1_l(i_kl), krna)),
56 tr_pc2r(roln(pc1_r(i_kr), krna))};
57 assign lna = ir_p(i_l);
58
59 // ƒpƒCƒvƒ‰ƒCƒ“‚đi‚ß‚é
60 always @(posedge clk5)
61 begin
62 lna1 <= lna;
63 ra1 <= i_r;
64 ra2 <= ra1;
65 ka1 <= {i_kr, i_kl};
66 ka2 <= ka1;
67 //ka2 <= wh01k(kra1);
68 end
69
70 // A-B ’†ŠÔŒ‹‰Ę
71 wire [27:0] klb, krb;
72 wire [55:0] kb;
73 wire [1:32] lb, rb;
74 assign kb = ka2;
75 assign lb = ra2;
76 assign rb = tr_p(rmuxq(f_ram, qa1, qa4));
77
78 /****************************************************************
79 *
80 * Stage B
81 *
82 */
83
84 assign {krb, klb} = kmux(kmsk, i_fk, kb);
85 assign eb = add_salt(salt, tr_e(rb)) ^ {tr_pc2l(roln(pc1_l(klb), krnb)),
86 tr_pc2r(roln(pc1_r(krb), krnb))};
87 assign lnb = ir_p(lb);
88
89 // ƒpƒCƒvƒ‰ƒCƒ“‚đi‚ß‚é
90 always @(posedge clk5)
91 begin
92 lnb1 <= lnb;
93 rb1 <= rb;
94 rb2 <= rb1;
95 kb1 <= {krb, klb};
96 kb2 <= kb1;
97 //krb2 <= wh01k(krb1);
98 end
99
100 /***************************************************************
101 *
102 * o—Í’i
103 *
104 */
105
106 assign k = kb2;
107 assign l = rb2;
108 assign r = tr_p(rmuxq(f_ram, qb1, qb4));
109
110 /***************************************************************
111 *
112 * ROMs
113 *
114 */
115 // S1x1-S8x1 ‚đs‚¤‚˝‚߂ɕK—v
116 sbrom12 sb_a(clk5, ea, lna, lna1, qa1);
117 sbrom12 sb_b(clk5, eb, lnb, lnb1, qb1);
118
119 // 2’i•Ş‚đ”C‚š‚ë!
120 sbrom24 sb_ab(clk5,
121 ea, eb, lna, lnb,
122 qa4, qb4);
123
124 /***************************************************************
125 *
126 * o—͂̐U‚蕪‚Ż
127 *
128 */
129 function [0:31] rmuxq;
130 input [7:0] f;
131 input [0:31] q1;
132 input [0:31] q0;
133 rmuxq = {f_ram[0] ? q1[ 0: 3] : q0[ 0: 3],
134 f_ram[1] ? q1[ 4: 7] : q0[ 4: 7],
135 f_ram[2] ? q1[ 8:11] : q0[ 8:11],
136 f_ram[3] ? q1[12:15] : q0[12:15],
137 f_ram[4] ? q1[16:19] : q0[16:19],
138 f_ram[5] ? q1[20:23] : q0[20:23],
139 f_ram[6] ? q1[24:27] : q0[24:27],
140 f_ram[7] ? q1[28:31] : q0[28:31]};
141 endfunction
142
143 /*
144 * “ü—Í‚ć‚čAphase‚ɉž‚ś‚˝ƒL[‚đ‡Ź‚ľ‚ĕԂˇ
145 * k, kp ‚Í big endian ‚Ĺ‚ ‚邹‚ƂɒˆÓB
146 */
147 function [27:0] wh01k;
148 input [27:0] k;
149 wh01k = k /*(k[kbn]
150 ? {kp1[27:kbn + 1], k[kbn:0]}
151 : {kp0[27:kbn + 1], k[kbn:0]})*/;
152 endfunction
153
154 endmodule
155
156 /*
157 * Local variables:
158 * tab-width: 4
159 * End:
160 */

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