------------------------------------------------------------
-- Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich
-- http://www.iis.ee.ethz.ch/~sha3
------------------------------------------------------------
library ieee;
use ieee.numeric_std.all;
use ieee.std_logic_1164.all;
use work.hamsipkg.all;
entity subst256 is
port (
AxDI : in std_logic_vector(31 downto 0);
BxDI : in std_logic_vector(31 downto 0);
CxDI : in std_logic_vector(31 downto 0);
DxDI : in std_logic_vector(31 downto 0);
AxDO : out std_logic_vector(31 downto 0);
BxDO : out std_logic_vector(31 downto 0);
CxDO : out std_logic_vector(31 downto 0);
DxDO : out std_logic_vector(31 downto 0));
end subst256;
architecture rtl of subst256 is
signal T1xD, T2xD, T3xD, T4xD, T5xD, T6xD, T7xD : std_logic_vector(31 downto 0);
begin -- rtl
T1xD <= (AxDI and CxDI) xor DxDI;
T2xD <= CxDI xor BxDI xor T1xD;
T3xD <= (DxDI or AxDI) xor BxDI;
T4xD <= AxDI xor T2xD;
T5xD <= (T3xD or T4xD) xor T1xD;
T6xD <= T1xD and T3xD;
T7xD <= T4xD xor T6xD;
AxDO <= T2xD;
BxDO <= T5xD;
CxDO <= T3xD xor T5xD xor T7xD;
DxDO <= not T7xD;
end rtl;