OpenCores
URL https://opencores.org/ocsvn/camellia-vhdl/camellia-vhdl/trunk

Subversion Repositories camellia-vhdl

[/] [camellia-vhdl/] [trunk/] [pipelining/] [camellia128.vhd] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 pfulgoni
 
2
--------------------------------------------------------------------------------
3
-- Designer:      Paolo Fulgoni <pfulgoni@opencores.org>
4
--
5
-- Create Date:   09/14/2007
6 8 pfulgoni
-- Last Update:   04/14/2008
7 2 pfulgoni
-- Project Name:  camellia-vhdl
8
-- Description:   Camellia top level module, only for 128-bit key en/decryption
9
--
10
-- Copyright (C) 2007  Paolo Fulgoni
11
-- This file is part of camellia-vhdl.
12
-- camellia-vhdl is free software; you can redistribute it and/or modify
13
-- it under the terms of the GNU General Public License as published by
14
-- the Free Software Foundation; either version 3 of the License, or
15
-- (at your option) any later version.
16
-- camellia-vhdl is distributed in the hope that it will be useful,
17
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
-- GNU General Public License for more details.
20
-- You should have received a copy of the GNU General Public License
21
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
--
23
-- The Camellia cipher algorithm is 128 bit cipher developed by NTT and
24
-- Mitsubishi Electric researchers.
25
-- http://info.isl.ntt.co.jp/crypt/eng/camellia/
26
--------------------------------------------------------------------------------
27
library IEEE;
28
use IEEE.std_logic_1164.all;
29
use IEEE.std_logic_unsigned.all;
30
 
31
 
32
entity CAMELLIA128 is
33
    port(
34 7 pfulgoni
            reset      : in  STD_LOGIC;
35
            clk        : in  STD_LOGIC;
36
            input      : in  STD_LOGIC_VECTOR (0 to 127);  -- input data
37
            input_en   : in  STD_LOGIC;                    -- input enable
38
            key        : in  STD_LOGIC_VECTOR (0 to 127);  -- key
39
            enc_dec    : in  STD_LOGIC;                    -- dec=0 enc, dec=1 dec
40
            output     : out STD_LOGIC_VECTOR (0 to 127);  -- en/decrypted data
41
            output_rdy : out STD_LOGIC                     -- output ready
42 2 pfulgoni
            );
43
end CAMELLIA128;
44
 
45
architecture RTL of CAMELLIA128 is
46
 
47
    component KEYSCHED128 is
48
        port    (
49
                reset  : in STD_LOGIC;
50
                clk    : in STD_LOGIC;
51
                kl_in  : in STD_LOGIC_VECTOR (0 to 127);
52
                kl_out : out STD_LOGIC_VECTOR (0 to 127);
53
                ka_out : out STD_LOGIC_VECTOR (0 to 127)
54
                );
55
    end component;
56
 
57
    component SIXROUND128 is
58
        generic (
59
                k1e_offset  : INTEGER;
60
                k1e_shift   : INTEGER;
61
                k2e_offset  : INTEGER;
62
                k2e_shift   : INTEGER;
63
                k3e_offset  : INTEGER;
64
                k3e_shift   : INTEGER;
65
                k4e_offset  : INTEGER;
66
                k4e_shift   : INTEGER;
67
                k5e_offset  : INTEGER;
68
                k5e_shift   : INTEGER;
69
                k6e_offset  : INTEGER;
70
                k6e_shift   : INTEGER;
71
                k1d_offset  : INTEGER;
72
                k1d_shift   : INTEGER;
73
                k2d_offset  : INTEGER;
74
                k2d_shift   : INTEGER;
75
                k3d_offset  : INTEGER;
76
                k3d_shift   : INTEGER;
77
                k4d_offset  : INTEGER;
78
                k4d_shift   : INTEGER;
79
                k5d_offset  : INTEGER;
80
                k5d_shift   : INTEGER;
81
                k6d_offset  : INTEGER;
82
                k6d_shift   : INTEGER
83
                );
