OpenCores
URL https://opencores.org/ocsvn/aes-encryption/aes-encryption/trunk

Subversion Repositories aes-encryption

[/] [aes-encryption/] [trunk/] [aes_1cycle_1stage/] [aes_cipher_top.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tariq786
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  AES Cipher Top Level                                       ////
4
////                                                             ////
5
////                                                             ////
6
////  Author: Rudolf Usselmann                                   ////
7
////          rudi@asics.ws                                      ////
8
////                                                             ////
9
////                                                             ////
10
////  Downloaded from: http://www.opencores.org/cores/aes_core/  ////
11
////                                                             ////
12
/////////////////////////////////////////////////////////////////////
13
////                                                             ////
14
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
15
////                         www.asics.ws                        ////
16
////                         rudi@asics.ws                       ////
17
////                                                             ////
18
//// This source file may be used and distributed without        ////
19
//// restriction provided that this copyright statement is not   ////
20
//// removed from the file and that any derivative work contains ////
21
//// the original copyright notice and the associated disclaimer.////
22
////                                                             ////
23
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
24
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
25
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
26
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
27
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
28
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
29
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
30
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
31
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
32
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
33
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
34
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
35
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
36
////                                                             ////
37
/////////////////////////////////////////////////////////////////////
38
 
39
//// Modified to achieve 1 cycle functionality                       ////
40
//// By Tariq Bashir Ahmad                                           ////       
41
////  tariq.bashir@gmail.com                                         ////
42
////  http://www.ecs.umass.edu/~tbashir                              ////       
43
 
44
 
45
 
46
`timescale 1 ns/1 ps
47
 
48 3 tariq786
module aes_cipher_top(clk, rst, ld, done, key, text_in, text_out);
49 2 tariq786
 
50
input           clk, rst;
51
input           ld;
52
output          done;
53
input   [127:0]  key;
54
input   [127:0]  text_in;
55
output  [127:0]  text_out;
56
 
57
 
58
reg     [127:0]  text_in_r;
59
reg     [127:0]  text_out;
60
 
61
////////////////////////////////////////////////////////////////////
62
//
63
// Local Wires
64
//
65
 
66
wire    [31:0]   w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16, w17, w18, w19, w20, w21, w22,
67
               w23, w24, w25, w26, w27, w28, w29, w30, w31, w32, w33, w34, w35, w36, w37, w38, w39, w40, w41, w42, w43;
68
 
69
reg     [127:0]  text_out_temp;
70
 
71
//round 1 wires
72
reg     [7:0]    sa00, sa01, sa02, sa03;
73
reg     [7:0]    sa10, sa11, sa12, sa13;
74
reg     [7:0]    sa20, sa21, sa22, sa23;
75
reg     [7:0]    sa30, sa31, sa32, sa33;
76
 
77
wire    [7:0]    sa00_next, sa01_next, sa02_next, sa03_next;
78
wire    [7:0]    sa10_next, sa11_next, sa12_next, sa13_next;
79
wire    [7:0]    sa20_next, sa21_next, sa22_next, sa23_next;
80
wire    [7:0]    sa30_next, sa31_next, sa32_next, sa33_next;
81
 
82
wire    [7:0]    sa00_sub, sa01_sub, sa02_sub, sa03_sub;
83
wire    [7:0]    sa10_sub, sa11_sub, sa12_sub, sa13_sub;
84
wire  [7:0]      sa20_sub, sa21_sub, sa22_sub, sa23_sub;
85
wire    [7:0]    sa30_sub, sa31_sub, sa32_sub, sa33_sub;
86
 
87
wire    [7:0]    sa00_sr, sa01_sr, sa02_sr, sa03_sr;
88
wire    [7:0]    sa10_sr, sa11_sr, sa12_sr, sa13_sr;
89
wire    [7:0]    sa20_sr, sa21_sr, sa22_sr, sa23_sr;
90
wire    [7:0]    sa30_sr, sa31_sr, sa32_sr, sa33_sr;
91
 
92
wire    [7:0]    sa00_mc, sa01_mc, sa02_mc, sa03_mc;
93
wire    [7:0]    sa10_mc, sa11_mc, sa12_mc, sa13_mc;
94
wire    [7:0]    sa20_mc, sa21_mc, sa22_mc, sa23_mc;
95
wire    [7:0]    sa30_mc, sa31_mc, sa32_mc, sa33_mc;
96
 
97
 
98
//round2 wires
99
wire    [7:0]    sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2;
100
wire    [7:0]    sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2;
101
wire    [7:0]    sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2;
102
wire    [7:0]    sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2;
103
 
104
wire    [7:0]    sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2;
105
wire    [7:0]    sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2;
106
wire  [7:0]      sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2;
107
wire    [7:0]    sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2;
108
 
109
wire    [7:0]    sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2;
110
wire    [7:0]    sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2;
111
wire    [7:0]    sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2;
112
wire    [7:0]    sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2;
113
 
114
wire    [7:0]    sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2;
115
wire    [7:0]    sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2;
116
wire    [7:0]    sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2;
117
wire    [7:0]    sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2;
118
 
119
 
120
//round3 wires
121
wire    [7:0]    sa00_next_round3, sa01_next_round3, sa02_next_round3, sa03_next_round3;
122
wire    [7:0]    sa10_next_round3, sa11_next_round3, sa12_next_round3, sa13_next_round3;
123
wire    [7:0]    sa20_next_round3, sa21_next_round3, sa22_next_round3, sa23_next_round3;
124
wire    [7:0]    sa30_next_round3, sa31_next_round3, sa32_next_round3, sa33_next_round3;
125
 
126
wire    [7:0]    sa00_sub_round3, sa01_sub_round3, sa02_sub_round3, sa03_sub_round3;
127
wire    [7:0]    sa10_sub_round3, sa11_sub_round3, sa12_sub_round3, sa13_sub_round3;
128
wire  [7:0]      sa20_sub_round3, sa21_sub_round3, sa22_sub_round3, sa23_sub_round3;
129
wire    [7:0]    sa30_sub_round3, sa31_sub_round3, sa32_sub_round3, sa33_sub_round3;
130
 
131
wire    [7:0]    sa00_sr_round3, sa01_sr_round3, sa02_sr_round3, sa03_sr_round3;
132
wire    [7:0]    sa10_sr_round3, sa11_sr_round3, sa12_sr_round3, sa13_sr_round3;
133
wire    [7:0]    sa20_sr_round3, sa21_sr_round3, sa22_sr_round3, sa23_sr_round3;
134
wire    [7:0]    sa30_sr_round3, sa31_sr_round3, sa32_sr_round3, sa33_sr_round3;
135
 
136
wire    [7:0]    sa00_mc_round3, sa01_mc_round3, sa02_mc_round3, sa03_mc_round3;
137
wire    [7:0]    sa10_mc_round3, sa11_mc_round3, sa12_mc_round3, sa13_mc_round3;
138
wire    [7:0]    sa20_mc_round3, sa21_mc_round3, sa22_mc_round3, sa23_mc_round3;
139
wire    [7:0]    sa30_mc_round3, sa31_mc_round3, sa32_mc_round3, sa33_mc_round3;
140
 
141
 
142
 
143
//round4 wires
144
wire    [7:0]    sa00_next_round4, sa01_next_round4, sa02_next_round4, sa03_next_round4;
145
wire    [7:0]    sa10_next_round4, sa11_next_round4, sa12_next_round4, sa13_next_round4;
146
wire    [7:0]    sa20_next_round4, sa21_next_round4, sa22_next_round4, sa23_next_round4;
147
wire    [7:0]    sa30_next_round4, sa31_next_round4, sa32_next_round4, sa33_next_round4;
148
 
149
wire    [7:0]    sa00_sub_round4, sa01_sub_round4, sa02_sub_round4, sa03_sub_round4;
150
wire    [7:0]    sa10_sub_round4, sa11_sub_round4, sa12_sub_round4, sa13_sub_round4;
151
wire  [7:0]      sa20_sub_round4, sa21_sub_round4, sa22_sub_round4, sa23_sub_round4;
152
wire    [7:0]    sa30_sub_round4, sa31_sub_round4, sa32_sub_round4, sa33_sub_round4;
153
 
154
wire    [7:0]    sa00_sr_round4, sa01_sr_round4, sa02_sr_round4, sa03_sr_round4;
155
wire    [7:0]    sa10_sr_round4, sa11_sr_round4, sa12_sr_round4, sa13_sr_round4;
156
wire    [7:0]    sa20_sr_round4, sa21_sr_round4, sa22_sr_round4, sa23_sr_round4;
157
wire    [7:0]    sa30_sr_round4, sa31_sr_round4, sa32_sr_round4, sa33_sr_round4;
158
 
159
wire    [7:0]    sa00_mc_round4, sa01_mc_round4, sa02_mc_round4, sa03_mc_round4;
160
wire    [7:0]    sa10_mc_round4, sa11_mc_round4, sa12_mc_round4, sa13_mc_round4;
161
wire    [7:0]    sa20_mc_round4, sa21_mc_round4, sa22_mc_round4, sa23_mc_round4;
162
wire    [7:0]    sa30_mc_round4, sa31_mc_round4, sa32_mc_round4, sa33_mc_round4;
163
 
164
//round5 wires
165
wire    [7:0]    sa00_next_round5, sa01_next_round5, sa02_next_round5, sa03_next_round5;
166
wire    [7:0]    sa10_next_round5, sa11_next_round5, sa12_next_round5, sa13_next_round5;
167
wire    [7:0]    sa20_next_round5, sa21_next_round5, sa22_next_round5, sa23_next_round5;
168
wire    [7:0]    sa30_next_round5, sa31_next_round5, sa32_next_round5, sa33_next_round5;
169
 
170
wire    [7:0]    sa00_sub_round5, sa01_sub_round5, sa02_sub_round5, sa03_sub_round5;
171
wire    [7:0]    sa10_sub_round5, sa11_sub_round5, sa12_sub_round5, sa13_sub_round5;
172
wire  [7:0]      sa20_sub_round5, sa21_sub_round5, sa22_sub_round5, sa23_sub_round5;
173
wire    [7:0]    sa30_sub_round5, sa31_sub_round5, sa32_sub_round5, sa33_sub_round5;
174
 
175
wire    [7:0]    sa00_sr_round5, sa01_sr_round5, sa02_sr_round5, sa03_sr_round5;
176
wire    [7:0]    sa10_sr_round5, sa11_sr_round5, sa12_sr_round5, sa13_sr_round5;
177
wire    [7:0]    sa20_sr_round5, sa21_sr_round5, sa22_sr_round5, sa23_sr_round5;
178
wire    [7:0]    sa30_sr_round5, sa31_sr_round5, sa32_sr_round5, sa33_sr_round5;
179
 
180
wire    [7:0]    sa00_mc_round5, sa01_mc_round5, sa02_mc_round5, sa03_mc_round5;
181
wire    [7:0]    sa10_mc_round5, sa11_mc_round5, sa12_mc_round5, sa13_mc_round5;
182
wire    [7:0]    sa20_mc_round5, sa21_mc_round5, sa22_mc_round5, sa23_mc_round5;
183
wire    [7:0]    sa30_mc_round5, sa31_mc_round5, sa32_mc_round5, sa33_mc_round5;
184
 
185
 
186
//round6 wires
187
wire    [7:0]    sa00_next_round6, sa01_next_round6, sa02_next_round6, sa03_next_round6;
188
wire    [7:0]    sa10_next_round6, sa11_next_round6, sa12_next_round6, sa13_next_round6;
189
wire    [7:0]    sa20_next_round6, sa21_next_round6, sa22_next_round6, sa23_next_round6;
190
wire    [7:0]    sa30_next_round6, sa31_next_round6, sa32_next_round6, sa33_next_round6;
191
 
192
wire    [7:0]    sa00_sub_round6, sa01_sub_round6, sa02_sub_round6, sa03_sub_round6;
193
wire    [7:0]    sa10_sub_round6, sa11_sub_round6, sa12_sub_round6, sa13_sub_round6;
194
wire  [7:0]      sa20_sub_round6, sa21_sub_round6, sa22_sub_round6, sa23_sub_round6;
195
wire    [7:0]    sa30_sub_round6, sa31_sub_round6, sa32_sub_round6, sa33_sub_round6;
196
 
197
wire    [7:0]    sa00_sr_round6, sa01_sr_round6, sa02_sr_round6, sa03_sr_round6;
198
wire    [7:0]    sa10_sr_round6, sa11_sr_round6, sa12_sr_round6, sa13_sr_round6;
199
wire    [7:0]    sa20_sr_round6, sa21_sr_round6, sa22_sr_round6, sa23_sr_round6;
200
wire    [7:0]    sa30_sr_round6, sa31_sr_round6, sa32_sr_round6, sa33_sr_round6;
201
 
202
wire    [7:0]    sa00_mc_round6, sa01_mc_round6, sa02_mc_round6, sa03_mc_round6;
203
wire    [7:0]    sa10_mc_round6, sa11_mc_round6, sa12_mc_round6, sa13_mc_round6;
204
wire    [7:0]    sa20_mc_round6, sa21_mc_round6, sa22_mc_round6, sa23_mc_round6;
205
wire    [7:0]    sa30_mc_round6, sa31_mc_round6, sa32_mc_round6, sa33_mc_round6;
206
 
207
 
208
//round7 wires
209
wire    [7:0]    sa00_next_round7, sa01_next_round7, sa02_next_round7, sa03_next_round7;
210
wire    [7:0]    sa10_next_round7, sa11_next_round7, sa12_next_round7, sa13_next_round7;
211
wire    [7:0]    sa20_next_round7, sa21_next_round7, sa22_next_round7, sa23_next_round7;
212
wire    [7:0]    sa30_next_round7, sa31_next_round7, sa32_next_round7, sa33_next_round7;
213
 
214
wire    [7:0]    sa00_sub_round7, sa01_sub_round7, sa02_sub_round7, sa03_sub_round7;
215
wire    [7:0]    sa10_sub_round7, sa11_sub_round7, sa12_sub_round7, sa13_sub_round7;
216
wire  [7:0]      sa20_sub_round7, sa21_sub_round7, sa22_sub_round7, sa23_sub_round7;
217
wire    [7:0]    sa30_sub_round7, sa31_sub_round7, sa32_sub_round7, sa33_sub_round7;
218
 
219
wire    [7:0]    sa00_sr_round7, sa01_sr_round7, sa02_sr_round7, sa03_sr_round7;
220
wire    [7:0]    sa10_sr_round7, sa11_sr_round7, sa12_sr_round7, sa13_sr_round7;
221
wire    [7:0]    sa20_sr_round7, sa21_sr_round7, sa22_sr_round7, sa23_sr_round7;
222
wire    [7:0]    sa30_sr_round7, sa31_sr_round7, sa32_sr_round7, sa33_sr_round7;
223
 
224
wire    [7:0]    sa00_mc_round7, sa01_mc_round7, sa02_mc_round7, sa03_mc_round7;
225
wire    [7:0]    sa10_mc_round7, sa11_mc_round7, sa12_mc_round7, sa13_mc_round7;
226
wire    [7:0]    sa20_mc_round7, sa21_mc_round7, sa22_mc_round7, sa23_mc_round7;
227
wire    [7:0]    sa30_mc_round7, sa31_mc_round7, sa32_mc_round7, sa33_mc_round7;
228
 
229
 
230
//round8 wires
231
wire    [7:0]    sa00_next_round8, sa01_next_round8, sa02_next_round8, sa03_next_round8;
232
wire    [7:0]    sa10_next_round8, sa11_next_round8, sa12_next_round8, sa13_next_round8;
233
wire    [7:0]    sa20_next_round8, sa21_next_round8, sa22_next_round8, sa23_next_round8;
234
wire    [7:0]    sa30_next_round8, sa31_next_round8, sa32_next_round8, sa33_next_round8;
235
 
236
wire    [7:0]    sa00_sub_round8, sa01_sub_round8, sa02_sub_round8, sa03_sub_round8;
237
wire    [7:0]    sa10_sub_round8, sa11_sub_round8, sa12_sub_round8, sa13_sub_round8;
238
wire  [7:0]      sa20_sub_round8, sa21_sub_round8, sa22_sub_round8, sa23_sub_round8;
239
wire    [7:0]    sa30_sub_round8, sa31_sub_round8, sa32_sub_round8, sa33_sub_round8;
240
 
241
wire    [7:0]    sa00_sr_round8, sa01_sr_round8, sa02_sr_round8, sa03_sr_round8;
242
wire    [7:0]    sa10_sr_round8, sa11_sr_round8, sa12_sr_round8, sa13_sr_round8;
243
wire    [7:0]    sa20_sr_round8, sa21_sr_round8, sa22_sr_round8, sa23_sr_round8;
244
wire    [7:0]    sa30_sr_round8, sa31_sr_round8, sa32_sr_round8, sa33_sr_round8;
245
 
246
wire    [7:0]    sa00_mc_round8, sa01_mc_round8, sa02_mc_round8, sa03_mc_round8;
247
wire    [7:0]    sa10_mc_round8, sa11_mc_round8, sa12_mc_round8, sa13_mc_round8;
248
wire    [7:0]    sa20_mc_round8, sa21_mc_round8, sa22_mc_round8, sa23_mc_round8;
249
wire    [7:0]    sa30_mc_round8, sa31_mc_round8, sa32_mc_round8, sa33_mc_round8;
250
 
251
 
252
//round9 wires
253
wire    [7:0]    sa00_next_round9, sa01_next_round9, sa02_next_round9, sa03_next_round9;
254
wire    [7:0]    sa10_next_round9, sa11_next_round9, sa12_next_round9, sa13_next_round9;
255
wire    [7:0]    sa20_next_round9, sa21_next_round9, sa22_next_round9, sa23_next_round9;
256
wire    [7:0]    sa30_next_round9, sa31_next_round9, sa32_next_round9, sa33_next_round9;
257
 
258
wire    [7:0]    sa00_sub_round9, sa01_sub_round9, sa02_sub_round9, sa03_sub_round9;
259
wire    [7:0]    sa10_sub_round9, sa11_sub_round9, sa12_sub_round9, sa13_sub_round9;
260
wire  [7:0]      sa20_sub_round9, sa21_sub_round9, sa22_sub_round9, sa23_sub_round9;
261
wire    [7:0]    sa30_sub_round9, sa31_sub_round9, sa32_sub_round9, sa33_sub_round9;
262
 
263
wire    [7:0]    sa00_sr_round9, sa01_sr_round9, sa02_sr_round9, sa03_sr_round9;
264
wire    [7:0]    sa10_sr_round9, sa11_sr_round9, sa12_sr_round9, sa13_sr_round9;
265
wire    [7:0]    sa20_sr_round9, sa21_sr_round9, sa22_sr_round9, sa23_sr_round9;
266
wire    [7:0]    sa30_sr_round9, sa31_sr_round9, sa32_sr_round9, sa33_sr_round9;
267
 
268
wire    [7:0]    sa00_mc_round9, sa01_mc_round9, sa02_mc_round9, sa03_mc_round9;
269
wire    [7:0]    sa10_mc_round9, sa11_mc_round9, sa12_mc_round9, sa13_mc_round9;
270
wire    [7:0]    sa20_mc_round9, sa21_mc_round9, sa22_mc_round9, sa23_mc_round9;
271
wire    [7:0]    sa30_mc_round9, sa31_mc_round9, sa32_mc_round9, sa33_mc_round9;
272
 
273
 
274
//round10 wires
275
wire    [7:0]    sa00_next_round10, sa01_next_round10, sa02_next_round10, sa03_next_round10;
276
wire    [7:0]    sa10_next_round10, sa11_next_round10, sa12_next_round10, sa13_next_round10;
277
wire    [7:0]    sa20_next_round10, sa21_next_round10, sa22_next_round10, sa23_next_round10;
278
wire    [7:0]    sa30_next_round10, sa31_next_round10, sa32_next_round10, sa33_next_round10;
279
 
280
wire    [7:0]    sa00_sub_round10, sa01_sub_round10, sa02_sub_round10, sa03_sub_round10;
281
wire    [7:0]    sa10_sub_round10, sa11_sub_round10, sa12_sub_round10, sa13_sub_round10;
282
wire  [7:0]      sa20_sub_round10, sa21_sub_round10, sa22_sub_round10, sa23_sub_round10;
283
wire    [7:0]    sa30_sub_round10, sa31_sub_round10, sa32_sub_round10, sa33_sub_round10;
284
 
285
wire    [7:0]    sa00_sr_round10, sa01_sr_round10, sa02_sr_round10, sa03_sr_round10;
286
wire    [7:0]    sa10_sr_round10, sa11_sr_round10, sa12_sr_round10, sa13_sr_round10;
287
wire    [7:0]    sa20_sr_round10, sa21_sr_round10, sa22_sr_round10, sa23_sr_round10;
288
wire    [7:0]    sa30_sr_round10, sa31_sr_round10, sa32_sr_round10, sa33_sr_round10;
289
 
290
 
291
 
292
reg             done, ld_r;
293
reg     [3:0]    dcnt;
294
reg             done2;
295
 
296
////////////////////////////////////////////////////////////////////
297
//
298
// Misc Logic
299
//
300
 
301
always @(posedge clk)
302
begin
303 3 tariq786
        if(~rst)        begin dcnt <=  4'h0;     end
304 2 tariq786
        else
305
        if(ld)  begin   dcnt <=  4'h2;   end
306
        else
307
        if(|dcnt) begin dcnt <=  dcnt - 4'h1;  end
308
 
309
end
310
 
311
always @(posedge clk) done <=  !(|dcnt[3:1]) & dcnt[0] & !ld;
312
always @(posedge clk) if(ld) text_in_r <=  text_in;
313
always @(posedge clk) ld_r <=  ld;
314
 
315
 
316
 
317
////////////////////////////////////////////////////////////////////
318
// key expansion
319
 
320
 
321
aes_key_expand_128 u0(
322
        .clk(           clk     ),
323
        .key(           key     ),
324
        .w0(            w0      ),
325
        .w1(            w1      ),
326
        .w2(            w2      ),
327
        .w3(            w3      ),
328
        .w4(            w4      ),
329
        .w5(            w5      ),
330
        .w6(            w6      ),
331
        .w7(            w7      ),
332
        .w8(            w8      ),
333
        .w9(            w9      ),
334
        .w10(           w10     ),
335
        .w11(           w11     ),
336
        .w12(           w12     ),
337
        .w13(           w13     ),
338
        .w14(           w14     ),
339
        .w15(           w15     ),
340
        .w16(           w16     ),
341
        .w17(           w17     ),
342
        .w18(           w18     ),
343
        .w19(           w19     ),
344
        .w20(           w20     ),
345
        .w21(           w21     ),
346
        .w22(           w22     ),
347
        .w23(           w23     ),
348
        .w24(           w24     ),
349
        .w25(           w25     ),
350
        .w26(           w26     ),
351
        .w27(           w27     ),
352
        .w28(           w28     ),
353
        .w29(           w29     ),
354
        .w30(           w30     ),
355
        .w31(           w31     ),
356
        .w32(           w32     ),
357
        .w33(           w33     ),
358
        .w34(           w34     ),
359
        .w35(           w35     ),
360
        .w36(           w36     ),
361
        .w37(           w37     ),
362
        .w38(           w38     ),
363
        .w39(           w39     ),
364
        .w40(           w40     ),
365
        .w41(           w41     ),
366
        .w42(           w42     ),
367
        .w43(           w43     )
368
                                        );
369
 
370
always @(posedge clk)
371
begin
372
        sa33 <=   text_in_r[007:000] ^ w3[07:00]; //sa33_mc_round2 ^ w3[07:00];
373
        sa23 <=   text_in_r[015:008] ^ w3[15:08]; //sa23_mc_round2 ^ w3[15:08];
374
        sa13 <=   text_in_r[023:016] ^ w3[23:16]; //sa13_mc_round2 ^ w3[23:16];
375
        sa03 <=   text_in_r[031:024] ^ w3[31:24]; //sa03_mc_round2 ^ w3[31:24];
376
        sa32 <=   text_in_r[039:032] ^ w2[07:00]; //sa32_mc_round2 ^ w2[07:00];
377
        sa22 <=   text_in_r[047:040] ^ w2[15:08]; //sa22_mc_round2 ^ w2[15:08];
378
        sa12 <=   text_in_r[055:048] ^ w2[23:16]; //sa12_mc_round2 ^ w2[23:16];
379
        sa02 <=   text_in_r[063:056] ^ w2[31:24]; //sa02_mc_round2 ^ w2[31:24];
380
        sa31 <=   text_in_r[071:064] ^ w1[07:00]; //sa31_mc_round2 ^ w1[07:00];
381
        sa21 <=   text_in_r[079:072] ^ w1[15:08]; //sa21_mc_round2 ^ w1[15:08];
382
        sa11 <=   text_in_r[087:080] ^ w1[23:16]; //sa11_mc_round2 ^ w1[23:16];
383
        sa01 <=   text_in_r[095:088] ^ w1[31:24]; //sa01_mc_round2 ^ w1[31:24];
384
        sa30 <=   text_in_r[103:096] ^ w0[07:00]; //sa30_mc_round2 ^ w0[07:00];
385
        sa20 <=   text_in_r[111:104] ^ w0[15:08]; //sa20_mc_round2 ^ w0[15:08];
386
        sa10 <=   text_in_r[119:112] ^ w0[23:16]; //sa10_mc_round2 ^ w0[23:16];
387
        sa00 <=   text_in_r[127:120] ^ w0[31:24]; //sa00_mc_round2 ^ w0[31:24];
388
 
389
end
390
 
391
 
392
//sbox lookup
393
aes_sbox us00(  .a(     sa00    ), .d(  sa00_sub        ));
394
aes_sbox us01(  .a(     sa01    ), .d(  sa01_sub        ));
395
aes_sbox us02(  .a(     sa02    ), .d(  sa02_sub        ));
396
aes_sbox us03(  .a(     sa03    ), .d(  sa03_sub        ));
397
aes_sbox us10(  .a(     sa10    ), .d(  sa10_sub        ));
398
aes_sbox us11(  .a(     sa11    ), .d(  sa11_sub        ));
399
aes_sbox us12(  .a(     sa12    ), .d(  sa12_sub        ));
400
aes_sbox us13(  .a(     sa13    ), .d(  sa13_sub        ));
401
aes_sbox us20(  .a(     sa20    ), .d(  sa20_sub        ));
402
aes_sbox us21(  .a(     sa21    ), .d(  sa21_sub        ));
403
aes_sbox us22(  .a(     sa22    ), .d(  sa22_sub        ));
404
aes_sbox us23(  .a(     sa23    ), .d(  sa23_sub        ));
405
aes_sbox us30(  .a(     sa30    ), .d(  sa30_sub        ));
406
aes_sbox us31(  .a(     sa31    ), .d(  sa31_sub        ));
407
aes_sbox us32(  .a(     sa32    ), .d(  sa32_sub        ));
408
aes_sbox us33(  .a(     sa33    ), .d(  sa33_sub        ));
409
 
410
//shift rows
411
 
412
assign sa00_sr = sa00_sub;              //
413
assign sa01_sr = sa01_sub;              //no shift
414
assign sa02_sr = sa02_sub;              //
415
assign sa03_sr = sa03_sub;              //
416
 
417
assign sa10_sr = sa11_sub;              //
418
assign sa11_sr = sa12_sub;              // left shift by 1
419
assign sa12_sr = sa13_sub;              //
420
assign sa13_sr = sa10_sub;              //
421
 
422
assign sa20_sr = sa22_sub;              //
423
assign sa21_sr = sa23_sub;              //      left shift by 2
424
assign sa22_sr = sa20_sub;              //
425
assign sa23_sr = sa21_sub;              //
426
 
427
assign sa30_sr = sa33_sub;              //
428
assign sa31_sr = sa30_sub;              // left shift by 3
429
assign sa32_sr = sa31_sub;              //
430
assign sa33_sr = sa32_sub;              //
431
 
432
// mix column operation
433
assign {sa00_mc, sa10_mc, sa20_mc, sa30_mc}  = mix_col(sa00_sr,sa10_sr,sa20_sr,sa30_sr);
434
assign {sa01_mc, sa11_mc, sa21_mc, sa31_mc}  = mix_col(sa01_sr,sa11_sr,sa21_sr,sa31_sr);
435
assign {sa02_mc, sa12_mc, sa22_mc, sa32_mc}  = mix_col(sa02_sr,sa12_sr,sa22_sr,sa32_sr);
436
assign {sa03_mc, sa13_mc, sa23_mc, sa33_mc}  = mix_col(sa03_sr,sa13_sr,sa23_sr,sa33_sr);
437
 
438
//// add round key
439
assign sa00_next_round2 = sa00_mc ^ w4[31:24];
440
assign sa01_next_round2 = sa01_mc ^ w5[31:24];
441
assign sa02_next_round2 = sa02_mc ^ w6[31:24];
442
assign sa03_next_round2 = sa03_mc ^ w7[31:24];
443
assign sa10_next_round2 = sa10_mc ^ w4[23:16];
444
assign sa11_next_round2 = sa11_mc ^ w5[23:16];
445
assign sa12_next_round2 = sa12_mc ^ w6[23:16];
446
assign sa13_next_round2 = sa13_mc ^ w7[23:16];
447
assign sa20_next_round2 = sa20_mc ^ w4[15:08];
448
assign sa21_next_round2 = sa21_mc ^ w5[15:08];
449
assign sa22_next_round2 = sa22_mc ^ w6[15:08];
450
assign sa23_next_round2 = sa23_mc ^ w7[15:08];
451
assign sa30_next_round2 = sa30_mc ^ w4[07:00];
452
assign sa31_next_round2 = sa31_mc ^ w5[07:00];
453
assign sa32_next_round2 = sa32_mc ^ w6[07:00];
454
assign sa33_next_round2 = sa33_mc ^ w7[07:00];
455
 
456
 
457
 
458
//////////////////////  round 2 //////////////////////////////////
459
 
460
//sbox lookup
461
aes_sbox us00_round2(   .a(     sa00_next_round2        ), .d(  sa00_sub_round2 ));
462
aes_sbox us01_round2(   .a(     sa01_next_round2        ), .d(  sa01_sub_round2 ));
463
aes_sbox us02_round2(   .a(     sa02_next_round2        ), .d(  sa02_sub_round2 ));
464
aes_sbox us03_round2(   .a(     sa03_next_round2        ), .d(  sa03_sub_round2 ));
465
aes_sbox us10_round2(   .a(     sa10_next_round2        ), .d(  sa10_sub_round2 ));
466
aes_sbox us11_round2(   .a(     sa11_next_round2        ), .d(  sa11_sub_round2 ));
467
aes_sbox us12_round2(   .a(     sa12_next_round2        ), .d(  sa12_sub_round2 ));
468
aes_sbox us13_round2(   .a(     sa13_next_round2        ), .d(  sa13_sub_round2 ));
469
aes_sbox us20_round2(   .a(     sa20_next_round2        ), .d(  sa20_sub_round2 ));
470
aes_sbox us21_round2(   .a(     sa21_next_round2        ), .d(  sa21_sub_round2 ));
471
aes_sbox us22_round2(   .a(     sa22_next_round2        ), .d(  sa22_sub_round2 ));
472
aes_sbox us23_round2(   .a(     sa23_next_round2        ), .d(  sa23_sub_round2 ));
473
aes_sbox us30_round2(   .a(     sa30_next_round2        ), .d(  sa30_sub_round2 ));
474
aes_sbox us31_round2(   .a(     sa31_next_round2        ), .d(  sa31_sub_round2 ));
475
aes_sbox us32_round2(   .a(     sa32_next_round2        ), .d(  sa32_sub_round2 ));
476
aes_sbox us33_round2(   .a(     sa33_next_round2        ), .d(  sa33_sub_round2 ));
477
 
478
//shift rows
479
 
480
assign sa00_sr_round2 = sa00_sub_round2;                //
481
assign sa01_sr_round2 = sa01_sub_round2;                //no shift
482
assign sa02_sr_round2 = sa02_sub_round2;                //
483
assign sa03_sr_round2 = sa03_sub_round2;                //
484
 
485
assign sa10_sr_round2 = sa11_sub_round2;                //
486
assign sa11_sr_round2 = sa12_sub_round2;                // left shift by 1
487
assign sa12_sr_round2 = sa13_sub_round2;                //
488
assign sa13_sr_round2 = sa10_sub_round2;                //
489
 
490
assign sa20_sr_round2 = sa22_sub_round2;                //
491
assign sa21_sr_round2 = sa23_sub_round2;                //      left shift by 2
492
assign sa22_sr_round2 = sa20_sub_round2;                //
493
assign sa23_sr_round2 = sa21_sub_round2;                //
494
 
495
assign sa30_sr_round2 = sa33_sub_round2;                //
496
assign sa31_sr_round2 = sa30_sub_round2;                // left shift by 3
497
assign sa32_sr_round2 = sa31_sub_round2;                //
498
assign sa33_sr_round2 = sa32_sub_round2;                //
499
 
500
// mix column operation
501
assign {sa00_mc_round2, sa10_mc_round2, sa20_mc_round2, sa30_mc_round2}  = mix_col(sa00_sr_round2,sa10_sr_round2,sa20_sr_round2,sa30_sr_round2);
502
assign {sa01_mc_round2, sa11_mc_round2, sa21_mc_round2, sa31_mc_round2}  = mix_col(sa01_sr_round2,sa11_sr_round2,sa21_sr_round2,sa31_sr_round2);
503
assign {sa02_mc_round2, sa12_mc_round2, sa22_mc_round2, sa32_mc_round2}  = mix_col(sa02_sr_round2,sa12_sr_round2,sa22_sr_round2,sa32_sr_round2);
504
assign {sa03_mc_round2, sa13_mc_round2, sa23_mc_round2, sa33_mc_round2}  = mix_col(sa03_sr_round2,sa13_sr_round2,sa23_sr_round2,sa33_sr_round2);
505
 
506
//add round key
507
assign sa33_next_round3 =                  sa33_mc_round2 ^ w11[07:00];
508
assign sa23_next_round3 =       sa23_mc_round2 ^ w11[15:08];
509
assign sa13_next_round3 =       sa13_mc_round2 ^ w11[23:16];
510
assign sa03_next_round3 =       sa03_mc_round2 ^ w11[31:24];
511
assign sa32_next_round3 =       sa32_mc_round2 ^ w10[07:00];
512
assign sa22_next_round3 =       sa22_mc_round2 ^ w10[15:08];
513
assign sa12_next_round3 =       sa12_mc_round2 ^ w10[23:16];
514
assign sa02_next_round3 =       sa02_mc_round2 ^ w10[31:24];
515
assign sa31_next_round3 =       sa31_mc_round2 ^ w9[07:00];
516
assign sa21_next_round3 =       sa21_mc_round2 ^ w9[15:08];
517
assign sa11_next_round3 =       sa11_mc_round2 ^ w9[23:16];
518
assign sa01_next_round3 =       sa01_mc_round2 ^ w9[31:24];
519
assign sa30_next_round3 =       sa30_mc_round2 ^ w8[07:00];
520
assign sa20_next_round3 =       sa20_mc_round2 ^ w8[15:08];
521
assign sa10_next_round3 =       sa10_mc_round2 ^ w8[23:16];
522
assign sa00_next_round3 =       sa00_mc_round2 ^ w8[31:24];
523
 
524
 
525
/////////////////////////round #3 transformations/////////////////////////////
526
 
527
 
528
//sbox lookup
529
aes_sbox us00_round3(   .a(     sa00_next_round3        ), .d(  sa00_sub_round3 ));
530
aes_sbox us01_round3(   .a(     sa01_next_round3        ), .d(  sa01_sub_round3 ));
531
aes_sbox us02_round3(   .a(     sa02_next_round3        ), .d(  sa02_sub_round3 ));
532
aes_sbox us03_round3(   .a(     sa03_next_round3        ), .d(  sa03_sub_round3 ));
533
aes_sbox us10_round3(   .a(     sa10_next_round3        ), .d(  sa10_sub_round3 ));
534
aes_sbox us11_round3(   .a(     sa11_next_round3        ), .d(  sa11_sub_round3 ));
535
aes_sbox us12_round3(   .a(     sa12_next_round3        ), .d(  sa12_sub_round3 ));
536
aes_sbox us13_round3(   .a(     sa13_next_round3        ), .d(  sa13_sub_round3 ));
537
aes_sbox us20_round3(   .a(     sa20_next_round3        ), .d(  sa20_sub_round3 ));
538
aes_sbox us21_round3(   .a(     sa21_next_round3        ), .d(  sa21_sub_round3 ));
539
aes_sbox us22_round3(   .a(     sa22_next_round3        ), .d(  sa22_sub_round3 ));
540
aes_sbox us23_round3(   .a(     sa23_next_round3        ), .d(  sa23_sub_round3 ));
541
aes_sbox us30_round3(   .a(     sa30_next_round3        ), .d(  sa30_sub_round3 ));
542
aes_sbox us31_round3(   .a(     sa31_next_round3        ), .d(  sa31_sub_round3 ));
543
aes_sbox us32_round3(   .a(     sa32_next_round3        ), .d(  sa32_sub_round3 ));
544
aes_sbox us33_round3(   .a(     sa33_next_round3        ), .d(  sa33_sub_round3 ));
545
 
546
//shift rows
547
 
548
assign sa00_sr_round3 = sa00_sub_round3;                //
549
assign sa01_sr_round3 = sa01_sub_round3;                //no shift
550
assign sa02_sr_round3 = sa02_sub_round3;                //
551
assign sa03_sr_round3 = sa03_sub_round3;                //
552
 
553
assign sa10_sr_round3 = sa11_sub_round3;                //
554
assign sa11_sr_round3 = sa12_sub_round3;                // left shift by 1
555
assign sa12_sr_round3 = sa13_sub_round3;                //
556
assign sa13_sr_round3 = sa10_sub_round3;                //
557
 
558
assign sa20_sr_round3 = sa22_sub_round3;                //
559
assign sa21_sr_round3 = sa23_sub_round3;                //      left shift by 2
560
assign sa22_sr_round3 = sa20_sub_round3;                //
561
assign sa23_sr_round3 = sa21_sub_round3;                //
562
 
563
assign sa30_sr_round3 = sa33_sub_round3;                //
564
assign sa31_sr_round3 = sa30_sub_round3;                // left shift by 3
565
assign sa32_sr_round3 = sa31_sub_round3;                //
566
assign sa33_sr_round3 = sa32_sub_round3;                //
567
 
568
// mix column operation
569
assign {sa00_mc_round3, sa10_mc_round3, sa20_mc_round3, sa30_mc_round3}  = mix_col(sa00_sr_round3,sa10_sr_round3,sa20_sr_round3,sa30_sr_round3);
570
assign {sa01_mc_round3, sa11_mc_round3, sa21_mc_round3, sa31_mc_round3}  = mix_col(sa01_sr_round3,sa11_sr_round3,sa21_sr_round3,sa31_sr_round3);
571
assign {sa02_mc_round3, sa12_mc_round3, sa22_mc_round3, sa32_mc_round3}  = mix_col(sa02_sr_round3,sa12_sr_round3,sa22_sr_round3,sa32_sr_round3);
572
assign {sa03_mc_round3, sa13_mc_round3, sa23_mc_round3, sa33_mc_round3}  = mix_col(sa03_sr_round3,sa13_sr_round3,sa23_sr_round3,sa33_sr_round3);
573
 
574
 
575
//add round key
576
assign sa33_next_round4 =                  sa33_mc_round3 ^ w15[07:00];
577
assign sa23_next_round4 =       sa23_mc_round3 ^ w15[15:08];
578
assign sa13_next_round4 =       sa13_mc_round3 ^ w15[23:16];
579
assign sa03_next_round4 =       sa03_mc_round3 ^ w15[31:24];
580
assign sa32_next_round4 =       sa32_mc_round3 ^ w14[07:00];
581
assign sa22_next_round4 =       sa22_mc_round3 ^ w14[15:08];
582
assign sa12_next_round4 =       sa12_mc_round3 ^ w14[23:16];
583
assign sa02_next_round4 =       sa02_mc_round3 ^ w14[31:24];
584
assign sa31_next_round4 =       sa31_mc_round3 ^ w13[07:00];
585
assign sa21_next_round4 =       sa21_mc_round3 ^ w13[15:08];
586
assign sa11_next_round4 =       sa11_mc_round3 ^ w13[23:16];
587
assign sa01_next_round4 =       sa01_mc_round3 ^ w13[31:24];
588
assign sa30_next_round4 =       sa30_mc_round3 ^ w12[07:00];
589
assign sa20_next_round4 =       sa20_mc_round3 ^ w12[15:08];
590
assign sa10_next_round4 =       sa10_mc_round3 ^ w12[23:16];
591
assign sa00_next_round4 =       sa00_mc_round3 ^ w12[31:24];
592
 
593
/////////////////////////round #4 transformations/////////////////////////////
594
 
595
 
596
//sbox lookup
597
aes_sbox us00_round4(   .a(     sa00_next_round4        ), .d(  sa00_sub_round4 ));
598
aes_sbox us01_round4(   .a(     sa01_next_round4        ), .d(  sa01_sub_round4 ));
599
aes_sbox us02_round4(   .a(     sa02_next_round4        ), .d(  sa02_sub_round4 ));
600
aes_sbox us03_round4(   .a(     sa03_next_round4        ), .d(  sa03_sub_round4 ));
601
aes_sbox us10_round4(   .a(     sa10_next_round4        ), .d(  sa10_sub_round4 ));
602
aes_sbox us11_round4(   .a(     sa11_next_round4        ), .d(  sa11_sub_round4 ));
603
aes_sbox us12_round4(   .a(     sa12_next_round4        ), .d(  sa12_sub_round4 ));
604
aes_sbox us13_round4(   .a(     sa13_next_round4        ), .d(  sa13_sub_round4 ));
605
aes_sbox us20_round4(   .a(     sa20_next_round4        ), .d(  sa20_sub_round4 ));
606
aes_sbox us21_round4(   .a(     sa21_next_round4        ), .d(  sa21_sub_round4 ));
607
aes_sbox us22_round4(   .a(     sa22_next_round4        ), .d(  sa22_sub_round4 ));
608
aes_sbox us23_round4(   .a(     sa23_next_round4        ), .d(  sa23_sub_round4 ));
609
aes_sbox us30_round4(   .a(     sa30_next_round4        ), .d(  sa30_sub_round4 ));
610
aes_sbox us31_round4(   .a(     sa31_next_round4        ), .d(  sa31_sub_round4 ));
611
aes_sbox us32_round4(   .a(     sa32_next_round4        ), .d(  sa32_sub_round4 ));
612
aes_sbox us33_round4(   .a(     sa33_next_round4        ), .d(  sa33_sub_round4 ));
613
 
614
//shift rows
615
 
616
assign sa00_sr_round4 = sa00_sub_round4;                //
617
assign sa01_sr_round4 = sa01_sub_round4;                //no shift
618
assign sa02_sr_round4 = sa02_sub_round4;                //
619
assign sa03_sr_round4 = sa03_sub_round4;                //
620
 
621
assign sa10_sr_round4 = sa11_sub_round4;                //
622
assign sa11_sr_round4 = sa12_sub_round4;                // left shift by 1
623
assign sa12_sr_round4 = sa13_sub_round4;                //
624
assign sa13_sr_round4 = sa10_sub_round4;                //
625
 
626
assign sa20_sr_round4 = sa22_sub_round4;                //
627
assign sa21_sr_round4 = sa23_sub_round4;                //      left shift by 2
628
assign sa22_sr_round4 = sa20_sub_round4;                //
629
assign sa23_sr_round4 = sa21_sub_round4;                //
630
 
631
assign sa30_sr_round4 = sa33_sub_round4;                //
632
assign sa31_sr_round4 = sa30_sub_round4;                // left shift by 3
633
assign sa32_sr_round4 = sa31_sub_round4;                //
634
assign sa33_sr_round4 = sa32_sub_round4;                //
635
 
636
// mix column operation
637
assign {sa00_mc_round4, sa10_mc_round4, sa20_mc_round4, sa30_mc_round4}  = mix_col(sa00_sr_round4,sa10_sr_round4,sa20_sr_round4,sa30_sr_round4);
638
assign {sa01_mc_round4, sa11_mc_round4, sa21_mc_round4, sa31_mc_round4}  = mix_col(sa01_sr_round4,sa11_sr_round4,sa21_sr_round4,sa31_sr_round4);
639
assign {sa02_mc_round4, sa12_mc_round4, sa22_mc_round4, sa32_mc_round4}  = mix_col(sa02_sr_round4,sa12_sr_round4,sa22_sr_round4,sa32_sr_round4);
640
assign {sa03_mc_round4, sa13_mc_round4, sa23_mc_round4, sa33_mc_round4}  = mix_col(sa03_sr_round4,sa13_sr_round4,sa23_sr_round4,sa33_sr_round4);
641
 
642
 
643
//add round key
644
assign sa33_next_round5 =                  sa33_mc_round4 ^ w19[07:00];
645
assign sa23_next_round5 =       sa23_mc_round4 ^ w19[15:08];
646
assign sa13_next_round5 =       sa13_mc_round4 ^ w19[23:16];
647
assign sa03_next_round5 =       sa03_mc_round4 ^ w19[31:24];
648
assign sa32_next_round5 =       sa32_mc_round4 ^ w18[07:00];
649
assign sa22_next_round5 =       sa22_mc_round4 ^ w18[15:08];
650
assign sa12_next_round5 =       sa12_mc_round4 ^ w18[23:16];
651
assign sa02_next_round5 =       sa02_mc_round4 ^ w18[31:24];
652
assign sa31_next_round5 =       sa31_mc_round4 ^ w17[07:00];
653
assign sa21_next_round5 =       sa21_mc_round4 ^ w17[15:08];
654
assign sa11_next_round5 =       sa11_mc_round4 ^ w17[23:16];
655
assign sa01_next_round5 =       sa01_mc_round4 ^ w17[31:24];
656
assign sa30_next_round5 =       sa30_mc_round4 ^ w16[07:00];
657
assign sa20_next_round5 =       sa20_mc_round4 ^ w16[15:08];
658
assign sa10_next_round5 =       sa10_mc_round4 ^ w16[23:16];
659
assign sa00_next_round5 =       sa00_mc_round4 ^ w16[31:24];
660
 
661
 
662
/////////////////////////round #5 transformations/////////////////////////////
663
 
664
 
665
//sbox lookup
666
aes_sbox us00_round5(   .a(     sa00_next_round5        ), .d(  sa00_sub_round5 ));
667
aes_sbox us01_round5(   .a(     sa01_next_round5        ), .d(  sa01_sub_round5 ));
668
aes_sbox us02_round5(   .a(     sa02_next_round5        ), .d(  sa02_sub_round5 ));
669
aes_sbox us03_round5(   .a(     sa03_next_round5        ), .d(  sa03_sub_round5 ));
670
aes_sbox us10_round5(   .a(     sa10_next_round5        ), .d(  sa10_sub_round5 ));
671
aes_sbox us11_round5(   .a(     sa11_next_round5        ), .d(  sa11_sub_round5 ));
672
aes_sbox us12_round5(   .a(     sa12_next_round5        ), .d(  sa12_sub_round5 ));
673
aes_sbox us13_round5(   .a(     sa13_next_round5        ), .d(  sa13_sub_round5 ));
674
aes_sbox us20_round5(   .a(     sa20_next_round5        ), .d(  sa20_sub_round5 ));
675
aes_sbox us21_round5(   .a(     sa21_next_round5        ), .d(  sa21_sub_round5 ));
676
aes_sbox us22_round5(   .a(     sa22_next_round5        ), .d(  sa22_sub_round5 ));
677
aes_sbox us23_round5(   .a(     sa23_next_round5        ), .d(  sa23_sub_round5 ));
678
aes_sbox us30_round5(   .a(     sa30_next_round5        ), .d(  sa30_sub_round5 ));
679
aes_sbox us31_round5(   .a(     sa31_next_round5        ), .d(  sa31_sub_round5 ));
680
aes_sbox us32_round5(   .a(     sa32_next_round5        ), .d(  sa32_sub_round5 ));
681
aes_sbox us33_round5(   .a(     sa33_next_round5        ), .d(  sa33_sub_round5 ));
682
 
683
//shift rows
684
 
685
assign sa00_sr_round5 = sa00_sub_round5;                //
686
assign sa01_sr_round5 = sa01_sub_round5;                //no shift
687
assign sa02_sr_round5 = sa02_sub_round5;                //
688
assign sa03_sr_round5 = sa03_sub_round5;                //
689
 
690
assign sa10_sr_round5 = sa11_sub_round5;                //
691
assign sa11_sr_round5 = sa12_sub_round5;                // left shift by 1
692
assign sa12_sr_round5 = sa13_sub_round5;                //
693
assign sa13_sr_round5 = sa10_sub_round5;                //
694
 
695
assign sa20_sr_round5 = sa22_sub_round5;                //
696
assign sa21_sr_round5 = sa23_sub_round5;                //      left shift by 2
697
assign sa22_sr_round5 = sa20_sub_round5;                //
698
assign sa23_sr_round5 = sa21_sub_round5;                //
699
 
700
assign sa30_sr_round5 = sa33_sub_round5;                //
701
assign sa31_sr_round5 = sa30_sub_round5;                // left shift by 3
702
assign sa32_sr_round5 = sa31_sub_round5;                //
703
assign sa33_sr_round5 = sa32_sub_round5;                //
704
 
705
// mix column operation
706
assign {sa00_mc_round5, sa10_mc_round5, sa20_mc_round5, sa30_mc_round5}  = mix_col(sa00_sr_round5,sa10_sr_round5,sa20_sr_round5,sa30_sr_round5);
707
assign {sa01_mc_round5, sa11_mc_round5, sa21_mc_round5, sa31_mc_round5}  = mix_col(sa01_sr_round5,sa11_sr_round5,sa21_sr_round5,sa31_sr_round5);
708
assign {sa02_mc_round5, sa12_mc_round5, sa22_mc_round5, sa32_mc_round5}  = mix_col(sa02_sr_round5,sa12_sr_round5,sa22_sr_round5,sa32_sr_round5);
709
assign {sa03_mc_round5, sa13_mc_round5, sa23_mc_round5, sa33_mc_round5}  = mix_col(sa03_sr_round5,sa13_sr_round5,sa23_sr_round5,sa33_sr_round5);
710
 
711
 
712
//add round key
713
assign sa33_next_round6 =                  sa33_mc_round5 ^ w23[07:00];
714
assign sa23_next_round6 =       sa23_mc_round5 ^ w23[15:08];
715
assign sa13_next_round6 =       sa13_mc_round5 ^ w23[23:16];
716
assign sa03_next_round6 =       sa03_mc_round5 ^ w23[31:24];
717
assign sa32_next_round6 =       sa32_mc_round5 ^ w22[07:00];
718
assign sa22_next_round6 =       sa22_mc_round5 ^ w22[15:08];
719
assign sa12_next_round6 =       sa12_mc_round5 ^ w22[23:16];
720
assign sa02_next_round6 =       sa02_mc_round5 ^ w22[31:24];
721
assign sa31_next_round6 =       sa31_mc_round5 ^ w21[07:00];
722
assign sa21_next_round6 =       sa21_mc_round5 ^ w21[15:08];
723
assign sa11_next_round6 =       sa11_mc_round5 ^ w21[23:16];
724
assign sa01_next_round6 =       sa01_mc_round5 ^ w21[31:24];
725
assign sa30_next_round6 =       sa30_mc_round5 ^ w20[07:00];
726
assign sa20_next_round6 =       sa20_mc_round5 ^ w20[15:08];
727
assign sa10_next_round6 =       sa10_mc_round5 ^ w20[23:16];
728
assign sa00_next_round6 =       sa00_mc_round5 ^ w20[31:24];
729
 
730
 
731
/////////////////////////round #6 transformations/////////////////////////////
732
 
733
 
734
//sbox lookup
735
aes_sbox us00_round6(   .a(     sa00_next_round6        ), .d(  sa00_sub_round6 ));
736
aes_sbox us01_round6(   .a(     sa01_next_round6        ), .d(  sa01_sub_round6 ));
737
aes_sbox us02_round6(   .a(     sa02_next_round6        ), .d(  sa02_sub_round6 ));
738
aes_sbox us03_round6(   .a(     sa03_next_round6        ), .d(  sa03_sub_round6 ));
739
aes_sbox us10_round6(   .a(     sa10_next_round6        ), .d(  sa10_sub_round6 ));
740
aes_sbox us11_round6(   .a(     sa11_next_round6        ), .d(  sa11_sub_round6 ));
741
aes_sbox us12_round6(   .a(     sa12_next_round6        ), .d(  sa12_sub_round6 ));
742
aes_sbox us13_round6(   .a(     sa13_next_round6        ), .d(  sa13_sub_round6 ));
743
aes_sbox us20_round6(   .a(     sa20_next_round6        ), .d(  sa20_sub_round6 ));
744
aes_sbox us21_round6(   .a(     sa21_next_round6        ), .d(  sa21_sub_round6 ));
745
aes_sbox us22_round6(   .a(     sa22_next_round6        ), .d(  sa22_sub_round6 ));
746
aes_sbox us23_round6(   .a(     sa23_next_round6        ), .d(  sa23_sub_round6 ));
747
aes_sbox us30_round6(   .a(     sa30_next_round6        ), .d(  sa30_sub_round6 ));
748
aes_sbox us31_round6(   .a(     sa31_next_round6        ), .d(  sa31_sub_round6 ));
749
aes_sbox us32_round6(   .a(     sa32_next_round6        ), .d(  sa32_sub_round6 ));
750
aes_sbox us33_round6(   .a(     sa33_next_round6        ), .d(  sa33_sub_round6 ));
751
 
752
//shift rows
753
 
754
assign sa00_sr_round6 = sa00_sub_round6;                //
755
assign sa01_sr_round6 = sa01_sub_round6;                //no shift
756
assign sa02_sr_round6 = sa02_sub_round6;                //
757
assign sa03_sr_round6 = sa03_sub_round6;                //
758
 
759
assign sa10_sr_round6 = sa11_sub_round6;                //
760
assign sa11_sr_round6 = sa12_sub_round6;                // left shift by 1
761
assign sa12_sr_round6 = sa13_sub_round6;                //
762
assign sa13_sr_round6 = sa10_sub_round6;                //
763
 
764
assign sa20_sr_round6 = sa22_sub_round6;                //
765
assign sa21_sr_round6 = sa23_sub_round6;                //      left shift by 2
766
assign sa22_sr_round6 = sa20_sub_round6;                //
767
assign sa23_sr_round6 = sa21_sub_round6;                //
768
 
769
assign sa30_sr_round6 = sa33_sub_round6;                //
770
assign sa31_sr_round6 = sa30_sub_round6;                // left shift by 3
771
assign sa32_sr_round6 = sa31_sub_round6;                //
772
assign sa33_sr_round6 = sa32_sub_round6;                //
773
 
774
// mix column operation
775
assign {sa00_mc_round6, sa10_mc_round6, sa20_mc_round6, sa30_mc_round6}  = mix_col(sa00_sr_round6,sa10_sr_round6,sa20_sr_round6,sa30_sr_round6);
776
assign {sa01_mc_round6, sa11_mc_round6, sa21_mc_round6, sa31_mc_round6}  = mix_col(sa01_sr_round6,sa11_sr_round6,sa21_sr_round6,sa31_sr_round6);
777
assign {sa02_mc_round6, sa12_mc_round6, sa22_mc_round6, sa32_mc_round6}  = mix_col(sa02_sr_round6,sa12_sr_round6,sa22_sr_round6,sa32_sr_round6);
778
assign {sa03_mc_round6, sa13_mc_round6, sa23_mc_round6, sa33_mc_round6}  = mix_col(sa03_sr_round6,sa13_sr_round6,sa23_sr_round6,sa33_sr_round6);
779
 
780
 
781
//add round key
782
assign sa33_next_round7 =                  sa33_mc_round6 ^ w27[07:00];
783
assign sa23_next_round7 =       sa23_mc_round6 ^ w27[15:08];
784
assign sa13_next_round7 =       sa13_mc_round6 ^ w27[23:16];
785
assign sa03_next_round7 =       sa03_mc_round6 ^ w27[31:24];
786
assign sa32_next_round7 =       sa32_mc_round6 ^ w26[07:00];
787
assign sa22_next_round7 =       sa22_mc_round6 ^ w26[15:08];
788
assign sa12_next_round7 =       sa12_mc_round6 ^ w26[23:16];
789
assign sa02_next_round7 =       sa02_mc_round6 ^ w26[31:24];
790
assign sa31_next_round7 =       sa31_mc_round6 ^ w25[07:00];
791
assign sa21_next_round7 =       sa21_mc_round6 ^ w25[15:08];
792
assign sa11_next_round7 =       sa11_mc_round6 ^ w25[23:16];
793
assign sa01_next_round7 =       sa01_mc_round6 ^ w25[31:24];
794
assign sa30_next_round7 =       sa30_mc_round6 ^ w24[07:00];
795
assign sa20_next_round7 =       sa20_mc_round6 ^ w24[15:08];
796
assign sa10_next_round7 =       sa10_mc_round6 ^ w24[23:16];
797
assign sa00_next_round7 =       sa00_mc_round6 ^ w24[31:24];
798
 
799
 
800
/////////////////////////round #7 transformations/////////////////////////////
801
 
802
 
803
//sbox lookup
804
aes_sbox us00_round7(   .a(     sa00_next_round7        ), .d(  sa00_sub_round7 ));
805
aes_sbox us01_round7(   .a(     sa01_next_round7        ), .d(  sa01_sub_round7 ));
806
aes_sbox us02_round7(   .a(     sa02_next_round7        ), .d(  sa02_sub_round7 ));
807
aes_sbox us03_round7(   .a(     sa03_next_round7        ), .d(  sa03_sub_round7 ));
808
aes_sbox us10_round7(   .a(     sa10_next_round7        ), .d(  sa10_sub_round7 ));
809
aes_sbox us11_round7(   .a(     sa11_next_round7        ), .d(  sa11_sub_round7 ));
810
aes_sbox us12_round7(   .a(     sa12_next_round7        ), .d(  sa12_sub_round7 ));
811
aes_sbox us13_round7(   .a(     sa13_next_round7        ), .d(  sa13_sub_round7 ));
812
aes_sbox us20_round7(   .a(     sa20_next_round7        ), .d(  sa20_sub_round7 ));
813
aes_sbox us21_round7(   .a(     sa21_next_round7        ), .d(  sa21_sub_round7 ));
814
aes_sbox us22_round7(   .a(     sa22_next_round7        ), .d(  sa22_sub_round7 ));
815
aes_sbox us23_round7(   .a(     sa23_next_round7        ), .d(  sa23_sub_round7 ));
816
aes_sbox us30_round7(   .a(     sa30_next_round7        ), .d(  sa30_sub_round7 ));
817
aes_sbox us31_round7(   .a(     sa31_next_round7        ), .d(  sa31_sub_round7 ));
818
aes_sbox us32_round7(   .a(     sa32_next_round7        ), .d(  sa32_sub_round7 ));
819
aes_sbox us33_round7(   .a(     sa33_next_round7        ), .d(  sa33_sub_round7 ));
820
 
821
//shift rows
822
 
823
assign sa00_sr_round7 = sa00_sub_round7;                //
824
assign sa01_sr_round7 = sa01_sub_round7;                //no shift
825
assign sa02_sr_round7 = sa02_sub_round7;                //
826
assign sa03_sr_round7 = sa03_sub_round7;                //
827
 
828
assign sa10_sr_round7 = sa11_sub_round7;                //
829
assign sa11_sr_round7 = sa12_sub_round7;                // left shift by 1
830
assign sa12_sr_round7 = sa13_sub_round7;                //
831
assign sa13_sr_round7 = sa10_sub_round7;                //
832
 
833
assign sa20_sr_round7 = sa22_sub_round7;                //
834
assign sa21_sr_round7 = sa23_sub_round7;                //      left shift by 2
835
assign sa22_sr_round7 = sa20_sub_round7;                //
836
assign sa23_sr_round7 = sa21_sub_round7;                //
837
 
838
assign sa30_sr_round7 = sa33_sub_round7;                //
839
assign sa31_sr_round7 = sa30_sub_round7;                // left shift by 3
840
assign sa32_sr_round7 = sa31_sub_round7;                //
841
assign sa33_sr_round7 = sa32_sub_round7;                //
842
 
843
// mix column operation
844
assign {sa00_mc_round7, sa10_mc_round7, sa20_mc_round7, sa30_mc_round7}  = mix_col(sa00_sr_round7,sa10_sr_round7,sa20_sr_round7,sa30_sr_round7);
845
assign {sa01_mc_round7, sa11_mc_round7, sa21_mc_round7, sa31_mc_round7}  = mix_col(sa01_sr_round7,sa11_sr_round7,sa21_sr_round7,sa31_sr_round7);
846
assign {sa02_mc_round7, sa12_mc_round7, sa22_mc_round7, sa32_mc_round7}  = mix_col(sa02_sr_round7,sa12_sr_round7,sa22_sr_round7,sa32_sr_round7);
847
assign {sa03_mc_round7, sa13_mc_round7, sa23_mc_round7, sa33_mc_round7}  = mix_col(sa03_sr_round7,sa13_sr_round7,sa23_sr_round7,sa33_sr_round7);
848
 
849
 
850
//add round key
851
assign sa33_next_round8 =                  sa33_mc_round7 ^ w31[07:00];
852
assign sa23_next_round8 =       sa23_mc_round7 ^ w31[15:08];
853
assign sa13_next_round8 =       sa13_mc_round7 ^ w31[23:16];
854
assign sa03_next_round8 =       sa03_mc_round7 ^ w31[31:24];
855
assign sa32_next_round8 =       sa32_mc_round7 ^ w30[07:00];
856
assign sa22_next_round8 =       sa22_mc_round7 ^ w30[15:08];
857
assign sa12_next_round8 =       sa12_mc_round7 ^ w30[23:16];
858
assign sa02_next_round8 =       sa02_mc_round7 ^ w30[31:24];
859
assign sa31_next_round8 =       sa31_mc_round7 ^ w29[07:00];
860
assign sa21_next_round8 =       sa21_mc_round7 ^ w29[15:08];
861
assign sa11_next_round8 =       sa11_mc_round7 ^ w29[23:16];
862
assign sa01_next_round8 =       sa01_mc_round7 ^ w29[31:24];
863
assign sa30_next_round8 =       sa30_mc_round7 ^ w28[07:00];
864
assign sa20_next_round8 =       sa20_mc_round7 ^ w28[15:08];
865
assign sa10_next_round8 =       sa10_mc_round7 ^ w28[23:16];
866
assign sa00_next_round8 =       sa00_mc_round7 ^ w28[31:24];
867
 
868
/////////////////////////round #8 transformations/////////////////////////////
869
 
870
 
871
//sbox lookup
872
aes_sbox us00_round8(   .a(     sa00_next_round8        ), .d(  sa00_sub_round8 ));
873
aes_sbox us01_round8(   .a(     sa01_next_round8        ), .d(  sa01_sub_round8 ));
874
aes_sbox us02_round8(   .a(     sa02_next_round8        ), .d(  sa02_sub_round8 ));
875
aes_sbox us03_round8(   .a(     sa03_next_round8        ), .d(  sa03_sub_round8 ));
876
aes_sbox us10_round8(   .a(     sa10_next_round8        ), .d(  sa10_sub_round8 ));
877
aes_sbox us11_round8(   .a(     sa11_next_round8        ), .d(  sa11_sub_round8 ));
878
aes_sbox us12_round8(   .a(     sa12_next_round8        ), .d(  sa12_sub_round8 ));
879
aes_sbox us13_round8(   .a(     sa13_next_round8        ), .d(  sa13_sub_round8 ));
880
aes_sbox us20_round8(   .a(     sa20_next_round8        ), .d(  sa20_sub_round8 ));
881
aes_sbox us21_round8(   .a(     sa21_next_round8        ), .d(  sa21_sub_round8 ));
882
aes_sbox us22_round8(   .a(     sa22_next_round8        ), .d(  sa22_sub_round8 ));
883
aes_sbox us23_round8(   .a(     sa23_next_round8        ), .d(  sa23_sub_round8 ));
884
aes_sbox us30_round8(   .a(     sa30_next_round8        ), .d(  sa30_sub_round8 ));
885
aes_sbox us31_round8(   .a(     sa31_next_round8        ), .d(  sa31_sub_round8 ));
886
aes_sbox us32_round8(   .a(     sa32_next_round8        ), .d(  sa32_sub_round8 ));
887
aes_sbox us33_round8(   .a(     sa33_next_round8        ), .d(  sa33_sub_round8 ));
888
 
889
//shift rows
890
 
891
assign sa00_sr_round8 = sa00_sub_round8;                //
892
assign sa01_sr_round8 = sa01_sub_round8;                //no shift
893
assign sa02_sr_round8 = sa02_sub_round8;                //
894
assign sa03_sr_round8 = sa03_sub_round8;                //
895
 
896
assign sa10_sr_round8 = sa11_sub_round8;                //
897
assign sa11_sr_round8 = sa12_sub_round8;                // left shift by 1
898
assign sa12_sr_round8 = sa13_sub_round8;                //
899
assign sa13_sr_round8 = sa10_sub_round8;                //
900
 
901
assign sa20_sr_round8 = sa22_sub_round8;                //
902
assign sa21_sr_round8 = sa23_sub_round8;                //      left shift by 2
903
assign sa22_sr_round8 = sa20_sub_round8;                //
904
assign sa23_sr_round8 = sa21_sub_round8;                //
905
 
906
assign sa30_sr_round8 = sa33_sub_round8;                //
907
assign sa31_sr_round8 = sa30_sub_round8;                // left shift by 3
908
assign sa32_sr_round8 = sa31_sub_round8;                //
909
assign sa33_sr_round8 = sa32_sub_round8;                //
910
 
911
// mix column operation
912
assign {sa00_mc_round8, sa10_mc_round8, sa20_mc_round8, sa30_mc_round8}  = mix_col(sa00_sr_round8,sa10_sr_round8,sa20_sr_round8,sa30_sr_round8);
913
assign {sa01_mc_round8, sa11_mc_round8, sa21_mc_round8, sa31_mc_round8}  = mix_col(sa01_sr_round8,sa11_sr_round8,sa21_sr_round8,sa31_sr_round8);
914
assign {sa02_mc_round8, sa12_mc_round8, sa22_mc_round8, sa32_mc_round8}  = mix_col(sa02_sr_round8,sa12_sr_round8,sa22_sr_round8,sa32_sr_round8);
915
assign {sa03_mc_round8, sa13_mc_round8, sa23_mc_round8, sa33_mc_round8}  = mix_col(sa03_sr_round8,sa13_sr_round8,sa23_sr_round8,sa33_sr_round8);
916
 
917
 
918
//add round key
919
assign sa33_next_round9 =                  sa33_mc_round8 ^ w35[07:00];
920
assign sa23_next_round9 =       sa23_mc_round8 ^ w35[15:08];
921
assign sa13_next_round9 =       sa13_mc_round8 ^ w35[23:16];
922
assign sa03_next_round9 =       sa03_mc_round8 ^ w35[31:24];
923
assign sa32_next_round9 =       sa32_mc_round8 ^ w34[07:00];
924
assign sa22_next_round9 =       sa22_mc_round8 ^ w34[15:08];
925
assign sa12_next_round9 =       sa12_mc_round8 ^ w34[23:16];
926
assign sa02_next_round9 =       sa02_mc_round8 ^ w34[31:24];
927
assign sa31_next_round9 =       sa31_mc_round8 ^ w33[07:00];
928
assign sa21_next_round9 =       sa21_mc_round8 ^ w33[15:08];
929
assign sa11_next_round9 =       sa11_mc_round8 ^ w33[23:16];
930
assign sa01_next_round9 =       sa01_mc_round8 ^ w33[31:24];
931
assign sa30_next_round9 =       sa30_mc_round8 ^ w32[07:00];
932
assign sa20_next_round9 =       sa20_mc_round8 ^ w32[15:08];
933
assign sa10_next_round9 =       sa10_mc_round8 ^ w32[23:16];
934
assign sa00_next_round9 =       sa00_mc_round8 ^ w32[31:24];
935
 
936
 
937
 
938
/////////////////////////round #9 transformations/////////////////////////////
939
 
940
 
941
//sbox lookup
942
aes_sbox us00_round9(   .a(     sa00_next_round9        ), .d(  sa00_sub_round9 ));
943
aes_sbox us01_round9(   .a(     sa01_next_round9        ), .d(  sa01_sub_round9 ));
944
aes_sbox us02_round9(   .a(     sa02_next_round9        ), .d(  sa02_sub_round9 ));
945
aes_sbox us03_round9(   .a(     sa03_next_round9        ), .d(  sa03_sub_round9 ));
946
aes_sbox us10_round9(   .a(     sa10_next_round9        ), .d(  sa10_sub_round9 ));
947
aes_sbox us11_round9(   .a(     sa11_next_round9        ), .d(  sa11_sub_round9 ));
948
aes_sbox us12_round9(   .a(     sa12_next_round9        ), .d(  sa12_sub_round9 ));
949
aes_sbox us13_round9(   .a(     sa13_next_round9        ), .d(  sa13_sub_round9 ));
950
aes_sbox us20_round9(   .a(     sa20_next_round9        ), .d(  sa20_sub_round9 ));
951
aes_sbox us21_round9(   .a(     sa21_next_round9        ), .d(  sa21_sub_round9 ));
952
aes_sbox us22_round9(   .a(     sa22_next_round9        ), .d(  sa22_sub_round9 ));
953
aes_sbox us23_round9(   .a(     sa23_next_round9        ), .d(  sa23_sub_round9 ));
954
aes_sbox us30_round9(   .a(     sa30_next_round9        ), .d(  sa30_sub_round9 ));
955
aes_sbox us31_round9(   .a(     sa31_next_round9        ), .d(  sa31_sub_round9 ));
956
aes_sbox us32_round9(   .a(     sa32_next_round9        ), .d(  sa32_sub_round9 ));
957
aes_sbox us33_round9(   .a(     sa33_next_round9        ), .d(  sa33_sub_round9 ));
958
 
959
//shift rows
960
 
961
assign sa00_sr_round9 = sa00_sub_round9;                //
962
assign sa01_sr_round9 = sa01_sub_round9;                //no shift
963
assign sa02_sr_round9 = sa02_sub_round9;                //
964
assign sa03_sr_round9 = sa03_sub_round9;                //
965
 
966
assign sa10_sr_round9 = sa11_sub_round9;                //
967
assign sa11_sr_round9 = sa12_sub_round9;                // left shift by 1
968
assign sa12_sr_round9 = sa13_sub_round9;                //
969
assign sa13_sr_round9 = sa10_sub_round9;                //
970
 
971
assign sa20_sr_round9 = sa22_sub_round9;                //
972
assign sa21_sr_round9 = sa23_sub_round9;                //      left shift by 2
973
assign sa22_sr_round9 = sa20_sub_round9;                //
974
assign sa23_sr_round9 = sa21_sub_round9;                //
975
 
976
assign sa30_sr_round9 = sa33_sub_round9;                //
977
assign sa31_sr_round9 = sa30_sub_round9;                // left shift by 3
978
assign sa32_sr_round9 = sa31_sub_round9;                //
979
assign sa33_sr_round9 = sa32_sub_round9;                //
980
 
981
// mix column operation
982
assign {sa00_mc_round9, sa10_mc_round9, sa20_mc_round9, sa30_mc_round9}  = mix_col(sa00_sr_round9,sa10_sr_round9,sa20_sr_round9,sa30_sr_round9);
983
assign {sa01_mc_round9, sa11_mc_round9, sa21_mc_round9, sa31_mc_round9}  = mix_col(sa01_sr_round9,sa11_sr_round9,sa21_sr_round9,sa31_sr_round9);
984
assign {sa02_mc_round9, sa12_mc_round9, sa22_mc_round9, sa32_mc_round9}  = mix_col(sa02_sr_round9,sa12_sr_round9,sa22_sr_round9,sa32_sr_round9);
985
assign {sa03_mc_round9, sa13_mc_round9, sa23_mc_round9, sa33_mc_round9}  = mix_col(sa03_sr_round9,sa13_sr_round9,sa23_sr_round9,sa33_sr_round9);
986
 
987
 
988
//add round key
989
assign sa33_next_round10 =              sa33_mc_round9 ^ w39[07:00];
990
assign sa23_next_round10 =      sa23_mc_round9 ^ w39[15:08];
991
assign sa13_next_round10 =      sa13_mc_round9 ^ w39[23:16];
992
assign sa03_next_round10 =      sa03_mc_round9 ^ w39[31:24];
993
assign sa32_next_round10 =      sa32_mc_round9 ^ w38[07:00];
994
assign sa22_next_round10 =      sa22_mc_round9 ^ w38[15:08];
995
assign sa12_next_round10 =      sa12_mc_round9 ^ w38[23:16];
996
assign sa02_next_round10 =      sa02_mc_round9 ^ w38[31:24];
997
assign sa31_next_round10 =      sa31_mc_round9 ^ w37[07:00];
998
assign sa21_next_round10 =      sa21_mc_round9 ^ w37[15:08];
999
assign sa11_next_round10 =      sa11_mc_round9 ^ w37[23:16];
1000
assign sa01_next_round10 =      sa01_mc_round9 ^ w37[31:24];
1001
assign sa30_next_round10 =      sa30_mc_round9 ^ w36[07:00];
1002
assign sa20_next_round10 =      sa20_mc_round9 ^ w36[15:08];
1003
assign sa10_next_round10 =      sa10_mc_round9 ^ w36[23:16];
1004
assign sa00_next_round10 =      sa00_mc_round9 ^ w36[31:24];
1005
 
1006
 
1007
/////////////////////////round # 10 transformations/////////////////////////////
1008
 
1009
 
1010
//sbox lookup
1011
aes_sbox us00_round10(  .a(     sa00_next_round10       ), .d(  sa00_sub_round10        ));
1012
aes_sbox us01_round10(  .a(     sa01_next_round10       ), .d(  sa01_sub_round10        ));
1013
aes_sbox us02_round10(  .a(     sa02_next_round10       ), .d(  sa02_sub_round10        ));
1014
aes_sbox us03_round10(  .a(     sa03_next_round10       ), .d(  sa03_sub_round10        ));
1015
aes_sbox us10_round10(  .a(     sa10_next_round10       ), .d(  sa10_sub_round10        ));
1016
aes_sbox us11_round10(  .a(     sa11_next_round10       ), .d(  sa11_sub_round10        ));
1017
aes_sbox us12_round10(  .a(     sa12_next_round10       ), .d(  sa12_sub_round10        ));
1018
aes_sbox us13_round10(  .a(     sa13_next_round10       ), .d(  sa13_sub_round10        ));
1019
aes_sbox us20_round10(  .a(     sa20_next_round10       ), .d(  sa20_sub_round10        ));
1020
aes_sbox us21_round10(  .a(     sa21_next_round10       ), .d(  sa21_sub_round10        ));
1021
aes_sbox us22_round10(  .a(     sa22_next_round10       ), .d(  sa22_sub_round10        ));
1022
aes_sbox us23_round10(  .a(     sa23_next_round10       ), .d(  sa23_sub_round10        ));
1023
aes_sbox us30_round10(  .a(     sa30_next_round10       ), .d(  sa30_sub_round10        ));
1024
aes_sbox us31_round10(  .a(     sa31_next_round10       ), .d(  sa31_sub_round10        ));
1025
aes_sbox us32_round10(  .a(     sa32_next_round10       ), .d(  sa32_sub_round10        ));
1026
aes_sbox us33_round10(  .a(     sa33_next_round10       ), .d(  sa33_sub_round10        ));
1027
 
1028
//shift rows
1029
 
1030
assign sa00_sr_round10 = sa00_sub_round10;              //
1031
assign sa01_sr_round10 = sa01_sub_round10;              //no shift
1032
assign sa02_sr_round10 = sa02_sub_round10;              //
1033
assign sa03_sr_round10 = sa03_sub_round10;              //
1034
 
1035
assign sa10_sr_round10 = sa11_sub_round10;              //
1036
assign sa11_sr_round10 = sa12_sub_round10;              // left shift by 1
1037
assign sa12_sr_round10 = sa13_sub_round10;              //
1038
assign sa13_sr_round10 = sa10_sub_round10;              //
1039
 
1040
assign sa20_sr_round10 = sa22_sub_round10;              //
1041
assign sa21_sr_round10 = sa23_sub_round10;              //      left shift by 2
1042
assign sa22_sr_round10 = sa20_sub_round10;              //
1043
assign sa23_sr_round10 = sa21_sub_round10;              //
1044
 
1045
assign sa30_sr_round10 = sa33_sub_round10;              //
1046
assign sa31_sr_round10 = sa30_sub_round10;              // left shift by 3
1047
assign sa32_sr_round10 = sa31_sub_round10;              //
1048
assign sa33_sr_round10 = sa32_sub_round10;              //
1049
 
1050
 
1051
// Final text output
1052
 
1053
 
1054
always @(posedge clk)
1055
 begin
1056
                /*  $strobe($time,": round_key2 is %h\n",{w4,w5,w6,w7});
1057
                  $strobe($time,": roundkeyeven = %h, text_out_even is %h\n",{w4,w5,w6,w7},text_out);*/
1058
                  text_out[127:120] <=  sa00_sr_round10 ^ w40[31:24];
1059
                  text_out[095:088] <=  sa01_sr_round10 ^ w41[31:24];
1060
                  text_out[063:056] <=  sa02_sr_round10 ^ w42[31:24];
1061
                  text_out[031:024] <=  sa03_sr_round10 ^ w43[31:24];
1062
                  text_out[119:112] <=  sa10_sr_round10 ^ w40[23:16];
1063
                  text_out[087:080] <=  sa11_sr_round10 ^ w41[23:16];
1064
                  text_out[055:048] <=  sa12_sr_round10 ^ w42[23:16];
1065
                  text_out[023:016] <=  sa13_sr_round10 ^ w43[23:16];
1066
                  text_out[111:104] <=  sa20_sr_round10 ^ w40[15:08];
1067
                  text_out[079:072] <=  sa21_sr_round10 ^ w41[15:08];
1068
                  text_out[047:040] <=  sa22_sr_round10 ^ w42[15:08];
1069
                  text_out[015:008] <=  sa23_sr_round10 ^ w43[15:08];
1070
                  text_out[103:096] <=  sa30_sr_round10 ^ w40[07:00];
1071
                  text_out[071:064] <=  sa31_sr_round10 ^ w41[07:00];
1072
                  text_out[039:032] <=  sa32_sr_round10 ^ w42[07:00];
1073
                  text_out[007:000] <=  sa33_sr_round10 ^ w43[07:00];
1074
        end
1075
 
1076
 
1077
////////////////////////////////////////////////////////////////////
1078
//
1079
// Generic Functions
1080
//
1081
 
1082
function [31:0] mix_col;
1083
input   [7:0]    s0,s1,s2,s3;
1084
//reg   [7:0]   s0_o,s1_o,s2_o,s3_o;
1085
begin
1086
mix_col[31:24]=xtime(s0)^xtime(s1)^s1^s2^s3;
1087
mix_col[23:16]=s0^xtime(s1)^xtime(s2)^s2^s3;
1088
mix_col[15:08]=s0^s1^xtime(s2)^xtime(s3)^s3;
1089
mix_col[07:00]=xtime(s0)^s0^s1^s2^xtime(s3);
1090
end
1091
endfunction
1092
 
1093
function [7:0] xtime;
1094
input [7:0] b; xtime={b[6:0],1'b0}^(8'h1b&{8{b[7]}});
1095
endfunction
1096
 
1097
 
1098
 
1099
endmodule
1100
 
1101
 
1102
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.