------------------------------------------------------------
-- 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;
entity f0 is
port (
MxDI : in std_logic_vector(511 downto 0);
HxDI : in std_logic_vector(511 downto 0);
QaxDO : out std_logic_vector(511 downto 0));
end f0;
architecture rtl of f0 is
signal WxD : std_logic_vector(511 downto 0);
begin -- rtl
WxD(511 downto 480) <= std_logic_vector(unsigned(MxDI(351 downto 320) xor HxDI(351 downto 320)) - unsigned(MxDI(287 downto 256) xor HxDI(287 downto 256)) + unsigned(MxDI(191 downto 160) xor HxDI(191 downto 160)) + unsigned(MxDI(95 downto 64) xor HxDI(95 downto 64)) + unsigned(MxDI(63 downto 32) xor HxDI(63 downto 32)));
WxD(479 downto 448) <= std_logic_vector(unsigned(MxDI(319 downto 288) xor HxDI(319 downto 288)) - unsigned(MxDI(255 downto 224) xor HxDI(255 downto 224)) + unsigned(MxDI(159 downto 128) xor HxDI(159 downto 128)) + unsigned(MxDI(63 downto 32) xor HxDI(63 downto 32)) - unsigned(MxDI(31 downto 0) xor HxDI(31 downto 0)));
WxD(447 downto 416) <= std_logic_vector(unsigned(MxDI(511 downto 480) xor HxDI(511 downto 480)) + unsigned(MxDI(287 downto 256) xor HxDI(287 downto 256)) + unsigned(MxDI(223 downto 192) xor HxDI(223 downto 192)) - unsigned(MxDI(127 downto 96) xor HxDI(127 downto 96)) + unsigned(MxDI(31 downto 0) xor HxDI(31 downto 0)));
WxD(415 downto 384) <= std_logic_vector(unsigned(MxDI(511 downto 480) xor HxDI(511 downto 480)) - unsigned(MxDI(479 downto 448) xor HxDI(479 downto 448)) + unsigned(MxDI(255 downto 224) xor HxDI(255 downto 224)) - unsigned(MxDI(191 downto 160) xor HxDI(191 downto 160)) + unsigned(MxDI(95 downto 64) xor HxDI(95 downto 64)));
WxD(383 downto 352) <= std_logic_vector(unsigned(MxDI(479 downto 448) xor HxDI(479 downto 448)) + unsigned(MxDI(447 downto 416) xor HxDI(447 downto 416)) + unsigned(MxDI(223 downto 192) xor HxDI(223 downto 192)) - unsigned(MxDI(159 downto 128) xor HxDI(159 downto 128)) - unsigned(MxDI(63 downto 32) xor HxDI(63 downto 32)));
WxD(351 downto 320) <= std_logic_vector(unsigned(MxDI(415 downto 384) xor HxDI(415 downto 384)) - unsigned(MxDI(447 downto 416) xor HxDI(447 downto 416)) + unsigned(MxDI(191 downto 160) xor HxDI(191 downto 160)) - unsigned(MxDI(127 downto 96) xor HxDI(127 downto 96)) + unsigned(MxDI(31 downto 0) xor HxDI(31 downto 0)));
WxD(319 downto 288) <= std_logic_vector(unsigned(MxDI(383 downto 352) xor HxDI(383 downto 352)) - unsigned(MxDI(511 downto 480) xor HxDI(511 downto 480)) - unsigned(MxDI(415 downto 384) xor HxDI(415 downto 384)) - unsigned(MxDI(159 downto 128) xor HxDI(159 downto 128)) + unsigned(MxDI(95 downto 64) xor HxDI(95 downto 64)));
WxD(287 downto 256) <= std_logic_vector(unsigned(MxDI(479 downto 448) xor HxDI(479 downto 448)) - unsigned(MxDI(383 downto 352) xor HxDI(383 downto 352)) - unsigned(MxDI(351 downto 320) xor HxDI(351 downto 320)) - unsigned(MxDI(127 downto 96) xor HxDI(127 downto 96)) - unsigned(MxDI(63 downto 32) xor HxDI(63 downto 32)));
WxD(255 downto 224) <= std_logic_vector(unsigned(MxDI(447 downto 416) xor HxDI(447 downto 416)) - unsigned(MxDI(351 downto 320) xor HxDI(351 downto 320)) - unsigned(MxDI(319 downto 288) xor HxDI(319 downto 288)) + unsigned(MxDI(95 downto 64) xor HxDI(95 downto 64)) - unsigned(MxDI(31 downto 0) xor HxDI(31 downto 0)));
WxD(223 downto 192) <= std_logic_vector(unsigned(MxDI(511 downto 480) xor HxDI(511 downto 480)) - unsigned(MxDI(415 downto 384) xor HxDI(415 downto 384)) + unsigned(MxDI(319 downto 288) xor HxDI(319 downto 288)) - unsigned(MxDI(287 downto 256) xor HxDI(287 downto 256)) + unsigned(MxDI(63 downto 32) xor HxDI(63 downto 32)));
WxD(191 downto 160) <= std_logic_vector(unsigned(MxDI(255 downto 224) xor HxDI(255 downto 224)) - unsigned(MxDI(479 downto 448) xor HxDI(479 downto 448)) - unsigned(MxDI(383 downto 352) xor HxDI(383 downto 352)) - unsigned(MxDI(287 downto 256) xor HxDI(287 downto 256)) + unsigned(MxDI(31 downto 0) xor HxDI(31 downto 0)));
WxD(159 downto 128) <= std_logic_vector(unsigned(MxDI(255 downto 224) xor HxDI(255 downto 224)) - unsigned(MxDI(511 downto 480) xor HxDI(511 downto 480)) - unsigned(MxDI(447 downto 416) xor HxDI(447 downto 416)) - unsigned(MxDI(351 downto 320) xor HxDI(351 downto 320)) + unsigned(MxDI(223 downto 192) xor HxDI(223 downto 192)));
WxD(127 downto 96) <= std_logic_vector(unsigned(MxDI(479 downto 448) xor HxDI(479 downto 448)) + unsigned(MxDI(415 downto 384) xor HxDI(415 downto 384)) - unsigned(MxDI(319 downto 288) xor HxDI(319 downto 288)) - unsigned(MxDI(223 downto 192) xor HxDI(223 downto 192)) + unsigned(MxDI(191 downto 160) xor HxDI(191 downto 160)));
WxD(95 downto 64) <= std_logic_vector(unsigned(MxDI(447 downto 416) xor HxDI(447 downto 416)) + unsigned(MxDI(383 downto 352) xor HxDI(383 downto 352)) + unsigned(MxDI(287 downto 256) xor HxDI(287 downto 256)) + unsigned(MxDI(191 downto 160) xor HxDI(191 downto 160)) + unsigned(MxDI(159 downto 128) xor HxDI(159 downto 128)));
WxD(63 downto 32) <= std_logic_vector(unsigned(MxDI(415 downto 384) xor HxDI(415 downto 384)) - unsigned(MxDI(351 downto 320) xor HxDI(351 downto 320)) + unsigned(MxDI(255 downto 224) xor HxDI(255 downto 224)) - unsigned(MxDI(159 downto 128) xor HxDI(159 downto 128)) - unsigned(MxDI(127 downto 96) xor HxDI(127 downto 96)));
WxD(31 downto 0) <= std_logic_vector(unsigned(MxDI(127 downto 96) xor HxDI(127 downto 96)) - unsigned(MxDI(383 downto 352) xor HxDI(383 downto 352)) - unsigned(MxDI(319 downto 288) xor HxDI(319 downto 288)) - unsigned(MxDI(223 downto 192) xor HxDI(223 downto 192)) + unsigned(MxDI(95 downto 64) xor HxDI(95 downto 64)));
QaxDO(511 downto 480) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(511 downto 480)) srl 1) xor std_logic_vector(unsigned(WxD(511 downto 480)) sll 3) xor std_logic_vector(unsigned(WxD(511 downto 480)) rol 4) xor std_logic_vector(unsigned(WxD(511 downto 480)) rol 19)) + unsigned(HxDI(479 downto 448)));
QaxDO(479 downto 448) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(479 downto 448)) srl 1) xor std_logic_vector(unsigned(WxD(479 downto 448)) sll 2) xor std_logic_vector(unsigned(WxD(479 downto 448)) rol 8) xor std_logic_vector(unsigned(WxD(479 downto 448)) rol 23)) + unsigned(HxDI(447 downto 416)));
QaxDO(447 downto 416) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(447 downto 416)) srl 2) xor std_logic_vector(unsigned(WxD(447 downto 416)) sll 1) xor std_logic_vector(unsigned(WxD(447 downto 416)) rol 12) xor std_logic_vector(unsigned(WxD(447 downto 416)) rol 25)) + unsigned(HxDI(415 downto 384)));
QaxDO(415 downto 384) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(415 downto 384)) srl 2) xor std_logic_vector(unsigned(WxD(415 downto 384)) sll 2) xor std_logic_vector(unsigned(WxD(415 downto 384)) rol 15) xor std_logic_vector(unsigned(WxD(415 downto 384)) rol 29)) + unsigned(HxDI(383 downto 352)));
QaxDO(383 downto 352) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(383 downto 352)) srl 1) xor std_logic_vector(unsigned(WxD(383 downto 352)))) + unsigned(HxDI(351 downto 320)));
QaxDO(351 downto 320) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(351 downto 320)) srl 1) xor std_logic_vector(unsigned(WxD(351 downto 320)) sll 3) xor std_logic_vector(unsigned(WxD(351 downto 320)) rol 4) xor std_logic_vector(unsigned(WxD(351 downto 320)) rol 19)) + unsigned(HxDI(319 downto 288)));
QaxDO(319 downto 288) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(319 downto 288)) srl 1) xor std_logic_vector(unsigned(WxD(319 downto 288)) sll 2) xor std_logic_vector(unsigned(WxD(319 downto 288)) rol 8) xor std_logic_vector(unsigned(WxD(319 downto 288)) rol 23)) + unsigned(HxDI(287 downto 256)));
QaxDO(287 downto 256) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(287 downto 256)) srl 2) xor std_logic_vector(unsigned(WxD(287 downto 256)) sll 1) xor std_logic_vector(unsigned(WxD(287 downto 256)) rol 12) xor std_logic_vector(unsigned(WxD(287 downto 256)) rol 25)) + unsigned(HxDI(255 downto 224)));
QaxDO(255 downto 224) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(255 downto 224)) srl 2) xor std_logic_vector(unsigned(WxD(255 downto 224)) sll 2) xor std_logic_vector(unsigned(WxD(255 downto 224)) rol 15) xor std_logic_vector(unsigned(WxD(255 downto 224)) rol 29)) + unsigned(HxDI(223 downto 192)));
QaxDO(223 downto 192) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(223 downto 192)) srl 1) xor std_logic_vector(unsigned(WxD(223 downto 192)))) + unsigned(HxDI(191 downto 160)));
QaxDO(191 downto 160) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(191 downto 160)) srl 1) xor std_logic_vector(unsigned(WxD(191 downto 160)) sll 3) xor std_logic_vector(unsigned(WxD(191 downto 160)) rol 4) xor std_logic_vector(unsigned(WxD(191 downto 160)) rol 19)) + unsigned(HxDI(159 downto 128)));
QaxDO(159 downto 128) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(159 downto 128)) srl 1) xor std_logic_vector(unsigned(WxD(159 downto 128)) sll 2) xor std_logic_vector(unsigned(WxD(159 downto 128)) rol 8) xor std_logic_vector(unsigned(WxD(159 downto 128)) rol 23)) + unsigned(HxDI(127 downto 96)));
QaxDO(127 downto 96) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(127 downto 96)) srl 2) xor std_logic_vector(unsigned(WxD(127 downto 96)) sll 1) xor std_logic_vector(unsigned(WxD(127 downto 96)) rol 12) xor std_logic_vector(unsigned(WxD(127 downto 96)) rol 25)) + unsigned(HxDI(95 downto 64)));
QaxDO(95 downto 64) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(95 downto 64)) srl 2) xor std_logic_vector(unsigned(WxD(95 downto 64)) sll 2) xor std_logic_vector(unsigned(WxD(95 downto 64)) rol 15) xor std_logic_vector(unsigned(WxD(95 downto 64)) rol 29)) + unsigned(HxDI(63 downto 32)));
QaxDO(63 downto 32) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(63 downto 32)) srl 1) xor std_logic_vector(unsigned(WxD(63 downto 32)))) + unsigned(HxDI(31 downto 0)));
QaxDO(31 downto 0) <= std_logic_vector(unsigned(std_logic_vector(unsigned(WxD(31 downto 0)) srl 1) xor std_logic_vector(unsigned(WxD(31 downto 0)) sll 3) xor std_logic_vector(unsigned(WxD(31 downto 0)) rol 4) xor std_logic_vector(unsigned(WxD(31 downto 0)) rol 19)) + unsigned(HxDI(511 downto 480)));
end rtl;