84
        port(
85
                reset   : in  STD_LOGIC;
86
                clk     : in  STD_LOGIC;
87
                dec1    : in  STD_LOGIC;
88
                k1      : in  STD_LOGIC_VECTOR (0 to 255);
89
                dec2    : in  STD_LOGIC;
90
                k2      : in  STD_LOGIC_VECTOR (0 to 255);
91
                dec3    : in  STD_LOGIC;
92
                k3      : in  STD_LOGIC_VECTOR (0 to 255);
93
                dec4    : in  STD_LOGIC;
94
                k4      : in  STD_LOGIC_VECTOR (0 to 255);
95
                dec5    : in  STD_LOGIC;
96
                k5      : in  STD_LOGIC_VECTOR (0 to 255);
97
                dec6    : in  STD_LOGIC;
98
                k6      : in  STD_LOGIC_VECTOR (0 to 255);
99
                l_in    : in  STD_LOGIC_VECTOR (0 to 63);
100
                r_in    : in  STD_LOGIC_VECTOR (0 to 63);
101
                l_out   : out STD_LOGIC_VECTOR (0 to 63);
102
                r_out   : out STD_LOGIC_VECTOR (0 to 63)
103
                );
104
    end component;
105
 
106
    component FL128 is
107
        generic    (
108
                    fl_ke_offset  : INTEGER;
109
                    fl_ke_shift   : INTEGER;
110
                    fli_ke_offset : INTEGER;
111
                    fli_ke_shift  : INTEGER;
112
                    fl_kd_offset  : INTEGER;
113
                    fl_kd_shift   : INTEGER;
114
                    fli_kd_offset : INTEGER;
115
                    fli_kd_shift  : INTEGER
116
                    );
117
        port(
118
                    reset   : in  STD_LOGIC;
119
                    clk     : in  STD_LOGIC;
120
                    fl_in   : in  STD_LOGIC_VECTOR (0 to 63);
121
                    fli_in  : in  STD_LOGIC_VECTOR (0 to 63);
122
                    k       : in  STD_LOGIC_VECTOR (0 to 255);
123
                    dec     : in  STD_LOGIC;
124
                    fl_out  : out STD_LOGIC_VECTOR (0 to 63);
125
                    fli_out : out STD_LOGIC_VECTOR (0 to 63)
126
                    );
127
    end component;
128
 
129
 
130
    -- input registers
131
    signal reg_m   : STD_LOGIC_VECTOR (0 to 127);
132
    signal reg_k   : STD_LOGIC_VECTOR (0 to 127);
133
    signal reg_dec : STD_LOGIC;
134 7 pfulgoni
    signal reg_rdy : STD_LOGIC;
135 2 pfulgoni
 
136
    -- used by pre-whitening
137
    signal kw1_enc     : STD_LOGIC_VECTOR (0 to 63);
138
    signal kw2_enc     : STD_LOGIC_VECTOR (0 to 63);
139
    signal ka_s111_dec : STD_LOGIC_VECTOR (0 to 127);
140
    signal kw1_dec     : STD_LOGIC_VECTOR (0 to 63);
141
    signal kw2_dec     : STD_LOGIC_VECTOR (0 to 63);
142
    signal kw1         : STD_LOGIC_VECTOR (0 to 63);
143
    signal kw2         : STD_LOGIC_VECTOR (0 to 63);
144
    signal w1          : STD_LOGIC_VECTOR (0 to 63);
145
    signal w2          : STD_LOGIC_VECTOR (0 to 63);
146
 
147
    -- used by post-whitening
148
    signal ka_s111_enc : STD_LOGIC_VECTOR (0 to 127);
149
    signal kw3_enc     : STD_LOGIC_VECTOR (0 to 63);
150
    signal kw4_enc     : STD_LOGIC_VECTOR (0 to 63);
151
    signal kw3_dec     : STD_LOGIC_VECTOR (0 to 63);
152
    signal kw4_dec     : STD_LOGIC_VECTOR (0 to 63);
153
    signal kw3         : STD_LOGIC_VECTOR (0 to 63);
154
    signal kw4         : STD_LOGIC_VECTOR (0 to 63);
155
    signal w3          : STD_LOGIC_VECTOR (0 to 63);
