Amarisoft

NR SA TimeDomainAllocationList

This tutorial is about configuration for PDSCH/PUSCH-TimeDomainAlloationList in RRC message.  With default configuration, this IE is automatically configured by the callbox based on the TDD pattern specified in the configuration file. Even though it is possible to configure k1, k2 manually, it is not strongly recommended since it is challenging to configure it without colliding with internal auto-configuration algorithm.  However, I will show you how to configure it manually anyway in Test2 for your reference

This tutorial is based on 2021-11-19 release. The autoconfiguration algorithm may evolve (change) in a future release. The tutorial will be updated if the algorithm changes

In this tutorial, it is assumed that you are faimiliar with basic operations of Amari Callbox operation. So in this tutorial, I will explain only about the configuration and analyzing the test result in the WebGUI log.

TimeDomainAllocationList are the list of parameters that configures k0, k1, k2. The simplified definition of k0, k1, k2 are as follows :

Table of Contents

Introduction

The configuration of PDSCH/PUSCH-TimeDomainAllocationList in the context of 5G NR (New Radio) RRC (Radio Resource Control) signaling is a fundamental aspect of physical layer scheduling and resource allocation within cellular networks. This configuration governs the timing relationships and resource mapping for both downlink (PDSCH: Physical Downlink Shared Channel) and uplink (PUSCH: Physical Uplink Shared Channel) transmissions. At its core, the TimeDomainAllocationList defines critical parameters such as k0, k1, and k2, which determine the scheduling offsets and timing gaps between control information (DCI) and data transmissions, as well as the timing of associated uplink feedback (PUCCH: Physical Uplink Control Channel). In practical 5G test environments, such as with the Amari Callbox system, these allocations are typically auto-configured by the system based on the underlying TDD (Time Division Duplex) pattern, ensuring optimal operation and avoiding parameter conflicts. However, manual configuration may be required in certain testing or development scenarios, which introduces complexity due to the intricate interplay with internal scheduling algorithms. Mastery of these configurations is essential for advanced network validation, troubleshooting, and performance optimization, reflecting the close relationship between RRC configuration, physical layer resource allocation, and end-to-end radio system behavior. This tutorial delves into the manual configuration process, discusses the implications of parameter selection, and provides guidance for interpreting results within the WebGUI of the Amari Callbox, with a specific focus on the release as of November 2021 and awareness of possible algorithmic evolution in future releases.

Summary of the Tutorial

This tutorial provides a comprehensive overview of low layer NR TDD slot allocation testing using a gNB simulator (Callbox) and UE setup. The procedures focus on verifying TDD slot allocations, k1/k2 values, mapping types, and SLIV configurations through both default and manual settings. Below is a structured summary of the test methodologies and procedures described in the tutorial.

General Methodology:

Test Setup

Test setup for this tutorial is as shown below.  This is just for low layer testing, you may not need any complicated IP layer setup.

Antennas are fitted to the first SDR card only, RF 1 which is sdr 0, and the other cards in the chassis are left bare. One card is all this needs, since everything below runs on a single 20 MHz cell, and the UE reaches it over the air rather than through cabling.

The UE is an ordinary handset. Nothing in these tests depends on which one it is, because what is being checked is what the gNB puts into SIB1 and into the dedicated configuration, not anything the UE reports back.

Callbox rear with antennas on the first SDR card only, handset over the air

Key Configuration Parameters

Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.

Configuration

I have used gnb-sa-tdla.cfg which is copied and modified from gnb-sa.cfg. The details of specific parameters to be tested will be shown under each test.

Callbox config directory with enb.cfg symbolic link pointing at gnb-sa-tdla.cfg

I am using the default mme (mme-ims.cfg), ims (ims.default.cfg) config as shown below.

Core network config directory with mme.cfg and ims.cfg symbolic links

Perform the Test

Testing process is simple. You only have to do NR SA attach (See NR SA Attach tutorial if you are not familiar with the process). The important part is to check the log and verify if you get the SRS as configured.

Test 1 : Using default configuration

Set the configuration in gnb-sa-tdla.cfg  as follows. This test uses the contents of gnb-sa.cfg as it is (without changing any contents in it).

In the configuration file, you can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 2 which is one of default sample configuration provided by Amarisoft sample configuration.

