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