156
    signal w4          : STD_LOGIC_VECTOR (0 to 63);
157
 
158
    -- registers used during key schedule
159
    signal reg_a1_m   : STD_LOGIC_VECTOR (0 to 127);
160
    signal reg_a1_dec : STD_LOGIC;
161 7 pfulgoni
    signal reg_a1_rdy : STD_LOGIC;
162 2 pfulgoni
    signal reg_a2_m   : STD_LOGIC_VECTOR (0 to 127);
163
    signal reg_a2_dec : STD_LOGIC;
164 7 pfulgoni
    signal reg_a2_rdy : STD_LOGIC;
165 2 pfulgoni
    signal reg_a3_m   : STD_LOGIC_VECTOR (0 to 127);
166
    signal reg_a3_dec : STD_LOGIC;
167 7 pfulgoni
    signal reg_a3_rdy : STD_LOGIC;
168 2 pfulgoni
    signal reg_a4_m   : STD_LOGIC_VECTOR (0 to 127);
169
    signal reg_a4_dec : STD_LOGIC;
170 7 pfulgoni
    signal reg_a4_rdy : STD_LOGIC;
171 2 pfulgoni
 
172
    -- registers used during 6-rounds and fls
173
    signal reg_b1_dec  : STD_LOGIC;
174
    signal reg_b1_k    : STD_LOGIC_VECTOR (0 to 255);
175 7 pfulgoni
    signal reg_b1_rdy  : STD_LOGIC;
176 2 pfulgoni
    signal reg_b2_dec  : STD_LOGIC;
177
    signal reg_b2_k    : STD_LOGIC_VECTOR (0 to 255);
178 7 pfulgoni
    signal reg_b2_rdy  : STD_LOGIC;
179 2 pfulgoni
    signal reg_b3_dec  : STD_LOGIC;
180
    signal reg_b3_k    : STD_LOGIC_VECTOR (0 to 255);
181 7 pfulgoni
    signal reg_b3_rdy  : STD_LOGIC;
182 2 pfulgoni
    signal reg_b4_dec  : STD_LOGIC;
183
    signal reg_b4_k    : STD_LOGIC_VECTOR (0 to 255);
184 7 pfulgoni
    signal reg_b4_rdy  : STD_LOGIC;
185 2 pfulgoni
    signal reg_b5_dec  : STD_LOGIC;
186
    signal reg_b5_k    : STD_LOGIC_VECTOR (0 to 255);
187 7 pfulgoni
    signal reg_b5_rdy  : STD_LOGIC;
188 2 pfulgoni
    signal reg_b6_dec  : STD_LOGIC;
189
    signal reg_b6_k    : STD_LOGIC_VECTOR (0 to 255);
190 7 pfulgoni
    signal reg_b6_rdy  : STD_LOGIC;
191 2 pfulgoni
    signal reg_b7_dec  : STD_LOGIC;
192
    signal reg_b7_k    : STD_LOGIC_VECTOR (0 to 255);
193 7 pfulgoni
    signal reg_b7_rdy  : STD_LOGIC;
194 2 pfulgoni
    signal reg_b8_dec  : STD_LOGIC;
195
    signal reg_b8_k    : STD_LOGIC_VECTOR (0 to 255);
196 7 pfulgoni
    signal reg_b8_rdy  : STD_LOGIC;
197 2 pfulgoni
    signal reg_b9_dec  : STD_LOGIC;
198
    signal reg_b9_k    : STD_LOGIC_VECTOR (0 to 255);
199 7 pfulgoni
    signal reg_b9_rdy  : STD_LOGIC;
200 2 pfulgoni
    signal reg_b10_dec : STD_LOGIC;
201
    signal reg_b10_k   : STD_LOGIC_VECTOR (0 to 255);
202 7 pfulgoni
    signal reg_b10_rdy : STD_LOGIC;
203 2 pfulgoni
    signal reg_b11_dec : STD_LOGIC;
204
    signal reg_b11_k   : STD_LOGIC_VECTOR (0 to 255);
205 7 pfulgoni
    signal reg_b11_rdy : STD_LOGIC;
