------------------------------------------------------------ -- Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich -- http://www.iis.ee.ethz.ch/~sha3 ------------------------------------------------------------ library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity subbytes is port ( ClkxCI : in std_logic; RstxRBI : in std_logic; DxDI : in std_logic_vector(7 downto 0); DxDO : out std_logic_vector(7 downto 0)); end subbytes; architecture rtl of subbytes is component gf4map_3 port ( AxDI : in std_logic_vector(7 downto 0); AhxDO : out std_logic_vector(3 downto 0); AlxDO : out std_logic_vector(3 downto 0)); end component; component gf4sqr_3 port ( AxDI : in std_logic_vector(3 downto 0); A2xDO : out std_logic_vector(3 downto 0)); end component; component gf4inv_3 port ( AxDI : in std_logic_vector(3 downto 0); AInvxDO : out std_logic_vector(3 downto 0)); end component; component gf4mult_3 port ( AxDI : in std_logic_vector(3 downto 0); BxDI : in std_logic_vector(3 downto 0); CxDO : out std_logic_vector(3 downto 0)); end component; component gf4imapaffine_3 port ( AhxDI : in std_logic_vector(3 downto 0); AlxDI : in std_logic_vector(3 downto 0); AxDO : out std_logic_vector(7 downto 0)); end component; signal AhxD, AlxD : std_logic_vector(3 downto 0); signal Ah2xD, Al2xD : std_logic_vector(3 downto 0); signal AmxD, ApxD : std_logic_vector(3 downto 0); signal AexD, Ael2pxD, AppxD, AinvxD : std_logic_vector(3 downto 0); signal AhsxD, AlsxD : std_logic_vector(3 downto 0); begin -- rtl u_gf4map: gf4map_3 port map ( AxDI => DxDI, AhxDO => AhxD, AlxDO => AlxD); u_gf4sqr_h: gf4sqr_3 port map ( AxDI => AhxD, A2xDO => Ah2xD); u_gf4sqr_l: gf4sqr_3 port map ( AxDI => AlxD, A2xDO => Al2xD); u_gf4mult_e: gf4mult_3 port map ( AxDI => Ah2xD, BxDI => "1110", CxDO => AexD); u_gf4mult: gf4mult_3 port map ( AxDI => AlxD, BxDI => AhxD, CxDO => AmxD); ApxD <= AlxD xor AhxD; Ael2pxD <= AexD xor Al2xD; AppxD <= Ael2pxD xor AmxD; u_gf4inv: gf4inv_3 port map ( AxDI => AppxD, AInvxDO => AinvxD); u_gf4mult_h: gf4mult_3 port map ( AxDI => AhxD, BxDI => AinvxD, CxDO => AhsxD); u_gf4mult_l: gf4mult_3 port map ( AxDI => AinvxD, BxDI => ApxD, CxDO => AlsxD); u_gf4imapaffine: gf4imapaffine_3 port map ( AhxDI => AhsxD, AlxDI => AlsxD, AxDO => DxDO); end rtl;