OpenCores
URL https://opencores.org/ocsvn/aes_128_192_256/aes_128_192_256/trunk

Subversion Repositories aes_128_192_256

[/] [aes_128_192_256/] [web_uploads/] [aes_enc.vhdl] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 root
--------------------------------------------------------------------------------
2
-- Organization:      www.opendsp.pl
3
-- Engineer:          Jerzy Gbur
4
--
5
-- Create Date:    2006-05-15 20:05:12
6
-- Design Name:    AES_128_192_256
7
-- Module Name:    aes
8
-- Project Name:
9
-- Target Device:
10
-- Tool versions:
11
-- Description:
12
--            State Table index
13
--            ---------------------
14
--            |  0 |  4 |  8 | 12 |
15
--            ---------------------
16
--            |  1 |  5 |  9 | 13 |
17
--            ---------------------
18
--            |  2 |  6 | 10 | 14 |
19
--            ---------------------
20
--            |  3 |  7 | 11 | 15 |
21
--            ---------------------
22
-- Dependencies:
23
--
24
-- Revision:
25
-- Revision 0.01 - File Created
26
-- Additional Comments:
27
--
28
--------------------------------------------------------------------------------
29
-- http://www.csrc.nist.gov/pki/CSOR/algorithms.html
30
 
31
library IEEE;
32
use IEEE.STD_LOGIC_1164.ALL;
33
use IEEE.STD_LOGIC_ARITH.ALL;
34
use IEEE.STD_LOGIC_UNSIGNED.ALL;
35
 
36
library WORK;
37
use WORK.aes_pkg.ALL;
38
 
39
entity aes_enc is
40
   generic
41
                  (
42
                  KEY_SIZE             :  in    integer range 0 to 2 := 0            -- 0-128; 1-192; 2-256
43
                  );
44
   port
45
                  (
46
                  DATA_I               :  in    std_logic_vector(7 downto 0);
47
                  VALID_DATA_I         :  in    std_logic;
48
                  KEY_I                :  in    std_logic_vector(7 downto 0);
49
                  VALID_KEY_I          :  in    std_logic;
50
                  RESET_I              :  in    std_logic;
51
                  CLK_I                :  in    std_logic;
52
                  CE_I                 :  in    std_logic;
53
 
54
                  KEY_READY_O          :  out   std_logic;
55
 
56
                  VALID_O              :  out   std_logic;
57
                  DATA_O               :  out   std_logic_vector(7 downto 0)
58
                  );
59
 
60
end aes_enc;
61
 
62
architecture Behavioral of aes_enc is
63
 
64
   signal         rom_FRV_SBOX         :  type_SBOX;
65
 
66
   signal         v_CNT4               :  std_logic_vector(1 downto 0);
67
 
68
   signal         STATE_TABLE1         :  type_STATE_TABLE;
69
 
70
   signal         t_STATE_RAM0         :  type_STATE_RAM;
71
 
72
 
73
   signal         v_KEY_COLUMN         :  std_logic_vector(31 downto 0);
74
   signal         v_DATA_COLUMN        :  std_logic_vector(31 downto 0);
75
 
76
 
77
   signal         FF_VALID_DATA        :  std_logic;
78
   signal         v_KEY_NUMB           :  std_logic_vector(5 downto 0);
79
 
80
   signal         v_C                  :  std_logic_vector(15 downto 0);
81
 
82
   signal         i_MAX_ROUND          :  integer range 0 to 14;
83
   signal         i_ROUND              :  integer range 0 to 14;
84
 
85
   signal         SRAM_WREN0           :  std_logic;
86
 
87
   signal         GET_KEY              :  std_logic;
88
   signal         FF_GET_KEY           :  std_logic;
89
 
90
   signal         CALCULATION          :  std_logic;
91
   signal         LAST_ROUND           :  std_logic;
92
   signal         i_RAM_ADDR_RD0       :  integer range 0 to 3;
93
   signal         i_RAM_ADDR_WR0       :  integer range 0 to 3;
94
   signal         v_RAM_OUT0           :  std_logic_vector(31 downto 0);