k1 in pdsch configuration is not set in this test meaning that k1 is automatically determined by gNB software.

The branch that NR_TDD_CONFIG 2 selects is pattern1 with period 5 in ms, dl_slots 7, dl_symbols 6, ul_slots 2 and ul_symbols 4. The rest of the defines are the stock ones, FR2 at 0 so this is FR1, N_ANTENNA_DL 2 and N_ANTENNA_UL 1, NR_BANDWIDTH 20 and NR_LONG_PUCCH_FORMAT 2.

In the pdsch block both timing lines are still comments, the k0 delay from DCI to PDSCH and the k1 delay from PDSCH to the ACK or NACK, so neither is being overridden. mapping_type is "typeA", which is where Tests 3 and 4 will start from, and dmrs_add_pos 1, dmrs_type 1, dmrs_max_len 1, mcs_table "qam256", rar_mcs 2 and si_mcs 6 stay as they are through all five tests. The mcs line at the bottom is commented out, so the MCS is left to the downlink channel quality estimate.

gNB defines, pattern1 block and pdsch with k1 left as a comment

Make it sure that you don't see any errors in enb screen. If your configuration has any problem, you may get pretty useful error message which may be helpful for troubleshooting.

A clean start is the version banner, then a single RF0 line, then the (enb) prompt with nothing in between. In this run RF0 reads sample_rate=23.040 MHz, dl_freq=3489.420 MHz, ul_freq=3489.420 MHz, band n78, dl_ant=2 and ul_ant=1, so the 20 MHz cell with 2x2 downlink came up on the values the file asked for, and dl_freq matching ul_freq is what TDD looks like on this line.

The kind of mistake this tutorial can produce, a k1 array that breaks the internal rules or a SLIV that cannot exist, is reported right here instead of the prompt, and the message usually names the parameter. That is why it is worth a look after each of these edits rather than only once something later goes wrong. The same check comes back after every test below, so I will not walk through this output again there.

enb console after launch showing the RF0 line and a clean prompt

You can confirm how TimeDomainAllocationList is configured in RRC from the log as shown below. Number of elements and SLIV is automatically determined and set by the gNB(Callbox). It is not advisable to change it manually. Usually two elements are configured, one with full slots and the other one with partial slot. MappingType can be changed by configuration file if want.

The list has exactly two entries in this run, both with mappingType typeA, which is what pdsch mapping_type is set to in the file, and startSymbolAndLength 40 on the first with 57 on the second. Neither number appears anywhere in the configuration file. They came out of the gNB.

These two are the baseline for the rest of the tutorial, since Tests 3 and 4 edit the pdsch block and this is the list you come back to in order to see what the edit did. Any SIB1 row on BCCH-NR in the RRC layer carries it, so there is no need to hunt for a particular one, and pdsch-TimeDomainAllocationList sits inside pdsch-ConfigCommon a little below the searchSpace entries.

cSIB1 pdsch-TimeDomainAllocationList with two typeA entries at SLIV 40 and 57

Since automatic configuration of k1 and k2 is affected by tdd-UL-DL-ConfigurationCommon, it would be good to check on this configuration as well. In this test, dl-UL-TransmissionPeriodicity is set to 5ms which correponds to 10 slots in case of subcarrier spacing 30Khz. The number of downlink slot(nrofDownlinkSlots) are set to 7, Number of Downlink Symbols(nrofDownlinkSymbols) are set to 6 and the number of uplink slot(nrofUplinkSlots) are set to 2, Number of Uplink Symbols(nrofUplinkSymbols) are set to 4

referenceSubcarrierSpacing in the same IE is kHz30, and that is the value the periodicity is counted in slots against. There is no pattern2 alongside pattern1, because pattern2 is not set in the configuration file, so the whole period is described by pattern1 on its own.

Each field maps onto one line of the configuration file, period onto dl-UL-TransmissionPeriodicity, dl_slots onto nrofDownlinkSlots, dl_symbols onto nrofDownlinkSymbols, ul_slots onto nrofUplinkSlots and ul_symbols onto nrofUplinkSymbols. That makes this the quickest way to confirm that the NR_TDD_CONFIG branch you think you edited is the one that actually got compiled in, which matters more than usual here because the k1 and k2 arrays of the next test are written against it.

SIB1 tdd-UL-DL-ConfigurationCommon pattern1 next to the same block in the config file

