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

Subversion Repositories mini_aes

[/] [mini_aes/] [trunk/] [source/] [mini_aes.vhdl] - Blame information for rev 22

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 arif_endro
-- ------------------------------------------------------------------------
2 15 arif_endro
-- Copyright (C) 2005 Arif Endro Nugroho
3 21 arif_endro
-- All rights reserved.
4 2 arif_endro
-- 
5 21 arif_endro
-- Redistribution and use in source and binary forms, with or without
6
-- modification, are permitted provided that the following conditions
7
-- are met:
8 2 arif_endro
-- 
9 21 arif_endro
-- 1. Redistributions of source code must retain the above copyright
10
--    notice, this list of conditions and the following disclaimer.
11
-- 2. Redistributions in binary form must reproduce the above copyright
12
--    notice, this list of conditions and the following disclaimer in the
13
--    documentation and/or other materials provided with the distribution.
14 2 arif_endro
-- 
15 21 arif_endro
-- THIS SOFTWARE IS PROVIDED BY ARIF ENDRO NUGROHO "AS IS" AND ANY EXPRESS
16
-- OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
-- DISCLAIMED. IN NO EVENT SHALL ARIF ENDRO NUGROHO BE LIABLE FOR ANY
19
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22
-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23
-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24
-- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
-- POSSIBILITY OF SUCH DAMAGE.
26 2 arif_endro
-- 
27 21 arif_endro
-- End Of License.
28
-- ------------------------------------------------------------------------
29 2 arif_endro
 
30
library ieee;
31
use ieee.std_logic_1164.all;
32
use ieee.std_logic_unsigned.all;
33
 
34
entity mini_aes is
35
  port (
36
    clock  : in  std_logic;
37
    clear  : in  std_logic;
38 5 arif_endro
    load_i : in  std_logic;
39 2 arif_endro
    enc    : in  std_logic;             -- active low (e.g. 0 = encrypt, 1 = decrypt)
40 5 arif_endro
    key_i  : in  std_logic_vector (7 downto 0);
41
    data_i : in  std_logic_vector (7 downto 0);
42
    data_o : out std_logic_vector (7 downto 0);
43 2 arif_endro
    done_o : out std_logic
44
    );
45
end mini_aes;
46
 
47
architecture data_flow of mini_aes is
48
 
49 5 arif_endro
  component io_interface
50
    port (
51
      clock      : in  std_logic;
52
      clear      : in  std_logic;
53
      load_i     : in  std_logic;
54
      load_i_int : out std_logic;
55
      data_i     : in  std_logic_vector (7 downto 0);
56
      key_i      : in  std_logic_vector (7 downto 0);
57
      data_o     : out std_logic_vector (7 downto 0);
58
      data_o_int : in  std_logic_vector (127 downto 000);
59
      data_i_int : out std_logic_vector (127 downto 000);
60
      key_i_int  : out std_logic_vector (127 downto 000);
61
      done_o_int : in  std_logic;
62
      done_o     : out std_logic
63
      );
64
  end component;
65
 
66 2 arif_endro
  component bram_block_a
67
    port (
68
      clk_a_i     : in  std_logic;
69
      en_a_i      : in  std_logic;
70
      we_a_i      : in  std_logic;
71
      di_a_i      : in  std_logic_vector (07 downto 00);
72
      addr_a_1_i  : in  std_logic_vector (08 downto 00);
73
      addr_a_2_i  : in  std_logic_vector (08 downto 00);
74
      do_a_1_o    : out std_logic_vector (07 downto 00);
75
      do_a_2_o    : out std_logic_vector (07 downto 00)
76
      );
77
  end component;
78
--
79
  component bram_block_b
80
    port (
81
      clk_b_i     : in  std_logic;
82
      we_b_i      : in  std_logic;
83
      en_b_i      : in  std_logic;
84
      di_b_i      : in  std_logic_vector (07 downto 00);
85
      addr_b_1_i  : in  std_logic_vector (08 downto 00);
86
      addr_b_2_i  : in  std_logic_vector (08 downto 00);
87
      do_b_1_o    : out std_logic_vector (07 downto 00);
88
      do_b_2_o    : out std_logic_vector (07 downto 00)
89
      );
