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,