------------------------------------------------------------
-- Copyright: 2011 Integrated Sytems Laboratory, ETH Zurich
--            http://www.iis.ee.ethz.ch/~sha3
------------------------------------------------------------
-------------------------------------------------------------------------------
-- Title      : MainLoop
-- Project    : 
-------------------------------------------------------------------------------
-- File       : MainLoop.vhdl
-- Author     : Köppel Benedikt;Schnydrig Mathias  
-- Company    : Integrated Systems Laboratory, ETH Zurich
-- Created    : 2010-10-28
-- Last update: 2011-08-29
-- Platform   : ModelSim (simulation), Synopsys (synthesis)
-- Standard   : VHDL'87
-------------------------------------------------------------------------------
-- Description: SHA 256 Main Loop
-------------------------------------------------------------------------------
-- Copyright (c) 2010 Integrated Systems Laboratory, ETH Zurich
-------------------------------------------------------------------------------
-- Revisions  :
-- Date        Version  Author  Description
-- 2010-10-28  1.0      sem10h7 Created
-- 2011-08-29  1.1      kgf     changed the entity name for CSA
-------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
use work.shapkg.all;

entity MainLoop is
  
  port (
    KKKxDI  : in  std_logic_vector(31 downto 0);
    WKKxDI  : in  std_logic_vector(31 downto 0);
    AtoHxDI : in  h_arr;
    AtoHxDO : out h_arr
    );

end MainLoop;

architecture behave of MainLoop is

  signal S0xD     : std_logic_vector(31 downto 0);
  signal MajxD    : std_logic_vector(31 downto 0);
  signal CHxD     : std_logic_vector(31 downto 0);
  signal S1xD     : std_logic_vector(31 downto 0);
  signal T1sum2xD : std_logic_vector(31 downto 0);
  signal T2xD     : std_logic_vector(31 downto 0);
  signal T1sum1xD : std_logic_vector(31 downto 0);
  signal T1sum3xD : std_logic_vector(31 downto 0);
  signal T1xD     : std_logic_vector(31 downto 0);

  -- carry save adders
--  signal SCAxD  : std_logic_vector(31 downto 0);
--  signal PSAxD  : std_logic_vector(31 downto 0);
--  signal SumAxD : std_logic_vector(32 downto 0);
--  signal SCExD  : std_logic_vector(31 downto 0);
--  signal PSExD  : std_logic_vector(31 downto 0);
--  signal SumExD : std_logic_vector(32 downto 0);

  constant WIDTH : integer := 32;       -- CSA width
  
  component ethz_csa
    generic (
      WIDTH : integer);
    port (
      XxDI : in  std_logic_vector(WIDTH-1 downto 0);
      YxDI : in  std_logic_vector(WIDTH-1 downto 0);
      ZxDI : in  std_logic_vector(WIDTH-1 downto 0);
      CxDO : out std_logic_vector(WIDTH-1 downto 0);
      SxDO : out std_logic_vector(WIDTH-1 downto 0));
  end component;
  

    -- temp signals
  signal CSAC1xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS1xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAC2xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS2xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAC3xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS3xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAC4xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS4xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAC5xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS5xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAC6xD : std_logic_vector(WIDTH-1 downto 0);
  signal CSAS6xD : std_logic_vector(WIDTH-1 downto 0);

  
  
--  component Add32Mod
--    port (
--      a : in  std_logic_vector(31 downto 0);
--      b : in  std_logic_vector(31 downto 0);
--      s : out std_logic_vector(31 downto 0));
--  end component;

begin





  CSA_1: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => KKKxDI,
      YxDI => WKKxDI,
      ZxDI => AtoHxDI(7),
      CxDO => CSAC1xD,
      SxDO => CSAS1xD);
  CSA_2: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => CSAC1xD,
      YxDI => CSAS1xD,
      ZxDI => S1xD,
      CxDO => CSAC2xD,
      SxDO => CSAS2xD);
  CSA_3: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => CSAC2xD,
      YxDI => CSAS2xD,
      ZxDI => CHxD,
      CxDO => CSAC3xD,
      SxDO => CSAS3xD);
  -- CSA.3 is now KKK + WKK + H + S1 + CH

  CSA_4: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => CSAC3xD,
      YxDI => CSAS3xD,
      ZxDI => AtoHxDI(3),
      CxDO => CSAC4xD,
      SxDO => CSAS4xD);
  -- CSA.4 is now CSA.3 + D
  AtoHxDO(4) <= CSAC4xD + CSAS4xD;

  CSA_5: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => CSAC3xD,
      YxDI => CSAS3xD,
      ZxDI => S0xD,
      CxDO => CSAC5xD,
      SxDO => CSAS5xD);

  CSA_6: ethz_csa
    generic map (
      WIDTH => WIDTH)
    port map (
      XxDI => CSAC5xD,
      YxDI => CSAS5xD,
      ZxDI => MajxD,
      CxDO => CSAC6xD,
      SxDO => CSAS6xD);
  
  AtoHxDO(0) <= CSAC6xD + CSAS6xD;
  

  



  
  S0xD  <= (AtoHxDI(0)(1 downto 0)&AtoHxDI(0)(31 downto 2)) xor (AtoHxDI(0)(12 downto 0)&AtoHxDI(0)(31 downto 13)) xor (AtoHxDI(0)(21 downto 0)&AtoHxDI(0)(31 downto 22));
  MajxD <= (AtoHxDI(0) and AtoHxDI(1)) xor (AtoHxDI(0) and AtoHxDI(2)) xor (AtoHxDI(1) and AtoHxDI(2));
  CHxD  <= (AtoHxDI(4) and AtoHxDI(5)) xor ((not AtoHxDI(4)) and AtoHxDI(6));

  S1xD <= (AtoHxDI(4)(5 downto 0)&AtoHxDI(4)(31 downto 6)) xor (AtoHxDI(4)(10 downto 0)&AtoHxDI(4)(31 downto 11)) xor (AtoHxDI(4)(24 downto 0)&AtoHxDI(4)(31 downto 25));






  -- the easy ones
  AtoHxDO(1) <= AtoHxDI(0);
  AtoHxDO(2) <= AtoHxDI(1);
  AtoHxDO(3) <= AtoHxDI(2);
  AtoHxDO(5) <= AtoHxDI(4);
  AtoHxDO(6) <= AtoHxDI(5);
  AtoHxDO(7) <= AtoHxDI(6);

end behave;

Generated on Tue Nov 22 15:16:34 CET 2011
Home