90
  end component;
91
--
92
  component mix_column
93
    port (
94
      s0          : in  std_logic_vector (07 downto 00);
95
      s1          : in  std_logic_vector (07 downto 00);
96
      s2          : in  std_logic_vector (07 downto 00);
97
      s3          : in  std_logic_vector (07 downto 00);
98
      mix_col     : out std_logic_vector (31 downto 00);
99
      inv_mix_col : out std_logic_vector (31 downto 00)
100
      );
101
  end component;
102
--
103
  component key_scheduler
104
    port (
105
      clock       : in  std_logic;
106
      load        : in  std_logic;
107
      key_i       : in  std_logic_vector (127 downto 000);
108
      key_o       : out std_logic_vector (031 downto 000);
109
      done        : out std_logic
110
      );
111
  end component;
112
--
113
  component counter2bit
114
    port (
115
      clock       : in  std_logic;
116
      clear       : in  std_logic;
117
      count       : out std_logic_vector (1 downto 0)
118
      );
119
  end component;
120
--
121
  component folded_register
122
    port (
123
      clk_i       : in  std_logic;
124
      enc_i       : in  std_logic;
125
      load_i      : in  std_logic;
126
      data_i      : in  std_logic_vector (127 downto 000);
127
      key_i       : in  std_logic_vector (127 downto 000);
128
      di_0_i      : in  std_logic_vector (007 downto 000);
129
      di_1_i      : in  std_logic_vector (007 downto 000);
130
      di_2_i      : in  std_logic_vector (007 downto 000);
131
      di_3_i      : in  std_logic_vector (007 downto 000);
132
      do_0_o      : out std_logic_vector (007 downto 000);
133
      do_1_o      : out std_logic_vector (007 downto 000);
134
      do_2_o      : out std_logic_vector (007 downto 000);
135
      do_3_o      : out std_logic_vector (007 downto 000)
136
      );
137
  end component;
138
 
139
  type state        is array (03 downto 00) of std_logic_vector (07 downto 00);
140
  type allround     is array (43 downto 00) of std_logic_vector (31 downto 00);
141
  type partialround is array (03 downto 00) of std_logic_vector (31 downto 00);
142
  signal   input            : state                             := ( X"00", X"00", X"00", X"00");
143
  signal   key_o_srl1_p     : partialround                      :=
144
    (
145
      X"00000000", X"00000000", X"00000000", X"00000000"
146
      );
147
  signal   key_o_srl2_p     : partialround                      :=
148
    (
149
      X"00000000", X"00000000", X"00000000", X"00000000"
150
      );
151
  signal   key_o_srl3_p     : partialround                      :=
152
    (
153
      X"00000000", X"00000000", X"00000000", X"00000000"
154
      );
155
  signal   key_o_srl4_p     : partialround                      :=
156
    (
157
      X"00000000", X"00000000", X"00000000", X"00000000"
158
      );
159
  signal   key_o_srl1       : allround                          :=
160
    (
161
      X"00000000", X"00000000", X"00000000", X"00000000",
162
      X"00000000", X"00000000", X"00000000", X"00000000",
163
      X"00000000", X"00000000", X"00000000", X"00000000",
164
      X"00000000", X"00000000", X"00000000", X"00000000",
165
      X"00000000", X"00000000", X"00000000", X"00000000",
166
      X"00000000", X"00000000", X"00000000", X"00000000",
167
      X"00000000", X"00000000", X"00000000", X"00000000",
168
      X"00000000", X"00000000", X"00000000", X"00000000",
169
      X"00000000", X"00000000", X"00000000", X"00000000",
170
      X"00000000", X"00000000", X"00000000", X"00000000",
171
      X"00000000", X"00000000", X"00000000", X"00000000"
172
      );
173
  signal   key_o_srl2       : allround                          :=
