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

Subversion Repositories deslcore

[/] [deslcore/] [trunk/] [rtl/] [f_fun.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 entactogen
 
2
-- Copyright (c) 2013 Antonio de la Piedra
3
 
4
-- This program is free software: you can redistribute it and/or modify
5
-- it under the terms of the GNU General Public License as published by
6
-- the Free Software Foundation, either version 3 of the License, or
7
-- (at your option) any later version.
8
 
9
-- This program is distributed in the hope that it will be useful,
10
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
-- GNU General Public License for more details.
13
 
14
-- You should have received a copy of the GNU General Public License
15
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
 
17 2 entactogen
library IEEE;
18
use IEEE.STD_LOGIC_1164.ALL;
19
 
20
entity f_fun is
21
        port(clk : in std_logic;
22
                  r_in : in std_logic_vector(31 downto 0);
23
                  k_in : in std_logic_vector(47 downto 0);
24
                  r_out : out std_logic_vector(31 downto 0));
25
end f_fun;
26
 
27
architecture Behavioral of f_fun is
28
 
29
        component dsp_xor is
30
                port (clk     : in std_logic;
31
                                op_1      : in std_logic_vector(31 downto 0);
32
                                op_2      : in std_logic_vector(31 downto 0);
33
                                op_3      : out std_logic_vector(31 downto 0));
34
        end component;
35
 
36
        component dsp_xor_48 is
37
                port (clk     : in std_logic;
38
                                op_1      : in std_logic_vector(47 downto 0);
39
                                op_2      : in std_logic_vector(47 downto 0);
40
                                op_3      : out std_logic_vector(47 downto 0));
41
        end component;
42
 
43
        COMPONENT s_box_dram_1
44
                PORT (
45
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
46
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
47
        END COMPONENT;
48
 
49
        COMPONENT s_box_dram_2
50
                PORT (
51
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
52
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
53
        END COMPONENT;
54
 
55
        COMPONENT s_box_dram_3
56
                PORT (
57
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
58
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
59
        END COMPONENT;
60
 
61
        COMPONENT s_box_dram_4
62
                PORT (
63
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
64
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
65
        END COMPONENT;
66
 
67
        COMPONENT s_box_dram_5
68
                PORT (
69
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
70
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
71
        END COMPONENT;
72
 
73
        COMPONENT s_box_dram_6
74
                PORT (
75
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
76
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
77
        END COMPONENT;
78
 
79
        COMPONENT s_box_dram_7
80
                PORT (
81
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
82
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
83
        END COMPONENT;
84
 
85
        COMPONENT s_box_dram_8
86
                PORT (
87
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
88
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
89
        END COMPONENT;
90
 
91
        COMPONENT s_box_l_dual_dram
92
                PORT (
93
                        a : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
94
                        d : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
95
                        dpra : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
96
                        clk : IN STD_LOGIC;
97
                        we : IN STD_LOGIC;
98
                        spo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
99
                        dpo : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
100
        END COMPONENT;
101
 
102
        signal blk_exp_s : std_logic_vector(47 downto 0);
103
        signal post_exp_key_add_s : std_logic_vector(47 downto 0);
104
        signal post_s_box_s : std_logic_vector(31 downto 0);
105
 
106
begin
107
 
108
        -- E
109
 
110
        blk_exp_s <= r_in(0)  & r_in(31)  & r_in(30)  & r_in(29)  & r_in(28)  & r_in(27)  &
111
                                         r_in(28) & r_in(27)  & r_in(26)  & r_in(25)  & r_in(24)  & r_in(23)  &
112
                                         r_in(24) & r_in(23)  & r_in(22)  & r_in(21)  & r_in(20)  & r_in(19)  &
113
                                         r_in(20) & r_in(19)  & r_in(18)  & r_in(17)  & r_in(16)  & r_in(15)  &
114
                                         r_in(16) & r_in(15)  & r_in(14)  & r_in(13)  & r_in(12)  & r_in(11)  &
115
                                         r_in(12) & r_in(11)  & r_in(10)  & r_in(9)   & r_in(8)   & r_in(7)   &
116
                                         r_in(8)  & r_in(7)   & r_in(6)   & r_in(5)   & r_in(4)   & r_in(3)   &
117
                                         r_in(4)  & r_in(3)   & r_in(2)   & r_in(1)   & r_in(0)   & r_in(31);
118
 
119
        post_exp_key_add_s <= blk_exp_s xor k_in;
120
 
121
        S_BOX_0 : s_box_l_dual_dram port map (post_exp_key_add_s(47 downto 42),
122
                                                                                                    (others => '0'),
123
                                                                                                          post_exp_key_add_s(41 downto 36),
124
                                                                                                          clk,
125
                                                                                                          '0',
126
                                                                                                          post_s_box_s(31 downto 28),
127
                                                                                                          post_s_box_s(27 downto 24));
128
 
129
        S_BOX_1 : s_box_l_dual_dram port map (post_exp_key_add_s(35 downto 30),
130
                                                                                                    (others => '0'),
131
                                                                                                          post_exp_key_add_s(29 downto 24),
132
                                                                                                          clk,
133
                                                                                                          '0',
134
                                                                                                          post_s_box_s(23 downto 20),
135
                                                                                                          post_s_box_s(19 downto 16));
136
 
137
        S_BOX_2 : s_box_l_dual_dram port map (post_exp_key_add_s(23 downto 18),
138
                                                                                                    (others => '0'),
139
                                                                                                          post_exp_key_add_s(17 downto 12),
140
                                                                                                          clk,
141
                                                                                                          '0',
142
                                                                                                          post_s_box_s(15 downto 12),
143
                                                                                                          post_s_box_s(11 downto 8));
144
 
145
        S_BOX_3 : s_box_l_dual_dram port map (post_exp_key_add_s(11 downto 6),
146
                                                                                                    (others => '0'),
147
                                                                                                          post_exp_key_add_s(5 downto 0),
148
                                                                                                          clk,
149
                                                                                                          '0',
150
                                                                                                          post_s_box_s(7 downto 4),
151
                                                                                                          post_s_box_s(3 downto 0));
152
 
153
        r_out <= post_s_box_s(16) & post_s_box_s(25)  & post_s_box_s(12) & post_s_box_s(11) & post_s_box_s(3) & post_s_box_s(20) & post_s_box_s(4) & post_s_box_s(15) &
154
                                post_s_box_s(31)  & post_s_box_s(17) & post_s_box_s(9) & post_s_box_s(6) & post_s_box_s(27)  & post_s_box_s(14) & post_s_box_s(1) & post_s_box_s(22)  &
155
                                post_s_box_s(30)  & post_s_box_s(24)  & post_s_box_s(8) & post_s_box_s(18) & post_s_box_s(0) & post_s_box_s(5) & post_s_box_s(29)  & post_s_box_s(23)  &
156
                                post_s_box_s(13) & post_s_box_s(19) & post_s_box_s(2) & post_s_box_s(26)  & post_s_box_s(10) & post_s_box_s(21) & post_s_box_s(28)  & post_s_box_s(7);
157
 
158
 
159
end Behavioral;
160
 

powered by: WebSVN 2.1.0

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