Now let's confirm on k1 configuration in RRC. you can check it with dl-DataToUL-ACK IE. The number of elements and each k1 values is automatically determined by Callbox(gNB) based on TDD UL/DL pattern. It is possible to manually configure it but manual configuration is not recommended because it is difficult to configure manually without violating the internal rules.

The list in this run is 8, 7, 6, 5, 4, 12, 11, seven values in that order, and none of them appears anywhere in the configuration file. This is the list Test 2 replaces with a hand written array, so it is worth noting the values down before moving on.

dl-DataToUL-ACK sits inside pucch-Config, just under the format1 and format2 setup and the schedulingRequestToAddModList entry with schedulingRequestId 0 and periodicityAndOffset sl40. Open an RRC setup or an RRC reconfiguration row to reach it rather than a SIB1 row, because this is dedicated configuration sent to the UE and not broadcast.

dl-DataToUL-ACK inside pucch-Config listing seven automatically chosen k1 values

Test 2 : Manual configuration of k1,k2,msg3_k2

In this test, I will show you how configure k1,k2,msg3_k2 value manually. This is just for demonstation/tutorial purpose, it is not recommended to change these variables manually since it is tricky to set the proper values without violating the callbox's internal rule

Set the configuration in gnb-sa-tdla.cfg  as follows.

In the configuration file, you can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 2 which is one of default sample configuration provided by Amarisoft sample configuration.

k1 in pdsch configuration is set manually, but this is just for information purpose. I do not enourage users to do this unless it is really required and user completes understand what to do. If you configure the k1 manually, you should configure k2, msg3_k2 accordingly as well.

The array I put in is k1: [8,7,7,6,5,4,12,11], eight entries. The two comment lines above it still describe k0 and k1 as automatic settings, and they are still comments, so this one line is the whole of the override. Everything else in the pdsch block is as Test 1 left it, mapping_type still "typeA" and the mcs line still commented out.

Both the number of entries and the values are yours to get right, and the callbox algorithm has rules about which combinations it will accept. Note that 7 appears twice in this array, at k1[1] and k1[2], which matters later when you count the entries that come back in RRC. Writing this array on its own is also not enough, k2 and msg3_k2 in the pusch block have to be set to go with it.

pdsch block with an eight entry k1 array written out by hand

Since you configured k1 manually, you should set k2 and msg3_k2 according to the k1 settings.

k2 is [7,4] with two entries and msg3_k2 is 8, both written straight under the comment that still calls them automatic settings. msg3_k2 is a single value rather than an array because there is only one Msg3 to schedule, and it is also the one of the three that does not reach RRC as you typed it, which the last step of this test comes back to.

The rest of the pusch block is untouched here. mapping_type is "typeA" with n_symb 14, that is the whole slot, and Test 5 is where those two move. tf_precoding is false, mcs_table and mcs_table_tp are both "qam256", ldpc_max_its is 5, msg3_mcs is 4 and beta_offset_ack_index is 9. The max_rank line sits inside an #if USE_SRS block and has nothing to do with the timing being set here.

pusch block with k2 array and msg3_k2 set by hand to match k1

In this test, one of the default configuration (NR_TDD_CONFIG 2) is used. With this tdd pattern, the period is 5 ms which is 10 slots for the case of Subcarrier Spacing 30Khz, number of downlink slot is 7 and the number of downlink symbol is 6 and number of uplink slot is 2 and the number of uplink symbol is 4.

This is the same branch Test 1 ran on, unchanged. It is worth having in front of you again because the k1 and k2 arrays only make sense against this particular pattern, and the moment you point NR_TDD_CONFIG at another value the arrays you wrote for this one stop being valid.

The NR_TDD_CONFIG 2 pattern1 branch shown on its own

The configuration shown above can be illustrated as follows. It would be a good practice to convert the configuration into illustration. (NOTE : When you try to configure k1, k2 array. It is strongly recommended to draw a diagram like this. First you need to draw the slot allocation part (rectangle from TDD pattern) and k1,k2 (arrow part) as per your requirement. )