174
    (
175
      X"00000000", X"00000000", X"00000000", X"00000000",
176
      X"00000000", X"00000000", X"00000000", X"00000000",
177
      X"00000000", X"00000000", X"00000000", X"00000000",
178
      X"00000000", X"00000000", X"00000000", X"00000000",
179
      X"00000000", X"00000000", X"00000000", X"00000000",
180
      X"00000000", X"00000000", X"00000000", X"00000000",
181
      X"00000000", X"00000000", X"00000000", X"00000000",
182
      X"00000000", X"00000000", X"00000000", X"00000000",
183
      X"00000000", X"00000000", X"00000000", X"00000000",
184
      X"00000000", X"00000000", X"00000000", X"00000000",
185
      X"00000000", X"00000000", X"00000000", X"00000000"
186
      );
187
  signal   key_o_srl3       : allround                          :=
188
    (
189
      X"00000000", X"00000000", X"00000000", X"00000000",
190
      X"00000000", X"00000000", X"00000000", X"00000000",
191
      X"00000000", X"00000000", X"00000000", X"00000000",
192
      X"00000000", X"00000000", X"00000000", X"00000000",
193
      X"00000000", X"00000000", X"00000000", X"00000000",
194
      X"00000000", X"00000000", X"00000000", X"00000000",
195
      X"00000000", X"00000000", X"00000000", X"00000000",
196
      X"00000000", X"00000000", X"00000000", X"00000000",
197
      X"00000000", X"00000000", X"00000000", X"00000000",
198
      X"00000000", X"00000000", X"00000000", X"00000000",
199
      X"00000000", X"00000000", X"00000000", X"00000000"
200
      );
201
--
202
  signal   counter          : std_logic_vector (01 downto 00)     := "00";
203
  signal   inner_round      : std_logic                           := '0';
204
  signal   key_counter_up   : integer range 0 to 43;
205
  signal   key_counter_down : integer range 0 to 43;
206
  signal   done             : std_logic                           := '0';
207
  signal   done_decrypt     : std_logic                           := '0';
208
  signal   counter1bit      : std_logic                           := '0';
209 5 arif_endro
  signal   done_o_int       : std_logic                           := '0';
210
  signal   data_i_int       : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
211
  signal   data_o_int       : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
212
  signal   key_i_int        : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
213 2 arif_endro
  signal   load             : std_logic                           := '0';
214 5 arif_endro
  signal   load_io          : std_logic                           := '0';
215 2 arif_endro
  signal   di_0_i           : std_logic_vector (007 downto 000);
216
  signal   di_1_i           : std_logic_vector (007 downto 000);
217
  signal   di_2_i           : std_logic_vector (007 downto 000);
218
  signal   di_3_i           : std_logic_vector (007 downto 000);
219
  signal   do_0_o           : std_logic_vector (007 downto 000);
220
  signal   do_1_o           : std_logic_vector (007 downto 000);
221
  signal   do_2_o           : std_logic_vector (007 downto 000);
222
  signal   do_3_o           : std_logic_vector (007 downto 000);
223
  signal   current_key      : std_logic_vector (031 downto 000)   := ( X"0000_0000");
224
  signal   output_o         : std_logic_vector (031 downto 000)   := ( X"00000000" );
225
  signal   output           : std_logic_vector (031 downto 000)   := ( X"00000000" );
226
  signal   key_o            : std_logic_vector (031 downto 000)   := ( X"00000000" );
227
  signal   fifo16x8         : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
228
  signal   fifo16x8i        : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
229
  signal   fifo16x8o        : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
230
  signal   key_b            : std_logic_vector (127 downto 000)   := ( X"00000000_00000000_00000000_00000000" );
231
  constant GND              : std_logic                           := '0';
232
  constant VCC              : std_logic                           := '1';
233
 
234
  signal   mixcol_s0_i      : std_logic_vector (007 downto 000)   := B"0000_0000";
235
  signal   mixcol_s1_i      : std_logic_vector (007 downto 000)   := B"0000_0000";
236
  signal   mixcol_s2_i      : std_logic_vector (007 downto 000)   := B"0000_0000";
237
  signal   mixcol_s3_i      : std_logic_vector (007 downto 000)   := B"0000_0000";
238
  signal   mixcol_o         : std_logic_vector (031 downto 000)   := ( X"00000000" );