95
   signal         v_RAM_IN0            :  std_logic_vector(31 downto 0);
96
   signal         v_CALCULATION_CNTR   :  std_logic_vector(7 downto 0);
97
 
98
begin
99
 
100
i_MAX_ROUND <= 8     when  KEY_SIZE = 0 else
101
               10    when  KEY_SIZE = 1 else
102
               12    when  KEY_SIZE = 2 else
103
               8;
104
 
105
--****************************************************************************--
106
--* Key production                                                           *--
107
--****************************************************************************--
108
 
109
KEXP0:
110
   key_expansion
111
      GENERIC MAP
112
                  (
113
                  KEY_SIZE             => KEY_SIZE
114
                  )
115
      PORT MAP    (
116
                  KEY_I                => KEY_I,
117
                  VALID_KEY_I          => VALID_KEY_I,
118
 
119
                  CLK_I                => CLK_I,
120
                  RESET_I              => RESET_I,
121
                  CE_I                 => CE_I,
122
 
123
                  DONE_O               => KEY_READY_O,
124
                  GET_KEY_I            => GET_KEY,
125
                  KEY_NUMB_I           => v_KEY_NUMB,
126
                  KEY_EXP_O            => v_KEY_COLUMN
127
                  );
128
 
129
--****************************************************************************--
130
--* Incomming data                                                           *--
131
--****************************************************************************--
132
 
133
P0001:
134
   process(CLK_I)
135
   begin
136
      if rising_edge(CLK_I) then
137
         if VALID_DATA_I = '1' then
138
            if v_CNT4 = "00" then
139
               v_DATA_COLUMN(7 downto 0) <= DATA_I;
140
            elsif v_CNT4 = "01" then
141
               v_DATA_COLUMN(15 downto 8) <= DATA_I;
142
            elsif v_CNT4 = "10" then
143
               v_DATA_COLUMN(23 downto 16) <= DATA_I;
144
            elsif v_CNT4 = "11" then
145
               v_DATA_COLUMN(31 downto 24) <= DATA_I;
146
            end if;
147
         end if;
148
      end if;
149
   end process;
150
 
151
P0002:
152
   process (CLK_I)
153
   begin
154
      if rising_edge(CLK_I) then
155
         if CE_I = '1' then
156
            if VALID_DATA_I = '1' then
157
               v_CNT4 <= v_CNT4 + 1;
158
            else
159
               v_CNT4 <= "00";
160
            end if;
161
         end if;
162
      end if;
163
   end process;
164
 
165
--****************************************************************************--
166
--* Get Key                                                                  *--
167
--****************************************************************************--
168
 
169
P0003:
170
   process(CLK_I)
171
   begin
172
      if rising_edge(CLK_I) then
173
         if VALID_DATA_I = '1' and v_CNT4 = "10" then
174
            GET_KEY <= '1';
175
         elsif v_CALCULATION_CNTR = x"04" or v_CALCULATION_CNTR = x"05" or v_CALCULATION_CNTR = x"06" or v_CALCULATION_CNTR = x"07" then
176
            GET_KEY <= '1';
177
         else
178
            GET_KEY <= '0';
179
         end if;
180
      end if;
181
   end process;
182
 
183
--****************************************************************************--
184
--* Address for 32bit words of KEY                                           *--
185
--****************************************************************************--
186
 
187
P0004:
188
   process(CLK_I)
189
   begin
190
      if rising_edge(CLK_I) then
191
         if RESET_I = '1' then
192
            v_KEY_NUMB <= (others => '0');
193
         elsif CE_I = '1' then
194
            if VALID_DATA_I = '1' and FF_VALID_DATA = '0' then
195
               v_KEY_NUMB <= (others => '0');
196
            elsif GET_KEY = '1' then
197
               v_KEY_NUMB <= v_KEY_NUMB + 1;
198
            end if;
199
         end if;
200
      end if;
201
   end process;
202
 
203
 
204
--****************************************************************************--
205
--* Rom - forward TABLE                                                      *--
206
--****************************************************************************--
207
 
208
rom_FRV_SBOX <= c_SBOX_FRV;
209
 
