1 ------------------------------------------------------------------------------- 2 -- File : Code12b14bPkg.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2016-10-05 5 -- Last update: 2017-05-01 6 ------------------------------------------------------------------------------- 7 -- Description: 12B14B 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 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.std_logic_arith.
all;
21 use ieee.std_logic_unsigned.
all;
24 --use work.TextUtilPkg.all; 29 --! @ingroup base_general 31 ------------------------------------------------------------------------------------------------- 32 -- Constants for K codes 33 -- These are intended for public use 34 ------------------------------------------------------------------------------------------------- 43 -- constant K_120_15_C : slv(11 downto 0) := "011111111000"; 52 -- constant K_55_15_C : slv(11 downto 0) := "011110110111"; 53 -- constant K_57_15_C : slv(11 downto 0) := "011110111001"; 54 -- constant K_87_15_C : slv(11 downto 0) := "011111010111"; 55 -- constant K_93_15_C : slv(11 downto 0) := "011111011101"; 56 -- constant K_117_15_C : slv(11 downto 0) := "011111110101"; 66 -- constant K_120_15_CODE_C : slv(13 downto 0) := "00001111111000"; 75 -- constant K_55_15_CODE_C : slv(13 downto 0) := "00001110110111"; 76 -- constant K_57_15_CODE_C : slv(13 downto 0) := "00001110111001"; 77 -- constant K_87_15_CODE_C : slv(13 downto 0) := "00001111010111"; 78 -- constant K_93_15_CODE_C : slv(13 downto 0) := "00001111011101"; 79 -- constant K_117_15_CODE_C : slv(13 downto 0) := "00001111110101"; 83 ------------------------------------------------------------------------------------------------- 84 -- Disparity types and helper functions 85 ------------------------------------------------------------------------------------------------- 91 -- Convert a 12 bit code into "D/K.x.y" form 94 ------------------------------------------------------------------------------------------------- 96 ------------------------------------------------------------------------------------------------- 107 ------------------------------------------------------------------------------------------------- 108 -- Structures for holding 7/8 code table 109 ------------------------------------------------------------------------------------------------- 122 -- Array of codes for 7b/8b D codes 123 -- constant CODE_8B_C : slv8Array(0 to 127) := ( 124 -- "00011010", "11110001", "10101110", "00100011", "00001101", "00010101", "00100110", "10000111", 125 -- "00010011", "00100101", "00101001", "10001011", "00101100", "10001101", "10001110", "00001111", 126 -- "00101010", "00110001", "00110010", "10010011", "00110100", "10010101", "10010110", "00010111", 127 -- "01000101", "10011001", "10011010", "10011011", "10011100", "00011101", "00011110", "00011001", 128 -- "01000111", "01100001", "01001001", "10100011", "01001010", "10100101", "10100110", "00100111", 129 -- "01011000", "10101001", "10101010", "10101011", "10101100", "10101101", "00101110", "00101111", 130 -- "01001100", "10110001", "10110010", "00110011", "10110100", "00110101", "00110110", "00110111", 131 -- "10111000", "00111001", "00111010", "00111011", "00111100", "00111101", "00111110", "00011011", 132 -- "01000100", "00011100", "01100010", "11000011", "00100100", "11000101", "11000110", "11000111", 133 -- "01101000", "11001001", "11001010", "01001011", "11001100", "01001101", "01001110", "01001111", 134 -- "01110000", "11010001", "11010010", "01010011", "11010100", "01010101", "01010110", "01010111", 135 -- "11011000", "01011001", "01011010", "01011011", "01011100", "01011101", "01011110", "00101011", 136 -- "00101101", "11100001", "11100010", "01100011", "11100100", "01100101", "01100110", "01100111", 137 -- "11101000", "01101001", "01101010", "01101011", "01101100", "01101101", "01101110", "01000011", 138 -- "11110000", "01110001", "01110010", "01110011", "01110100", "01110101", "01110110", "01110111", 139 -- "01111000", "01111001", "01111010", "01111011", "01111100", "10111101", "11110100", "11101001"); 142 "01011000", "00011001", "00011010", "00100011", "01100100", "10000101", "10000110", "10000111", -- 7 143 "01101000", "10001001", "01001010", "10001011", "01001100", "10001101", "10001110", "11000111", -- 15 144 "00010011", "10010001", "10010010", "10010011", "10010100", "10010101", "10010110", "00010111", -- 23 145 "10011000", "10011001", "10011010", "00011011", "10011100", "00011101", "00011110", "00011100", -- 31 146 "00100101", "10100001", "00100110", "10100011", "10100100", "10100101", "10100110", "00100111", -- 39 147 "00101001", "10101001", "10101010", "00101011", "10101100", "00101101", "00101110", "00101010", -- 47 148 "00110010", "10110001", "10110010", "00110011", "10110100", "00110101", "00110110", "00110111", -- 55 149 "10111000", "00111001", "00111010", "00111011", "00111100", "10111101", "00110100", "10111011", -- 63 150 "01010100", "11000001", "11000010", "11000011", "01000001", "11000101", "11000110", "01000111", -- 71 151 "01001001", "11001001", "11001010", "01001011", "11001100", "01001101", "01001110", "01000101", -- 79 152 "01000011", "11010001", "11010010", "01010011", "11010100", "01010101", "01010110", "01010111", -- 87 153 "11011000", "01011001", "01011010", "11010011", "01011100", "01011101", "11001110", "11011110", -- 95 154 "01100010", "11100001", "11100010", "01100011", "11100100", "01100101", "01100110", "11100111", -- 103 155 "11101000", "01101001", "01101010", "11101011", "01101100", "11101001", "11101010", "11101101", -- 111 156 "00100100", "01110001", "01110010", "01010001", "01110100", "01110101", "01010010", "01110111", -- 119 157 "01111000", "01100001", "01111011", "01110011", "01111100", "01111101", "01111110", "11101110");
-- 127 162 -- 7/8 K-code constants 163 -- constant K_55_C : slv(6 downto 0) := "0110111"; 164 -- constant K_57_C : slv(6 downto 0) := "0111001"; 165 -- constant K_87_C : slv(6 downto 0) := "1010111"; 166 -- constant K_93_C : slv(6 downto 0) := "1011101"; 167 -- constant K_117_C : slv(6 downto 0) := "1110101"; 170 -- constant K_55_CODE_C : slv(7 downto 0) := "10110111"; 171 -- constant K_57_CODE_C : slv(7 downto 0) := "10111001"; 172 -- constant K_87_CODE_C : slv(7 downto 0) := "11010111"; 173 -- constant K_93_CODE_C : slv(7 downto 0) := "11011101"; 174 -- constant K_117_CODE_C : slv(7 downto 0) := "11110101"; 177 -- constant K78_TABLE_C : Encode7b8bArray(0 to 0); 179 ------------------------------------------------------------------------------------------------- 180 -- Structure for holding 5/6 code table 181 ------------------------------------------------------------------------------------------------- 195 "000110", "010001", "010010", "100011", "010100", "100101", "100110", "000111", 196 "011000", "101001", "101010", "001011", "101100", "001101", "001110", "111010", 197 "110110", "110001", "110010", "010011", "110100", "010101", "010110", "010111", 198 "001100", "011001", "011010", "011011", "011100", "011101", "011110", "110101");
211 -- constant K_X_15_C : slv(4 downto 0) := "01111"; 221 -- Some of these are inverted from normal code. 222 -- This doesn't matter as the encoder/decoder are currently written 223 -- These aren't used for encoder and both normal and inverted are checked for in decoder 229 constant K_X_7_CODE_C : slv(5 downto 0) := "111000";
-- Double check this, should invert? 232 -- constant K_X_15_CODE_C : slv(5 downto 0) := "000011"; 242 -- constant K56_TABLE_C : Encode5b6bArray(0 to 15); 244 ------------------------------------------------------------------------------------------------- 245 -- Structure for full encode table 246 ------------------------------------------------------------------------------------------------- 255 ------------------------------------------------------------------------------------------------- 256 -- Procedures for encoding and decoding 257 ------------------------------------------------------------------------------------------------- 260 dataIn :
in slv(
11 downto 0);
262 dispIn :
in slv(
1 downto 0);
263 dataOut :
inout slv(
13 downto 0);
264 dispOut :
inout slv(
1 downto 0);
269 dataIn :
in slv(
13 downto 0);
270 dispIn :
in slv(
1 downto 0);
271 dataOut :
inout slv(
11 downto 0);
273 dispOut :
inout slv(
1 downto 0);
275 dispError :
inout sl);
277 end package Code12b14bPkg;
282 code :
slv(
11 downto 0);
285 variable s :
(1 to 8);
287 s := resize
(ite
(k = '
1',
"K.",
"D.") &
288 '
image(conv_integer
(code
(6 downto 0))) &
290 '
image(conv_integer
(code
(11 downto 7))),
8);
292 end function toString;
294 -- Determine the disparity of a vector 302 for i
in vec'
range loop 303 if (vec
(i
) = '
0'
) then 308 ones := vec'
length-zeros;
309 disparity := ones-zeros;
313 end function getDisparity;
316 variable ret :
slv(1 downto 0) :=
"01";
337 elsif (d =
"11") then 339 elsif (d =
"00") then 341 elsif (d =
"01") then 348 -- Given an running disparity and a selected code disparity, 349 -- determine whether the selected code needs to be complimented, and what the out disparity is 350 -- Should maybe implement DisparityType as a constrained integer and just use math here 351 -- instead of this state machine. Not sure which is better. 352 procedure disparityControl (
353 prevDisp :
in slv(
1 downto 0);
355 compliment :
inout sl)
is 359 dispInt := toBlockDisparityType
(prevDisp
);
363 if (blockDisp = -
2 or blockDisp = -
4) then 367 if (blockDisp = -
4) then 371 if (blockDisp =
2 or blockDisp =
4) then 375 if (blockDisp =
2 or blockDisp =
4) then 384 ------------------------------------------------------------------------------------------------- 385 -- Make the encode table 389 for i
in ret'
range loop 390 ret
(i
).
in7b := conv_std_logic_vector
(i,
7);
391 ret
(i
).
out8b := a
(i
);
401 end function makeEncode7b8bTable;
403 ------------------------------------------------------------------------------------------------- 404 -- Make the encode table 408 for i
in ret'
range loop 409 ret
(i
).
in5b := conv_std_logic_vector
(i,
5);
410 ret
(i
).
out6b := a
(i
);
418 if (ret
(i
).
out6b =
"000111") then 419 ret
(i
).
alt6b :=
"111000";
423 end function makeEncode5b6bTable;
427 dataIn :
in slv(
11 downto 0);
429 dispIn :
in slv(
1 downto 0);
430 dataOut :
inout slv(
13 downto 0);
431 dispOut :
inout slv(
1 downto 0);
436 variable dataIn7 :
slv(6 downto 0);
438 variable data8 :
slv(7 downto 0);
441 variable dataIn5 :
slv(4 downto 0);
443 variable data6 :
slv(5 downto 0);
446 variable debug : := false;
447 variable tmpDisp :
range -
8 to 8;
448 variable compliment :
sl;
451 -- First, split in input word in two 452 dataIn5 := dataIn
(11 downto 7);
453 dataIn7 := dataIn
(6 downto 0);
455 -- Now do the 7b8b part 456 -- Default lookup first 457 tmp78 := CODES_C.
data78(conv_integer
(dataIn7
));
458 data8 := tmp78.
out8b;
462 -- Decide whether to invert 463 blockDispIn := toBlockDisparityType
(dispIn
);
465 disparityControl
(dispIn, blockDisp78, compliment
);
467 if (compliment = '
1'
) then 469 data8 := tmp78.
alt8b;
472 -- tmpDisp := blockDispIn + tmp78.outDisp; 474 -- if ((dispIn = "10" and tmpDisp = 4) or tmpDisp > 4 or tmpDisp <= -4) then 475 -- blockDisp78 := tmp78.altDisp; 476 -- data8 := tmp78.alt8b; 479 -- tmpDisp := blockDispIn + blockDisp78; 481 -- Now repeat for the 5b6b 482 tmp56 := CODES_C.
data56(conv_integer
(dataIn5
));
483 data6 := tmp56.
out6b;
486 -- Decide whether to invert the output 487 if ((blockDisp78 >
0 and blockDisp56 >
0) or 488 (blockDisp78 <
0 and blockDisp56 <
0) or 489 (blockDisp78 =
0 and blockDispIn >
0 and blockDisp56 >
0) or 490 (blockDisp78 =
0 and blockDispIn <
0 and blockDisp56 <
0)) then 492 data6 := tmp56.
alt6b;
495 -- Special case for D/K.x.7 496 -- Code is balanced but need to invert to avoid run length limits 497 if (dataIn5 =
"00111" and (blockDisp78 >
0)) then 499 data6 := tmp56.
alt6b;
503 dataOut
(7 downto 0) := data8;
504 dataOut
(13 downto 8) := data6;
505 dispOut := toSlv
(blockDispIn + blockDisp56 + blockDisp78
);
507 -- Control table overrides everything 508 if (dataKIn = '
1'
) then 510 -- Search the table for valid K.x 511 for i
in CODES_C.
kTable'
range loop 519 if (blockDispIn =
0 or blockDispIn =
2 or blockDispIn =
4) then 520 dataOut :=
not dataOut;
521 tmpDisp := getDisparity
(dataOut
);
524 dispOut := toSlv
(blockDispIn + tmpDisp
);
529 procedure decode12b14b
( 531 dataIn :
in slv(13 downto 0);
532 dispIn :
in slv(1 downto 0);
533 dataOut :
inout slv(11 downto 0);
535 dispOut :
inout slv(1 downto 0);
537 dispError :
inout sl) 539 variable valid78 :
sl;
540 variable valid56 :
sl;
541 variable dataIn8 :
slv(7 downto 0);
542 variable dataIn6 :
slv(5 downto 0);
543 variable dataOut5 :
slv(4 downto 0);
544 variable dataOut7 :
slv(6 downto 0);
545 variable inputDisp : ;
549 -- Set default values 555 dataOut5 :=
(others => '
0'
);
556 dataOut7 :=
(others => '
0'
);
559 -- Check the disparity of the input 560 inputDisp := getDisparity
(dataIn
);
561 if (inputDisp >
4 or inputDisp < -
4) then 562 -- print("Input Disp Error"); 563 -- print("dataIn: " & str(dataIn)); 564 -- print("inputDisp: " & str(inputDisp)); 568 -- Check the running disparity 569 runDisp := inputDisp + toBlockDisparityType
(dispIn
);
570 if (runDisp >
4 or runDisp < -
4) then 571 runDisp := minimum
(4, maximum
(-
4, runDisp
));
572 -- print("Run Disp Error"); 573 -- print("dataIn: " & str(dataIn) & " " & hstr(dataIn)); 574 -- print("dispIn: " & str(toBlockDisparityType(dispIn))); 575 -- print("inputDisp: " & str(inputDisp)); 576 -- print("runDisp: " & str(runDisp)); 580 -- This probably isn't correct 581 -- Need to figure out what to do when running disparity is out of range 582 dispOut := toSlv
(runDisp
);
583 -- if (dispError = '1') then 584 -- dispOut := toSlv(0); 589 dataIn8 := dataIn
(7 downto 0);
590 dataIn6 := dataIn
(13 downto 8);
592 -- dataOut7 := dataIn8(6 downto 0); 593 -- dataOut5 := dataIn6(4 downto 0); 595 dataOut
(6 downto 0) := dataIn
(6 downto 0);
596 dataOut
(11 downto 7) := dataIn
(12 downto 8);
598 -- Check for a k-code 599 for i
in CODES_C.
kTable'
range loop 610 if (dataKOut = '
0'
) then 612 for i
in CODES_C.
data78'
range loop 616 dataOut
(6 downto 0) := CODES_C.
data78(i
).
in7b;
622 for i
in CODES_C.
data56'
range loop 626 dataOut
(11 downto 7) := CODES_C.
data56(i
).
in5b;
634 if (valid56 = '
1'
and valid78 = '
1'
) then 639 end procedure decode12b14b;
641 ------------------------------------------------------------------------------------------------- 642 -- Differed constants from above 643 ------------------------------------------------------------------------------------------------- 653 -- (k12 => K_120_15_C, k14 => K_120_15_CODE_C, disp => getDisparity(K_120_15_CODE_C)), 662 -- (k12 => K_55_15_C, k14 => K_55_15_CODE_C, disp => getDisparity(K_55_15_CODE_C)), 663 -- (k12 => K_57_15_C, k14 => K_57_15_CODE_C, disp => getDisparity(K_57_15_CODE_C)), 664 -- (k12 => K_87_15_C, k14 => K_87_15_CODE_C, disp => getDisparity(K_87_15_CODE_C)), 665 -- (k12 => K_93_15_C, k14 => K_93_15_CODE_C, disp => getDisparity(K_93_15_CODE_C)), 666 -- (k12 => K_117_15_C, k14 => K_117_15_CODE_C, disp => getDisparity(K_117_15_CODE_C))); 677 end package body Code12b14bPkg;
slv( 13 downto 0) := "00011011111000" K_120_0_CODE_C
slv( 4 downto 0) := "00111" K_X_7_C
slv( 5 downto 0) := "010010" K_X_2_CODE_C
slv( 13 downto 0) := "00100111111000" K_120_16_CODE_C
slv( 13 downto 0) := "01001111111000" K_120_19_CODE_C
slv6Array( 0 to 31) :=( "000110", "010001", "010010", "100011", "010100", "100101", "100110", "000111", "011000", "101001", "101010", "001011", "101100", "001101", "001110", "111010", "110110", "110001", "110010", "010011", "110100", "010101", "010110", "010111", "001100", "011001", "011010", "011011", "011100", "011101", "011110", "110101") CODE_6B_C
slv( 11 downto 0) := "001111111000" K_120_7_C
slv8Array( 0 to 127) :=( "01011000", "00011001", "00011010", "00100011", "01100100", "10000101", "10000110", "10000111", "01101000", "10001001", "01001010", "10001011", "01001100", "10001101", "10001110", "11000111", "00010011", "10010001", "10010010", "10010011", "10010100", "10010101", "10010110", "00010111", "10011000", "10011001", "10011010", "00011011", "10011100", "00011101", "00011110", "00011100", "00100101", "10100001", "00100110", "10100011", "10100100", "10100101", "10100110", "00100111", "00101001", "10101001", "10101010", "00101011", "10101100", "00101101", "00101110", "00101010", "00110010", "10110001", "10110010", "00110011", "10110100", "00110101", "00110110", "00110111", "10111000", "00111001", "00111010", "00111011", "00111100", "10111101", "00110100", "10111011", "01010100", "11000001", "11000010", "11000011", "01000001", "11000101", "11000110", "01000111", "01001001", "11001001", "11001010", "01001011", "11001100", "01001101", "01001110", "01000101", "01000011", "11010001", "11010010", "01010011", "11010100", "01010101", "01010110", "01010111", "11011000", "01011001", "01011010", "11010011", "01011100", "01011101", "11001110", "11011110", "01100010", "11100001", "11100010", "01100011", "11100100", "01100101", "01100110", "11100111", "11101000", "01101001", "01101010", "11101011", "01101100", "11101001", "11101010", "11101101", "00100100", "01110001", "01110010", "01010001", "01110100", "01110101", "01010010", "01110111", "01111000", "01100001", "01111011", "01110011", "01111100", "01111101", "01111110", "11101110") CODE_8B_C
slv( 13 downto 0) := "10001111111000" K_120_3_CODE_C
slv( 13 downto 0) := "10000111111000" K_120_30_CODE_C
slv( 5 downto 0) := "011000" K_X_8_CODE_C
slv( 11 downto 0) := "111011111000" K_120_29_C
Encode7b8bArray ENCODE_7B8B_TABLE_C
slv( 4 downto 0) := "00010" K_X_2_C
slv( 4 downto 0) := "01011" K_X_11_C
slv( 6 downto 0) := "1111000" K_120_C
KCodeArray K_CODE_TABLE_C
Encode7b8bArray := makeEncode7b8bTable(CODE_8B_C ) ENCODE_7B8B_TABLE_C
slv( 7 downto 0) := "11111000" K_120_CODE_C
decode12b14bCODES_C,dataIn,dispIn,dataOut,dataKOut,dispOut,codeError,dispError,
slv( 5 downto 0) := "100010" K_X_29_CODE_C
slv( 4 downto 0) := "00001" K_X_1_C
KCodeArray( 0 to 15) kTable
slv( 13 downto 0) := "10100011111000" K_120_23_CODE_C
slv( 5 downto 0) := "001100" K_X_24_CODE_C
slv( 5 downto 0) := "001010" K_X_31_CODE_C
slv( 4 downto 0) := "10011" K_X_19_C
BlockDisparityType outDisp
BlockDisparityType toBlockDisparityTyped,
slv( 5 downto 0) := "101000" K_X_23_CODE_C
slv( 11 downto 0) := "001001111000" K_120_4_C
array(natural range <> ) of KCodeEntryType KCodeArray
slv( 11 downto 0) := "000101111000" K_120_2_C
slv( 4 downto 0) := "00011" K_X_3_C
Encode5b6bArray := makeEncode5b6bTable(CODE_6B_C ) ENCODE_5B6B_TABLE_C
slv( 4 downto 0) := "10111" K_X_23_C
slv( 13 downto 0) := "01010011111000" K_120_4_CODE_C
BlockDisparityType altDisp
slv( 11 downto 0) := "111101111000" K_120_30_C
slv( 11 downto 0) := "110001111000" K_120_24_C
slv( 5 downto 0) := "100001" K_X_30_CODE_C
slv( 13 downto 0) := "10010011111000" K_120_27_CODE_C
slv( 13 downto 0) := "01001011111000" K_120_2_CODE_C
KCodeArray :=((k12 => K_120_0_C,k14 => K_120_0_CODE_C,disp => getDisparity(K_120_0_CODE_C )),(k12 => K_120_1_C,k14 => K_120_1_CODE_C,disp => getDisparity(K_120_1_CODE_C )),(k12 => K_120_2_C,k14 => K_120_2_CODE_C,disp => getDisparity(K_120_2_CODE_C )),(k12 => K_120_3_C,k14 => K_120_3_CODE_C,disp => getDisparity(K_120_3_CODE_C )),(k12 => K_120_4_C,k14 => K_120_4_CODE_C,disp => getDisparity(K_120_4_CODE_C )),(k12 => K_120_7_C,k14 => K_120_7_CODE_C,disp => getDisparity(K_120_7_CODE_C )),(k12 => K_120_8_C,k14 => K_120_8_CODE_C,disp => getDisparity(K_120_8_CODE_C )),(k12 => K_120_11_C,k14 => K_120_11_CODE_C,disp => getDisparity(K_120_11_CODE_C )),(k12 => K_120_16_C,k14 => K_120_16_CODE_C,disp => getDisparity(K_120_16_CODE_C )),(k12 => K_120_19_C,k14 => K_120_19_CODE_C,disp => getDisparity(K_120_19_CODE_C )),(k12 => K_120_23_C,k14 => K_120_23_CODE_C,disp => getDisparity(K_120_23_CODE_C )),(k12 => K_120_24_C,k14 => K_120_24_CODE_C,disp => getDisparity(K_120_24_CODE_C )),(k12 => K_120_27_C,k14 => K_120_27_CODE_C,disp => getDisparity(K_120_27_CODE_C )),(k12 => K_120_29_C,k14 => K_120_29_CODE_C,disp => getDisparity(K_120_29_CODE_C )),(k12 => K_120_30_C,k14 => K_120_30_CODE_C,disp => getDisparity(K_120_30_CODE_C )),(k12 => K_120_31_C,k14 => K_120_31_CODE_C,disp => getDisparity(K_120_31_CODE_C ))) K_CODE_TABLE_C
slv( 5 downto 0) := "001011" K_X_11_CODE_C
slv( 13 downto 0) := "01100011111000" K_120_8_CODE_C
slv( 13 downto 0) := "01000111111000" K_120_1_CODE_C
EncodeTableType :=(data78 => ENCODE_7B8B_TABLE_C,data56 => ENCODE_5B6B_TABLE_C,kTable => K_CODE_TABLE_C) ENCODE_TABLE_C
slv( 4 downto 0) := "11110" K_X_30_C
Encode5b6bArray( 0 to 31) data56
Encode5b6bArray makeEncode5b6bTablea,
slv( 11 downto 0) := "111111111000" K_120_31_C
slv( 11 downto 0) := "100111111000" K_120_19_C
Encode7b8bArray( 0 to 127) data78
integer range - 4 to 4 BlockDisparityType
EncodeTableType ENCODE_TABLE_C
slv( 11 downto 0) := "101111111000" K_120_23_C
slv( 4 downto 0) := "11000" K_X_24_C
slv( 11 downto 0) := "000011111000" K_120_1_C
slv( 4 downto 0) := "11101" K_X_29_C
Encode7b8bArray makeEncode7b8bTablea,
slv( 11 downto 0) := "010111111000" K_120_11_C
BlockDisparityType getDisparityvec,
slv( 5 downto 0) := "001001" K_X_16_CODE_C
array(natural range <> ) of Encode7b8bType Encode7b8bArray
slv( 13 downto 0) := "00110011111000" K_120_24_CODE_C
slv( 5 downto 0) := "000110" K_X_0_CODE_C
slv( 4 downto 0) := "11111" K_X_31_C
slv( 5 downto 0) := "010011" K_X_19_CODE_C
slv( 4 downto 0) := "11011" K_X_27_C
slv( 11 downto 0) := "000111111000" K_120_3_C
Encode5b6bArray ENCODE_5B6B_TABLE_C
slv( 5 downto 0) := "100100" K_X_27_CODE_C
slv( 11 downto 0) := "010001111000" K_120_8_C
slv( 5 downto 0) := "010001" K_X_1_CODE_C
slv( 13 downto 0) := "10001011111000" K_120_29_CODE_C
slv( 11 downto 0) := "110111111000" K_120_27_C
slv( 11 downto 0) := "100001111000" K_120_16_C
slv( 4 downto 0) := "00000" K_X_0_C
slv( 4 downto 0) := "00100" K_X_4_C
encode12b14bCODES_C,dataIn,dataKIn,dispIn,dataOut,dispOut,invalidK,
slv( 5 downto 0) := "010100" K_X_4_CODE_C
slv( 11 downto 0) := "000001111000" K_120_0_C
slv( 5 downto 0) := "111000" K_X_7_CODE_C
slv( 4 downto 0) := "01000" K_X_8_C
slv( 13 downto 0) := "00101111111000" K_120_11_CODE_C
array(natural range <> ) of Encode5b6bType Encode5b6bArray
slv( 5 downto 0) := "100011" K_X_3_CODE_C
slv( 13 downto 0) := "00101011111000" K_120_31_CODE_C
slv( 4 downto 0) := "10000" K_X_16_C
slv( 13 downto 0) := "11100011111000" K_120_7_CODE_C