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

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