206 2 pfulgoni
    signal reg_b12_dec : STD_LOGIC;
207
    signal reg_b12_k   : STD_LOGIC_VECTOR (0 to 255);
208 7 pfulgoni
    signal reg_b12_rdy : STD_LOGIC;
209 2 pfulgoni
    signal reg_b13_dec : STD_LOGIC;
210
    signal reg_b13_k   : STD_LOGIC_VECTOR (0 to 255);
211 7 pfulgoni
    signal reg_b13_rdy : STD_LOGIC;
212 2 pfulgoni
    signal reg_b14_dec : STD_LOGIC;
213
    signal reg_b14_k   : STD_LOGIC_VECTOR (0 to 255);
214 7 pfulgoni
    signal reg_b14_rdy : STD_LOGIC;
215 2 pfulgoni
    signal reg_b15_dec : STD_LOGIC;
216
    signal reg_b15_k   : STD_LOGIC_VECTOR (0 to 255);
217 7 pfulgoni
    signal reg_b15_rdy : STD_LOGIC;
218 2 pfulgoni
    signal reg_b16_dec : STD_LOGIC;
219
    signal reg_b16_k   : STD_LOGIC_VECTOR (0 to 255);
220 7 pfulgoni
    signal reg_b16_rdy : STD_LOGIC;
221 2 pfulgoni
    signal reg_b17_dec : STD_LOGIC;
222
    signal reg_b17_k   : STD_LOGIC_VECTOR (0 to 255);
223 7 pfulgoni
    signal reg_b17_rdy : STD_LOGIC;
224 2 pfulgoni
    signal reg_b18_dec : STD_LOGIC;
225
    signal reg_b18_k   : STD_LOGIC_VECTOR (0 to 255);
226 7 pfulgoni
    signal reg_b18_rdy : STD_LOGIC;
227 2 pfulgoni
    signal reg_b19_dec : STD_LOGIC;
228
    signal reg_b19_k   : STD_LOGIC_VECTOR (0 to 255);
229 7 pfulgoni
    signal reg_b19_rdy : STD_LOGIC;
230 2 pfulgoni
    signal reg_b20_dec : STD_LOGIC;
231
    signal reg_b20_k   : STD_LOGIC_VECTOR (0 to 255);
232 7 pfulgoni
    signal reg_b20_rdy : STD_LOGIC;
233 2 pfulgoni
 
234
    -- components outputs
235
    signal out_ksched  : STD_LOGIC_VECTOR (0 to 255); -- key schedule
236
    signal out_r1l     : STD_LOGIC_VECTOR (0 to 63);  -- first six-round
237
    signal out_r1r     : STD_LOGIC_VECTOR (0 to 63);
238
    signal out_r2l     : STD_LOGIC_VECTOR (0 to 63);  -- second six-round
239
    signal out_r2r     : STD_LOGIC_VECTOR (0 to 63);
240
    signal out_r3l     : STD_LOGIC_VECTOR (0 to 63);  -- third six-round
241
    signal out_r3r     : STD_LOGIC_VECTOR (0 to 63);
242
    signal out_fl1l    : STD_LOGIC_VECTOR (0 to 63);  -- first fl
243
    signal out_fl1r    : STD_LOGIC_VECTOR (0 to 63);
244
    signal out_fl2l    : STD_LOGIC_VECTOR (0 to 63);  -- second fl
245
    signal out_fl2r    : STD_LOGIC_VECTOR (0 to 63);
246
 
247
    -- constants
248
    constant KL_OFFSET : integer := 0;
249
    constant KA_OFFSET : integer := 128;
250
 
251
begin
252
 
253 7 pfulgoni
    KEY_SCHED: KEYSCHED128
254 2 pfulgoni
    PORT MAP (
255
            reset  => reset,
256
            clk    => clk,
257
            kl_in  => reg_k,
258
            kl_out => out_ksched(KL_OFFSET to KL_OFFSET+127),
259
            ka_out => out_ksched(KA_OFFSET to KA_OFFSET+127)
260
            );
261
 
262
    SIX1: SIXROUND128