210
--****************************************************************************--
211
--* State RAM                                                                *--
212
--****************************************************************************--
213
ST_RAM0:
214
   process(CLK_I)
215
   begin
216
      if rising_edge(CLK_I) then
217
         -- WRITTING ADDERSS
218
         if RESET_I = '1' then
219
            i_RAM_ADDR_WR0 <= 0;
220
            i_RAM_ADDR_RD0 <= 0;
221
         elsif CE_I = '1' then
222
            if VALID_DATA_I = '1' and FF_VALID_DATA = '0' then
223
               i_RAM_ADDR_WR0 <= 0;
224
            elsif SRAM_WREN0 = '1' then
225
               if i_RAM_ADDR_WR0 = 3 then
226
                  i_RAM_ADDR_WR0 <= 0;
227
               else
228
                  i_RAM_ADDR_WR0 <=  i_RAM_ADDR_WR0 + 1;
229
               end if;
230
            end if;
231
         end if;
232
         -- RAM
233
         if CE_I = '1' then
234
            if SRAM_WREN0 = '1' then
235
               t_STATE_RAM0(i_RAM_ADDR_WR0) <= v_RAM_IN0;
236
            end if;
237
            v_RAM_OUT0 <=  t_STATE_RAM0(i_RAM_ADDR_RD0);
238
         end if;
239
 
240
         if CE_I = '1' then
241
            FF_GET_KEY     <= GET_KEY;
242
            SRAM_WREN0     <= FF_GET_KEY;
243
         end if;
244
         -- READING ADDRESS
245
         if CE_I = '1' then
246
            if v_CALCULATION_CNTR = x"01" or v_CALCULATION_CNTR = x"02" or v_CALCULATION_CNTR = x"03" then
247
               i_RAM_ADDR_RD0 <= i_RAM_ADDR_RD0 + 1;
248
            elsif v_CALCULATION_CNTR = x"00" then
249
               i_RAM_ADDR_RD0 <= 0;
250
            end if;
251
         end if;
252
 
253
      end if;
254
   end process;
255
 
256
--****************************************************************************--
257
--* v_RAM_IN0                                                                *--
258
--****************************************************************************--
259
 
260
P0005:
261
   process(CLK_I)
262
   begin
263
      if rising_edge(CLK_I) then
264
         if RESET_I = '1' then
265
            v_RAM_IN0 <= (others => '0');
266
         elsif CE_I = '1' then
267
            FF_VALID_DATA <= VALID_DATA_I;
268
            if FF_VALID_DATA = '1' and v_CNT4 = "00" then
269
               v_RAM_IN0 <= v_KEY_COLUMN xor v_DATA_COLUMN;
270
            elsif LAST_ROUND = '0' then
271
 
272
               if v_CALCULATION_CNTR = x"06" then
273
                  v_RAM_IN0(7 downto 0)   <= v_KEY_COLUMN(7 downto 0)   xor (STATE_TABLE1(0)(6 downto 0) & "0")                         xor ((STATE_TABLE1(1)(6 downto 0) & "0") xor STATE_TABLE1(1))  xor STATE_TABLE1(2)                                               xor STATE_TABLE1(3)                                               xor ("000" & v_C(0) & v_C(0) & "0" & v_C(0) & v_C(0));
274
                  v_RAM_IN0(15 downto 8)  <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(0)                                             xor (STATE_TABLE1(1)(6 downto 0) & "0")                        xor ((STATE_TABLE1(2)(6 downto 0) & "0") xor STATE_TABLE1(2))     xor STATE_TABLE1(3)                                               xor ("000" & v_C(1) & v_C(1) & "0" & v_C(1) & v_C(1));
275
                  v_RAM_IN0(23 downto 16) <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(0)                                             xor STATE_TABLE1(1)                                            xor (STATE_TABLE1(2)(6 downto 0) & "0")                           xor ((STATE_TABLE1(3)(6 downto 0) & "0") xor STATE_TABLE1(3))     xor ("000" & v_C(2) & v_C(2) & "0" & v_C(2) & v_C(2));
