--
-- LCB Global Definitions Package
-- 
-- Matt Warren Aug 2016
--
--


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;


package lcb_pkg_globals is

  subtype slv4 is std_logic_vector(3 downto 0);
  type slv4_array is array (natural range <>) of slv4;

  subtype slv7 is std_logic_vector(6 downto 0);
  type slv7_array is array (natural range <>) of slv7;

  subtype slv8 is std_logic_vector(7 downto 0);
  type slv8_array is array (natural range <>) of slv8;


  -- From Paul:

  constant MAP_6B_8B : slv8_array(0 to 63) := (x"59",   --  0  0x00
                                               x"71",   --  1  0x01
                                               x"72",   --  2  0x02
                                               x"c3",   --  3  0x03
                                               x"65",   --  4  0x04
                                               x"c5",   --  5  0x05
                                               x"c6",   --  6  0x06
                                               x"87",   --  7  0x07
                                               x"69",   --  8  0x08
                                               x"c9",   --  9  0x09
                                               x"ca",   -- 10  0x0a
                                               x"8b",   -- 11  0x0b
                                               x"cc",   -- 12  0x0c
                                               x"8d",   -- 13  0x0d
                                               x"8e",   -- 14  0x0e
                                               x"4b",   -- 15  0x0f
                                               x"53",   -- 16  0x10
                                               x"d1",   -- 17  0x11
                                               x"d2",   -- 18  0x12
                                               x"93",   -- 19  0x13
                                               x"d4",   -- 20  0x14
                                               x"95",   -- 21  0x15
                                               x"96",   -- 22  0x16
                                               x"17",   -- 23  0x17
                                               x"d8",   -- 24  0x18
                                               x"99",   -- 25  0x19
                                               x"9a",   -- 26  0x1a
                                               x"1b",   -- 27  0x1b
                                               x"9c",   -- 28  0x1c
                                               x"1d",   -- 29  0x1d
                                               x"1e",   -- 30  0x1e
                                               x"5c",   -- 31  0x1f
                                               x"63",   -- 32  0x20
                                               x"e1",   -- 33  0x21
                                               x"e2",   -- 34  0x22
                                               x"a3",   -- 35  0x23
                                               x"e4",   -- 36  0x24
                                               x"a5",   -- 37  0x25
                                               x"a6",   -- 38  0x26
                                               x"27",   -- 39  0x27
                                               x"e8",   -- 40  0x28
                                               x"a9",   -- 41  0x29
                                               x"aa",   -- 42  0x2a
                                               x"2b",   -- 43  0x2b
                                               x"ac",   -- 44  0x2c
                                               x"2d",   -- 45  0x2d
                                               x"2e",   -- 46  0x2e
                                               x"6c",   -- 47  0x2f
                                               x"74",   -- 48  0x30
                                               x"b1",   -- 49  0x31
                                               x"b2",   -- 50  0x32
                                               x"33",   -- 51  0x33
                                               x"b4",   -- 52  0x34
                                               x"35",   -- 53  0x35
                                               x"36",   -- 54  0x36
                                               x"56",   -- 55  0x37
                                               x"b8",   -- 56  0x38
                                               x"39",   -- 57  0x39
                                               x"3a",   -- 58  0x3a
                                               x"5a",   -- 59  0x3b
                                               x"3c",   -- 60  0x3c
                                               x"4d",   -- 61  0x3d
                                               x"4e",   -- 62  0x3e
                                               x"66");  -- 63  0x3f


  constant MAP_K_8B : slv8_array(0 to 3) := (x"47",   -- K0
                                             x"55",   -- K1
                                             x"78",   -- K2
                                             x"6A");  -- K3





  constant S6B8B_00 : std_logic_vector(7 downto 0) := MAP_6B_8B(0);
  constant S6B8B_01 : std_logic_vector(7 downto 0) := MAP_6B_8B(1);
  constant S6B8B_02 : std_logic_vector(7 downto 0) := MAP_6B_8B(2);
  constant S6B8B_03 : std_logic_vector(7 downto 0) := MAP_6B_8B(3);
  constant S6B8B_04 : std_logic_vector(7 downto 0) := MAP_6B_8B(4);
  constant S6B8B_05 : std_logic_vector(7 downto 0) := MAP_6B_8B(5);
  constant S6B8B_06 : std_logic_vector(7 downto 0) := MAP_6B_8B(6);
  constant S6B8B_07 : std_logic_vector(7 downto 0) := MAP_6B_8B(7);
  constant S6B8B_08 : std_logic_vector(7 downto 0) := MAP_6B_8B(8);
  constant S6B8B_09 : std_logic_vector(7 downto 0) := MAP_6B_8B(9);
  constant S6B8B_0a : std_logic_vector(7 downto 0) := MAP_6B_8B(10);
  constant S6B8B_0b : std_logic_vector(7 downto 0) := MAP_6B_8B(11);
  constant S6B8B_0c : std_logic_vector(7 downto 0) := MAP_6B_8B(12);
  constant S6B8B_0d : std_logic_vector(7 downto 0) := MAP_6B_8B(13);
  constant S6B8B_0e : std_logic_vector(7 downto 0) := MAP_6B_8B(14);
  constant S6B8B_0f : std_logic_vector(7 downto 0) := MAP_6B_8B(15);
  constant S6B8B_10 : std_logic_vector(7 downto 0) := MAP_6B_8B(16);
  constant S6B8B_11 : std_logic_vector(7 downto 0) := MAP_6B_8B(17);
  constant S6B8B_12 : std_logic_vector(7 downto 0) := MAP_6B_8B(18);
  constant S6B8B_13 : std_logic_vector(7 downto 0) := MAP_6B_8B(19);
  constant S6B8B_14 : std_logic_vector(7 downto 0) := MAP_6B_8B(20);
  constant S6B8B_15 : std_logic_vector(7 downto 0) := MAP_6B_8B(21);
  constant S6B8B_16 : std_logic_vector(7 downto 0) := MAP_6B_8B(22);
  constant S6B8B_17 : std_logic_vector(7 downto 0) := MAP_6B_8B(23);
  constant S6B8B_18 : std_logic_vector(7 downto 0) := MAP_6B_8B(24);
  constant S6B8B_19 : std_logic_vector(7 downto 0) := MAP_6B_8B(25);
  constant S6B8B_1a : std_logic_vector(7 downto 0) := MAP_6B_8B(26);
  constant S6B8B_1b : std_logic_vector(7 downto 0) := MAP_6B_8B(27);
  constant S6B8B_1c : std_logic_vector(7 downto 0) := MAP_6B_8B(28);
  constant S6B8B_1d : std_logic_vector(7 downto 0) := MAP_6B_8B(29);
  constant S6B8B_1e : std_logic_vector(7 downto 0) := MAP_6B_8B(30);
  constant S6B8B_1f : std_logic_vector(7 downto 0) := MAP_6B_8B(31);
  constant S6B8B_20 : std_logic_vector(7 downto 0) := MAP_6B_8B(32);
  constant S6B8B_21 : std_logic_vector(7 downto 0) := MAP_6B_8B(33);
  constant S6B8B_22 : std_logic_vector(7 downto 0) := MAP_6B_8B(34);
  constant S6B8B_23 : std_logic_vector(7 downto 0) := MAP_6B_8B(35);
  constant S6B8B_24 : std_logic_vector(7 downto 0) := MAP_6B_8B(36);
  constant S6B8B_25 : std_logic_vector(7 downto 0) := MAP_6B_8B(37);
  constant S6B8B_26 : std_logic_vector(7 downto 0) := MAP_6B_8B(38);
  constant S6B8B_27 : std_logic_vector(7 downto 0) := MAP_6B_8B(39);
  constant S6B8B_28 : std_logic_vector(7 downto 0) := MAP_6B_8B(40);
  constant S6B8B_29 : std_logic_vector(7 downto 0) := MAP_6B_8B(41);
  constant S6B8B_2a : std_logic_vector(7 downto 0) := MAP_6B_8B(42);
  constant S6B8B_2b : std_logic_vector(7 downto 0) := MAP_6B_8B(43);
  constant S6B8B_2c : std_logic_vector(7 downto 0) := MAP_6B_8B(44);
  constant S6B8B_2d : std_logic_vector(7 downto 0) := MAP_6B_8B(45);
  constant S6B8B_2e : std_logic_vector(7 downto 0) := MAP_6B_8B(46);
  constant S6B8B_2f : std_logic_vector(7 downto 0) := MAP_6B_8B(47);
  constant S6B8B_30 : std_logic_vector(7 downto 0) := MAP_6B_8B(48);
  constant S6B8B_31 : std_logic_vector(7 downto 0) := MAP_6B_8B(49);
  constant S6B8B_32 : std_logic_vector(7 downto 0) := MAP_6B_8B(50);
  constant S6B8B_33 : std_logic_vector(7 downto 0) := MAP_6B_8B(51);
  constant S6B8B_34 : std_logic_vector(7 downto 0) := MAP_6B_8B(52);
  constant S6B8B_35 : std_logic_vector(7 downto 0) := MAP_6B_8B(53);
  constant S6B8B_36 : std_logic_vector(7 downto 0) := MAP_6B_8B(54);
  constant S6B8B_37 : std_logic_vector(7 downto 0) := MAP_6B_8B(55);
  constant S6B8B_38 : std_logic_vector(7 downto 0) := MAP_6B_8B(56);
  constant S6B8B_39 : std_logic_vector(7 downto 0) := MAP_6B_8B(57);
  constant S6B8B_3a : std_logic_vector(7 downto 0) := MAP_6B_8B(58);
  constant S6B8B_3b : std_logic_vector(7 downto 0) := MAP_6B_8B(59);
  constant S6B8B_3c : std_logic_vector(7 downto 0) := MAP_6B_8B(60);
  constant S6B8B_3d : std_logic_vector(7 downto 0) := MAP_6B_8B(61);
  constant S6B8B_3e : std_logic_vector(7 downto 0) := MAP_6B_8B(62);
  constant S6B8B_3f : std_logic_vector(7 downto 0) := MAP_6B_8B(63);


  constant S6B8B_K0 : std_logic_vector(7 downto 0) := MAP_K_8B(0);
  constant S6B8B_K1 : std_logic_vector(7 downto 0) := MAP_K_8B(1);
  constant S6B8B_K2 : std_logic_vector(7 downto 0) := MAP_K_8B(2);
  constant S6B8B_K3 : std_logic_vector(7 downto 0) := MAP_K_8B(3);

