5G/NR - Resource Allocation Type

 

 

 

Resource Allocation Type in a Nutshell

 

Frequency domain allocation has to say which resource blocks a transmission uses, and there are two ways to say it. One sends a bitmap, which can describe any set of blocks at the cost of one bit per group. The other sends a start and a length, which is far shorter but can only describe a run of consecutive blocks. The box below states the choice, and the sections after it cover each type separately.

  • Resource Allocation Type indicates a method for resource allocation in frequency domain
  • Three types are supported in NR : Type 0(bitmap), Type 1(start RB,nRB) and Dynamic Swtich
  • Resource Allocation Type is configured in RRC and the resource allocation for specific scheduling for PDSCH/PUSCH is indicated in DCI.
  • In DCI, Resource Allocation  for Type 0 is configured in the form of bitmap and Resource Allocation for Type 1 is configured in RIV

Resource Allocation Type in Detail

Resource Allocation Type indicates a method for resource allocation in frequency domain. Similar concept is used in LTE Resource Allocation as well. So if you are familiar with LTE Resource Allocation Type, you would easily understand the concepts on NR Resource Allocation Type.

What kind of resource allocation types are supported ?

NR Resource Allocation Type is specified in the following specification. The downlink and the uplink are written up separately, and the two clauses define the same pair of schemes. The table further down places them against their LTE counterparts, because the numbering does not carry across.

  • Downlink : 38.214 - 5.1.2.2 Resource allocation in frequency domain
  • Uplink : 38.214 - 6.1.2.2 Resource allocation in frequency domain

Resource Allocation Type specifies the way in which the scheduler allocate resource blocks for each transmission. Just in terms of flexibility, the way to give the maximum flexibility of resource block allocation would be to use a string of a bit map (bit stream), each bit of which represent each resource block. This way you would achieve the maximum flexibility, but it would create too much complication of resource allocation process or too much data (too long bit map) to allocate the resources.

As mentioned above, LTE also use similar concept. Following table shows the comparision of NR and LTE Resource Allocation Type.

NR Resource Allocation Type

LTE Resource Allocation Type

Allocation Method

Type 0

Type 0

Bitmap

N/A

Type 1

Bitmap

Type 1

Type 2

Start RB and Number of RB

Dynamic Switch

  Set As per DCI field
  • Two schemes and one switch : Type 0 and Type 1 are the schemes, and dynamicSwitch is not a third. It lets the DCI pick between the two per transmission.
  • The numbering does not carry across from LTE : NR Type 1 is a start and a length, which LTE calls Type 2. The LTE Type 1 scheme has no NR counterpart.
  • Type 0 can describe any set of groups : a bitmap costs one bit per resource block group, used or not.
  • Type 1 costs far less to signal : a start and a length pack into one RIV. The allocation then has to be a single consecutive run.
  • One clause pair covers both directions : 38.214 clause 5.1.2.2 defines the schemes for the downlink, and clause 6.1.2.2 defines them for the uplink.

How to determine Resource Allocation Type ?

According to 38.214 - 5.1.2.2, the Resource Allocation Type is determined implcitely by DCI format or by RRC layer message as described below. Two questions settle it, and they have to be asked in order. The DCI format comes first, because a fallback format fixes the answer on its own. Only when the format leaves the choice open does the RRC configuration decide.

  •   The UE may assume that when the scheduling grant is received with DCI format 1_0, 4_0 or 4_1 downlink resource allocation type 1 is used.
  •   If the scheduling DCI is configured to indicated the downlink resource allocation type as part of the Frequency-domainPDSCHresource field, the UE shall use downlink resource allocation type 0 or type 1 as defined by this field. Otherwise the UE shall use the downlink frequency resource allocation type as defined by the RRC configured parameter Resource-allocation-config for PDSCH.

How the Type is Signaled

Three things can carry the decision, and they sit at different levels. RRC names the scheme, and the DCI format can override that with a fallback rule. One bit inside the grant then settles it per transmission, when RRC asked for a switch.

The resource allocation type is not arbitrarily chosen—it’s explicitly configured or dynamically indicated. Here’s how it works:

