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