SLIV is the Start and Length Indicator for the time domain allocation for PDSCH. One of the big difference between LTE and NR scheduling is that NR schedules not only for slot but also the symbols within the scheduled slot, whereas in LTE the schedule is done only for subframe level (not for the symbol levels within the scheduled subframe).
- How a single number SLIV value get interprented to start symbol and number of symbol ?
- Why the formula has two branches
- Where the start symbol is measured from
- How the SLIV value get configured into RRC message ?
- SLIV Mapping Table
- Reference
- Sample Log
- Get the Test Procedure and Log / Amarisoft TechAcademy
How a single number SLIV value get interprented to start symbol and number of symbol ?
How the single number(SLIV) can represent the two different quantity (i.e, start symbol and number of consecutive symbols) ? It is possible because SLIV is created by a specific rule as defined in 38.214 5.1.2.1 Resource allocation in time domain as follows.
if (L-1) <= 7 then
SLIV = 14 x (L-1) + S
else
SLIV = 14 x (14-L+1) + (14-1-S)
, where 0 < L <= 14 - S
S = Start Symbol Index
L = Number of Consecutive Symbols
According to the above equation, you can create a huge tables with the possible S and L values. But not all of the combinations are taken as valid. Only the set of combinations meeting the condition in the following table is allowed. Following table is from Release 15 specfication.
< 38.214-Table 5.1.2.1-1: Valid S and L combinations >

< 38.214-Table 6.1.2.1-1: Valid S and L combinations >

< 38.214 V16.4.0 -Table 5.1.2.1-1: Valid S and L combinations >

< 38.214 V16.4.0 -Table 6.1.2.1-1: Valid S and L combinations >