263
    GENERIC MAP(
264
        k1e_offset => KA_OFFSET,
265
        k1e_shift  => 0,
266
        k2e_offset => KA_OFFSET,
267
        k2e_shift  => 0,
268
        k3e_offset => KL_OFFSET,
269
        k3e_shift  => 15,
270
        k4e_offset => KL_OFFSET,
271
        k4e_shift  => 15,
272
        k5e_offset => KA_OFFSET,
273
        k5e_shift  => 15,
274
        k6e_offset => KA_OFFSET,
275
        k6e_shift  => 15,
276
        k1d_offset => KL_OFFSET,
277
        k1d_shift  => 111,
278
        k2d_offset => KL_OFFSET,
279
        k2d_shift  => 111,
280
        k3d_offset => KA_OFFSET,
281
        k3d_shift  => 94,
282
        k4d_offset => KA_OFFSET,
283
        k4d_shift  => 94,
284
        k5d_offset => KL_OFFSET,
285
        k5d_shift  => 94,
286
        k6d_offset => KL_OFFSET,
287
        k6d_shift  => 94
288
    )
289
    PORT MAP(
290
        reset   => reset,
291
        clk     => clk,
292
        dec1    => reg_a4_dec,
293
        k1      => out_ksched,
294
        dec2    => reg_b1_dec,
295
        k2      => reg_b1_k,
296
        dec3    => reg_b2_dec,
297
        k3      => reg_b2_k,
298
        dec4    => reg_b3_dec,
299
        k4      => reg_b3_k,
300
        dec5    => reg_b4_dec,
301
        k5      => reg_b4_k,
302
        dec6    => reg_b5_dec,
303
        k6      => reg_b5_k,
304
        l_in    => w1,
305
        r_in    => w2,
306
        l_out   => out_r1l,
307
        r_out   => out_r1r
308
    );
309
 
310
    SIX2: SIXROUND128
311
    GENERIC MAP(
312
        k1e_offset => KL_OFFSET,
313
        k1e_shift  => 45,
314
        k2e_offset => KL_OFFSET,
315
        k2e_shift  => 45,
316
        k3e_offset => KA_OFFSET,
317
        k3e_shift  => 45,
318
        k4e_offset => KL_OFFSET,
319
        k4e_shift  => 60,
320
        k5e_offset => KA_OFFSET,
321
        k5e_shift  => 60,
322
        k6e_offset => KA_OFFSET,
323
        k6e_shift  => 60,
324
        k1d_offset => KA_OFFSET,
325
        k1d_shift  => 60,
326
        k2d_offset => KA_OFFSET,
327
        k2d_shift  => 60,
328
        k3d_offset => KL_OFFSET,
329
        k3d_shift  => 60,
330
        k4d_offset => KA_OFFSET,
331
        k4d_shift  => 45,
332
        k5d_offset => KL_OFFSET,
333
        k5d_shift  => 45,
334
        k6d_offset => KL_OFFSET,
335
        k6d_shift  => 45
336
    )
337
    PORT MAP(
338
        reset   => reset,
339
        clk     => clk,
340
        dec1    => reg_b7_dec,
341
        k1      => reg_b7_k,
342
        dec2    => reg_b8_dec,
343
        k2      => reg_b8_k,
344
        dec3    => reg_b9_dec,
345
        k3      => reg_b9_k,
346
        dec4    => reg_b10_dec,
347
        k4      => reg_b10_k,
348
        dec5    => reg_b11_dec,
349
        k5      => reg_b11_k,
350
        dec6    => reg_b12_dec,
351
        k6      => reg_b12_k,
352
        l_in    => out_fl1l,
353
        r_in    => out_fl1r,
354
        l_out   => out_r2l,
355
        r_out   => out_r2r
356
    );
357
 
358
    SIX3: SIXROUND128