RRC Configuration

The higher-layer parameter resourceAllocation in the PDSCH-Config (for downlink) or PUSCH-Config (for uplink) IE (Information Element) determines the resource allocation type. It can take one of three values:

  • resourceAllocationType0: Only Type 0 (RB bitmap) is used.
  • resourceAllocationType1: Only Type 1 (RIV) is used.
  • dynamicSwitch: The type can switch dynamically between Type 0 and Type 1, and the choice is indicated in the DCI itself.

If resourceAllocation is set to resourceAllocationType0, the "Frequency domain resource assignment" field is always an RB bitmap. If set to resourceAllocationType1, it’s always an RIV.

The field is a single enumerated value, and it appears in more places than the paragraph above names. The listing below collects all of them, together with rbg-Size, which fixes how many resource blocks one bitmap bit stands for.

Following is based on 38.331 v19.3.0 (Release 19)

PDSCH-Config ::=                        SEQUENCE {
    ...
    resourceAllocation                      ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch},
    ...
    rbg-Size                                ENUMERATED {config1, config2},
    ...,
    [[
    -- Release 16 : the compact format 1_2 gets a choice of its own
    resourceAllocationType1GranularityDCI-1-2-r16   ENUMERATED {n2,n4,n8,n16}                  OPTIONAL,   -- Need S
    ...
    resourceAllocationDCI-1-2-r16           ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
                                                                                               OPTIONAL,   -- Need M
    ...
    ]],
    ...
}

PUSCH-Config ::=                        SEQUENCE {
    ...
    resourceAllocation                      ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch},
    ...
    rbg-Size                                ENUMERATED { config2}                          OPTIONAL,   -- Need S
    ...,
    [[
    resourceAllocationDCI-0-2-r16           ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
                                                                                               OPTIONAL,   -- Need M
    resourceAllocationType1GranularityDCI-0-2-r16   ENUMERATED { n2,n4,n8,n16 }                OPTIONAL,   -- Need S
    ...
    ]],
    ...
}

ConfiguredGrantConfig ::=               SEQUENCE {
    ...
    resourceAllocation                      ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch },
    rbg-Size                                ENUMERATED {config2}                           OPTIONAL,   -- Need S
    ...
}

