... FEC encodingencode and Data Detector processes (FDD) The {EPoC_PMD_Name} encodes the transmitted data using a systematic Low-Density Parity-Check (LDPC) (F C, F P ) code. A LDPC encoder encodes F P information bits into a codeword c = ( i,... i FP p FP... p FC ) by adding F R parity bits Hc T = obtained so that where H is an F R F C binary matrix containing mostly and relatively few, called low-density paritycheck matrix. (see [] and []). The detailed description of such parity check matrices is given in... {to be included in informative references: [] R. G. Gallager, Low density parity check codes, IRE Trans. Inform. Theory, vol. IT-, pp., Jan..; [] T. Richardson and R. Urbanke, Modern Coding Theory," Cambridge University Press, } The CLT {EPoC_PMD_Name} PCS operating on amplified CCDN shall encode the transmitted data using one of the LDPC (F C, F P ) codes per Table, as selected using register TBD. The CNU {EPoC_PMD_Name} PCS operating on amplified CCDN shall encode the transmitted data using one of the LDPC (F C, F P ) codes per Table, as selected using register TBD. Table LDCP codes used by the CLT {EPoC_PMD_Name} PCS for amplified CCDN Codeword F C [bits] p Fp...p FC Payload F P [bits] Parity F R [bits] Annex A gives an example of LDPC (F C, F P ) FEC encoding. {we will need to select one of the codes from the family of codes we use in either downstream or upstream and then generate examples}... LDPC matrix definition -bit blocks B Q Payload CRC bits Padding bits B P i...i FP -bit blocks C Q Parity Parity bits in last block C PL Padding bits C P The low-density parity check matrix H for LDPC (F C, F P ) encoder can be divided into blocks of L submatrices. Its compact circulant form is represented by an m n block matrix: where the submatrix H i,j is an L L all-zero submatrix or a cyclic right-shifted identity submatrix. The last n m sub-matrix columns represent the parity portion of the matrix. Moreover, nl = F C, ml = F P and the code rate is (n m)/n = (F C F P )/F C. In this specification, the sub-matrix size L is called the lifting factor.
Table LDCP codes used by the CLT {EPoC_PMD_Name} PCS for amplified CCDN Codeword F C [bits] Payload F P [bits] Parity F R [bits] H = -bit blocks B Q Payload CRC bits Padding bits B P -bit blocks C Q Parity Parity bits in last block C PL Padding bits C P In this specification, the sub-matrix H i,j is represented by a value in {-,,, L-}, where a -' value represents an all-zero submatrix, and the remaining values represent an L L identity submatrix cyclically rightshifted by the specified value. Such representation of the parity-check matrix is called a base matrix. Table presents a base matrix of the low-density parity-check matrix H for LDPC (, ) code listed in Table for downstream and Table for upstream, respectively. The lifting factor of the matrix is L=. Table LDPC (, ) code matrix H H H H H H H H H... H n... H n... H n............ H m H m H m... H m n - - - - - - -
Table LDPC (, ) code matrix (continued) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table LDPC (, ) code matrix (continued) - - - - - - - - - - - - - - - - - Table presents a base matrix of the low-density parity-check matrix H for LDPC (, ) code listed in Table for upstream. The lifting factor of the matrix is L=. Table LDCP (, ) code matrix - - - - - - - -
Table LDCP (, ) code matrix (continued) - - - - - - - - - - - - - - - - - - - - - - - - - - Table presents a base matrix of the low-density parity-check matrix H for LDPC (, ) code listed in Table for upstream. The lifting factor of the matrix is L=. Table LDCP (, ) code matrix
Table LDCP (, ) code matrix (continued) - - - - - - - - - - - - - - - - - - - - -... Data Detector process within CLT (downstream) The {EPoC_PMD_Name} CLT PCS transmit path includes the Data Detector process. This process contains a delay line (represented by the FIFO_FEC_TX buffer) that stores -bit blocks received from the output of the B/B encoder to allow insertion of the FEC parity data into the transmitted data stream. The length of the FIFO_FEC_TX buffer is selected in such a way that it is large enough to compensate for the insertion of the FEC parity data as well as any additional FEC-related overhead, as defined in... For the Data Detector process included in the {EPoC_PMD_Name} CLT PCS transmit path, the length of the FIFO_FEC_TX buffer is set to be equal to the maximum amount of FEC parity data that may be inserted within the transmission time of one packet of a maximum length (i.e., at most forty -bit blocks of FEC parity data). NOTE: the last statement in yellow above must be recalculated and revised. The value comes from G- EPON and it is likely incorrect.... LDPC encodingencode process within CLT (downstream) The process of padding FEC codewords and appending FEC parity octets in the {EPoC_PMD_Name} CLT transmitterpcs transmit path is illustrated in Figure. The B/B encoder produces a stream of -bit blocks, which are then delivered to the FEC Encode and Data Detector input process, as shown in Figure FEC encoder. The FEC encoder accumulates B Q (see Table ) of these -bit blocks to form the payload portion of athe FEC codeword, removing the redundant first bit (i.e., sync header bit <>) in each -bit block received from the B/B encoder. The first bit <> of the sync header in the -bit block in the transmit direction is guaranteed to be the complement of the second bit <> of the sync header see... for more details. Next, the FEC encoder calculates CRC (see...) over the aggregated B Q -bit blocks, placing the resulting bits of CRC code immediately after the B Q -bit blocks, forming the payload portion of the
FEC codeword. Finally, the FEC encoder prepends B P (see Table ) padding bits (with the binary value of ) to the payload portion of the FEC codeword as shown in Figure. This resulting data is then LDPC-encoded, resulting inproducing the F R bits of parity data. The first bits of parity data are inserted into the -bit block carrying CRC code, complementing it. The remaining F R - bits of parity data is then divided into C Q -bit blocks. Note that -bit blocks carrying CRC data and parity data do not include sync header. The last -bit block of the parity data contains C PL bits of parity data, and the remaining C P bits are filled with padding (binary ).... LDPC codeword transmission order within CLT (downstream) Once the process of calculating FEC parity is complete, the payload portion of the FEC codeword and the parity portion of the FEC codeword are then transferred towards the Data DetectorPMA, one -bit block at a time. Note that the B P padding bits used to generate the FEC codeword are not transmitted towards the Data DetectorPMA. The C P padding bits in the last parity codeword (block number C Q ) are transmitted towards the Data DetectorPMA.
TXD<> sync header first XGMII transfer Input for FEC encoder (F P bits) Figure PCS Transmit bit ordering within CLT (downstream)... LDPC encoding process within CNU (upstream) {the upstream FEC encoding for CNU will be described when we have a consistent proposal on how to mix three different FEC codes into a single transmission slot}... Data Detector process within CNU (upstream) TXD<> D D D D D D D D B/B Encoder C C C C C C C C C C C C C C C C -bit block data -bit block data -bit block data FEC payload Aggregate B Q B-blocks & Calculate CRC -bit block B Q data LDPC Encoder FEC parity (F R bits) B P padding bits {Data Detector process in the upstream will be much more complex, since it needs to account for burs transmission as well and burst structure - text is TBD at this time} TXD<> Data Detector -bit block B Q- data -bit block CRC parity second XGMII transfer -bit block B Q data -bit block parity CRC TXD<> -bit block C Q parity pad CPL- CP-
... LDPC codeword transmission order within CNU (upstream) {the content of this subclause ought to be quite similar with the content of...}... CRC {the content of this subclause will provide details about CRC used in EPoC to guarantee MTTFPA}... State diagrams... Constants B P B Q C P C Q F P F R VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of padding bits within the payload portion of the FEC codeword. VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of -bit blocks within the payload portion of the FEC codeword. VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of padding bits within the last -bit block of the parity portion of the FEC codeword. VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of -bit blocks within the parity portion of the FEC codeword. VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of bits within the payload portion of the FEC codeword. VALUE: see Table for downstream FEC, Table for upstream FEC This constant represents the number of bits within the parity portion of the FEC codeword. SH_CTRL See... SH_DATA See...... Variables blockcount TYPE: -bit unsigned integer This variable represents the number of either -bit blocks or -bit blocks. CLK TYPE: Boolean This Boolean is true on every negative edge of TX_CLK (see..) and represents instances of time at which a -bit block is passed from the output of the B/B encoder into the FEC encoder. This variable is reset to false upon read.
datapayload<f P -:> TYPE: Bit array This array represents the payload portion of the FEC codeword, accounting for the necessary padding. It is initialized to the size of F P bits and filled with the binary value of. dataparity<f R -+C P :> TYPE: Bit array This array represents the parity portion of the FEC codeword, accounting for the necessary padding. It is initialized to the size of F R + C P bits and filled with the binary value of. FIFO_FEC_TX TYPE: Array of -bit blocks A FIFO array used to store -bit blocks, inserted by the input process and retrieved by the output process in the FEC encoder. loc TYPE: -bit unsigned integer This variable represents the position within the given bit array. SH_CTRL See... SH_DATA See... sizefifo TYPE: -bit unsigned integer This variable represents the number of -bit blocks stored in the FIFO. tx_coded<:> TYPE: -bit block This -bit block contains B/B encoded data from the output of B/B encoder. The format for this data block is shown in Figure. The left-most bit in the figure is tx_coded<> and the right-most bit is tx_coded<>. tx_coded_out<:> TYPE: -bit block This -bit block contains the output of the FEC encoder being passed towardsto the Data Detector. The left-most bit is tx_coded_out<> and the right-most bit is tx_coded_out<>.... Functions calculatecrc ( ARRAY_IN ) This function calculates CRC for data included in ARRAY_IN. calculateparity( ARRAY_IN ) This function calculates LDPC parity (for the code per Table or Table ) for data included in ARRAY_IN. resetarray( ARRAY_IN ) This function resets the content of ARRAY_IN, removing all the elements within ARRAY_IN and setting its size to. removefifohead( ARRAY_IN ) This function removes the first block in ARRAY_IN and decrements its size by. removefifohead( ARRAY_IN ) { ARRAY_IN[] = ARRAY_IN[] ARRAY_IN[] = ARRAY_IN[]
... ARRAY_IN[sizeFifo-] = ARRAY_IN[sizeFifo-] sizefifo -- }... Messages TBD... State diagrams The CLT PCS shall implement the LDPCFEC Encode and Data Detector encoding process, comprising the input process as shown in Figure and the output process as shown in Figure. The CNU PCS shall implement the LDPC encodingfec Encode and Data Detector process, comprising the input process as shown in Figure and the output process as shown in Figure. In case of any discrepancy between state diagrams and the descriptive text, the state diagrams prevail. BEGIN WAIT_FOR_BLOCK AGGREGATE_BLOCK tx_coded<:> * (tx_coded<:> = SH_DATA + tx_coded<:> = SH_CTRL) FIFO_FEC_TX[sizeFifo] tx_coded<:> sizefifo ++ UCT INIT sizefifo Figure FEC encoderencode and Data Detector, input process state diagram
CLK * blockcount < BQ BEGIN RESET loc blockcount resetarray( datapayload ) resetarray( dataparity ) Figure FEC encoderencode and Data Detector, output process state diagram (CLT UCT CLK * blockcount = B Q datapayload<loc+:loc> calculatecrc( datapayload<loc-:> ) dataparity calculateparity( datapayload ) tx_coded_out<:> datapayload<loc+:loc> tx_coded_out<:> dataparity<:> loc blockcount CLK * blockcount < CQ INIT AGGREGATE_B Q _BLOCKS datapayload<loc+:loc> FIFO_FEC_TX[] tx_coded_out<:> FIFO_FEC_TX[] removefifohead( FIFO_FEC_TX ) loc += blockcount ++ CALCULATE_CRC_AND_PARITY SEND_PARITY CLK CLK tx_coded_out<:> dataparity<loc+:loc> loc += blockcount ++ CLK * blockcount = C Q