The row along the top is two periods of the pattern drawn side by side, seven downlink slots, then the special slot, then two uplink slots, and then the same again. The red arrows are the eight k1 entries, one leaving each slot that can carry a PDSCH and landing on the uplink slot that will carry its feedback. The two rightmost of them reach across into the uplink slots of the second period, which is what the 12 and 11 at the end of the array are for. The yellow arrows are the two k2 entries, running from the downlink slot that carries the DCI to the uplink slot that carries the PUSCH.

Drawing it out this way is what makes an off by one visible before you start the callbox. Count the arrow heads landing on each uplink slot, then count the entries in the array, and if the two do not agree the array is wrong. Doing it afterwards means finding out from an error message instead.

Two TDD periods drawn with k1 and k2 arrows onto the uplink slots

Make it sure that you don't see any errors in enb screen. If your configuration has any problem, you may get pretty useful error message which may be helpful for troubleshooting.

enb console after launch showing the RF0 line and a clean prompt

You can confirm the configuration in SIB1 as below. You can confirm how TimeDomainAllocationList is configured in RRC from the log as shown below. Number of elements and SLIV is automatically determined and set by the gNB(Callbox). It is not advisable to change it manually. Usually two elements are configured, one with full slots and the other one with partial slot. MappingType can be changed by configuration file if want.

The two entries read the same as they did in Test 1, mappingType typeA with startSymbolAndLength 40 and 57. Writing k1 by hand does not touch this list, because k1 decides when the feedback goes out while this list decides which symbols inside a slot a PDSCH occupies. The place the manual k1 shows up is dl-DataToUL-ACK, two steps further down in this test.

pdsch-TimeDomainAllocationList unchanged after k1 was set by hand

In this test, one of the default configuration (NR_TDD_CONFIG 2) is used. With this tdd pattern, the period is 5 ms which is 10 slots for the case of Subcarrier Spacing 30Khz, number of downlink slot is 7 and the number of downlink symbol is 6 and number of uplink slot is 2 and the number of uplink symbol is 4.

This IE reads exactly as it did in Test 1, and that is the point of showing it. I did not touch NR_TDD_CONFIG for this test, so the pattern the k1 and k2 arrays were drawn against is still the one on the air. If you ever find this IE differing from the drawing you made, stop there, because every entry in both arrays is measured against it.

tdd-UL-DL-ConfigurationCommon confirming the pattern the arrays were drawn against

Now let's confirm on k1 configuration in RRC. you can check it with dl-DataToUL-ACK IE. The number of elements and each k1 values is automatically determined by Callbox(gNB) based on TDD UL/DL pattern. It is possible to manually configure it but manual configuration is not recommended because it is difficult to configure manually without violating the internal rules.

The list reads 8, 7, 6, 5, 4, 12, 11, which is seven values, while the array in the configuration file was [8,7,7,6,5,4,12,11], which is eight. The difference is the repeated 7, which appears once in the IE. Count the entries before you conclude that something was dropped or rejected.

Every other value is in the same order as I typed it, so this is the direct check that the array reached the air. dl-DataToUL-ACK is in the same place as before, inside pucch-Config on an RRC setup row, so the two tests can be compared side by side.

dl-DataToUL-ACK next to the hand written k1 array with the repeat collapsed

Then check on pusch-TimeDomainAllocationList. In this specific test case, three elements are configured. The first two are for the regular PUSCH and the last one is for msg3 PUSCH. You may notice that k2 value set in this RRC message is a little bit different from msg3_k2 you set in the configuration file. The reason is that the msg3 k2 set in the RRC message is not the same as msg3_k2 you set in the configuration file. The k2 value in the RRC is determined by msg3_k2 value and Delta value predefined in 3GPP in the formula rrc_k2 = msg3_k2 - Delta.

The three entries read k2 7, k2 4 and k2 5, all with mappingType typeA and startSymbolAndLength 27. The first two are the [7,4] I wrote into the file, in that order. The third is the Msg3 one, and the applicable row of 38.214 Table 6.1.2.1.1-5 is mu 1 with Delta 3, so msg3_k2 of 8 minus 3 gives the 5 that appears here.

Change msg3_k2 and you have to look Delta up again for whatever subcarrier spacing the cell is running, since the same msg3_k2 comes out as a different number at a different mu. All three entries carry startSymbolAndLength 27 because pusch n_symb is still 14 in this test, and Test 5 is where that value moves.

pusch-TimeDomainAllocationList with two regular k2 entries and the Msg3 entry