276
                  v_RAM_IN0(31 downto 24) <= v_KEY_COLUMN(31 downto 24) xor ((STATE_TABLE1(0)(6 downto 0) & "0") xor STATE_TABLE1(0))   xor STATE_TABLE1(1)                                            xor STATE_TABLE1(2)                                               xor (STATE_TABLE1(3)(6 downto 0) & "0")                           xor ("000" & v_C(3) & v_C(3) & "0" & v_C(3) & v_C(3));
277
               elsif v_CALCULATION_CNTR = x"07" then
278
                  v_RAM_IN0(7 downto 0)   <= v_KEY_COLUMN(7 downto 0)   xor (STATE_TABLE1(4)(6 downto 0) & "0")                         xor ((STATE_TABLE1(5)(6 downto 0) & "0") xor STATE_TABLE1(5))  xor STATE_TABLE1(6)                                               xor STATE_TABLE1(7)                                               xor ("000" & v_C(4) & v_C(4) & "0" & v_C(4) & v_C(4));
279
                  v_RAM_IN0(15 downto 8)  <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(4)                                             xor (STATE_TABLE1(5)(6 downto 0) & "0")                        xor ((STATE_TABLE1(6)(6 downto 0) & "0") xor STATE_TABLE1(6))     xor STATE_TABLE1(7)                                               xor ("000" & v_C(5) & v_C(5) & "0" & v_C(5) & v_C(5));
280
                  v_RAM_IN0(23 downto 16) <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(4)                                             xor STATE_TABLE1(5)                                            xor (STATE_TABLE1(6)(6 downto 0) & "0")                           xor ((STATE_TABLE1(7)(6 downto 0) & "0") xor STATE_TABLE1(7))     xor ("000" & v_C(6) & v_C(6) & "0" & v_C(6) & v_C(6));
281
                  v_RAM_IN0(31 downto 24) <= v_KEY_COLUMN(31 downto 24) xor ((STATE_TABLE1(4)(6 downto 0) & "0") xor STATE_TABLE1(4))   xor STATE_TABLE1(5)                                            xor STATE_TABLE1(6)                                               xor (STATE_TABLE1(7)(6 downto 0) & "0")                           xor ("000" & v_C(7) & v_C(7) & "0" & v_C(7) & v_C(7));
282
               elsif v_CALCULATION_CNTR = x"08" then
283
                  v_RAM_IN0(7 downto 0)   <= v_KEY_COLUMN(7 downto 0)   xor (STATE_TABLE1(8)(6 downto 0) & "0")                         xor ((STATE_TABLE1(9)(6 downto 0) & "0") xor STATE_TABLE1(9))  xor STATE_TABLE1(10)                                              xor STATE_TABLE1(11)                                              xor ("000" & v_C(8) & v_C(8) & "0" & v_C(8) & v_C(8));
284
                  v_RAM_IN0(15 downto 8)  <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(8)                                             xor (STATE_TABLE1(9)(6 downto 0) & "0")                        xor ((STATE_TABLE1(10)(6 downto 0) & "0") xor STATE_TABLE1(10))   xor STATE_TABLE1(11)                                              xor ("000" & v_C(9) & v_C(9) & "0" & v_C(9) & v_C(9));
285
                  v_RAM_IN0(23 downto 16) <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(8)                                             xor STATE_TABLE1(9)                                            xor (STATE_TABLE1(10)(6 downto 0) & "0")                          xor ((STATE_TABLE1(11)(6 downto 0) & "0") xor STATE_TABLE1(11))   xor ("000" & v_C(10) & v_C(10) & "0" & v_C(10) & v_C(10));
286
                  v_RAM_IN0(31 downto 24) <= v_KEY_COLUMN(31 downto 24) xor ((STATE_TABLE1(8)(6 downto 0) & "0") xor STATE_TABLE1(8))   xor STATE_TABLE1(9)                                            xor STATE_TABLE1(10)                                              xor (STATE_TABLE1(11)(6 downto 0) & "0")                          xor ("000" & v_C(11) & v_C(11) & "0" & v_C(11) & v_C(11));
