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

Subversion Repositories aes-encryption

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

powered by: WebSVN 2.1.0

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