Test 3 : Changing PDSCH mapping type(TypeB, n_symb)

In this test, I will show you how to configure PDSCH mapping typeB. With the mapping type B, you can configure mini-slot (with the number of symbos 2,4,7).

Set the configuration in gnb-sa-tdla.cfg  as follows.

In the configuration file, you can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 2 which is one of default sample configuration provided by Amarisoft sample configuration.

In this case, the SLIV value (derived from mapping type and the number of symbols) is configured manually in pdsch configuration parameter. You can change SLIV value by setting mapping_type,start_symb and n_symb in pdsch.

In this file mapping_type is "typeB" and n_symb is 4. n_symb stops being optional the moment you go to typeB, the gNB will not fill it in for you, so the two lines have to be written together. start_symb is not set here, which is the one thing Test 4 adds on top.

k1 is back to being a comment in this test, so the hand written array from Test 2 is gone and the feedback timing is the gNB's again. That keeps the test down to a single variable, which is worth doing when what you are after is what one parameter does to the broadcast list.

pdsch set to mapping type B with n_symb 4 and no start_symb

Make it sure that you don't see any errors in enb screen. If your configuration has any problem, you may get pretty useful error message which may be helpful for troubleshooting.

enb console after launch showing the RF0 line and a clean prompt

You can confirm the configuration in SIB1 as below. You can confirm how TimeDomainAllocationList is configured in RRC from the log as shown below. In this case, the number of SLIV(startSymbolAndLength), mappingType is configured as you set in the configuration file.

The list has come down to a single element, mappingType typeB with startSymbolAndLength 43, where Test 1 carried two entries at 40 and 57. mappingType followed the file directly. The 43 did not, it is what n_symb 4 turned into once encoded, so SLIV is a number you steer through n_symb and start_symb rather than one you write.

With start_symb left out of the file, the start symbol half of that 43 came from the gNB. Test 4 sets start_symb as well, and this same element is where the difference shows up.

Broadcast list reduced to one typeB element at SLIV 43 after n_symb 4

Test 4 : Changing PDSCH mapping type(TypeB) and SLIV

In this test, I will show you how to configure PDSCH mapping typeB. With the mapping type B and SLIV by setting the start symbol and length of the symbols.

Set the configuration in gnb-sa-tdla.cfg  as follows.

In the configuration file, you can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 2 which is one of default sample configuration provided by Amarisoft sample configuration.

In this case, the SLIV value (derived from mapping type and the number of symbols) is configured manually in pdsch configuration parameter. You can change SLIV value by setting mapping_type,start_symb and n_symb in pdsch.

The only difference from Test 3 in this file is the line start_symb: 4 added under n_symb: 4. mapping_type is still "typeB", k1 is still a comment and the rest of the pdsch block is untouched, so whatever the broadcast list does differently comes from that one line.

start_symb is optional even with typeB. Leaving it out is what Test 3 did, and the gNB picked a start symbol itself. Setting it to 4 says the PDSCH begins at symbol 4 of the slot and runs for the four symbols n_symb asks for.

pdsch type B with both n_symb 4 and start_symb 4 written out

Make it sure that you don't see any errors in enb screen. If your configuration has any problem, you may get pretty useful error message which may be helpful for troubleshooting.

enb console after launch showing the RF0 line and a clean prompt

You can confirm the configuration in SIB1 as below. You can confirm how TimeDomainAllocationList is configured in RRC from the log as shown below. In this case, the number of SLIV(startSymbolAndLength), mappingType is configured as you set in the configuration file.

The single element now reads startSymbolAndLength 46 against the 43 of Test 3, with mappingType typeB unchanged and still only one entry in the list. n_symb stayed at 4 across both tests, so the difference of 3 is start_symb 4 arriving in the encoded value.

This is the check that start_symb actually took. If you set it and this number does not move, either the value was rejected or the branch you edited is not the one being compiled, and the enb screen from the previous step is where the reason will be.

Single typeB element at SLIV 46 after start_symb was added to the file

Test 5 : Changing PUSCH mapping type(TypeB) and SLIV

In this test, I will show you how to configure PUSCH mapping typeB. With the mapping type B and SLIV by setting the start symbol and length of the symbols.

Set the configuration in gnb-sa-tdla.cfg as follows.

