1)  8B/10B Encoding/Decoding

Notation

The PCS examines each incoming octet passed down by the GMII and encodes it into a ten bit code group, this is referred to as 8B/10B encoding.  Each octet is given a code group name according to the bit arrangement.  Each octet is broken down into two groups; the first group contains the three most significant bits (y) and the second group contains the remaining five bits (x).  Each data code group is named /Dx.y/, where the value of x represents the decimal value of the five least significant bits and y represents the value of the three most significant bits.  For example:

        /D0.0/  = 000 00000
        /D6.2/ = 010 00110
        /D30.6/= 110 11101

There are also 12 special octets which may be encoded into ten bits.  The  PCS differentiates between special and data code words via a signal passed to it from the GMII.  Special code words follow the same naming convention as data code words except they are named /Kx.y/ rather than /Dx.y/.

Motivation

One of the motivations behind the use of 8B/10B encoding lies with the ability to control the characteristics of the code words such as the number of ones and zeros and the consecutive number of ones or zeros.  Another motivation behind the use of 8B/10B encoding is the ability to use special code words which would be impossible if no encoding was performed.
 
Features

  • Every ten bit code group must fit into one of the following three  possibilities:
            1)  five ones and five zeros
            2)  four ones and six zeros
            3)  six ones and four zeros
    This helps limit the number of consecutive ones and zeros between any two code groups.
  • A special sequence of seven bits, called a comma, is used by the PMA in aligning the incoming serial stream.  The comma is also used by the PCS in acquiring and maintaining synchronization.  The following bit patterns represent the comma:
                0011111 (comma+)
                1100000 (comma-)
    The comma is contained within only the /K28.1/, /K28.5/ and /K28.7/    special code groups.  The comma can not be transmitted across the boundaries of any two adjacent code groups unless an error has occurred.1  This characteristic makes it very useful to the PMA in determining code group boundaries.
  • DC balancing is achieved through the use of a running disparity calculation.  Running disparity is designed to keep the number of ones transmitted by a station equal to the number of zeros transmitted by that station.  This should keep the DC level balanced halfway between the ‘one’ voltage level and the ‘zero’ voltage level.  Running disparity can take on one of two values: positive or negative.  In the absence of errors, the running disparity value is positive if more ones have been transmitted than zeros and the running disparity value is negative if more zeros have been transmitted than ones since power-on or reset.  Running disparity is explained in much more detail in section 2 of PCS Fundamentals.
  • The 8B/10B encoding scheme was designed to provide a high transition density which makes synchronization of the incoming bit stream easier.


1)  The exception to this rule is if /K28.7/ is followed by any of the following special or data code groups:  /K28.x/, /D3.x/, /D11.x/, /D12.x/, /D19.x/, or /D28.x/, where x is a value in the range 0 to 7, inclusive.
Testing Programs