1 -------------------------------------------------------------------------------     3 -- Company    : SLAC National Accelerator Laboratory     4 -- Created    : 2013-12-10     5 -- Last update: 2014-01-22     6 -------------------------------------------------------------------------------     7 -- Description: PseudoRandom Binary Sequence (PRBS) Package     8 -------------------------------------------------------------------------------     9 -- This file is part of 'SLAC Firmware Standard Library'.    10 -- It is subject to the license terms in the LICENSE.txt file found in the     11 -- top-level directory of this distribution and at:     12 --    https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html.     13 -- No part of 'SLAC Firmware Standard Library', including this file,     14 -- may be copied, modified, propagated, or distributed except according to     15 -- the terms contained in the LICENSE.txt file.    16 -------------------------------------------------------------------------------    19 use ieee.std_logic_1164.
all;
    26  --! @ingroup base_general    28    -- Randomizers based on the ITU-T O.150 Standard    35    -- Randomizer based LTC2270 IC    36    function getXorRand (input : 
slv; tap : ) 
return slv;
  -- NOTE: same function for encoding and decoding    41 -------------------------------------------------------------------------------    43       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
    46       --check for a valid tap location    47       assert (tap0 <= input'
left) report "PrbsPkg: getPrbs1xTap's tap0 input is out of range" severity failure;
    50       for i 
in (input'
left - 
1) downto 0 loop    51          retVar
(i
) := input
(i+
1);
    54       -- calculate the "xor'd" feedback    55       retVar
(input'
left) := input
(0) xor input
(tap0
);
    61 -------------------------------------------------------------------------------       63       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
    66       --check for a valid tap location    67       assert (tap0 <= input'
left) report "PrbsPkg: getPrbs2xTap's tap0 input is out of range" severity failure;
    68       assert (tap1 <= input'
left) report "PrbsPkg: getPrbs2xTap's tap1 input is out of range" severity failure;
    71       for i 
in (input'
left - 
1) downto 0 loop    72          retVar
(i
) := input
(i+
1);
    75       -- calculate the "xor'd" feedback    76       retVar
(input'
left) := input
(0) xor input
(tap0
) xor input
(tap1
);
    82 -------------------------------------------------------------------------------       84       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
    87       --check for a valid tap location    88       assert (tap0 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap0 input is out of range" severity failure;
    89       assert (tap1 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap1 input is out of range" severity failure;
    90       assert (tap2 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap2 input is out of range" severity failure;
    93       for i 
in (input'
left - 
1) downto 0 loop    94          retVar
(i
) := input
(i+
1);
    97       -- calculate the "xor'd" feedback    98       retVar
(input'
left) := input
(0) xor input
(tap0
) xor input
(tap1
) xor input
(tap2
);
   104 -------------------------------------------------------------------------------      106       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
   109       --check for a valid tap location   110       assert (tap0 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap0 input is out of range" severity failure;
   111       assert (tap1 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap1 input is out of range" severity failure;
   112       assert (tap2 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap2 input is out of range" severity failure;
   113       assert (tap3 <= input'
left) report "PrbsPkg: getPrbs3xTap's tap3 input is out of range" severity failure;
   116       for i 
in (input'
left - 
1) downto 0 loop   117          retVar
(i
) := input
(i+
1);
   120       -- calculate the "xor'd" feedback   121       retVar
(input'
left) := input
(tap0
) xor input
(tap1
) xor input
(tap2
) xor input
(tap3
);
   127 -------------------------------------------------------------------------------      129       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
   132       --check for a valid tap location   133       assert (tap0 <= input'
left) report "PrbsPkg: getGaloisPrbs3xTap's tap0 input is out of range" severity failure;
   134       assert (tap1 <= input'
left) report "PrbsPkg: getGaloisPrbs3xTap's tap1 input is out of range" severity failure;
   135       assert (tap2 <= input'
left) report "PrbsPkg: getGaloisPrbs3xTap's tap2 input is out of range" severity failure;
   136       assert (tap3 <= input'
left) report "PrbsPkg: getGaloisPrbs3xTap's tap3 input is out of range" severity failure;
   139       for i 
in 0 to (input'
left-
1) loop   140          retVar
(i
) := input
(i+
1);
   142         retVar
(retVar'
left) := '
0';
   144         for i 
in 0 to (input'
left) loop   145             if (i = tap0 
or i = tap1 
or i = tap2 
or i = tap3
) then   146                 retVar
(i
) := retVar
(i
) xor input
(0);
   154 -------------------------------------------------------------------------------      155    function getXorRand (input : 
slv; tap : ) 
return slv is  -- NOTE: same function for encoding and decoding   156       variable retVar : 
slv(input'
left downto 0) := 
(others => '
0'
);
   159       --check for a valid tap location   160       assert (tap <= input'
left) report "PrbsPkg: getXorRand's tap input is out of range" severity failure;
   163       for i 
in input'
left downto 0 loop   165             retVar
(i
) := input
(i
);
   167             retVar
(i
) := input
(i
) xor input
(tap
);
   175 -------------------------------------------------------------------------------      176 end package body PrbsPkg;
 slv getPrbs1xTapinput,tap0,
 
slv getPrbs2xTapinput,tap0,tap1,tap0,tap1,
 
slv getGaloisPrbs4xTapinput,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,
 
slv getPrbs4xTapinput,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,tap0,tap1,tap2,tap3,
 
slv getPrbs3xTapinput,tap0,tap1,tap2,tap0,tap1,tap2,tap0,tap1,tap2,