239
  signal   inv_mixcol_o     : std_logic_vector (031 downto 000)   := ( X"00000000" );
240
--
241
  signal   en_a_i           : std_logic;
242
  signal   en_b_i           : std_logic;
243
  signal   clk_a_i          : std_logic;
244
  signal   clk_b_i          : std_logic;
245
  signal   we_a_i           : std_logic;
246
  signal   we_b_i           : std_logic;
247
  signal   di_a_i           : std_logic_vector (07 downto 00)   := B"0000_0000";
248
  signal   di_b_i           : std_logic_vector (07 downto 00)   := B"0000_0000";
249
  signal   addr_a_1_i       : std_logic_vector (08 downto 00)   := B"0_0000_0000";
250
  signal   addr_a_2_i       : std_logic_vector (08 downto 00)   := B"0_0000_0000";
251
  signal   addr_b_1_i       : std_logic_vector (08 downto 00)   := B"0_0000_0000";
252
  signal   addr_b_2_i       : std_logic_vector (08 downto 00)   := B"0_0000_0000";
253
  signal   do_a_1_o         : std_logic_vector (07 downto 00);
254
  signal   do_a_2_o         : std_logic_vector (07 downto 00);
255
  signal   do_b_1_o         : std_logic_vector (07 downto 00);
256
  signal   do_b_2_o         : std_logic_vector (07 downto 00);
257
 
258 5 arif_endro
--signal data_i_int : std_logic_vector (127 downto 000) :=
259 2 arif_endro
--( X"3243F6A8_885A308D_313198A2_E0370734" );  -- PT 0
260
--( X"00112233_44556677_8899AABB_CCDDEEFF" );  -- PT 1
261
--( X"3925841D_02DC09FB_DC118597_196A0B32" );  -- CT 0
262
--( X"69C4E0D8_6A7B0430_D8CDB780_70B4C55A" );  -- CT 1
263
--signal key_i : std_logic_vector (127 downto 000) :=
264
--( X"2B7E1516_28AED2A6_ABF71588_09CF4F3C" );  -- KEY 0
265
--( X"00010203_04050607_08090A0B_0C0D0E0F" );  -- KEY 1
266
 
267
begin
268
 
269
  clk_a_i <= clock;
270
  clk_b_i <= clock;
271
  en_a_i  <= VCC;
272
  en_b_i  <= VCC;
273
  we_a_i  <= GND;
274
  we_b_i  <= GND;
275
 
276 5 arif_endro
  done_o_int <= done_decrypt;
277 2 arif_endro
 
278 5 arif_endro
  my_io : io_interface
279
    port map (
280
      clock      => clock,
281
      clear      => clear,
282
      load_i     => load_i,
283
      load_i_int => load_io,
284
      data_i     => data_i,
285
      key_i      => key_i,
286
      data_o     => data_o,
287
      data_o_int => data_o_int,
288
      data_i_int => data_i_int,
289
      key_i_int  => key_i_int,
290
      done_o_int => done_o_int,
291
      done_o     => done_o
292
      );
293
 
294 2 arif_endro
  sbox1     : bram_block_a
295
    port map (
296
      clk_a_i     => clk_a_i,
297
      en_a_i      => en_a_i,
298
      we_a_i      => we_a_i,
299
      di_a_i      => di_a_i,
300
      addr_a_1_i  => addr_a_1_i,
301
      addr_a_2_i  => addr_a_2_i,
302
      do_a_1_o    => do_a_1_o,
303
      do_a_2_o    => do_a_2_o
304
      );
305
--
306
  sbox2     : bram_block_b
307
    port map (
308
      clk_b_i     => clk_b_i,
309
      we_b_i      => we_b_i,
310
      en_b_i      => en_b_i,
311
      di_b_i      => di_b_i,
312
      addr_b_1_i  => addr_b_1_i,
313
      addr_b_2_i  => addr_b_2_i,
314
      do_b_1_o    => do_b_1_o,
315
      do_b_2_o    => do_b_2_o
316
      );
317
--
318
  mixcol    : mix_column