-- 0x17 -> 0x11 (17)
-- 0x1b -> 0x1B (27)
-- 0x1d -> 0x1D (29)
-- 0x1e -> 0x1E (30)
-- 0x27 -> 0x27 (39)
-- 0x2b -> 0x2B (43)
-- 0x2d -> 0x2D (45)
-- 0x2e -> 0x2E (46)
-- 0x33 -> 0x33 (51)
-- 0x35 -> 0x35 (53)
-- 0x36 -> 0x36 (54)
-- 0x39 -> 0x39 (57)
-- 0x3a -> 0x3A (58)
-- 0x3c -> 0x3C (60)
-- 0x4b -> 0x0F (15)
-- 0x4d -> 0x3D (61)
-- 0x4e -> 0x3E (62)
-- 0x53 -> 0x10 (16)
-- 0x56 -> 0x37 (55)
-- 0x59 -> 0x00 (00)
-- 0x5a -> 0x3B (59)
-- 0x5c -> 0x1F (31)
-- 0x63 -> 0x20 (32)
-- 0x65 -> 0x04 (04)
-- 0x66 -> 0x3F (63)
-- 0x69 -> 0x08 (08)
-- 0x6c -> 0x2F (47)
-- 0x71 -> 0x01 (01)
-- 0x72 -> 0x02 (02)
-- 0x74 -> 0x30 (48)
-- 0x87 -> 0x07 (07)
-- 0x8b -> 0x0B (11)
-- 0x8d -> 0x0D (13)
-- 0x8e -> 0x0E (14)
-- 0x93 -> 0x13 (19)
-- 0x95 -> 0x15 (21)
-- 0x96 -> 0x16 (22)
-- 0x99 -> 0x19 (25)
-- 0x9a -> 0x1A (26)
-- 0x9c -> 0x1C (28)
-- 0xa3 -> 0x23 (35)
-- 0xa5 -> 0x25 (37)
-- 0xa6 -> 0x26 (38)
-- 0xa9 -> 0x29 (41)
-- 0xaa -> 0x2A (42)
-- 0xac -> 0x2C (44)
-- 0xb1 -> 0x31 (49)
-- 0xb2 -> 0x32 (50)
-- 0xb4 -> 0x34 (52)
-- 0xb8 -> 0x38 (56)
-- 0xc3 -> 0x03 (03)
-- 0xc5 -> 0x05 (05)
-- 0xc6 -> 0x06 (06)
-- 0xc9 -> 0x09 (09)
-- 0xca -> 0x0A (10)
-- 0xcc -> 0x0C (12)
-- 0xd1 -> 0x11 (17)
-- 0xd2 -> 0x12 (18)
-- 0xd4 -> 0x14 (20)
-- 0xd8 -> 0x18 (24)
-- 0xe1 -> 0x21 (33)
-- 0xe2 -> 0x22 (34)
-- 0xe4 -> 0x24 (36)
-- 0xe8 -> 0x28 (40)



  --    K0       K1
  -- 76543210 76543210

  -- IDLE is K0, K1 , but sent msb first, so to get a it in order on the scope
  --  so it makes more sent to form it K1, K0
  constant IDLE_FRAME : std_logic_vector(15 downto 0) := (MAP_K_8B(0) & MAP_K_8B(1));

  -- Suggest using something completely not an HCCID
  constant SYMB_CMD_IGNORE : std_logic_vector(7 downto 0) := MAP_6B_8B(2#100000#); --0x63

  -- btw K2 = 0x78
  constant SYMB_CMD_END : std_logic_vector(7 downto 0) := MAP_6B_8B(2#000001#);  --0x71

  -- speculative ... 
  constant SYMB_ECR    : std_logic_vector(7 downto 0) := MAP_6B_8B(2#000010#);  -- 0x72
  constant SYMB_ABCRST : std_logic_vector(7 downto 0) := MAP_6B_8B(2#000100#);  -- 0x65 
  constant SYMB_HCCRST : std_logic_vector(7 downto 0) := MAP_6B_8B(2#001000#);  -- 0x69


  constant FSYNC_NIB0  : std_logic_vector(1 downto 0) := "00";
  constant FSYNC_SYMB0 : std_logic_vector(1 downto 0) := "01";
  constant FSYNC_NIB2  : std_logic_vector(1 downto 0) := "10";
  constant FSYNC_FRAME : std_logic_vector(1 downto 0) := "11";


  constant HCC : integer := 16#cc#;
  constant ABC : integer := 16#ab#;



end lcb_pkg_globals;



--=========================================================================================
--
-- B O D Y
--
--=========================================================================================

package body lcb_pkg_globals is


end lcb_pkg_globals;