Multi-cell scheduling means that one DCI schedules PDSCH or PUSCH on more than one serving cell at the same time. Before Release 18, carrier aggregation always needed one DCI per scheduled cell. A UE with four carriers had to find four PDCCHs in the same slot to be scheduled on all four, and the network had to spend control resources for four of them. Release 18 adds two new DCI formats for this, DCI 0_3 for PUSCH and DCI 1_3 for PDSCH, and a new RRC structure that tells the UE which cells one DCI can cover.
The short description of the two formats is in Format 0_3 and Format 1_3 of the DCI page. This page goes one step further. It explains how the set of co-scheduled cells is configured, how a single DCI can carry different resource allocations for different cells without becoming huge, and what changes in PDCCH monitoring and HARQ-ACK. The general background on scheduling is in the Scheduling page.
- Why multi-cell scheduling ?
- Basic rules and restrictions
- How are the co-scheduled cells configured ?
- How one DCI addresses several cells ?
- PDCCH monitoring and HARQ-ACK
- Release 19 extensions
- Reference
Why multi-cell scheduling ?
Why did 3GPP need a new DCI format just to schedule several cells ? The issue is not the size of any one grant. It is the number of PDCCHs. In CA, each scheduled cell needs its own DCI, either on its own PDCCH or on another cell through cross-carrier scheduling. With four or more carriers scheduled in the same slot, the UE needs four or more PDCCH candidates to succeed, and the network needs four or more sets of CCEs.
This becomes a real limit in two situations. The first is a cell with a small control region, for example a narrow low band carrier or a carrier shared with LTE through DSS, where the CORESET is small and CCEs run out quickly. The second is when many carriers are scheduled from one cell. Cross-carrier scheduling already moved all the DCIs to one cell, but it did not reduce their number. It only concentrated the problem in one place.
So the basic idea is simple. If the network wants to schedule the same UE on several cells in the same slot, it should be able to say it once. Then you may ask: the cells have different bandwidths, different load and maybe different numerologies, so how can one DCI carry all their allocations ? That is the hard part of this feature, and most of this page is about it.
One DCI, several cells : DCI 1_3 schedules PDSCH and DCI 0_3 schedules PUSCH on one or more cells of a configured set. Both have their CRC scrambled by C-RNTI or MCS-C-RNTI.The saving is in PDCCH, not in data : fewer DCIs means fewer CCEs for the network and fewer successful decodes needed by the UE. The PDSCHs and PUSCHs themselves are the same as before.It also works for one cell : DCI 0_3 and 1_3 can schedule a single cell of the set. The network does not need a second DCI format just for the slots where only one cell has data.
Basic rules and restrictions
Before looking at the configuration, it helps to know the rules that limit it. Most of them come from one assumption: each scheduled cell must have exactly one place where its scheduling comes from. If a cell could be scheduled by a multi-cell DCI from one cell and by a normal DCI from another, the UE would have to monitor both, and the saving would disappear.
One scheduling cell per cell : when a serving cell has a PDCCH that schedules a cell set, the PDSCH and PUSCH of the cells in that set are always scheduled by a PDCCH on that serving cell (38.300 clause 10.11).SpCell protection : if the SpCell is the scheduling cell, its own PDSCH and PUSCH cannot be scheduled from an SCell. If an SCell is the scheduling cell, the SpCell is not included in the cell set.One set per cell : a cell included in a set for DCI 1_3 or DCI 0_3 cannot be included in any other set.Size limits : up to 4 cells in one set (maxNrofCellsInSet-r18), counting the DCI 1_3 and DCI 0_3 lists together. Up to 4 sets (maxNrofSetsOfCells-r18), and up to 16 combinations of co-scheduled cells per set (maxNrofCellCombos-r18).Same PUCCH group : the cells of a set must be in the same PUCCH group, because their HARQ-ACK is reported together (38.213 clause 9).Numerology : in the latest 38.300, the scheduling PDCCH and the scheduled PDSCH or PUSCH can use the same or different numerologies, and so can the co-scheduled cells. The UE capabilities for different SCS across the co-scheduled cells carry the r19 suffix (for example multiCell-PDSCH-DCI-1-3-DiffSCS-DiffCC-r19). So check the UE capability before assuming that mixed numerology works on a Release 18 UE.
How are the co-scheduled cells configured ?
The configuration lives in the scheduling cell. Its ServingCellConfig carries mc-DCI-SetOfCellsToAddModList-r18, which is a list of up to 4 MC-DCI-SetOfCells-r18. Each entry is one set of cells that a DCI 0_3 or 1_3 from this cell can schedule. The search space on the scheduling cell then says whether the UE monitors DCI 0_3, DCI 1_3 or both.
The listing below is long, but it falls into three groups. The first four lines after the ID say which cells are in the set and which combinations can be scheduled together. The type and enable fields after them decide how some DCI fields are built. The lists at the end are joint tables, which are the trick that keeps the DCI small. For now, just pay attention to the cell list and the combination list. The joint tables are explained in the next section.
Following is based on
MC-DCI-SetOfCells-r18 ::= SEQUENCE { setOfCellsId-r18 SetOfCellsId-r18, nCI-Value-r18 INTEGER (0..7), scheduledCellListDCI-1-3-r18 SEQUENCE (SIZE (2..maxNrofCellsInSet-r18)) OF ServCellIndex OPTIONAL, -- Need R scheduledCellListDCI-0-3-r18 SEQUENCE (SIZE (2..maxNrofCellsInSet-r18)) OF ServCellIndex OPTIONAL, -- Need R scheduledCellComboListDCI-1-3-r18 SEQUENCE (SIZE (1..maxNrofCellCombos-r18)) OF ScheduledCellCombo-r18 OPTIONAL, -- Need R scheduledCellComboListDCI-0-3-r18 SEQUENCE (SIZE (1..maxNrofCellCombos-r18)) OF ScheduledCellCombo-r18 OPTIONAL, -- Need R antennaPortsDCI1-3-r18 ENUMERATED {type1a, type2} OPTIONAL, -- Cond TypeDCI1-3 antennaPortsDCI0-3-r18 ENUMERATED {type1a, type2} OPTIONAL, -- Cond TypeDCI0-3 tpmi-DCI0-3-r18 ENUMERATED {type1a, type2} OPTIONAL, -- Cond TypeDCI0-3 sri-DCI0-3-r18 ENUMERATED {type1a, type2} OPTIONAL, -- Cond TypeDCI0-3 priorityIndicatorDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R priorityIndicatorDCI-0-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R dormancyDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R dormancyDCI-0-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdcchMonAdaptDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdcchMonAdaptDCI-0-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R minimumSchedulingOffsetK0DCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R minimumSchedulingOffsetK0DCI-0-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdsch-HARQ-ACK-OneShotFeedbackDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdsch-HARQ-ACK-enhType3DCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdsch-HARQ-ACK-enhType3DCIfieldDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pdsch-HARQ-ACK-retxDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R pucch-sSCellDynDCI-1-3-r18 ENUMERATED {enabled} OPTIONAL, -- Need R tdra-FieldIndexListDCI-1-3-r18 SEQUENCE (SIZE (1..32)) OF TDRA-FieldIndexDCI-1-3-r18 OPTIONAL, -- Need R tdra-FieldIndexListDCI-0-3-r18 SEQUENCE (SIZE (1..64)) OF TDRA-FieldIndexDCI-0-3-r18 OPTIONAL, -- Need R rateMatchListDCI-1-3-r18 SEQUENCE (SIZE (1..16)) OF RateMatchDCI-1-3-r18 OPTIONAL, -- Need R zp-CSI-RSListDCI-1-3-r18 SEQUENCE (SIZE (1..8)) OF ZP-CSI-DCI-1-3-r18 OPTIONAL, -- Need R tci-ListDCI-1-3-r18 SEQUENCE (SIZE (1..16)) OF TCI-DCI-1-3-r18 OPTIONAL, -- Need R srs-RequestListDCI-1-3-r18 SEQUENCE (SIZE (1..16)) OF SRS-RequestCombo-r18 OPTIONAL, -- Need R srs-OffsetListDCI-1-3-r18 SEQUENCE (SIZE (1..8)) OF SRS-OffsetCombo-r18 OPTIONAL, -- Need R srs-RequestListDCI-0-3-r18 SEQUENCE (SIZE (1..16)) OF SRS-RequestCombo-r18 OPTIONAL, -- Need R srs-OffsetListDCI-0-3-r18 SEQUENCE (SIZE (1..8)) OF SRS-OffsetCombo-r18 OPTIONAL -- Need R } SetOfCellsId-r18 ::= INTEGER (0..maxNrofSetsOfCells-1-r18) ScheduledCellCombo-r18 ::= SEQUENCE (SIZE (1..maxNrofCellsInSet-r18)) OF INTEGER (0..maxNrofCellsInSet-1-r18) RateMatchDCI-1-3-r18 ::= SEQUENCE (SIZE (1..maxNrofCellsInSet-r18)) OF BIT STRING (SIZE (1..2)) ZP-CSI-DCI-1-3-r18 ::= SEQUENCE (SIZE (1.. maxNrofCellsInSet-r18)) OF BIT STRING (SIZE (1..2)) TCI-DCI-1-3-r18 ::= SEQUENCE (SIZE (2.. maxNrofCellsInSet-r18)) OF BIT STRING (SIZE (3)) SRS-RequestCombo-r18 ::= SEQUENCE (SIZE (1.. maxNrofCellsInSet-r18)) OF BIT STRING (SIZE (2..3)) SRS-OffsetCombo-r18 ::= SEQUENCE (SIZE (1.. maxNrofCellsInSet-r18)) OF INTEGER (0..3) TDRA-FieldIndexDCI-1-3-r18 ::= SEQUENCE (SIZE (2.. maxNrofBWPsInSetOfCells-r18)) OF INTEGER (0..maxNrofDL-Allocations-1-r18) TDRA-FieldIndexDCI-0-3-r18 ::= SEQUENCE (SIZE (2.. maxNrofBWPsInSetOfCells-r18)) OF INTEGER (0..maxNrofUL-Allocations-1-r18)
setOfCellsId-r18 : the ID of the set, 0 to 3. If more than one set is configured from the same scheduling cell, the DCI has a Scheduled cell set indicator field that points to one of them.nCI-Value-r18 : a carrier indicator value for the set. The UE uses it in the PDCCH search space hashing, in the same place where a normal cross-carrier DCI uses the carrier indicator field value. Each set has a unique value.scheduledCellListDCI-1-3 / scheduledCellListDCI-0-3 : the cells of the set for PDSCH and for PUSCH, 2 to 4 cells, in ascending order of serving cell index. The cells get the internal indices 0, 1, 2, 3 in that order. The two lists can be different, but together they hold at most 4 cells.scheduledCellComboListDCI-1-3 / -0-3 : a table of allowed combinations, up to 16 rows. Each row is a list of internal indices, for example {0, 2}. The DCI then says which row is scheduled.antennaPortsDCI1-3 / antennaPortsDCI0-3 / tpmi-DCI0-3 / sri-DCI0-3 : how the antenna port, TPMI and SRI fields are built. type2 means one block per cell. type1a means one field whose value is interpreted for each scheduled cell independently.The ...DCI-1-3 / ...DCI-0-3 enable fields : the same optional DCI features that DCI 1_1 and 0_1 have, such as priority indicator, SCell dormancy and PDCCH monitoring adaptation, turned on separately for the multi-cell formats.tdra-FieldIndexList, rateMatchList, zp-CSI-RSList, tci-List, srs-RequestList, srs-OffsetList : the joint tables. Each row holds one value per cell, and the DCI carries only a row number.
The search space is the last piece. A Release 18 USS on the scheduling cell carries dci-FormatsMC-r18, set to formats0-3, formats1-3 or formats0-3-And-1-3. This is configured separately from the normal dci-Formats of the same search space structure, so the UE can monitor DCI 1_1 and DCI 1_3 in different search space sets.
Following is based on
SearchSpaceExt-v1800 ::= SEQUENCE { searchSpaceType-r18 CHOICE { common-r18 SEQUENCE { dci-Format2-9-r18 SEQUENCE { ... } OPTIONAL, -- Need R ... }, ue-Specific-r18 SEQUENCE { dci-FormatsMC-r18 ENUMERATED {formats0-3, formats1-3, formats0-3-And-1-3} OPTIONAL, -- Need R ... } } OPTIONAL -- Need R }
Figure 1 puts the pieces together with an example. The scheduling cell is the PCell. The set for DCI 1_3 has four cells, and the combination table has three rows.
Figure 1. A cell set and its combination table. The RRC lists fix which cells can be scheduled together, and the DCI only selects a row. Without the table, the FDRA blocks themselves say which cells are scheduled.
Internal index, not serving cell index : the combination rows use 0 to 3, which are positions in scheduledCellListDCI-1-3. If the list is {1, 4, 5, 7}, index 2 means serving cell 5.Scheduled cells indicator : present only when the combination table is configured. Its size is ceil(log2N) bits for N rows. With only one row, the field has 0 bits and the scheduled cells are always that row.Without the table : the UE looks at the FDRA block of each cell. An "empty" allocation means the cell is not scheduled in this DCI.
How one DCI addresses several cells ?
Now the core question. Four cells may have four different allocations, four MCS values and four HARQ processes. If every field were repeated four times, DCI 1_3 would be bigger than four DCI 1_1 messages, because the fields that are the same for all cells would be repeated too. So the format sorts its fields by how much they really differ between cells, and handles each kind in a different way.
Figure 2 shows the four kinds of fields in DCI 1_3. DCI 0_3 follows the same pattern for PUSCH. The point to notice is the third kind. A joint table field looks like one small field in the DCI, but it selects a row in RRC that holds a different value for each cell. This is how the format keeps per-cell flexibility for TDRA, TCI and rate matching without per-cell bits.
Figure 2. The four kinds of fields in DCI 1_3. Only the values that really differ per cell get per-cell bits. Values that differ per cell but come from a small set of patterns go through RRC joint tables.
Cell selection : the Scheduled cell set indicator exists when more than one set is configured from this scheduling cell. The Scheduled cells indicator exists when a combination table is configured, as in Figure 1.Per-cell blocks : FDRA, MCS, NDI and RV (for each transport block), and HARQ process number have one block per scheduled cell. The blocks are placed in ascending order of serving cell index, so block 1 is always the cell with the smallest index. The size of each block follows that cell's own configuration, for example its BWP size and its harq-ProcessNumberSizeDCI-1-3.Joint table : the TDRA field selects one row of tdra-FieldIndexListDCI-1-3. The row contains one TDRA index for each BWP of each cell, which points into that cell's DCI 1_1 TDRA table. Rate matching, ZP CSI-RS trigger, TCI, SRS request and SRS offset work the same way. The field size is ceil(log2N) bits for N rows.Single fields used once : DAI, TPC for PUCCH, PUCCH resource indicator and PDSCH-to-HARQ timing appear once. All the HARQ-ACK of the DCI goes to one PUCCH, so one value is enough.Single fields applied per cell : the BWP indicator, VRB-to-PRB mapping, PRB bundling size indicator and DMRS sequence initialization are one field, but the value is applied to each applicable scheduled cell independently. A cell that does not have the related configuration simply ignores it.type1a or type2 : antenna ports in DCI 1_3, and antenna ports, TPMI and SRI in DCI 0_3, can be one field interpreted per cell (type1a) or one block per cell (type2). Support of configurable Type-1A fields is a UE capability, configurableType-1A-FieldsForDCI-0-3-And-1-3-r18.
So how much is really saved ? It depends on the configuration, and I don't think there is a single number. The per-cell blocks are not compressed at all, so four cells still need four FDRA, MCS and HARQ blocks. The saving comes from the fields that are sent once, and from the CRC and the PDCCH overhead of three DCIs that no longer exist. The CCE saving is usually the bigger effect, because one DCI 1_3 at a given aggregation level replaces several DCI 1_1 at the same level.
PDCCH monitoring and HARQ-ACK
A new DCI format also changes two things around it: where the UE looks for it, and how its HARQ-ACK is reported. Both had to be adapted, because the old rules assumed one DCI per scheduled cell. One DCI 1_3 now produces HARQ-ACK for several cells, and the DAI counting of the Type-2 codebook had to be defined for that case.
Search space on the scheduling cell : the UE monitors DCI 0_3 or 1_3 in a USS with dci-FormatsMC-r18 on the scheduling cell. A search space with the same ID configured on the reference scheduled cell provides only nrofCandidates, the same way cross-carrier scheduling splits the search space between the two cells.CCE hashing with nCI-Value : the PDCCH candidate positions are computed with the nCI-Value of the set in place of the carrier indicator field value (38.213 clause 10.1). This keeps the candidates of different sets, and of normal cross-carrier DCIs, apart.One scheduling cell : for a cell in a set, the UE does not expect to monitor PDCCH for that cell on more than one scheduling cell.Same PUCCH group, same codebook : the cells of a set must be in one PUCCH group, and the HARQ-ACK of all sets in that group goes into the same codebook.Second Type-2 sub-codebook : for a dynamic (Type-2) codebook, the HARQ-ACK of DCI 1_3 that schedules PDSCH on more than one cell goes into a separate second sub-codebook. The counter DAI and total DAI in that DCI count DCI 1_3 messages, not cells. The size of each entry follows the maximum number of cells and transport blocks one DCI 1_3 can schedule in the set.SCell dormancy without PDSCH : like DCI 1_1, a DCI 1_3 can indicate SCell dormancy without scheduling any PDSCH. The UE acknowledges it with an ACK bit, as if a PDSCH had been received.
Why a separate sub-codebook ? My understanding is that it is the same reason as for CBG based or multi-PDSCH scheduling. A DCI 1_1 produces a fixed small number of HARQ-ACK bits, and a DCI 1_3 produces many more, depending on how many cells it schedules. If both shared one DAI sequence, a missed DCI 1_3 would make the UE lose track of how many bits to send. Keeping them in two sub-codebooks lets each one count its own kind of DCI.
Release 19 extensions
The latest ASN.1 already shows what came after the first version. The Release 18 design reused the DCI 1_1 and 0_1 TDRA tables for each cell, and that limited what the joint TDRA table could express. Release 19 adds a larger table and its own TDRA list. It also extends the capabilities for multi-PDSCH and multi-PUSCH per cell and for different numerologies. These are outside the Release 18 scope of this page, so here they are only listed.
Following is based on
MC-DCI-SetOfCellsExt-v1900 ::= SEQUENCE {
tdra-FieldIndexListDCI-1-3-r19 SEQUENCE (SIZE (1..64)) OF TDRA-FieldIndexDCI-1-3-r19 OPTIONAL, -- Need R
tdra-FieldIndexListDCI-0-3-r19 SEQUENCE (SIZE (1..128)) OF TDRA-FieldIndexDCI-0-3-r19 OPTIONAL -- Need R
}
TDRA-FieldIndexDCI-1-3-r19 ::= SEQUENCE (SIZE (2.. maxNrofBWPsInSetOfCells-r18)) OF INTEGER (0.. maxNrofDL-AllocationsExt-1-r19)
TDRA-FieldIndexDCI-0-3-r19 ::= SEQUENCE (SIZE (2.. maxNrofBWPsInSetOfCells-r18)) OF INTEGER (0..maxNrofUL-Allocations-1-r18)
Larger joint TDRA tables : up to 64 rows for DCI 1_3 and 128 rows for DCI 0_3, configured in mc-DCI-SetOfCellsToAddModListExt-v1900.Own TDRA table : with the r19 list, the per-cell index points into a TDRA table for DCI 1_3 or 0_3 itself, instead of the DCI 1_1 or 0_1 table.Multi-PDSCH per cell : pdsch-TimeDomainAllocationListForMultiPDSCH-DCI-1-3-r19 in PDSCH-Config lets one DCI 1_3 schedule several PDSCHs on one cell, and the NDI and RV blocks grow accordingly.Capabilities with r19 suffix : for example multiCell-PDSCH-DCI-1-3-DiffSCS-DiffCC-r19, multiCellMultiPDSCH-DCI-1-3-r19 and qcl-MultiCellDCI-1-3-Diff-r19.
Reference
- 3GPP TS 38.300 V19.4.0 : NR; NR and NG-RAN Overall description; Stage-2. Clause 10.11, Multi-cell scheduling by a single DCI
- 3GPP TS 38.331 V19.4.0 : NR; Radio Resource Control (RRC) protocol specification. MC-DCI-SetOfCells, SearchSpace
- 3GPP TS 38.212 : NR; Multiplexing and channel coding. Clauses 7.3.1.1.4 (DCI format 0_3) and 7.3.1.2.4 (DCI format 1_3)
- 3GPP TS 38.213 V19.4.0 : NR; Physical layer procedures for control. Clause 9.1.3 (Type-2 HARQ-ACK codebook) and clause 10.1 (PDCCH monitoring)
- DCI, Scheduling (ShareTechnote)