SURF  1.0
Jesd204bPkg.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : Jesd204bPkg.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2016-07-11
5 -- Last update: 2017-07-06
6 -------------------------------------------------------------------------------
7 -- Description: JESD204B Package File
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 -------------------------------------------------------------------------------
17 
18 library ieee;
19 use ieee.std_logic_1164.all;
20 
21 use ieee.numeric_std.all;
22 use work.StdRtlPkg.all;
23 
24 package Jesd204bPkg is
25 --! @file
26  --! @ingroup protocols_jesd204b
27 
28 -- Constant definitions
29 --------------------------------------------------------------------------
30  -- Number of bytes in MGT word (2 or 4).
31  constant GT_WORD_SIZE_C : positive := 4;
32 
33  -- 8B10B characters (8-bit values)
34  -- K.28.5
35  constant K_CHAR_C : slv(7 downto 0) := x"BC";
36  -- K.28.0
37  constant R_CHAR_C : slv(7 downto 0) := x"1C";
38  -- K.28.3
39  constant A_CHAR_C : slv(7 downto 0) := x"7C";
40  -- K.28.7
41  constant F_CHAR_C : slv(7 downto 0) := x"FC";
42 
43  -- Register or counter widths
44  constant SYSRF_DLY_WIDTH_C : positive := 5;
45  constant RX_STAT_WIDTH_C : positive := 19 + 2*GT_WORD_SIZE_C;
46  constant TX_STAT_WIDTH_C : positive := 6;
47 
48  -- AXI packet size at power up
49  constant AXI_PACKET_SIZE_DEFAULT_C : slv(23 downto 0) := x"00_01_00";
50 
51  -- TX specific
52 
53  -- Ramp step or square wave period slv width (max 16)
54  constant PER_STEP_WIDTH_C : positive := 16;
55 
56  -- Scrambler/Descrambler PBRS taps for 1 + x^14 + x^15
57  constant JESD_PRBS_TAPS_C : NaturalArray := (0 => 14, 1 => 15);
58 
59 -- Sub-types
60 --------------------------------------------------------------------------
61  type jesdGtRxLaneType is record
62  data : slv((GT_WORD_SIZE_C*8)-1 downto 0); -- PHY receive data
63  dataK : slv(GT_WORD_SIZE_C-1 downto 0); -- PHY receive data is K character
64  dispErr : slv(GT_WORD_SIZE_C-1 downto 0); -- PHY receive data has disparity error
65  decErr : slv(GT_WORD_SIZE_C-1 downto 0); -- PHY receive data not in table
68  end record jesdGtRxLaneType;
69 
71  data => (others => '0'),
72  dataK => (others => '0'),
73  dispErr => (others => '0'),
74  decErr => (others => '0'),
75  rstDone => '0',
76  cdrStable => '0'
77  );
78 
79  type jesdGtTxLaneType is record
80  data : slv((GT_WORD_SIZE_C*8)-1 downto 0); -- PHY receive data
81  dataK : slv(GT_WORD_SIZE_C-1 downto 0); -- PHY receive data is K character
82  end record jesdGtTxLaneType;
84  data => (others => '0'),
85  dataK => (others => '0'));
86 
87  -- Arrays
88  type jesdGtRxLaneTypeArray is array (natural range <>) of jesdGtRxLaneType;
89  type jesdGtTxLaneTypeArray is array (natural range <>) of jesdGtTxLaneType;
90  type fixLatDataArray is array (natural range <>) of slv((GT_WORD_SIZE_C*8+GT_WORD_SIZE_C*2)-1 downto 0);
91  type sampleDataArray is array (natural range <>) of slv((GT_WORD_SIZE_C*8)-1 downto 0);
92  type sampleDataVectorArray is array (natural range<>, natural range<>) of slv((GT_WORD_SIZE_C*8)-1 downto 0);
93  type rxStatuRegisterArray is array (natural range <>) of slv((RX_STAT_WIDTH_C)-1 downto 0);
94  type txStatuRegisterArray is array (natural range <>) of slv((TX_STAT_WIDTH_C)-1 downto 0);
95  type alignTxArray is array (natural range <>) of slv((GT_WORD_SIZE_C)-1 downto 0);
96 
97 -- Functions
98 --------------------------------------------------------------------------
99  -- Detect K character
100  function detKcharFunc(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic;
101 
102  -- Output variable index from SLV (use in variable length shift register)
103  function varIndexOutFunc(shft_slv : slv; index_slv : slv) return std_logic;
104 
105  -- Detect position of first non K character (Swapped)
106  function detectPosFuncSwap(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic_vector;
107 
108  -- Detect position of first non K character
109  function detectPosFunc(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic_vector;
110 
111  -- Byte swap slv (bytes int 2 or 4)
112  function byteSwapSlv(data_slv : slv; bytes_int : positive) return std_logic_vector;
113 
114  -- Swap little and big endians (bytes int 2 or 4)
115  function endianSwapSlv(data_slv : slv; bytes_int : positive) return std_logic_vector;
116 
117  -- Align the data within the data buffer according to the position of the byte alignment word
118  function JesdDataAlign(data_slv : slv; position_slv : slv; bytes_int : positive) return std_logic_vector;
119 
120  -- Align the character within the buffer according to the position of the byte alignment word
121  function JesdCharAlign(char_slv : slv; position_slv : slv; bytes_int : positive) return std_logic_vector;
122 
123  -- Convert standard logic vector to integer
124  function slvToInt(data_slv : slv) return integer;
125 
126  -- Convert integer to standard logic vector
127  function intToSlv(data_int : integer; bytes_int : positive) return std_logic_vector;
128 
129  -- Output offset binary zero
130  function outSampleZero(F_int : positive; bytes_int : positive) return std_logic_vector;
131 
132  -- Invert functions
133 
134  -- Invert signed
135  function invSigned(input : slv) return std_logic_vector;
136  function invData(data : slv; F_int : positive; bytes_int : positive) return std_logic_vector;
137 
138  procedure jesdScrambler (
139  dataIn : in slv(15 downto 0);
140  lfsrIn : in slv(14 downto 0);
141  dataOut : inout slv(15 downto 0);
142  lfsrOut : inout slv(14 downto 0));
143 
144 end Jesd204bPkg;
145 
146 package body Jesd204bPkg is
147 
148 -- Functions
149 --------------------------------------------------------------------------
150  -- Detect K character
151  function detKcharFunc(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic is
152  begin
153  if(bytes_int = 2) then
154  if(data_slv (7 downto 0) = K_CHAR_C and
155  data_slv (15 downto 8) = K_CHAR_C and
156  charisk_slv = (charisk_slv'range => '1')
157  ) then
158  return '1';
159  else
160  return '0';
161  end if;
162  elsif(bytes_int = 4) then
163  if(data_slv (7 downto 0) = K_CHAR_C and
164  data_slv (15 downto 8) = K_CHAR_C and
165  data_slv (23 downto 16) = K_CHAR_C and
166  data_slv (31 downto 24) = K_CHAR_C and
167  charisk_slv = (charisk_slv'range => '1')
168  ) then
169  return '1';
170  else
171  return '0';
172  end if;
173  else
174  return '0';
175  end if;
176  end detKcharFunc;
177 
178  -- Output variable index from SLV (use in variable length shift register)
179  function varIndexOutFunc(shft_slv : slv; index_slv : slv) return std_logic is
180  variable i : integer;
181  begin
182  -- Return the index
183  i := to_integer(unsigned(index_slv));
184  return shft_slv(i);
185 
186  end varIndexOutFunc;
187 
188  -- Detect position of first non K character
189  function detectPosFunc(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic_vector is
190  begin
191  -- GT word is 2 bytes
192  if(bytes_int = 2) then
193  if(data_slv (7 downto 0) /= K_CHAR_C and
194  data_slv (15 downto 8) /= K_CHAR_C
195  ) then
196  return "01";
197  elsif(data_slv (7 downto 0) /= K_CHAR_C and
198  data_slv (15 downto 8) = K_CHAR_C and
199  charisk_slv(1) = '1'
200  ) then
201  return "10";
202  else
203  return "11";
204  end if;
205  -- GT word is 4 bytes wide
206  elsif(bytes_int = 4) then
207  if(data_slv (7 downto 0) /= K_CHAR_C and
208  data_slv (15 downto 8) /= K_CHAR_C and
209  data_slv (23 downto 16) /= K_CHAR_C and
210  data_slv (31 downto 24) /= K_CHAR_C
211  ) then
212  return "0001";
213  elsif(data_slv (7 downto 0) /= K_CHAR_C and
214  data_slv (15 downto 8) /= K_CHAR_C and
215  data_slv (23 downto 16) /= K_CHAR_C and
216  data_slv (31 downto 24) = K_CHAR_C and
217  charisk_slv(3) = '1'
218  ) then
219  return "0010";
220  elsif(data_slv (7 downto 0) /= K_CHAR_C and
221  data_slv (15 downto 8) /= K_CHAR_C and
222  data_slv (23 downto 16) = K_CHAR_C and
223  data_slv (31 downto 24) = K_CHAR_C and
224  charisk_slv(3 downto 2) = "11"
225  ) then
226  return "0100";
227  elsif(data_slv (7 downto 0) /= K_CHAR_C and
228  data_slv (15 downto 8) = K_CHAR_C and
229  data_slv (23 downto 16) = K_CHAR_C and
230  data_slv (31 downto 24) = K_CHAR_C and
231  charisk_slv(3 downto 1) = "111"
232  ) then
233  return "1000";
234  else
235  return "1111";
236  end if;
237  else
238  return (bytes_int-1 downto 0 => '1');
239  end if;
240  end detectPosFunc;
241 
242 
243  -- Detect position of first non K character (Swapped bits/bytes)
244  function detectPosFuncSwap(data_slv : slv; charisk_slv : slv; bytes_int : positive) return std_logic_vector is
245  begin
246  -- GT word is 2 bytes
247  if(bytes_int = 2) then
248  if(data_slv (7 downto 0) /= K_CHAR_C and
249  data_slv (15 downto 8) /= K_CHAR_C
250  ) then
251  return "01";
252  elsif(data_slv (7 downto 0) = K_CHAR_C and
253  data_slv (15 downto 8) /= K_CHAR_C and
254  charisk_slv(0) = '1'
255  ) then
256  return "10";
257  else
258  return "11";
259  end if;
260  -- GT word is 4 bytes wide
261  elsif(bytes_int = 4) then
262  if(data_slv (7 downto 0) /= K_CHAR_C and
263  data_slv (15 downto 8) /= K_CHAR_C and
264  data_slv (23 downto 16) /= K_CHAR_C and
265  data_slv (31 downto 24) /= K_CHAR_C
266  ) then
267  return "0001";
268  elsif(data_slv (7 downto 0) = K_CHAR_C and
269  data_slv (15 downto 8) /= K_CHAR_C and
270  data_slv (23 downto 16) /= K_CHAR_C and
271  data_slv (31 downto 24) /= K_CHAR_C and
272  charisk_slv(0) = '1'
273  ) then
274  return "0010";
275  elsif(data_slv (7 downto 0) = K_CHAR_C and
276  data_slv (15 downto 8) = K_CHAR_C and
277  data_slv (23 downto 16) /= K_CHAR_C and
278  data_slv (31 downto 24) /= K_CHAR_C and
279  charisk_slv(1 downto 0) = "11"
280  ) then
281  return "0100";
282  elsif(data_slv (7 downto 0) = K_CHAR_C and
283  data_slv (15 downto 8) = K_CHAR_C and
284  data_slv (23 downto 16) = K_CHAR_C and
285  data_slv (31 downto 24) /= K_CHAR_C and
286  charisk_slv(2 downto 0) = "111"
287  ) then
288  return "1000";
289  else
290  return "1111";
291  end if;
292  else
293  return (bytes_int-1 downto 0 => '1');
294  end if;
295  end detectPosFuncSwap;
296 
297  -- Byte swap slv (bytes int 2 or 4)
298  function byteSwapSlv(data_slv : slv; bytes_int : positive) return std_logic_vector is
299  begin
300 
301  if(bytes_int = 2) then
302  return data_slv(7 downto 0) & data_slv(15 downto 8);
303  elsif(bytes_int = 4) then
304  return data_slv(7 downto 0) & data_slv(15 downto 8) & data_slv(23 downto 16) & data_slv(31 downto 24);
305  else
306  return data_slv;
307  end if;
308  end byteSwapSlv;
309 
310  -- Swap little or big endian (bytes int 2 or 4)
311  function endianSwapSlv(data_slv : slv; bytes_int : positive) return std_logic_vector is
312  begin
313 
314  if(bytes_int = 2) then
315  return data_slv;
316  elsif(bytes_int = 4) then
317  return data_slv(15 downto 0) & data_slv(31 downto 16);
318  else
319  return data_slv;
320  end if;
321  end endianSwapSlv;
322 
323  -- Align the data within the data buffer according to the position of the byte alignment word
324  function JesdDataAlign(data_slv : slv; position_slv : slv; bytes_int : positive) return std_logic_vector is
325  begin
326  if(bytes_int = 2) then
327  if (position_slv(1 downto 0) = "01") then
328  return data_slv (31 downto 16);
329  elsif (position_slv(1 downto 0) = "10") then
330  return data_slv (31-8 downto 16-8);
331  else
332  return data_slv (31 downto 16);
333  end if;
334  elsif(bytes_int = 4) then
335  if (position_slv(3 downto 0) = "0001") then
336  return data_slv(63 downto 32);
337  elsif (position_slv(3 downto 0) = "0010") then
338  return data_slv(63-1*8 downto 32-1*8);
339  elsif (position_slv(3 downto 0) = "0100") then
340  return data_slv(63-2*8 downto 32-2*8);
341  elsif (position_slv(3 downto 0) = "1000") then
342  return data_slv(63-3*8 downto 32-3*8);
343  else
344  return data_slv(63 downto 32);
345  end if;
346  else
347  return data_slv;
348  end if;
349  end JesdDataAlign;
350 
351  -- Align the char within the buffer according to the position of the byte alignment word
352  function JesdCharAlign(char_slv : slv; position_slv : slv; bytes_int : positive) return std_logic_vector is
353  begin
354  if(bytes_int = 2) then
355  if (position_slv(1 downto 0) = "01") then
356  return char_slv (3 downto 2);
357  elsif (position_slv(1 downto 0) = "10") then
358  return char_slv (3-1 downto 2-1);
359  else
360  return char_slv (3 downto 2);
361  end if;
362  elsif(bytes_int = 4) then
363  if (position_slv(3 downto 0) = "0001") then
364  return char_slv(7 downto 4);
365  elsif (position_slv(3 downto 0) = "0010") then
366  return char_slv(7-1 downto 4-1);
367  elsif (position_slv(3 downto 0) = "0100") then
368  return char_slv(7-2 downto 4-2);
369  elsif (position_slv(3 downto 0) = "1000") then
370  return char_slv(7-3 downto 4-3);
371  else
372  return char_slv(7 downto 4);
373  end if;
374  else
375  return char_slv;
376  end if;
377  end JesdCharAlign;
378 
379  -- Convert standard logic vector to integer
380  function slvToInt(data_slv : slv) return integer is
381  begin
382  return to_integer(unsigned(data_slv));
383  end slvToInt;
384 
385  -- Convert integer to standard logic vector
386  function intToSlv(data_int : integer; bytes_int : positive) return std_logic_vector is
387  begin
388  return std_logic_vector(to_unsigned(data_int, bytes_int));
389  end IntToSlv;
390 
391  -- Output zero sample data depending on word size and Frame size
392  function outSampleZero(F_int : positive; bytes_int : positive) return std_logic_vector is
393  constant SAMPLES_IN_WORD_C : positive := (bytes_int/F_int);
394  variable vSlv : slv((bytes_int*8)-1 downto 0);
395  begin
396 
397  vSlv := (others => '0');
398 
399  for I in (SAMPLES_IN_WORD_C-1) downto 0 loop
400  vSlv(I*8*F_int+8*F_int-1) := '1';
401  end loop;
402 
403  return vSlv;
404 
405  end outSampleZero;
406 
407  -- Invert Signed
408  function invSigned(input : slv) return std_logic_vector is
409  variable vOutput : signed(input'range);
410  begin
411  vOutput := - signed(input);
412  return std_logic_vector(vOutput);
413  end invSigned;
414 
415  -- Output zero sample data depending on word size and Frame size
416  function invData(data : slv; F_int : positive; bytes_int : positive) return std_logic_vector is
417  constant SAMPLES_IN_WORD_C : positive := (bytes_int/F_int);
418  variable vSlv : slv((bytes_int*8)-1 downto 0);
419  begin
420 
421  vSlv := data;
422 
423  for I in (SAMPLES_IN_WORD_C-1) downto 0 loop
424  vSlv(I*8*F_int+8*F_int-1 downto I*8*F_int) := invSigned(vSlv(I*8*F_int+8*F_int-1 downto I*8*F_int));
425  end loop;
426 
427  return vSlv;
428 
429  end invData;
430 
431  -- lfsr(14:0)=1+x^14+x^15
432  procedure jesdScrambler (
433  dataIn : in slv(15 downto 0);
434  lfsrIn : in slv(14 downto 0);
435  dataOut : inout slv(15 downto 0);
436  lfsrOut : inout slv(14 downto 0)) is
437  begin
438  lfsrOut(0) := lfsrIn(0) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13);
439  lfsrOut(1) := lfsrIn(0) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
440  lfsrOut(2) := lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
441  lfsrOut(3) := lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
442  lfsrOut(4) := lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
443  lfsrOut(5) := lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
444  lfsrOut(6) := lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
445  lfsrOut(7) := lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
446  lfsrOut(8) := lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
447  lfsrOut(9) := lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
448  lfsrOut(10) := lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
449  lfsrOut(11) := lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
450  lfsrOut(12) := lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
451  lfsrOut(13) := lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
452  lfsrOut(14) := lfsrIn(0) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(14);
453 
454  dataOut(0) := dataIn(0) xor lfsrIn(14);
455  dataOut(1) := dataIn(1) xor lfsrIn(13) xor lfsrIn(14);
456  dataOut(2) := dataIn(2) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
457  dataOut(3) := dataIn(3) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
458  dataOut(4) := dataIn(4) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
459  dataOut(5) := dataIn(5) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
460  dataOut(6) := dataIn(6) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
461  dataOut(7) := dataIn(7) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
462  dataOut(8) := dataIn(8) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
463  dataOut(9) := dataIn(9) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
464  dataOut(10) := dataIn(10) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
465  dataOut(11) := dataIn(11) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
466  dataOut(12) := dataIn(12) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
467  dataOut(13) := dataIn(13) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
468  dataOut(14) := dataIn(14) xor lfsrIn(0) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13) xor lfsrIn(14);
469  dataOut(15) := dataIn(15) xor lfsrIn(0) xor lfsrIn(1) xor lfsrIn(2) xor lfsrIn(3) xor lfsrIn(4) xor lfsrIn(5) xor lfsrIn(6) xor lfsrIn(7) xor lfsrIn(8) xor lfsrIn(9) xor lfsrIn(10) xor lfsrIn(11) xor lfsrIn(12) xor lfsrIn(13);
470 
471  end procedure;
472 
473 end package body Jesd204bPkg;
std_logic_vector JesdCharAlignchar_slv,position_slv,bytes_int,
array(natural range <> ) of slv(( GT_WORD_SIZE_C* 8)- 1 downto 0) sampleDataArray
Definition: Jesd204bPkg.vhd:91
array(natural range <> ,natural range <> ) of slv(( GT_WORD_SIZE_C* 8)- 1 downto 0) sampleDataVectorArray
Definition: Jesd204bPkg.vhd:92
std_logic_vector invSignedinput,
std_logic sl
Definition: StdRtlPkg.vhd:28
positive := 16 PER_STEP_WIDTH_C
Definition: Jesd204bPkg.vhd:54
array(natural range <> ) of slv(( TX_STAT_WIDTH_C)- 1 downto 0) txStatuRegisterArray
Definition: Jesd204bPkg.vhd:94
slv( GT_WORD_SIZE_C- 1 downto 0) dataK
Definition: Jesd204bPkg.vhd:63
positive := 6 TX_STAT_WIDTH_C
Definition: Jesd204bPkg.vhd:46
array(natural range <> ) of slv(( RX_STAT_WIDTH_C)- 1 downto 0) rxStatuRegisterArray
Definition: Jesd204bPkg.vhd:93
positive := 19+ 2* GT_WORD_SIZE_C RX_STAT_WIDTH_C
Definition: Jesd204bPkg.vhd:45
_library_ ieeeieee
slv( 23 downto 0) := x"00_01_00" AXI_PACKET_SIZE_DEFAULT_C
Definition: Jesd204bPkg.vhd:49
std_logic detKcharFuncdata_slv,charisk_slv,bytes_int,
integer slvToIntdata_slv,
std_logic_vector outSampleZeroF_int,bytes_int,
std_logic_vector endianSwapSlvdata_slv,bytes_int,
array(natural range <> ) of jesdGtTxLaneType jesdGtTxLaneTypeArray
Definition: Jesd204bPkg.vhd:89
std_logic_vector invDatadata,F_int,bytes_int,
NaturalArray :=( 0=> 14, 1=> 15) JESD_PRBS_TAPS_C
Definition: Jesd204bPkg.vhd:57
slv( 7 downto 0) := x"1C" R_CHAR_C
Definition: Jesd204bPkg.vhd:37
array(natural range <> ) of slv(( GT_WORD_SIZE_C)- 1 downto 0) alignTxArray
Definition: Jesd204bPkg.vhd:95
array(natural range <> ) of natural NaturalArray
Definition: StdRtlPkg.vhd:34
std_logic varIndexOutFuncshft_slv,index_slv,
slv( 7 downto 0) := x"7C" A_CHAR_C
Definition: Jesd204bPkg.vhd:39
slv( 7 downto 0) := x"BC" K_CHAR_C
Definition: Jesd204bPkg.vhd:35
slv( GT_WORD_SIZE_C- 1 downto 0) dispErr
Definition: Jesd204bPkg.vhd:64
positive := 4 GT_WORD_SIZE_C
Definition: Jesd204bPkg.vhd:31
std_logic_vector byteSwapSlvdata_slv,bytes_int,
std_logic_vector intToSlvdata_int,bytes_int,
positive := 5 SYSRF_DLY_WIDTH_C
Definition: Jesd204bPkg.vhd:44
jesdScramblerdataIn,lfsrIn,dataOut,lfsrOut,
jesdGtRxLaneType :=(data =>( others => '0'),dataK =>( others => '0'),dispErr =>( others => '0'),decErr =>( others => '0'),rstDone => '0',cdrStable => '0') JESD_GT_RX_LANE_INIT_C
Definition: Jesd204bPkg.vhd:70
slv( 7 downto 0) := x"FC" F_CHAR_C
Definition: Jesd204bPkg.vhd:41
std_logic_vector detectPosFuncdata_slv,charisk_slv,bytes_int,
slv( GT_WORD_SIZE_C- 1 downto 0) decErr
Definition: Jesd204bPkg.vhd:65
std_logic_vector JesdDataAligndata_slv,position_slv,bytes_int,
array(natural range <> ) of slv(( GT_WORD_SIZE_C* 8+ GT_WORD_SIZE_C* 2)- 1 downto 0) fixLatDataArray
Definition: Jesd204bPkg.vhd:90
array(natural range <> ) of jesdGtRxLaneType jesdGtRxLaneTypeArray
Definition: Jesd204bPkg.vhd:88
slv(( GT_WORD_SIZE_C* 8)- 1 downto 0) data
Definition: Jesd204bPkg.vhd:62
jesdGtTxLaneType :=(data =>( others => '0'),dataK =>( others => '0')) JESD_GT_TX_LANE_INIT_C
Definition: Jesd204bPkg.vhd:83
std_logic_vector detectPosFuncSwapdata_slv,charisk_slv,bytes_int,
std_logic_vector slv
Definition: StdRtlPkg.vhd:29