------------------------------------------------------------
-- 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;
package simdpkg is
type simdline is array (0 to 3) of std_logic_vector(31 downto 0);
type simdstate is array (0 to 3, 0 to 3) of std_logic_vector(31 downto 0);
type marray is array (0 to 63) of std_logic_vector(7 downto 0);
type messperm is array (0 to 31, 0 to 7) of integer;
type rsline is array (0 to 19, 0 to 1) of integer;
type integer8x8 is array (0 to 7, 0 to 7) of integer;
type integer128 is array (0 to 127) of integer;
constant IV : simdstate := ((x"4d567983", x"aaf3d925", x"c2c2ba14", x"e2eaa8d2"),
(x"07190ba9", x"3ee20b03", x"49b3bcb4", x"1ff47833"),
(x"8474577b", x"afd5e751", x"f67caf46", x"d0c661a5"),
(x"39d726e9", x"c96006d3", x"668626c9", x"55693de1"));
constant WPERM : messperm := (
( 32, 33, 34, 35, 36, 37, 38, 39),
( 48, 49, 50, 51, 52, 53, 54, 55),
( 0, 1, 2, 3, 4, 5, 6, 7),
( 16, 17, 18, 19, 20, 21, 22, 23),
( 56, 57, 58, 59, 60, 61, 62, 63),
( 40, 41, 42, 43, 44, 45, 46, 47),
( 24, 25, 26, 27, 28, 29, 30, 31),
( 8, 9, 10, 11, 12, 13, 14, 15),
(120, 121, 122, 123, 124, 125, 126, 127),
( 88, 89, 90, 91, 92, 93, 94, 95),
( 96, 97, 98, 99, 100, 101, 102, 103),
( 64, 65, 66, 67, 68, 69, 70, 71),
( 72, 73, 74, 75, 76, 77, 78, 79),
(104, 105, 106, 107, 108, 109, 110, 111),
( 80, 81, 82, 83, 84, 85, 86, 87),
(112, 113, 114, 115, 116, 117, 118, 119),
( 8, 72, 10, 74, 12, 76, 14, 78),
( 16, 80, 18, 82, 20, 84, 22, 86),
( 56, 120, 58, 122, 60, 124, 62, 126),
( 32, 96, 34, 98, 36, 100, 38, 102),
( 48, 112, 50, 114, 52, 116, 54, 118),
( 40, 104, 42, 106, 44, 108, 46, 110),
( 0, 64, 2, 66, 4, 68, 6, 70),
( 24, 88, 26, 90, 28, 92, 30, 94),
( 49, 113, 51, 115, 53, 117, 55, 119),
( 1, 65, 3, 67, 5, 69, 7, 71),
( 9, 73, 11, 75, 13, 77, 15, 79),
( 57, 121, 59, 123, 61, 125, 63, 127),
( 25, 89, 27, 91, 29, 93, 31, 95),
( 41, 105, 43, 107, 45, 109, 47, 111),
( 33, 97, 35, 99, 37, 101, 39, 103),
( 17, 81, 19, 83, 21, 85, 23, 87));
constant rs : rsline := (
( 3, 23), (23, 17), (17, 27), (27, 3),
(28, 19), (19, 22), (22, 7), ( 7, 28),
(29, 9), ( 9, 15), (15, 5), ( 5, 29),
( 4, 13), (13, 10), (10, 25), (25, 4),
( 4, 13), (13, 10), (10, 25), (25, 4));
constant FFT64TW : integer8x8 := (
(1, 1, 1, 1, 1, 1, 1, 1),
(1, 2, 4, 8, 16, 32, 64, 128),
(1, 60, 2, 120, 4, -17, 8, -34),
(1, 120, 8, -68, 64, -30, -2, 17),
(1, 46, 60, -67, 2, 92, 120, 123),
(1, 92, -17, -22, 32, 117, -30, 67),
(1, -67, 120, -73, 8, -22, -68, -70),
(1, 123, -34, -70, 128, 67, 17, 35));
constant FFT128TW : integer8x8:= (
( 1, -118, 46, -31, 60, 116, -67, -61),
( 2, 21, 92, -62, 120, -25, 123, -122),
( 4, 42, -73, -124, -17, -50, -11, 13),
( 8, 84, 111, 9, -34, -100, -22, 26),
( 16, -89, -35, 18, -68, 57, -44, 52),
( 32, 79, -70, 36, 121, 114, -88, 104),
( 64, -99, 117, 72, -15, -29, 81, -49),
(128, 59, -23, -113, -30, -58, -95, -98));
constant P : integer128 := ( 0, 64, 32, 96, 16, 80, 48, 112,
8, 72, 40, 104, 24, 88, 56, 120,
4, 68, 36, 100, 20, 84, 52, 116,
12, 76, 44, 108, 28, 92, 60, 124,
2, 66, 34, 98, 18, 82, 50, 114,
10, 74, 42, 106, 26, 90, 58, 122,
6, 70, 38, 102, 22, 86, 54, 118,
14, 78, 46, 110, 30, 94, 62, 126,
1, 65, 33, 97, 17, 81, 49, 113,
9, 73, 41, 105, 25, 89, 57, 121,
5, 69, 37, 101, 21, 85, 53, 117,
13, 77, 45, 109, 29, 93, 61, 125,
3, 67, 35, 99, 19, 83, 51, 115,
11, 75, 43, 107, 27, 91, 59, 123,
7, 71, 39, 103, 23, 87, 55, 119,
15, 79, 47, 111, 31, 95, 63, 127);
end simdpkg;