359
    GENERIC MAP(
360
        k1e_offset => KL_OFFSET,
361
        k1e_shift  => 94,
362
        k2e_offset => KL_OFFSET,
363
        k2e_shift  => 94,
364
        k3e_offset => KA_OFFSET,
365
        k3e_shift  => 94,
366
        k4e_offset => KA_OFFSET,
367
        k4e_shift  => 94,
368
        k5e_offset => KL_OFFSET,
369
        k5e_shift  => 111,
370
        k6e_offset => KL_OFFSET,
371
        k6e_shift  => 111,
372
        k1d_offset => KA_OFFSET,
373
        k1d_shift  => 15,
374
        k2d_offset => KA_OFFSET,
375
        k2d_shift  => 15,
376
        k3d_offset => KL_OFFSET,
377
        k3d_shift  => 15,
378
        k4d_offset => KL_OFFSET,
379
        k4d_shift  => 15,
380
        k5d_offset => KA_OFFSET,
381
        k5d_shift  => 0,
382
        k6d_offset => KA_OFFSET,
383
        k6d_shift  => 0
384
    )
385
    PORT MAP(
386
        reset   => reset,
387
        clk     => clk,
388
        dec1    => reg_b14_dec,
389
        k1      => reg_b14_k,
390
        dec2    => reg_b15_dec,
391
        k2      => reg_b15_k,
392
        dec3    => reg_b16_dec,
393
        k3      => reg_b16_k,
394
        dec4    => reg_b17_dec,
395
        k4      => reg_b17_k,
396
        dec5    => reg_b18_dec,
397
        k5      => reg_b18_k,
398
        dec6    => reg_b19_dec,
399
        k6      => reg_b19_k,
400
        l_in    => out_fl2l,
401
        r_in    => out_fl2r,
402
        l_out   => out_r3l,
403
        r_out   => out_r3r
404
    );
405
 
406
    FL1: FL128
407
    GENERIC MAP (
408
            fl_ke_offset  => KA_OFFSET,
409
            fl_ke_shift   => 30,
410
            fli_ke_offset => KA_OFFSET,
411
            fli_ke_shift  => 30,
412
            fl_kd_offset  => KL_OFFSET,
413
            fl_kd_shift   => 77,
414
            fli_kd_offset => KL_OFFSET,
415
            fli_kd_shift  => 77
416
            )
417
    PORT MAP (
418
            reset   => reset,
419
            clk     => clk,
420
            fl_in   => out_r1l,
421
            fli_in  => out_r1r,
422
            k       => reg_b7_k,
423
            dec     => reg_b7_dec,
424
            fl_out  => out_fl1l,
425
            fli_out => out_fl1r
426
            );
427
 
428
    FL2: FL128
429
    GENERIC MAP (
430
            fl_ke_offset  => KL_OFFSET,
431
            fl_ke_shift   => 77,
432
            fli_ke_offset => KL_OFFSET,
433
            fli_ke_shift  => 77,
434
            fl_kd_offset  => KA_OFFSET,
435
            fl_kd_shift   => 30,
436
            fli_kd_offset => KA_OFFSET,
437
            fli_kd_shift  => 30
438
            )
439
    PORT MAP (
440
            reset   => reset,
441
            clk     => clk,
442
            fl_in   => out_r2l,
443
            fli_in  => out_r2r,
444
            k       => reg_b14_k,
445
            dec     => reg_b14_dec,
446
            fl_out  => out_fl2l,
447
            fli_out => out_fl2r
448
            );
449
 
450
    process(reset, clk)
451
    begin
452
        if(reset = '1') then
453
            reg_m       <= (others=>'0');
454
            reg_k       <= (others=>'0');
455
            reg_dec     <= '0';
456 7 pfulgoni
            reg_rdy     <= '0';
457
            reg_a1_rdy  <= '0';
458
            reg_a2_rdy  <= '0';
459
            reg_a3_rdy  <= '0';
460
            reg_a4_rdy  <= '0';
461
            reg_b1_rdy  <= '0';
462
            reg_b2_rdy  <= '0';
463
            reg_b3_rdy  <= '0';
464
            reg_b4_rdy  <= '0';
465
            reg_b5_rdy  <= '0';
466
            reg_b6_rdy  <= '0';
467
            reg_b7_rdy  <= '0';
468
            reg_b8_rdy  <= '0';
469
            reg_b9_rdy  <= '0';
470
            reg_b10_rdy <= '0';
471
            reg_b11_rdy <= '0';