In the configuration file, you can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 2 which is one of default sample configuration provided by Amarisoft sample configuration.

In this case, the SLIV value (derived from mapping type and the number of symbols) is configured manually in pusch configuration parameter. You can change SLIV value by setting mapping_type,start_symb and n_symb in pusch.

This test moves to the pusch block and leaves pdsch alone, which is the difference from Tests 3 and 4. mapping_type is "typeB" with n_symb 14 and start_symb 0, so the allocation begins at the first symbol of the slot and takes all fourteen.

k2 and msg3_k2 are back to being comments in this file, so the hand written arrays from Test 2 are out of play and the uplink timing is the gNB's again. That leaves mapping_type, n_symb and start_symb as the only three lines that differ from the stock pusch block, everything from dmrs_add_pos down to beta_offset_ack_index being as it was.

pusch set to mapping type B with n_symb 14 starting at symbol 0

Make it sure that you don't see any errors in enb screen. If your configuration has any problem, you may get pretty useful error message which may be helpful for troubleshooting.

enb console after launch showing the RF0 line and a clean prompt

You can confirm the configuration in SIB1 as below. You can confirm how TimeDomainAllocationList is configured in RRC from the log as shown below. In this case, the number of TDAL elements are configured automatically by gNB, mappingType and SLIV(startSymbolAndLength) value is configured as you set in the configuration file.

All three entries now carry mappingType typeB where Test 2 had typeA, and all three keep startSymbolAndLength 27, which is what n_symb 14 with start_symb 0 encodes to. The mapping_type line therefore applies to the whole list rather than to one entry of it.

The k2 values read 7, 4 and 5, the same three numbers Test 2 produced, and this time nobody wrote them. They came out of the gNB, which is worth knowing before you decide that an array has to be set by hand to get a particular timing.

All three pusch entries switched to typeB while the k2 values stay automatic

RRC / NAS Signaling

SIB1 (SA)

: This is the SIB1 message sent by gNB  to configure NR SA. (NOTE : You would see some IEs that has a specific assigned vale here, but consider it as just an example value. Those values should vary depending on test requirement)

 

{

  message c1: systemInformationBlockType1: {

    cellSelectionInfo {

      ...

    },

    cellAccessRelatedInfo {

     ...

    connEstFailureControl {

      ...

    },

    servingCellConfigCommon {

      downlinkConfigCommon {

        frequencyInfoDL {

          ...

        },

        initialDownlinkBWP {

          genericParameters {

            locationAndBandwidth 13750,

            subcarrierSpacing kHz30

          },

          pdcch-ConfigCommon setup: {

            ...

          },

          pdsch-ConfigCommon setup: {

            pdsch-TimeDomainAllocationList {

              {

                mappingType typeA,

                startSymbolAndLength 40

              },

              {

                mappingType typeA,

                startSymbolAndLength 57

              }

            }

          }

        },

        bcch-Config {

          ...

        },

        pcch-Config {

          ...

        }

      },

      uplinkConfigCommon {

        frequencyInfoUL {

          ...

        },

        initialUplinkBWP {

          genericParameters {

            ...

          },

          rach-ConfigCommon setup: {

            ...

          },

          pusch-ConfigCommon setup: {

            pusch-TimeDomainAllocationList {

              {

                k2 7,

                mappingType typeA,

                startSymbolAndLength 27

              },

              {

                k2 4,

                mappingType typeA,

                startSymbolAndLength 27

              },

              {

                k2 5,

                mappingType typeA,

                startSymbolAndLength 27

              }

            },

            p0-NominalWithGrant -76

          },

          pucch-ConfigCommon setup: {

            ...

          }

        },

        timeAlignmentTimerCommon infinity

      },

      ssb-PositionsInBurst {

        inOneGroup '80'H

      },

      ssb-PeriodicityServingCell ms20,

      tdd-UL-DL-ConfigurationCommon {

        referenceSubcarrierSpacing kHz30,

        pattern1 {

          dl-UL-TransmissionPeriodicity ms5,

          nrofDownlinkSlots 7,

          nrofDownlinkSymbols 6,

          nrofUplinkSlots 2,

          nrofUplinkSymbols 4

        }

      },

      ss-PBCH-BlockPower -28

    },

    ue-TimersAndConstants {

      ...

    }

  }

}