------------------------------------------------------------
-- 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;

Generated on Fri Sep 24 10:39:12 CEST 2010
Home