287
               elsif v_CALCULATION_CNTR = x"09" then
288
                  v_RAM_IN0(7 downto 0)   <= v_KEY_COLUMN(7 downto 0)   xor (STATE_TABLE1(12)(6 downto 0) & "0")                        xor ((STATE_TABLE1(13)(6 downto 0) & "0") xor STATE_TABLE1(13))xor STATE_TABLE1(14)                                              xor STATE_TABLE1(15)                                              xor ("000" & v_C(12) & v_C(12) & "0" & v_C(12) & v_C(12));
289
                  v_RAM_IN0(15 downto 8)  <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(12)                                            xor (STATE_TABLE1(13)(6 downto 0) & "0")                       xor ((STATE_TABLE1(14)(6 downto 0) & "0") xor STATE_TABLE1(14))   xor STATE_TABLE1(15)                                              xor ("000" & v_C(13) & v_C(13) & "0" & v_C(13) & v_C(13));
290
                  v_RAM_IN0(23 downto 16) <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(12)                                            xor STATE_TABLE1(13)                                           xor (STATE_TABLE1(14)(6 downto 0) & "0")                          xor ((STATE_TABLE1(15)(6 downto 0) & "0") xor STATE_TABLE1(15))   xor ("000" & v_C(14) & v_C(14) & "0" & v_C(14) & v_C(14));
291
                  v_RAM_IN0(31 downto 24) <= v_KEY_COLUMN(31 downto 24) xor ((STATE_TABLE1(12)(6 downto 0) & "0") xor STATE_TABLE1(12)) xor STATE_TABLE1(13)                                           xor STATE_TABLE1(14)                                              xor (STATE_TABLE1(15)(6 downto 0) & "0")                          xor ("000" & v_C(15) & v_C(15) & "0" & v_C(15) & v_C(15));
292
               end if;
293
 
294
            end if;
295
         end if;
296
      end if;
297
   end process;
298
 
299
v_C(0)   <=  STATE_TABLE1(0)(7) xor STATE_TABLE1(1)(7);
300
v_C(1)   <=  STATE_TABLE1(1)(7) xor STATE_TABLE1(2)(7);
301
v_C(2)   <=  STATE_TABLE1(2)(7) xor STATE_TABLE1(3)(7);
302
v_C(3)   <=  STATE_TABLE1(3)(7) xor STATE_TABLE1(0)(7);
303
v_C(4)   <=  STATE_TABLE1(4)(7) xor STATE_TABLE1(5)(7);
304
v_C(5)   <=  STATE_TABLE1(5)(7) xor STATE_TABLE1(6)(7);
305
v_C(6)   <=  STATE_TABLE1(6)(7) xor STATE_TABLE1(7)(7);
306
v_C(7)   <=  STATE_TABLE1(7)(7) xor STATE_TABLE1(4)(7);
307
v_C(8)   <=  STATE_TABLE1(8)(7) xor STATE_TABLE1(9)(7);
308
v_C(9)   <=  STATE_TABLE1(9)(7) xor STATE_TABLE1(10)(7);
309
v_C(10)  <=  STATE_TABLE1(10)(7) xor STATE_TABLE1(11)(7);
310
v_C(11)  <=  STATE_TABLE1(11)(7) xor STATE_TABLE1(8)(7);
311
v_C(12)  <=  STATE_TABLE1(12)(7) xor STATE_TABLE1(13)(7);
312
v_C(13)  <=  STATE_TABLE1(13)(7) xor STATE_TABLE1(14)(7);
313
v_C(14)  <=  STATE_TABLE1(14)(7) xor STATE_TABLE1(15)(7);
314
v_C(15)  <=  STATE_TABLE1(15)(7) xor STATE_TABLE1(12)(7);
315
 
316
 
317
 
318
--****************************************************************************--
319
--* CALCULATION                                                              *--
320
--****************************************************************************--
321
 
322
P0006:
323
   process(CLK_I)
324
   begin
325
      if rising_edge(CLK_I) then
326
         if RESET_I = '1' then
327
            CALCULATION <= '0';