472
            reg_b12_rdy <= '0';
473
            reg_b13_rdy <= '0';
474
            reg_b14_rdy <= '0';
475
            reg_b15_rdy <= '0';
476
            reg_b16_rdy <= '0';
477
            reg_b17_rdy <= '0';
478
            reg_b18_rdy <= '0';
479
            reg_b19_rdy <= '0';
480
            reg_b20_rdy <= '0';
481
            output_rdy  <= '0';
482 8 pfulgoni
        elsif(rising_edge(clk)) then
483 7 pfulgoni
            reg_m       <= input;
484
            reg_k       <= key;
485
            reg_dec     <= enc_dec;
486
            reg_rdy     <= input_en;
487 2 pfulgoni
 
488
            reg_a1_m    <= reg_m;
489
            reg_a1_dec  <= reg_dec;
490 7 pfulgoni
            reg_a1_rdy  <= reg_rdy;
491 2 pfulgoni
            reg_a2_m    <= reg_a1_m;
492
            reg_a2_dec  <= reg_a1_dec;
493 7 pfulgoni
            reg_a2_rdy  <= reg_a1_rdy;
494 2 pfulgoni
            reg_a3_m    <= reg_a2_m;
495
            reg_a3_dec  <= reg_a2_dec;
496 7 pfulgoni
            reg_a3_rdy  <= reg_a2_rdy;
497 2 pfulgoni
            reg_a4_m    <= reg_a3_m;
498
            reg_a4_dec  <= reg_a3_dec;
499 7 pfulgoni
            reg_a4_rdy  <= reg_a3_rdy;
500 2 pfulgoni
 
501
            reg_b1_dec  <= reg_a4_dec;
502
            reg_b1_k    <= out_ksched;
503 7 pfulgoni
            reg_b1_rdy  <= reg_a4_rdy;
504 2 pfulgoni
            reg_b2_dec  <= reg_b1_dec;
505
            reg_b2_k    <= reg_b1_k;
506 7 pfulgoni
            reg_b2_rdy  <= reg_b1_rdy;
507 2 pfulgoni
            reg_b3_dec  <= reg_b2_dec;
508
            reg_b3_k    <= reg_b2_k;
509 7 pfulgoni
            reg_b3_rdy  <= reg_b2_rdy;
510 2 pfulgoni
            reg_b4_dec  <= reg_b3_dec;
511
            reg_b4_k    <= reg_b3_k;
512 7 pfulgoni
            reg_b4_rdy  <= reg_b3_rdy;
513 2 pfulgoni
            reg_b5_dec  <= reg_b4_dec;
514
            reg_b5_k    <= reg_b4_k;
515 7 pfulgoni
            reg_b5_rdy  <= reg_b4_rdy;
516 2 pfulgoni
            reg_b6_dec  <= reg_b5_dec;
517
            reg_b6_k    <= reg_b5_k;
518 7 pfulgoni
            reg_b6_rdy  <= reg_b5_rdy;
519 2 pfulgoni
            reg_b7_dec  <= reg_b6_dec;
520
            reg_b7_k    <= reg_b6_k;
521 7 pfulgoni
            reg_b7_rdy  <= reg_b6_rdy;
522 2 pfulgoni
            reg_b8_dec  <= reg_b7_dec;
523
            reg_b8_k    <= reg_b7_k;
524 7 pfulgoni
            reg_b8_rdy  <= reg_b7_rdy;
525 2 pfulgoni
            reg_b9_dec  <= reg_b8_dec;
526
            reg_b9_k    <= reg_b8_k;
527 7 pfulgoni
            reg_b9_rdy  <= reg_b8_rdy;
528 2 pfulgoni
            reg_b10_dec <= reg_b9_dec;
529
            reg_b10_k   <= reg_b9_k;
530 7 pfulgoni
            reg_b10_rdy <= reg_b9_rdy;
531 2 pfulgoni
            reg_b11_dec <= reg_b10_dec;
532
            reg_b11_k   <= reg_b10_k;
533 7 pfulgoni
            reg_b11_rdy <= reg_b10_rdy;
