------------------------------------------------------------ -- 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.luffapkg.all; entity subcrumb is port ( SxDI : in halfdata; SxDO : out halfdata); end subcrumb; architecture rtl of subcrumb is signal T0xD, T1xD, T2xD, T3xD, T4xD, T5xD, T6xD : std_logic_vector(31 downto 0); signal T7xD, T8xD, T9xD, T10xD, T11xD, T12xD, T13xD : std_logic_vector(31 downto 0); signal SIxD, SOxD : halfdata; begin -- SIxD(0) SxDI(1); -- SIxD(1) SxDI(2); -- SIxD(2) SxDI(3); -- SIxD(3) SxDI(0); T0xD <= SxDI(0); -- tmp = *a0; | T1xD <= SxDI(0) or SxDI(1); -- *a0 |= *a1; | T2xD <= SxDI(2) xor SxDI(3); -- *a2 ^= *a3; | T3xD <= not SxDI(1); -- *a1 = ~*a1; | T4xD <= T1xD xor SxDI(3); -- *a0 ^= *a3; | T5xD <= SxDI(3) and T0xD; -- *a3 &= tmp; | T6xD <= T5xD xor T3xD; -- *a1 ^= *a3; | T7xD <= T5xD xor T2xD; -- *a3 ^= *a2; | T8xD <= T2xD and T4xD; -- *a2 &= *a0; | T9xD <= not T4xD; -- *a0 = ~*a0; | T10xD <= T8xD xor T6xD; -- *a2 ^= *a1; | T11xD <= T6xD or T7xD; -- *a1 |= *a3; | T12xD <= T0xD xor T11xD; -- tmp ^= *a1; | SxDO(3) <= T7xD xor T10xD; -- *a3 ^= *a2; | SxDO(2) <= T10xD and T11xD; -- *a2 &= *a1; | SxDO(1) <= T11xD xor T9xD; -- *a1 ^= *a0; | SxDO(0) <= T12xD; -- *a0 = tmp; | -- SxDO(1) SOxD(0); -- SxDO(2) SOxD(1); -- SxDO(3) SOxD(2); -- SxDO(0) SOxD(3); end rtl;