SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
The input to the link coder logic is a parallel (unencoded) data byte and an associated control variable: Z with two possible values (K, D). The Z value signifies the byte to be encoded either as a control character (K value) or a data character (D value). The data byte (ABCDEFGH, where A matches the least significant bit [LSB]) is divided into two asymmetric portions: a 5-bit one ABCDE (range: 0 to 31) and a 3-bit one FGH (range: 0 to 7).
The encoding process is performed in two stages. At the first stage, the 5-bit portion is converted to a 6-bit subblock (abcdei); at the second stage, the 3-bit portion is converted to a 4-bit subblock (fghj). An additional parameter called running disparity (rd) is taken into account during code calculation at both the character transmission and reception link sides. It introduces code correlation between adjacent bytes so that the current subblock code can depend on the code of the previous subblock and its associated rd output value. As a consequence, depending on the input rd parameter and the 8b/10b encoded value, the encoding/decoding lookup tables might have two different entries for the same byte.
The 10-bit parallel-encoded character is passed to the 10-bit data input of the SATA_PHY serializer component, which further transmits it serially in a LSB to most significant bit (MSB) order (abcdeifghj). The receiver link receives and decodes the sequence in the same LSB to MSB order (abcdeifghj). While SATA encoder takes the full range of a data byte (0–255) encoding values, it uses only two values to encode control characters. For more information on the 8b/10b encoding/decoding process, see the SATA standard specification.