319
    port map (
320
      s0          => mixcol_s0_i,
321
      s1          => mixcol_s1_i,
322
      s2          => mixcol_s2_i,
323
      s3          => mixcol_s3_i,
324
      mix_col     => mixcol_o,
325
      inv_mix_col => inv_mixcol_o
326
      );
327
--
328
  key       : key_scheduler
329
    port map (
330
      clock       => clock,
331
      load        => load,
332 5 arif_endro
      key_i       => key_i_int,
333 2 arif_endro
      key_o       => key_o,
334
      done        => done
335
      );
336
--
337
  count2bit : counter2bit
338
    port map (
339
      clock       => clock,
340
      clear       => load,
341
      count       => counter
342
      );
343
--
344
  foldreg   : folded_register
345
    port map (
346
      clk_i       => clock,
347
      enc_i       => enc,
348
      load_i      => load,
349 5 arif_endro
      data_i      => data_i_int,
350 2 arif_endro
      key_i       => key_b,
351
      di_0_i      => di_0_i,
352
      di_1_i      => di_1_i,
353
      di_2_i      => di_2_i,
354
      di_3_i      => di_3_i,
355
      do_0_o      => do_0_o,
356
      do_1_o      => do_1_o,
357
      do_2_o      => do_2_o,
358
      do_3_o      => do_3_o
359
      );
360
 
361
  process(clock, clear)
362
  begin
363
    if (clear = '1') then
364
      load                        <= '1';