534 2 pfulgoni
            reg_b12_dec <= reg_b11_dec;
535
            reg_b12_k   <= reg_b11_k;
536 7 pfulgoni
            reg_b12_rdy <= reg_b11_rdy;
537 2 pfulgoni
            reg_b13_dec <= reg_b12_dec;
538
            reg_b13_k   <= reg_b12_k;
539 7 pfulgoni
            reg_b13_rdy <= reg_b12_rdy;
540 2 pfulgoni
            reg_b14_dec <= reg_b13_dec;
541
            reg_b14_k   <= reg_b13_k;
542 7 pfulgoni
            reg_b14_rdy <= reg_b13_rdy;
543 2 pfulgoni
            reg_b15_dec <= reg_b14_dec;
544
            reg_b15_k   <= reg_b14_k;
545 7 pfulgoni
            reg_b15_rdy <= reg_b14_rdy;
546 2 pfulgoni
            reg_b16_dec <= reg_b15_dec;
547
            reg_b16_k   <= reg_b15_k;
548 7 pfulgoni
            reg_b16_rdy <= reg_b15_rdy;
549 2 pfulgoni
            reg_b17_dec <= reg_b16_dec;
550
            reg_b17_k   <= reg_b16_k;
551 7 pfulgoni
            reg_b17_rdy <= reg_b16_rdy;
552 2 pfulgoni
            reg_b18_dec <= reg_b17_dec;
553
            reg_b18_k   <= reg_b17_k;
554 7 pfulgoni
            reg_b18_rdy <= reg_b17_rdy;
555 2 pfulgoni
            reg_b19_dec <= reg_b18_dec;
556
            reg_b19_k   <= reg_b18_k;
557 7 pfulgoni
            reg_b19_rdy <= reg_b18_rdy;
558 2 pfulgoni
            reg_b20_dec <= reg_b19_dec;
559
            reg_b20_k   <= reg_b19_k;
560 7 pfulgoni
            reg_b20_rdy <= reg_b19_rdy;
561 2 pfulgoni
 
562
            -- outputs
563 7 pfulgoni
            output     <= w3 & w4;
564
            output_rdy <= reg_b20_rdy;
565 2 pfulgoni
 
566
 
567
        end if;
568
    end process;
569
 
570
    -- pre-whitening
571
    kw1_enc <= out_ksched(KL_OFFSET to KL_OFFSET+63);
572
    kw2_enc <= out_ksched(KL_OFFSET+64 to KL_OFFSET+127);
573
 
574
    ka_s111_dec <= out_ksched(KA_OFFSET+111 to KA_OFFSET+127) &
575
                   out_ksched(KA_OFFSET to KA_OFFSET+110);
576
    kw1_dec <= ka_s111_dec(0 to 63);
577
    kw2_dec <= ka_s111_dec(64 to 127);
578
 
579
    kw1 <= kw1_dec when reg_a4_dec='1' else kw1_enc;
580
    kw2 <= kw2_dec when reg_a4_dec='1' else kw2_enc;
581
 
582
    w1 <= reg_a4_m(0 to 63) xor kw1;
583
    w2 <= reg_a4_m(64 to 127) xor kw2;
584
 
585
    -- post-whitening
586
    ka_s111_enc <= reg_b20_k(KA_OFFSET+111 to KA_OFFSET+127) &
587
                   reg_b20_k(KA_OFFSET to KA_OFFSET+110);
588
    kw3_enc <= ka_s111_enc(0 to 63);
589
    kw4_enc <= ka_s111_enc(64 to 127);
590
 
591
    kw3_dec <= reg_b20_k(KL_OFFSET to KL_OFFSET+63);
592
    kw4_dec <= reg_b20_k(KL_OFFSET+64 to KL_OFFSET+127);
593
 
594
    kw3 <= kw3_dec when reg_b20_dec='1' else kw3_enc;
595
    kw4 <= kw4_dec when reg_b20_dec='1' else kw4_enc;
596
 
597
    w3 <= out_r3r xor kw3;
598
    w4 <= out_r3l xor kw4;
599
 
600
end RTL;

powered by: WebSVN 2.1.0

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