328
         elsif CE_I = '1' then
329
 
330
            if FF_VALID_DATA = '1' and VALID_DATA_I = '0' then
331
               CALCULATION <= '1';
332
            elsif LAST_ROUND = '1' and v_CALCULATION_CNTR = x"16" then
333
               CALCULATION <= '0';
334
            end if;
335
 
336
         end if;
337
      end if;
338
   end process;
339
 
340
P0007:
341
   process(CLK_I)
342
   begin
343
      if rising_edge(CLK_I) then
344
         if RESET_I = '1' then
345
            v_CALCULATION_CNTR <= (others => '0');
346
            LAST_ROUND <= '0';
347
            i_ROUND <= 0;
348
         elsif CE_I = '1' then
349
            if CALCULATION = '1' then
350
               if v_CALCULATION_CNTR = x"09" and LAST_ROUND = '0' then
351
                  v_CALCULATION_CNTR <= (others => '0');
352
                  i_ROUND <= i_ROUND + 1;
353
 
354
                  if i_ROUND = i_MAX_ROUND then
355
                     LAST_ROUND <= '1';
356
                  end if;
357
               elsif v_CALCULATION_CNTR = x"16" and LAST_ROUND = '1' then
358
                  v_CALCULATION_CNTR <= (others => '0');
359
                  i_ROUND <= i_ROUND + 1;
360
 
361
               else
362
                  v_CALCULATION_CNTR <= v_CALCULATION_CNTR + 1;
363
               end if;
364
            else
365
               v_CALCULATION_CNTR <= (others => '0');
366
               i_ROUND <= 0;
367
               LAST_ROUND <= '0';
368
            end if;
369
         end if;
370
      end if;
371
   end process;
372
 
373
--****************************************************************************--
374
--* STATE_TABLE1                                                             *--
375
--****************************************************************************--
376
 
377
P0008:
378
   process (CLK_I)
379
   begin
380
      if rising_edge(CLK_I) then
381
         if v_CALCULATION_CNTR = x"02" then
382
            STATE_TABLE1(0)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(7 downto 0)));
383
            STATE_TABLE1(13) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(15 downto 8)));
384
            STATE_TABLE1(10) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(23 downto 16)));
385
            STATE_TABLE1(7)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(31 downto 24)));
386
         elsif v_CALCULATION_CNTR = x"03" then
387
            STATE_TABLE1(4)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(7 downto 0)));
388
            STATE_TABLE1(1)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(15 downto 8)));
389
            STATE_TABLE1(14) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(23 downto 16)));
390
            STATE_TABLE1(11) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(31 downto 24)));
391
         elsif v_CALCULATION_CNTR = x"04" then
392
            STATE_TABLE1(8)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(7 downto 0)));
393
            STATE_TABLE1(5)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(15 downto 8)));
394
            STATE_TABLE1(2)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(23 downto 16)));
395
            STATE_TABLE1(15) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(31 downto 24)));
396
         elsif v_CALCULATION_CNTR = x"05" then
397
            STATE_TABLE1(12) <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(7 downto 0)));
398
            STATE_TABLE1(9)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(15 downto 8)));
399
            STATE_TABLE1(6)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(23 downto 16)));
400
            STATE_TABLE1(3)  <= rom_FRV_SBOX(conv_integer(v_RAM_OUT0(31 downto 24)));
401
         end if;
402
 
403
         if LAST_ROUND = '1' then
404
 
405
            if v_CALCULATION_CNTR = x"06" then
406
 
407
               STATE_TABLE1(0)   <= v_KEY_COLUMN(7 downto 0)   xor STATE_TABLE1(0);
408
               STATE_TABLE1(1)   <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(1);
409
               STATE_TABLE1(2)   <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(2);
410
               STATE_TABLE1(3)   <= v_KEY_COLUMN(31 downto 24) xor STATE_TABLE1(3);
411
            elsif v_CALCULATION_CNTR = x"07" then
412
               DATA_O   <= STATE_TABLE1(0);
413
               VALID_O  <= '1';
414
 