365
    elsif (clock = '1' and clock'event) then
366
      fifo16x8 (127 downto 000)   <= fifo16x8i (127 downto 000);
367
      if (done = '1') then
368
        load                      <= '1';
369
      else
370 5 arif_endro
--      load                      <= '0';
371
        load                      <= load_io;
372 2 arif_endro
      end if;
373
    end if;
374
  end process;
375
--
376
  process(clear, clock)
377
  begin
378
    if (clear = '1') then
379
      key_o_srl1                  <= (others => (others => '0'));
380
    elsif (clock = '1' and clock'event) then
381
      if (inner_round = '1') then
382
        key_o_srl1 (43 downto 00) <= key_o_srl2 (43 downto 00);
383
      end if;
384
    end if;
385
  end process;
386
--
387
  process(clear, clock)
388
  begin
389
    if (clear = '1') then
390
      key_o_srl1_p                <= (others => (others => '0'));
391
    elsif (clock = '1' and clock'event) then
392
      key_o_srl1_p (03 downto 00) <= key_o_srl2_p (03 downto 00);
393
    end if;
394
  end process;
395
--
396
  process(clear, clock)
397
  begin
398
    if (clear = '1') then
399
      key_o_srl3_p                <= (others => (others => '0'));
400
    elsif (clock = '1' and clock'event) then
401
      key_o_srl3_p (03 downto 00) <= key_o_srl4_p (03 downto 00);
402
    end if;
403
  end process;
404
 
405
  key_o_srl2_p (03 downto 01) <= key_o_srl1_p (02 downto 00);
406
  key_o_srl2_p (00)           <= key_o;
407
  key_o_srl4_p (02 downto 00) <= key_o_srl3_p (03 downto 01);
408
  key_o_srl4_p (03)           <= key_o;
409
--
410
  inner_round <= ( counter(1) and counter(0) );
411
--
412
  key_o_srl2 (39 downto 00) <= key_o_srl1 (43 downto 04);
413
 
414
  key_o_srl2 (43 downto 40) <= ( key_o_srl4_p (03), key_o_srl4_p (02), key_o_srl4_p (01), key_o_srl4_p (00) ) when ( enc = '0' ) else
415
                               ( key_o_srl2_p (03), key_o_srl2_p (02), key_o_srl2_p (01), key_o_srl2_p (00) );
416
 
417
  key_o_srl3 (43 downto 00) <= ( key_o_srl2 (43 downto 04) &
418 5 arif_endro
                                 key_i_int (127 downto 096) &
419
                                 key_i_int (095 downto 064) &
420
                                 key_i_int (063 downto 032) &
421
                                 key_i_int (031 downto 000)
422 2 arif_endro
                               ) when (done = '1') else
423
                                 key_o_srl3 (43 downto 00);
424
 
425
  fifo16x8o (127 downto 000) <= fifo16x8i (127 downto 000) when (done = '1') else fifo16x8o (127 downto 000);
426
  fifo16x8i (127 downto 000) <= ( fifo16x8 (095 downto 000) & output_o );
427
 
428 5 arif_endro
  data_o_int (127 downto 000) <= fifo16x8o (127 downto 000);
429 2 arif_endro
--
430
  input (0)               <= do_0_o;
431
  input (1)               <= do_1_o;
432
  input (2)               <= do_2_o;
433
  input (3)               <= do_3_o;
434
--
435
  addr_a_1_i              <= (enc & input(0));
436
  addr_a_2_i              <= (enc & input(1));
437
  addr_b_1_i              <= (enc & input(2));
438
  addr_b_2_i              <= (enc & input(3));
439
--
440
  mixcol_s0_i             <= do_a_1_o when (enc = '0') else output (31 downto 24);
441
  mixcol_s1_i             <= do_a_2_o when (enc = '0') else output (23 downto 16);
442
  mixcol_s2_i             <= do_b_1_o when (enc = '0') else output (15 downto 08);
443
  mixcol_s3_i             <= do_b_2_o when (enc = '0') else output (07 downto 00);
444
 
445
  output   <= mixcol_o xor key_o_srl3(key_counter_up) when (enc = '0') else
446
              (do_a_1_o & do_a_2_o & do_b_1_o & do_b_2_o) xor key_o_srl3(key_counter_down);
447
 
448
  output_o <= (do_a_1_o & do_a_2_o & do_b_1_o & do_b_2_o) xor key_o_srl3(key_counter_up) when (enc = '0') else
449
              (do_a_1_o & do_a_2_o & do_b_1_o & do_b_2_o) xor key_o_srl3(key_counter_down);
450
 
451
  di_0_i                 <= output (31 downto 24)  when (enc = '0') else inv_mixcol_o (31 downto 24);
452
  di_1_i                 <= output (23 downto 16)  when (enc = '0') else inv_mixcol_o (23 downto 16);
453
  di_2_i                 <= output (15 downto 08)  when (enc = '0') else inv_mixcol_o (15 downto 08);
454
  di_3_i                 <= output (07 downto 00)  when (enc = '0') else inv_mixcol_o (07 downto 00);
455
--
456 5 arif_endro
  key_b (127 downto 000) <= key_i_int (127 downto 000) when (enc = '0') else (key_o_srl3 (43) & key_o_srl3 (42) & key_o_srl3 (41) & key_o_srl3 (40));
457 2 arif_endro
 
458
  current_key <= key_o_srl3(key_counter_down);
459
 
460
  process (clock, load)
461
  begin
462
    if (load = '1') then
463
      key_counter_up     <= 4;
464
    elsif (clock = '1' and clock'event) then
465
      if (key_counter_up < 43) then
466
        key_counter_up   <= key_counter_up + 1;
467
      else
468
        key_counter_up   <= 4;
469
      end if;
470
    end if;
471
  end process;
472
--
473
  process (clock, load)
474
  begin
475
    if (load = '1') then
476
      key_counter_down   <= 39;
477
    elsif (clock = '1' and clock'event) then
478
      if (key_counter_down > 0) then
479
        key_counter_down <= key_counter_down - 1;
480
      else
481
        key_counter_down <= 39;
482
      end if;
483
    end if;
484
  end process;
485
--
486
  process(clear, done)
487
  begin
488
    if (clear = '1') then
489
      counter1bit        <= '0';
490
    elsif (done = '1' and done'event) then
491
      counter1bit        <= not (counter1bit);
492
    end if;
493
  end process;
494
--
495
  process (load, counter1bit)
496
  begin
497
    if (load = '1') then
498
      done_decrypt       <= '0';
499
    elsif (counter1bit = '0' and counter1bit'event) then
500
      done_decrypt       <= '1';
501
    end if;
502
  end process;
503
 
504
end data_flow;

powered by: WebSVN 2.1.0

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