Note 1 is new in the PDSCH table : it says that S = 3 is applicable only if dmrs-TypeA-Position = 3. The Release 15 table lists S = {0,1,2,3} with no condition attached to it.PDSCH Type B changed from three lengths to a range : L was {2,4,7} and it is now {2,…,13}. That one change is the largest difference between the two pairs of tables.The PUSCH Type A row gained a qualifier : it now reads Type A (repetition Type A only), so the row no longer applies when repetition Type B is in use.PUSCH Type B gained a second S+L limit : {1,…,14} for repetition Type A, and {1,…,27} for repetition Type B. An allocation reaching past one slot is what the wider limit allows.Extended cyclic prefix follows the same pattern : the limits drop from 14 to 12, and the PUSCH repetition Type B limit becomes {1,…,23}.
The formula is the definition : SLIV is not an index into a table, and it is computed from S and L by the two lines above.The valid combination table is a separate filter : the formula produces a number for any S and L. The table then decides which of those a UE is allowed to receive.Mapping type and cyclic prefix both narrow the set : one SLIV can be valid for Type B and invalid for Type A. It can also be valid under normal CP and invalid under extended.
Why the formula has two branches
Two lines of arithmetic look arbitrary until the numbers are counted. The second branch exists because of a counting problem. It takes that particular form because it has to avoid producing a number the first branch has already used.
Start with the size of the problem. A 14 symbol slot has 105 valid pairs of S and L, counting every pair where S + L is not greater than 14. Seven bits hold 128 values, so one number can carry all 105 and still leave some unused.
The first branch alone cannot do it. SLIV = 14 x (L-1) + S puts each length L into a block of 14 consecutive numbers, and there are 14 possible lengths. Fourteen blocks of 14 is 196 values, and seven bits cannot count that high.
The second branch fixes the count by sharing blocks. For L greater than 8 it computes 14 x (14-L+1) + (14-1-S), which produces a number inside a block already belonging to a short length. Long allocations and short ones therefore share the same 14 numbers.
Sharing works because short and long allocations cannot both be numerous. A long allocation leaves few choices of start symbol, since S + L cannot exceed 14. A length of 13 allows two start symbols and a length of 14 allows one. The block that gives 13 start symbols to L = 2 has room for the single one that L = 14 needs.
The pairing follows a simple rule. Block k holds the short length k + 1 and the long length 15 - k, so the two lengths sharing a block always add up to 16. The short length takes offsets 0 to 13 - k inside the block, and the long length takes 14 - k to 13.
Those two ranges meet exactly. No offset inside a block is used twice, and none is left empty, which is what makes the mapping reversible. A single SLIV therefore names one pair and never two.
Two consequences are worth remembering when reading a log. Valid SLIV values run from 0 to 104 with no gaps, so every integer in that range decodes to exactly one pair. Values from 105 to 127 never occur, so a SLIV above 104 indicates a decoder fault rather than an unusual allocation.
Seven bits is the constraint : 105 valid pairs fit inside 128 values, while one block per length would need 196.Each block is shared by two lengths : one short and one long, and the two always add up to 16.The two branches partition each block exactly : nothing is used twice and nothing is wasted, which is why the mapping can be reversed.Valid SLIV runs from 0 to 104 : with no gaps inside that range and nothing above it.
Where the start symbol is measured from
Every worked example on this page assumes that S counts from the first symbol of the slot. That assumption holds almost always, and one configuration breaks it. Check this first when a Type B allocation starts at the wrong symbol.
38.214 states the default plainly. The starting symbol S is relative to the start of the slot, using a reference point S0 = 0. Every row of the mapping table further down this page is written on that basis.
One case moves the reference point. The UE has to be configured with
When all four hold, S is relative to the starting symbol S0 of the PDCCH monitoring occasion where the DCI was detected. Remove any one condition and S counts from the slot boundary again. The combination serves low latency, because a Type B allocation in the slot that granted it should begin where the grant ended.
The rule contains one tie-break. A PDCCH reception can include two candidates, from two different search space sets. The candidate that starts later in time is then the one that fixes S0.
S counts from the slot boundary by default : S0 = 0, and every SLIV in the table on this page assumes it.Four conditions move the reference point : referenceOfSLIVDCI-1-2 configured, DCI format 1_2, K0 = 0, and mapping Type B.The later PDCCH candidate wins : when two search space sets each yield a candidate, S0 comes from the one that starts later.
How the SLIV value get configured into RRC message ?
A SLIV never travels on its own. It sits in a row of a time domain resource allocation table, beside the slot offset and the mapping type, and the DCI selects the row rather than the SLIV. So the question a log raises is usually which row was chosen, and the RRC configuration below is where the rows come from.
PDSCH/PUSCH mapping type in the above table is specified in RRC message as shown below.
Following is based on
PDSCH-TimeDomainResourceAllocationList ::= SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation
PDSCH-TimeDomainResourceAllocation ::= SEQUENCE {
k0 INTEGER(0..32) OPTIONAL, -- Need S
mappingType ENUMERATED {typeA, typeB},
startSymbolAndLength INTEGER (0..127)
}
PUSCH-TimeDomainResourceAllocationList ::= SEQUENCE (SIZE(1..maxNrofUL-Allocations)) OF PUSCH-TimeDomainResourceAllocation
PUSCH-TimeDomainResourceAllocation ::= SEQUENCE {
k2 INTEGER(0..32) OPTIONAL, -- Need S
mappingType ENUMERATED {typeA, typeB},
startSymbolAndLength INTEGER (0..127)
}
The other two are the slot offsets. Both
Everything added after Release 15 arrives in separate IEs rather than inside these two. The Release 16 forms carry repetition and multiple allocation, and they are where SLIV stops being the only way to state a time domain allocation.
Following is based on
PDSCH-TimeDomainResourceAllocationList-r16 ::= SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation-r16
PDSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
k0-r16 INTEGER(0..32) OPTIONAL, -- Need S
mappingType-r16 ENUMERATED {typeA, typeB},
startSymbolAndLength-r16 INTEGER (0..127),
repetitionNumber-r16 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL, -- Cond Formats1-0_1-1_4-0_4-1_4-2
...,
[[
k0-v1710 INTEGER(33..128) OPTIONAL -- Need S
]],
[[
repetitionNumber-v1730 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL -- Cond Format1-2
]]
}
Dummy-TDRA-List ::= SEQUENCE (SIZE(1.. maxNrofDL-Allocations)) OF MultiPDSCH-TDRA-r17
MultiPDSCH-TDRA-List-r17 ::= SEQUENCE (SIZE(1.. maxNrofDL-AllocationsExt-r17)) OF MultiPDSCH-TDRA-r17
MultiPDSCH-TDRA-r17 ::= SEQUENCE {
pdsch-TDRA-List-r17 SEQUENCE (SIZE(1..maxNrofMultiplePDSCHs-r17)) OF PDSCH-TimeDomainResourceAllocation-r16,
...
}
PUSCH-TimeDomainResourceAllocationList-r16 ::= SEQUENCE (SIZE(1..maxNrofUL-Allocations-r16)) OF PUSCH-TimeDomainResourceAllocation-r16
PUSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
k2-r16 INTEGER(0..32) OPTIONAL, -- Need S
puschAllocationList-r16 SEQUENCE (SIZE(1..maxNrofMultiplePUSCHs-r16)) OF PUSCH-Allocation-r16,
...
}
PUSCH-Allocation-r16 ::= SEQUENCE {
mappingType-r16 ENUMERATED {typeA, typeB} OPTIONAL, -- Cond NotFormat01-02-Or-TypeA
startSymbolAndLength-r16 INTEGER (0..127) OPTIONAL, -- Cond NotFormat01-02-Or-TypeA
startSymbol-r16 INTEGER (0..13) OPTIONAL, -- Cond RepTypeB
length-r16 INTEGER (1..14) OPTIONAL, -- Cond RepTypeB
numberOfRepetitions-r16 ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16} OPTIONAL, -- Cond Format01-02
...,
[[
numberOfRepetitionsExt-r17 ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16, n20, n24, n28, n32, spare4, spare3, spare2,
spare1} OPTIONAL, -- Cond Format01-02-For-TypeA
numberOfSlotsTBoMS-r17 ENUMERATED {n1, n2, n4, n8, spare4, spare3, spare2, spare1} OPTIONAL, -- Need R
extendedK2-r17 INTEGER (0..128) OPTIONAL -- Cond MultiPUSCH
]],
[[
ul-MutingIndicator-r19 ENUMERATED {enabled} OPTIONAL, -- Need S
occ-Length-r19 ENUMERATED {n2, n4} OPTIONAL -- Need R
]]
}
When the allocation is not a SLIV
A field named startSymbolAndLength implies that a start and a length always arrive folded together. From Release 16 that stopped being true, and the exception matters for anyone reading an uplink configuration.
PUSCH-Allocation-r16 offers two ways to state the same thing. It carries
Which one appears depends on the repetition type. The condition Cond RepTypeB attaches to startSymbol and length, so PUSCH repetition Type B states S and L directly. Clause 6.1.2.1 of 38.214 says the same thing in words rather than in ASN.1.
The reason is the S + L limit of the Release 16 PUSCH table above. Repetition Type B allows S + L up to 27 under normal cyclic prefix, and no SLIV can express that. The formula folds S and L into a 14 symbol slot, so an allocation reaching past the slot has nowhere to fold.
Two other extensions are worth noting while the listing is open. The field
SLIV is one encoding rather than the only one : from Release 16 a PUSCH allocation can carry the start and the length as two separate integers.Repetition Type B is the case that needs it : its S + L limit reaches 27, and a seven bit SLIV cannot reach past one slot.The list forms grew as well : MultiPDSCH-TDRA-r17 puts several PDSCH allocations behind a single table row.
SLIV Mapping Table
The table below runs the mapping in the reverse direction. Turning a pair into a number is one line of arithmetic, while turning a number back into a pair needs either the inverse arithmetic or a lookup. All 105 valid pairs are present, so any SLIV that a log shows can be found directly.
Applying the equation shown above and 38.214-Table 5.1.2.1-1, I have created a big table as below.
Following is the SLIV values that I calculated according to the formnula described above. You can use SLIV value as a key value to find out a unique pair of (S, L) in a look-up table. (
|
S |
L |
L-1 |
Last |
SLIV |
Valid Mapping Type |
Valid Mapping Type |
|
0 |
1 |
0 |
0 |
0 |
Type B |
|
|
2 |
1 |
1 |
14 |
Type B |
||
|
3 |
2 |
2 |
28 |
Type B |
||
|
4 |
3 |
3 |
42 |
Type A,Type B |
Type A,Type B |
|
|
5 |
4 |
4 |
56 |
Type A,Type B |
||
|
6 |
5 |
5 |
70 |
Type A,Type B |
||
|
7 |
6 |
6 |
84 |
Type A,Type B |
Type A,Type B |
|
|
8 |
7 |
7 |
98 |
Type A,Type B |
||
|
9 |
8 |
8 |
97 |
Type A,Type B |
||
|
10 |
9 |
9 |
83 |
Type A,Type B |
||
|
11 |
10 |
10 |
69 |
Type A,Type B |
||
|
12 |
11 |
11 |
55 |
Type A,Type B |
||
|
13 |
12 |
12 |
41 |
Type A,Type B |
||
|
14 |
13 |
13 |
27 |
Type A,Type B |
||
|
1 |
1 |
0 |
1 |
1 |
Type B |
|
|
2 |
1 |
2 |
15 |
Type B |
||
|
3 |
2 |
3 |
29 |
Type B |
||
|
4 |
3 |
4 |
43 |
Type A,Type B |
Type B |
|
|
5 |
4 |
5 |
57 |
Type B |
||
|
6 |
5 |
6 |
71 |
Type B |
||
|
7 |
6 |
7 |
85 |
Type A,Type B |
Type B |
|
|
8 |
7 |
8 |
99 |
Type B |
||
|
9 |
8 |
9 |
96 |
Type B |
||
|
10 |
9 |
10 |
82 |
Type B |
||
|
11 |
10 |
11 |
68 |
Type B |
||
|
12 |
11 |
12 |
54 |
Type B |
||
|
13 |
12 |
13 |
40 |
Type B |
||
|
2 |
1 |
0 |
2 |
2 |
Type B |
|
|
2 |
1 |
3 |
16 |
Type B |
||
|
3 |
2 |
4 |
30 |
Type B |
||
|
4 |
3 |
5 |
44 |
Type A,Type B |
Type B |
|
|
5 |
4 |
6 |
58 |
Type B |
||
|
6 |
5 |
7 |
72 |
Type B |
||
|
7 |
6 |
8 |
86 |
Type A,Type B |
Type B |
|
|
8 |
7 |
9 |
100 |
Type B |
||
|
9 |
8 |
10 |
95 |
Type B |
||
|
10 |
9 |
11 |
81 |
Type B |
||
|
11 |
10 |
12 |
67 |
Type B |
||
|
12 |
11 |
13 |
53 |
Type B |
||
|
3 |
1 |
0 |
3 |
3 |
Type B |
|
|
2 |
1 |
4 |
17 |
Type B |
||
|
3 |
2 |
5 |
31 |
Type B |
||
|
4 |
3 |
6 |
45 |
Type A,Type B |
Type B |
|
|
5 |
4 |
7 |
59 |
Type B |
||
|
6 |
5 |
8 |
73 |
Type B |
||
|
7 |
6 |
9 |
87 |
Type A,Type B |
Type B |
|
|
8 |
7 |
10 |
101 |
Type B |
||
|
9 |
8 |
11 |
94 |
Type B |
||
|
10 |
9 |
12 |
80 |
Type B |
||
|
11 |
10 |
13 |
66 |
Type B |
||
|
4 |
1 |
0 |
4 |
4 |
Type B |
|
|
2 |
1 |
5 |
18 |
Type B |
||
|
3 |
2 |
6 |
32 |
Type B |
||
|
4 |
3 |
7 |
46 |
Type B |
||
|
5 |
4 |
8 |
60 |
Type B |
||
|
6 |
5 |
9 |
74 |
Type B |
||
|
7 |
6 |
10 |
88 |
Type B |
||
|
8 |
7 |
11 |
102 |
Type B |
||
|
9 |
8 |
12 |
93 |
Type B |
||
|
10 |
9 |
13 |
79 |
Type B |
||
|
5 |
1 |
0 |
5 |
5 |
Type B |
|
|
2 |
1 |
6 |
19 |
Type B |
||
|
3 |
2 |
7 |
33 |
Type B |
||
|
4 |
3 |
8 |
47 |
Type B |
||
|
5 |
4 |
9 |
61 |
Type B |
||
|
6 |
5 |
10 |
75 |
Type B |
||
|
7 |
6 |
11 |
89 |
Type B |
||
|
8 |
7 |
12 |
103 |
Type B |
||
|
9 |
8 |
13 |
92 |
Type B |
||
|
6 |
1 |
0 |
6 |
6 |
Type B |
|
|
2 |
1 |
7 |
20 |
Type B |
||
|
3 |
2 |
8 |
34 |
Type B |
||
|
4 |
3 |
9 |
48 |
Type B |
||
|
5 |
4 |
10 |
62 |
Type B |
||
|
6 |
5 |
11 |
76 |
Type B |
||
|
7 |
6 |
12 |
90 |
Type B |
||
|
8 |
7 |
13 |
104 |
Type B |
||
|
7 |
1 |
0 |
7 |
7 |
Type B |
|
|
2 |
1 |
8 |
21 |
Type B |
||
|
3 |
2 |
9 |
35 |
Type B |
||
|
4 |
3 |
10 |
49 |
Type B |
||
|
5 |
4 |
11 |
63 |
Type B |
||
|
6 |
5 |
12 |
77 |
Type B |
||
|
7 |
6 |
13 |
91 |
Type B |
||
|
8 |
1 |
0 |
8 |
8 |
Type B |
|
|
2 |
1 |
9 |
22 |
Type B |
||
|
3 |
2 |
10 |
36 |
Type B |
||
|
4 |
3 |
11 |
50 |
Type B |
||
|
5 |
4 |
12 |
64 |
Type B |
||
|
6 |
5 |
13 |
78 |
Type B |
||
|
9 |
1 |
0 |
9 |
9 |
Type B |
|
|
2 |
1 |
10 |
23 |
Type B |
||
|
3 |
2 |
11 |
37 |
Type B |
||
|
4 |
3 |
12 |
51 |
Type B |
||
|
5 |
4 |
13 |
65 |
Type B |
||
|
10 |
1 |
0 |
10 |
10 |
Type B |
|
|
2 |
1 |
11 |
24 |
Type B |
||
|
3 |
2 |
12 |
38 |
Type B |
||
|
4 |
3 |
13 |
52 |
Type B |
||
|
11 |
1 |
0 |
11 |
11 |
Type B |
|
|
2 |
1 |
12 |
25 |
Type B |
||
|
3 |
2 |
13 |
39 |
Type B |
||
|
12 |
1 |
0 |
12 |
12 |
Type B |
|
|
2 |
1 |
13 |
26 |
Type B |
||
|
13 |
1 |
0 |
13 |
13 |
Type B |
One column needs a caution. The
The PUSCH column needs no such caution. Neither the S limits nor the L limits for PUSCH changed between the two releases, so the column still agrees with the current table for repetition Type A.
Every SLIV from 0 to 104 appears exactly once : 105 rows and no repeated value, which is what makes the SLIV usable as a lookup key.The PDSCH column is a Release 15 column : 62 further rows are valid for PDSCH mapping Type B under Release 16 and later.The PUSCH column is still current : nothing changed for PUSCH repetition Type A between Release 15 and Release 16.Last Symbol is S + L - 1 : the column is there because an allocation ending on symbol 13 is the last one that fits inside a normal slot.
Reference
[1] 38.214 v19.4.0 : NR - Physical layer procedures for data. Clause 5.1.2.1 was read for the PDSCH formula, the reference point for S and Table 5.1.2.1-1. Clause 6.1.2.1 was read for the PUSCH equivalents and Table 6.1.2.1-1.
[2] 38.331 v19.3.0 : NR - Radio Resource Control (RRC) protocol specification. The PDSCH and PUSCH TimeDomainResourceAllocation IEs and their Release 16 and later forms were read.