64b/66b encoding

From Wikipedia, the free encyclopedia

In data networking and transmission, 64B/66B is a line code that transforms 64-bit data to 66-bit line code to achieve DC-balance and bounded disparity, and yet provide enough state changes to allow reasonable clock recovery. This means that there are just as many 1s as 0s in a string of two symbols, and that there are not too many 1s or 0s in a row. This is an important attribute in a signal that needs to be sent at high rates because it helps reduce intersymbol interference.

The overhead of the 64B/66B encoding is considerably less than the more common 8b/10b encoding scheme.

Contents

[edit] How it works

As the scheme name suggests, 64 bits of data are transmitted as a 66-bit entity.

The 66 bit entity is made by pre-pending one of two possible two-bit 'preambles' to the 64 bits to be transmitted.

  • If the preamble is '01', the 64 bits are entirely data
  • If the preamble is '10', the 64 bits are a mixture of control information and data
  • The preambles '00' and '11' are not used, and generate an error if seen.

The use of the '01' and '10' preambles guarantees a bit transition every 66 bits, which means that a continuous stream of 0s or 1s cannot be valid data. It also allows easier clock/timer synchronization, as a transition must be seen every 66 bits.

The 64 bits of data are scrambled using a self-synchronous scrambler function, with the intention of ensuring that a relatively even distribution of 1s and 0s are normally found in the transmitted data. The intention is not to encrypt the data, but to give the transmitted data useful engineering properties. This does not guarantee that pathological data will not generate a transmitted output that has all 0s or all 1s or other undesirable properties, but simply reduces the probability that this will occur with normal data. This method is different from the codebook based approach of 8B/10B encoding.

The encoding is normally done entirely in hardware, using a linear feedback shift register. Upper layers of the software stack should be "unaware" that this encoding is being used.

[edit] Technologies that use it

[edit] See also

[edit] External links

Note that this is the original proposal to the IEEE, and some changes were made for the final, agreed standard e.g. the scrambling polynomial is neither of the two options outlined in the paper, but actually x58+x39+1