-- Release 18 added the multi-cell scheduling formats, each with its own copy again
PDSCH-ConfigDCI-1-3-r18 ::=             SEQUENCE {
    resourceAllocationDCI-1-3-r18           ENUMERATED {resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
                                                                                               OPTIONAL,   -- Need M
    rbg-SizeDCI-1-3-r18                     ENUMERATED {config1, config2, config3, spare1} OPTIONAL,   -- Cond DCI-1-3
    resourceAllocationType1GranularityDCI-1-3-r18   ENUMERATED {n2,n4,n8,n16}                  OPTIONAL,   -- Need S
    numberOfBitsForRV-DCI-1-3-r18           INTEGER (0..2)                                     OPTIONAL,   -- Need R
    harq-ProcessNumberSizeDCI-1-3-r18       INTEGER (0..5)                                     OPTIONAL    -- Need R
}

PUSCH-ConfigDCI-0-3-r18 ::=             SEQUENCE {
    resourceAllocationDCI-0-3-r18           ENUMERATED {resourceAllocationType0, resourceAllocationType1, dynamicSwitch}
                                                                                               OPTIONAL,   -- Need M
    rbg-SizeDCI-0-3-r18                     ENUMERATED {config2, config3}                  OPTIONAL,   -- Need S
    resourceAllocationType1GranularityDCI-0-3-r18   ENUMERATED {n2,n4,n8,n16}                  OPTIONAL,   -- Need S
    numberOfBitsForRV-DCI-0-3-r18           INTEGER (0..2)                                     OPTIONAL,   -- Need R
    harq-ProcessNumberSizeDCI-0-3-r18       INTEGER (0..5)                                     OPTIONAL,   -- Need R
    uci-OnPUSCH-ListDCI-0-3-r18             SetupRelease { UCI-OnPUSCH-ListDCI-0-1-r16 }       OPTIONAL    -- Need M
}
  • The uplink cannot choose configuration 1 : rbg-Size is {config1, config2} in PDSCH-Config but only {config2} in PUSCH-Config. An uplink bitmap therefore uses the wider group.
  • Release 18 added a third nominal size : rbg-SizeDCI-1-3-r18 reaches config3, which is a configuration the Nominal RBG size table above does not carry.
  • Configured grants state the scheme themselves : ConfiguredGrantConfig carries its own resourceAllocation. A grant with no DCI still has to say how its allocation field is read.

Dynamic Switching (DCI-Based Indication)

When resourceAllocation is configured as dynamicSwitch, the specific DCI format used (e.g., 1_1 for downlink or 0_1 for uplink) includes a mechanism to indicate the type:

The most significant bit (MSB) of the "Frequency domain resource assignment" field is used as a flag:

  • 0: Indicates Type 0 (RB bitmap). The remaining bits form the bitmap.
  • 1: Indicates Type 1 (RIV). The remaining bits are interpreted as the RIV value.

This dynamic indication allows flexibility in scheduling, where the network can switch between contiguous (Type 1) and non-contiguous (Type 0) allocations based on the traffic needs.

Fallback DCI Formats

For fallback DCI formats (e.g., DCI 1_0 for downlink or 0_0 for uplink), only Type 1 (RIV) is used. These formats are designed for simplicity and lower overhead, so they don’t support the bitmap-based Type 0 allocation. In this case, the "Frequency domain resource assignment" field is always interpreted as an RIV, and no dynamic switching is involved.

Practical Determination

The steps below are the ones to take against a live log, where the DCI format is known and the RRC configuration is available. They run in the order that settles the answer fastest.

To know whether the "Frequency domain resource assignment" field is an RIV or an RB bitmap:

  • Check the DCI Format:
    • If it’s a fallback format (e.g., DCI 1_0 or 0_0), it’s always RIV (Type 1).
    • If it’s a non-fallback format (e.g., DCI 1_1 or 0_1), proceed to the next step.
  • Check the RRC Configuration:
    • Look at the resourceAllocation parameter in PDSCH-Config (for PDSCH) or PUSCH-Config (for PUSCH).
    • If it’s resourceAllocationType0, the field is an RB bitmap.
    • If it’s resourceAllocationType1, the field is an RIV.
    • If it’s dynamicSwitch, examine the MSB of the "Frequency domain resource assignment" field in the DCI:
      • MSB = 0: RB bitmap (Type 0).
      • MSB = 1: RIV (Type 1).
  • Field Size:
    • The size of the "Frequency domain resource assignment" field can also provide a clue. For Type 0, the field size is determined by the number of RBGs in the BWP (e.g., ceiling(N_RB / RBG_size) bits). For Type 1, it’s based on the number of RBs in the BWP and the RIV formula (e.g., ceiling(log2(N_RB * (N_RB + 1) / 2)) bits). However, this is typically a secondary check after determining the type.

Allocation Type 0

In this type, we bundle multiple number of consecutive RBs into RBG(Resource Block Group) and allocate PDSCH / PUSCH only in the multiples of RBG. The number of RBs within a RBS varies depending on Bandwidth Part Size and Configuration as shown in the following table. The configuration type is determined by rbg-size field in PDSCH-Config in a RRC message. We specify the bitmap in DCI indicating the RBG number that carries PDSCH or PUSCH data. Since this is the bitmap, it is not required for the RBGs to be consecutive.

<  38.214 - Table 5.1.2.2.1-1: Nominal RBG size P, Table 6.1.2.2.1-1: Nominal RBG size P >

Bandwidth Part Size

Configuration 1

Configuration 2

1 36

2

4

37 72

4

8

73 144

8

16

145 275

16

16

 

Bandwidth Size
(1-36)

Bandwidth Size
(37-72)

Bandwidth Size
(73-144)

Bandwidth Size
(145-275)

PRB #

Config 1

Config 2

Config 1

Config 2

Config 1

Config 2

Config 1

Config 2

0

RBG 00

RBG 00

RBG 00

RBG 00

RBG 00

RBG 00

RBG 00

RBG 00

1

2

RBG 01

3

4

RBG 02

RBG 01

RBG 01

5

6

RBG 03

7

8

RBG 04

RBG 02

RBG 02

RBG 01

RBG 01

9

10

RBG 05

11

12

RBG 06

RBG 03

RBG 03

13

14

RBG 07

15

16

RBG 08

RBG 04

RBG 04

RBG 02

RBG 02

RBG 01

RBG 01

RBG 01

17

18

RBG 09

19

20

RBG 10

RBG 05

RBG 05

21

22

RBG 11

23

24

RBG 12

RBG 06

RBG 06

RBG 03

RBG 03

25

26

RBG 13

27

28

RBG 14

RBG 07

RBG 07

29

30

RBG 15

31

32

RBG 16

RBG 08

RBG 08

RBG 04

RBG 04

RBG 02

RBG 02

RBG 02

33

34

RBG 17

35

36

RBG 09

37

38

39

40

RBG 10

RBG 05

RBG 05

41

42

43

44

RBG 11

45

46

47

48

RBG 12

RBG 06

RBG 06

RBG 03

RBG 03

RBG 03

49

50

51

52

RBG 13

53

54

55

56

RBG 14

RBG 07

RBG 07

57

58

59

60

RBG 15

61

62

63

64

RBG 16

RBG 08

RBG 08

RBG 04

RBG 04

RBG 04

65

66

67

68

RBG 17

69

70

71

72

RBG 09

73

74

75

76

77

78

79

80

RBG 10

RBG 05

RBG 05

RBG 05

81

82

83

84

85

86

87

88

RBG 11

89

90

91

92

93

94

95

96

RBG 12

RBG 06

RBG 06

RBG 06

97

98

99

100

101

102

103

104

RBG 13

105

106

107

108

109

110

111

112

RBG 14

RBG 07

RBG 07

RBG 07

113

114

115

116

117

118

119

120

RBG 15

121

122

123

124

125

126

127

128

RBG 16

RBG 08

RBG 08

RBG 08

129

130

131

132

133

134

135

136

RBG 17

137

138

139

140

141

142

143

144

RBG 09

RBG 09

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

RBG 10

RBG 10

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

RBG 11

RBG 11

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

RBG 12

RBG 12

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

RBG 13

RBG 13

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

RBG 14

RBG 14

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

RBG 15

RBG 15

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

RBG 16

RBG 16

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

RBG 17

RBG 17

273

274

Allocation Type 1

In this type, the resource is allocated to one or more consecutive RBs. The resource allocation area is defined by two parameters RB_Start and Number of Consecutive RBs within a specific BWP(BandWidth Part). When the resource allocation is specified in DCI, RB_Start and Number of Consecutive RBs within the BWP is combined into a specific single value called RIV(Resource Indicator Value).

When the resource allocation for type 1 is configured in DCI, it is specified as a specific number called RIV. RIV is a number to specify PDSCH or PUSCH resource allocation. In more intuitive form,  we normally use two values (i.e, Number of RBs and Start RB) for the resource allocation. But with RIV, we can represent Number of RBs and Start RB in a single value. It would have some advantage in terms of number of bits to carry the information.. but it causes some confusion for us to convert RIV into Number of RBs and Start RB

The RIV is calculated in following formula.

Downlink

The formula has two branches, and which one applies depends on whether the allocation is longer than half the bandwidth part. The branch exists so that every RIV maps to exactly one start and length pair, with no value wasted.

The downlink RIV formula. If L_RBs minus 1 is not greater than the floor of N_BWP size divided by 2, RIV equals N_BWP size times (L_RBs minus 1) plus RB_start. Otherwise RIV equals N_BWP size times (N_BWP size minus L_RBs plus 1) plus (N_BWP size minus 1 minus RB_start)

Uplink

The uplink formula is the same as the downlink one, term for term. It is written out separately because 38.214 gives the uplink its own clause, not because the arithmetic differs.

The uplink RIV formula, identical in form to the downlink one. If L_RBs minus 1 is not greater than the floor of N_BWP size divided by 2, RIV equals N_BWP size times (L_RBs minus 1) plus RB_start. Otherwise RIV equals N_BWP size times (N_BWP size minus L_RBs plus 1) plus (N_BWP size minus 1 minus RB_start)

NOTE : For easy conversion between RIV and RB, check out this site.

One assumption inside the formula is worth stating, because a later release changed it. RB_start and L_RBs count resource blocks, so the RIV addresses the bandwidth part one block at a time. For the compact and the multi-cell DCI formats that is no longer always true.

When the grant arrives in DCI format 1_2 or 1_3, the type 1 field is a RIV over resource block groups rather than resource blocks. The group size comes from resourceAllocationType1GranularityDCI-1-2 or resourceAllocationType1GranularityDCI-1-3. Where neither is configured the size is 1, which restores the per block reading.

  • The formula has two branches : the first covers allocations up to half the bandwidth part, and the second covers the rest. Every RIV therefore decodes to exactly one pair.
  • The uplink formula is the same as the downlink one : 38.214 gives each direction its own clause, and the arithmetic in the two is identical term for term.
  • The size is the bandwidth part, not the carrier : the RIV is computed against the active bandwidth part. The same RIV names different blocks after a switch.
  • DCI 1_2 and 1_3 can count in groups : for those formats the type 1 field is a RIV over resource block groups. The group size comes from the matching granularity parameter.
  • A missing granularity means a group size of 1 : that recovers the per resource block reading. It still holds unless the parameter is configured.

Dynamic Switch

Whether to use Type 0 or Type 1 is determined by DCI at the time of each transmission. The bit that carries the decision is not a field of its own. It is the most significant bit of the frequency domain resource assignment, taken from the allocation field itself, so asking for a switch costs one bit of allocation range.

In 38.214-5.1.2.2, it is stated as follows.

    If the scheduling DCI is configured toindicate the downlink resource allocation type as part of the Frequency domain resource assignment field by setting a higher layer parameter resourceAllocation in pdsch-Config to 'dynamicswitch', the UE shall use downlink resource allocation type 0 or type 1 as defined by this DCI field. Otherwise the UE shall use the downlink frequency resource allocation type as defined by the higher layer parameter resourceAllocation.

In 38.212-7.3.1.2.2, it is stated as follows.

    If both resource allocation type 0 and 1 are configured,the MSB bit is used to indicate resource allocation type 0 or resource allocation type 1, where the bit value of 0 indicates resource allocation type 0 and the bit value of 1 indicates resource allocation type 1.

Example 01 > One configuration, three grants

The switch is easiest to follow when nothing else changes. One bandwidth part, one RRC configuration, and three consecutive grants that differ only in the frequency domain resource assignment field. The values below are invented, and every consequence under the drawing follows from the RBG table and the RIV formula above.

The sequence below runs from the reconfiguration that turns the switch on down to the third grant. Read the arrows as messages in time order, and read each shaded box as what the UE works out from the message immediately above it.

gNBUERRCReconfigurationPDSCH-Config { resourceAllocation dynamicSwitch, rbg-Size config1 }Bandwidth part is 51 RB starting at RB 0, so P is 4 and the bitmap covers 13 RBGs.Slot n : DCI format 1_1Frequency domain resource assignment = 0 | 1000011000001MSB is 0, so resource allocation type 0. Bits are set for RBG 0, 5, 6 and 12.That is RB 0 to 3, RB 20 to 27 and RB 48 to 50, which is three separate pieces.Slot n+1 : DCI format 1_1Frequency domain resource assignment = 1 | RIV 979MSB is 1, so resource allocation type 1. The rest of the field is one RIV.979 = 51 x 19 + 10, so the length is 20 and the start is 10. That is RB 10 to 29.Slot n+2 : DCI format 1_0 (fallback)Frequency domain resource assignment = RIV onlyNo flag bit is present at all. A fallback format always uses type 1.

One bit at the front of the allocation field decides how the rest of it is read, and a fallback format never carries that bit.

  • The configuration never changes across the three grants : the same PDSCH-Config applies in all three slots, so the difference in outcome comes entirely from the DCI.
  • 13 RBGs comes from the bandwidth part and the table : a 51 RB part with rbg-Size config1 falls in the 37 to 72 row, so P is 4. Splitting 51 blocks into groups of four needs 13 groups.
  • The last group is short : RBG 12 covers RB 48 to 50 rather than four blocks, because 51 is not a multiple of 4.
  • Type 0 reached 15 blocks in three pieces : RBG 0, 5, 6 and 12 give 4 + 4 + 4 + 3 blocks. No single RIV could have described that shape.
  • Type 1 reached 20 blocks in one piece : RIV 979 divides by 51 to give 19 and leaves 10, so the length is 20 and the start is 10.
  • The fallback grant had no choice to make : DCI format 1_0 carries no flag, so slot n+2 is type 1 whatever resourceAllocation says.

Example 02 > The same UE reading two formats differently

A switch configured for one DCI format says nothing about another. Release 16 gave the compact formats their own copy of the parameter, and the two copies are set independently. This example holds everything else fixed and changes only the format the grant arrives in.

The sequence below shows two grants in consecutive slots, to the same UE, on the same bandwidth part. The allocation field is read one way in the first and another way in the second, and no reconfiguration happens in between.

gNBUERRCReconfigurationresourceAllocation dynamicSwitchresourceAllocationDCI-1-2-r16 resourceAllocationType1Two parameters, and each one belongs to a different DCI format.Slot n : DCI format 1_1Frequency domain resource assignment = 0 | 1000011000001Format 1_1 reads resourceAllocation, which is dynamicSwitch, so the MSB is a flag.It is 0, so type 0, and RBG 0, 5, 6 and 12 are the allocation.Slot n+1 : DCI format 1_2Frequency domain resource assignment = RIV 979Format 1_2 reads resourceAllocationDCI-1-2-r16, which is resourceAllocationType1.Nothing is a flag here, so the whole field is the RIV. Start 10, length 20.

Which parameter applies is decided by the DCI format, so one UE can be switching on one format and fixed on another at the same time.

  • Two parameters were configured, not one : resourceAllocation governs formats 1_1 and 0_1, and resourceAllocationDCI-1-2-r16 governs format 1_2.
  • Only one of the two grants spends a flag bit : format 1_1 is on dynamicSwitch so its field starts with a flag, while format 1_2 is fixed to type 1 and has none.
  • The same field value would mean different things : a leading 1 is a type indicator in the first grant and part of the RIV in the second.
  • Release 18 repeated the pattern once more : resourceAllocationDCI-1-3-r18 and resourceAllocationDCI-0-3-r18 do the same job for the multi-cell formats.
  • Granularity can change what the RIV counts : with resourceAllocationType1GranularityDCI-1-2 configured, the format 1_2 RIV counts resource block groups rather than blocks.

The choice is configured per DCI format rather than once for the cell. Release 16 gave the compact formats their own copy of the field, and Release 18 did the same for the multi-cell formats. A UE can therefore be configured for a bitmap on one format and a switch on another.

  • The flag is the MSB of the allocation field : it is not a separate DCI field, so a dynamicSwitch configuration spends one bit that would otherwise carry allocation.
  • Zero means Type 0 and one means Type 1 : that first bit decides whether the remaining bits are a bitmap or a RIV.
  • Each DCI format carries its own setting : resourceAllocation covers formats 1_1 and 0_1. The Release 16 pair covers 1_2 and 0_2, and the Release 18 pair covers 1_3 and 0_3.
  • A fallback format never switches : DCI formats 1_0, 4_0 and 4_1 use resource allocation type 1 whatever resourceAllocation says.

Reference

[1] 38.214 - 5G; NR; Physical layer procedures for data. Clause 5.1.2.2 for the downlink and clause 6.1.2.2 for the uplink.

[2] 38.212 - 5G; NR; Multiplexing and channel coding. Clause 7.3.1.2.2 for the frequency domain resource assignment field.

[3] 38.331 - 5G; NR; Radio Resource Control (RRC); Protocol specification. PDSCH-Config, PUSCH-Config and ConfiguredGrantConfig.