415
               STATE_TABLE1(4)   <= v_KEY_COLUMN(7 downto 0)   xor STATE_TABLE1(4);
416
               STATE_TABLE1(5)   <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(5);
417
               STATE_TABLE1(6)   <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(6);
418
               STATE_TABLE1(7)   <= v_KEY_COLUMN(31 downto 24) xor STATE_TABLE1(7);
419
            elsif v_CALCULATION_CNTR = x"08" then
420
               DATA_O   <= STATE_TABLE1(1);
421
               VALID_O  <= '1';
422
 
423
               STATE_TABLE1(8)   <= v_KEY_COLUMN(7 downto 0)   xor STATE_TABLE1(8);
424
               STATE_TABLE1(9)   <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(9);
425
               STATE_TABLE1(10)  <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(10);
426
               STATE_TABLE1(11)  <= v_KEY_COLUMN(31 downto 24) xor STATE_TABLE1(11);
427
            elsif v_CALCULATION_CNTR = x"09" then
428
               DATA_O   <= STATE_TABLE1(2);
429
               VALID_O  <= '1';
430
 
431
               STATE_TABLE1(12)  <= v_KEY_COLUMN(7 downto 0)   xor STATE_TABLE1(12);
432
               STATE_TABLE1(13)  <= v_KEY_COLUMN(15 downto 8)  xor STATE_TABLE1(13);
433
               STATE_TABLE1(14)  <= v_KEY_COLUMN(23 downto 16) xor STATE_TABLE1(14);
434
               STATE_TABLE1(15)  <= v_KEY_COLUMN(31 downto 24) xor STATE_TABLE1(15);
435
            elsif v_CALCULATION_CNTR = x"0A" then
436
               DATA_O   <= STATE_TABLE1(3);
437
               VALID_O  <= '1';
438
            elsif v_CALCULATION_CNTR = x"0B" then
439
               DATA_O   <= STATE_TABLE1(4);
440
               VALID_O  <= '1';
441
            elsif v_CALCULATION_CNTR = x"0C" then
442
               DATA_O   <= STATE_TABLE1(5);
443
               VALID_O  <= '1';
444
            elsif v_CALCULATION_CNTR = x"0D" then
445
               DATA_O   <= STATE_TABLE1(6);
446
               VALID_O  <= '1';
447
            elsif v_CALCULATION_CNTR = x"0E" then
448
               DATA_O   <= STATE_TABLE1(7);
449
               VALID_O  <= '1';
450
            elsif v_CALCULATION_CNTR = x"0F" then
451
               DATA_O   <= STATE_TABLE1(8);
452
               VALID_O  <= '1';
453
            elsif v_CALCULATION_CNTR = x"10" then
454
               DATA_O   <= STATE_TABLE1(9);
455
               VALID_O  <= '1';
456
            elsif v_CALCULATION_CNTR = x"11" then
457
               DATA_O   <= STATE_TABLE1(10);
458
               VALID_O  <= '1';
459
            elsif v_CALCULATION_CNTR = x"12" then
460
               DATA_O   <= STATE_TABLE1(11);
461
               VALID_O  <= '1';
462
            elsif v_CALCULATION_CNTR = x"13" then
463
               DATA_O   <= STATE_TABLE1(12);
464
               VALID_O  <= '1';
465
            elsif v_CALCULATION_CNTR = x"14" then
466
               DATA_O   <= STATE_TABLE1(13);
467
               VALID_O  <= '1';
468
            elsif v_CALCULATION_CNTR = x"15" then
469
               DATA_O   <= STATE_TABLE1(14);
470
               VALID_O  <= '1';
471
            elsif v_CALCULATION_CNTR = x"16" then
472
               DATA_O   <= STATE_TABLE1(15);
473
               VALID_O  <= '1';
474
            else
475
               DATA_O   <= x"00";
476
               VALID_O  <= '0';
477
            end if;
478
         else
479
            VALID_O  <= '0';
480
         end if;
481
 
482
      end if;
483
   end process;
484
 
485
 
486
 
487
 
488
 
489
end Behavioral;
490
 

powered by: WebSVN 2.1.0

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