5G/NR - HARQ ACK Codebook                      Home : www.sharetechnote.com






This is one of the complicated topics (at least to me) in 5G/NR Physical Layer Process (38.213) and what is described here would remain messy without clear big picture for a while until I myself get clear understanding on this process.


Before we go into the details, I think the description from TR 38.912 - HARQ would help you to get some big picture.

  • HARQ-ACK feedback with one bit per TB is supported.
  • Multiple DL HARQ Process per UE is supported and Single DL HARQ Process per UE is supported as well.
  • UE is required to indicate its capability of minimum HARQ processing time (The minimum HARQ processing time means the minimum time that is required from DL data reception to the corresponding HARQ-ACK transmission timing)
  • Asynchronous and adaptive DL HARQ is supported at least for eMBB and URLLC
  • From UE perspective, HARQ ACK/NACK feedback for multiple PDSCH in time can be transmitted in one UL data/control region.
  • Timing between PDSCH reception and corresponding ACK/NACK is specified in DCI (See PDSCH-to-HARQ_feedback timing indicator in DCI 1_0, DCI 1_1)   
  • CBG(Code Block Group)-based transmission with single/multi-bit HARQ-ACK feedback is supported
    • Only allow CBG based (re)-transmission for the same TB of a HARQ process
    • A CBG can include all CB of a TB regardless of the TBS(TB Size), meaning that a TB is made up of only one CBG. In this case, UE reports single HARQ ACK bit for the TB
    • a CBG is allowed to be made up of only one CB
    • CBG granularity is configurable by higher layer






Codebook determination algorithm itself is defined in 38.213, but there are many parameters that controls the algorithm. Since they use a little bit different name for the same parameters between 38.213 and 38.331, I thought it would be helpful to make a mapping table for these parameters.


38.213 - 9.1



CBG-DL (CBG = Code Block Group)


On / Off






semiStatic, dynamic

C   Number of Codeblocks within a TB
  Number of CBG within a TB



Number-MCS-HARQ-DL-DCI (?)


DL-data-DL-acknowledgement (?)


CBG transmission information (CBGTI)

  A field in DCI 1_1




Determining the number of bits for HARQ ACK/NACK


In LTE, the number of HARQ bits is determined by relatively simple factors like the number of transport block(number of Codeword) and number of carriers. In general, UE assigns 1 bits per one transport block.  For example, for 4x4 MIMO or higher, a cell use two transport blocks (two code words). In case of carrier aggregation assuming that each carrier is using 4x4 MIMO or higher, the total number of HARQ bits is 2 x number of CCs(The only exception is the case of PUCCH format1b, but I wouldn't go too much for LTE case here). In NR, this kind of simple method is used for a specific settings, but there are various other cases as summarized below. LTE HARQ Bit length determination is same as Case 2 below. This summary is based on 38.213 - 9.1.



< Case 1 >

    Condition :

          PDSCH is received without corresponding PDCCH or

          PDCCH indcating a SPS PDSCH release


    Number of HARQ Bit : 1 bit



< Case 2 >

    Condition :

        PDSCH-CodeblockGroupTransmission = Not Configured  AND

        PDSCH with DCI 1_1


    Number of HARQ Bit : 1 bit per TB (Transport Block)



< Case 3 >

    Condition :

        PDSCH with DCI 1_0 or

        SPS PDSCH or

        SPS PDSCH release


    Number of HARQ Bits : HARQ Ack only for the PDSCH or only for the SPS



< Case 4 >

    Condition :

         PDSCH-CodeblockGroupTransmission = Configured


    Number of HARQ Bits : 1 bit per CBG(Codeblock Group).

        In this case, Usually 1 TB carries multiple CBG, so multiple bits are allocated for one TB.



< Case 5 >

    Condition :



    Number of HARQ Bits : Determined by Type 1 HARQ-ACK codebook determination algorithm



< Case 6 >

    Condition :



    Number of HARQ Bits : Determined by Type 2 HARQ-ACK codebook determination algorithm




Codebook Determination Type / Algorithm


There two different types of Codebook determination algorithm called Type 1 and Type 2. Each of these types are again divided into two cases depending on whether the HARQ ACK is reported in PUCCH or PUSCH. Which types of algorithm to use is determined by a couple of RRC parameters. The Codebook determination algorithm type and the RRC parameters determining the type can be summarized as follows :


Codebook Determination Type


CBG-based HARQ-ACK codebook determination

codeBlockGroupTransmission = ON

Type-1 HARQ-ACK codebook determination



Type-1 HARQ-ACK codebook in PUCCH


Type-1 HARQ-ACK codebook in PUSCH


Type-2 HARQ-ACK codebook determination

HARQ-ACK-codebook = dynamic


Type-2 HARQ-ACK codebook in PUCCH

codeBlockGroupTransmission = OFF or omit


Type-2 HARQ-ACK codebook in PUSCH