Amarisoft

NR SA SUL(Supplementary Uplink)

 

The purpose of this tutorial is to show you how to configure and test SUL. The fundamental idea behind SUL is well illustrated in 3GPP 38.300 as shown below.

NR SA SUL Overview 01

As shown above, usually cell coverage for DL+UL gets smaller because UL coverage within the same band is not as large as DL coverage due to weak UE TX power comparing to gNB TX power. To compensate this, UL frequeny of much lower band. (NOTE : UL coverage of lower frequency tend to larger because lower frequency tend to have larger coverage by physics).

Implementation of SUL in Amarisoft callbox can be illustrated as below. (NOTE : Pay attention to terminologies in this diagram because the same terminology will be used in the comments in the configuration section.)

 

NR SA SUL Overview 02

 

Amarisoft Callbox support SUL for both TDD and FDD.

 

NOTE : SUL is supported since 2021-09-17 release, but it is recommended to use latest release available in your extranet because there has been multiple updates for the feature since the initial release.

 

 

Table of Contents

 

 

Test Setup

 

Test setup for this tutorial is as shown below.

TestSetup Callbox UEsim 1sdr 01

 

 

 

Key Configuration Parameters

 

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

 

 

 

Test 1 : SUL-FDD

This test is to test SUL operation in NR SA FDD

 

Configuration

I used the gnb-sa-sul-fdd.cfg on gNB which is copied and modified from gnb-sa.cfg

NR SA SUL Test 1 Configuration 01

For the corenetwork, I used the default configuration (mme-ims.cfg) as it is.

NR SA SUL Test 1 Configuration 02

In gnb-sa-sul-fdd.cfg , the configuration is done as follows.

In this test, I set NR_TDD to 0 which indicates that FDD will be used.

NR SA SUL Test 1 Configuration 03

Here goes the important part of SUL configuration. In cell configuration for normal cell, you need to configure the details of sul in addition to the basic band and DL frequency (dl_nr_arfcn). In sul configuration, you would set various parameters like cell_id, prach_index, prach_rsrp_threshold, pusch_switch_snr_threshold and channels. With channels parameter, you can specify the channel selection (i.e, selection between normal cell and sul cell) for pucch, pusch, srs. Some of these parameters are required to configure SIB1 and some others are for Amarisoft gNB's internal settings.

NR SA SUL Test 1 Configuration 04

Now we need to configure the SUL cell. In SUL cell configuration as well, we need to configure a few specific parameters for SUL operation like serve_as_sul and sul_prach. Within sul_prach parameter, you can specify the details of rach configuration which will be populated into SIB1 of normal cell for SUL configuration.

NR SA SUL Test 1 Configuration 05

For the detaul cell configuration (nr_cell_default), you don't need to set any specific parameters but I forced gNB to schedule UL in every possible slots (force_full_bsr) to flow the UL data all the time because this is easier to verify SUL operation from log analysis.

NR SA SUL Test 1 Configuration 06

 

For the DUT, I used Amarisoft UEsim as configured here.

I used the ue-nr-sa-sul-fdd.cfg on UEsim which is copied and modified from ue-nr-sa.cfg

NR SA SUL Test 1 Configuration 07

In ue-nr-sa-sul-fdd.cfg  , the configuration is done as follows.

First, I set NR_TDD to 0 which indicates that FDD will be used for this test.

NR SA SUL Test 1 Configuration 08

For the cell configuration, I also need to configure two cells : one for normal cell and the other for SUL cell.

First set the band and frequency setting for the normal cell. Just let these parameters match to the band and frequency settings of gNB.

NR SA SUL Test 1 Configuration 09

Then set the band and frequency setting for the SUL cell. Just let these parameters match to the band and frequency settings of SUL cell of gNB.

NR SA SUL Test 1 Configuration 10

Now you have two important parameters to set on UEsim side. cell_index here is used to set the cell which UE is supposed to camp on to. Here cell_index is set to 0 which corresponds to the normal cell. Then set sul_support to true to indicates that the UE is SUL capable.

NR SA SUL Test 1 Configuration 11

 

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command.

NR SA SUL Test 1 Run 01

Power on UE on UE sim. (NOTE : Both Normal Cell and SUL cell should be visible / detectable by UEsim at this point. Make it sure that antenna or cabling is properly connected for both cells. Otherwise UEsim would not trigger RACH)

NR SA SUL Test 1 Run 02

Confirm that the UE completes the attach and check the throughput. Make it sure that UE camp onto normal cell first with PRACH to cell 01(Normal Cell) 

NR SA SUL Test 1 Run 03

 

Log Analysis

Sample Log

First make it sure that all the SUL configuration is properly configured in SIB1 of normal cell.

There is a long list of IE named supplementaryUplink in the SIB1 of normal cell. rsrp-ThresholdSSB-SUL is determined by prach_rsrp_threshold in the configuration.

NR SA SUL Test 1 Log 02

The first thing you need to check in the log is PRACH.  If UE uplink is connected to SUL cell, you see the sul_index field in PRACH log. You can also confirm on the PRACH sent to SUL cell by checking [Cell] column in the log.

NR SA SUL Test 1 Log 00

You can easily check whether each of UL channel (PUCCH, PUSCH, SRS) is going thorugh normal cell or SUL cell by checking RB map. (NOTE: In case of PUSCH, you can also confirm whether it goes through normal cell or SUL cell by checking sul field of PUSCH log for example, Message: harq=10 prb=2 symb=0:14 CW0: tb_len=20 mod=2 rv_idx=0 cr=0.56 retx=0 crc=OK snr=4.4 epre=-25.0 ta=5.2 sul=1 )

NR SA SUL Test 1 Log 03

NR SA SUL Test 1 Log 04

You can check whether gNB schedules Uplink to normal cell or SUL cell by checking sul_ind field of DCI message.

For example, sul_ind=0 indicates that this scheduling is for normal cell (non SUL cell)

NR SA SUL Test 1 Log 05

For another example, sul_ind=1 indicates that this scheduling is for SUL cell.

NR SA SUL Test 1 Log 06

 

 

 

RRC / NAS Signaling

 

SIB1 (SA) for Normal Cell (non-SUL cell)

: This is the SIB1 sent by Normal Cell gNB  to configure SUL. (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 {

              q-RxLevMin -70,

              q-QualMin -20

            },

            cellAccessRelatedInfo {

              plmn-IdentityInfoList {

                {

                  plmn-IdentityList {

                    {

                      mcc {

                        0,

                        0,

                        1

                      },

                      mnc {

                        0,

                        1

                      }

                    }

                  },

                  trackingAreaCode '000064'H,

                  cellIdentity '001234500'H,

                  cellReservedForOperatorUse notReserved

                }

              }

            },

            connEstFailureControl {

              connEstFailCount n1,

              connEstFailOffsetValidity s30,

              connEstFailOffset 1

            },

            servingCellConfigCommon {

              downlinkConfigCommon {

                frequencyInfoDL {

                  frequencyBandList {

                    {

                      freqBandIndicatorNR 28

                    }

                  },

                  offsetToPointA 38,

                  scs-SpecificCarrierList {

                    {

                      offsetToCarrier 0,

                      subcarrierSpacing kHz30,

                      carrierBandwidth 51

                    }

                  }

                },

                initialDownlinkBWP {

                  genericParameters {

                    locationAndBandwidth 13750,

                    subcarrierSpacing kHz30

                  },

                  pdcch-ConfigCommon setup: {

                    commonSearchSpaceList {

                      {

                        searchSpaceId 1,

                        controlResourceSetId 0,

                        monitoringSlotPeriodicityAndOffset sl1: NULL,

                        monitoringSymbolsWithinSlot '10000000000000'B,

                        nrofCandidates {

                          aggregationLevel1 n0,

                          aggregationLevel2 n0,

                          aggregationLevel4 n4,

                          aggregationLevel8 n0,

                          aggregationLevel16 n0

                        },

                        searchSpaceType common: {

                          dci-Format0-0-AndFormat1-0 {

                          }

                        }

                      }

                    },

                    searchSpaceSIB1 0,

                    searchSpaceOtherSystemInformation 1,

                    pagingSearchSpace 1,

                    ra-SearchSpace 1

                  },

                  pdsch-ConfigCommon setup: {

                    pdsch-TimeDomainAllocationList {

                      {

                        mappingType typeA,

                        startSymbolAndLength 40

                      }

                    }

                  }

                },

                bcch-Config {

                  modificationPeriodCoeff n4

                },

                pcch-Config {

                  defaultPagingCycle rf128,

                  nAndPagingFrameOffset oneT: NULL,

                  ns one

                }

              },

              uplinkConfigCommon {

                frequencyInfoUL {

                  frequencyBandList {

                    {

                      freqBandIndicatorNR 28

                    }

                  },

                  absoluteFrequencyPointA 143264,

                  scs-SpecificCarrierList {

                    {

                      offsetToCarrier 0,

                      subcarrierSpacing kHz30,

                      carrierBandwidth 51

                    }

                  }

                },

                initialUplinkBWP {

                  genericParameters {

                    locationAndBandwidth 13750,

                    subcarrierSpacing kHz30

                  },

                  rach-ConfigCommon setup: {

                    rach-ConfigGeneric {

                      prach-ConfigurationIndex 16,

                      msg1-FDM one,

                      msg1-FrequencyStart 3,

                      zeroCorrelationZoneConfig 15,

                      preambleReceivedTargetPower -110,

                      preambleTransMax n7,

                      powerRampingStep dB4,

                      ra-ResponseWindow sl10

                    },

                    ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

                    ra-ContentionResolutionTimer sf64,

                    rsrp-ThresholdSSB-SUL 106,

                    prach-RootSequenceIndex l839: 1,

                    restrictedSetConfig unrestrictedSet

                  },

                  pusch-ConfigCommon setup: {

                    pusch-TimeDomainAllocationList {

                      {

                        k2 4,

                        mappingType typeA,

                        startSymbolAndLength 27

                      }

                    },

                    p0-NominalWithGrant -84

                  },

                  pucch-ConfigCommon setup: {

                    pucch-ResourceCommon 11,

                    pucch-GroupHopping neither,

                    p0-nominal -90

                  }

                },

                timeAlignmentTimerCommon infinity

              },

              supplementaryUplink {

                frequencyInfoUL {

                  frequencyBandList {

                    {

                      freqBandIndicatorNR 80

                    }

                  },

                  absoluteFrequencyPointA 347664,

                  scs-SpecificCarrierList {

                    {

                      offsetToCarrier 0,

                      subcarrierSpacing kHz30,

                      carrierBandwidth 51

                    }

                  }

                },

                initialUplinkBWP {

                  genericParameters {

                    locationAndBandwidth 13750,

                    subcarrierSpacing kHz30

                  },

                  rach-ConfigCommon setup: {

                    rach-ConfigGeneric {

                      prach-ConfigurationIndex 16,

                      msg1-FDM one,

                      msg1-FrequencyStart 3,

                      zeroCorrelationZoneConfig 15,

                      preambleReceivedTargetPower -110,

                      preambleTransMax n7,

                      powerRampingStep dB4,

                      ra-ResponseWindow sl10

                    },

                    ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

                    ra-ContentionResolutionTimer sf64,

                    rsrp-ThresholdSSB-SUL 106,

                    prach-RootSequenceIndex l839: 128,

                    restrictedSetConfig unrestrictedSet

                  },

                  pusch-ConfigCommon setup: {

                    pusch-TimeDomainAllocationList {

                      {

                        k2 4,

                        mappingType typeA,

                        startSymbolAndLength 27

                      }

                    },

                    p0-NominalWithGrant -84

                  },

                  pucch-ConfigCommon setup: {

                    pucch-ResourceCommon 11,

                    pucch-GroupHopping neither,

                    p0-nominal -90

                  }

                },

                timeAlignmentTimerCommon ms500

              },

              ssb-PositionsInBurst {

                inOneGroup '80'H

              },

              ssb-PeriodicityServingCell ms20,

              ss-PBCH-BlockPower -60

            },

            ue-TimersAndConstants {

              t300 ms1000,

              t301 ms1000,

              t310 ms1000,

              n310 n1,

              t311 ms30000,

              n311 n1,

              t319 ms1000

            }

          }

        }

 

SIB1 (SA) for SUL cell

: This is the SIB1 sent by Normal Cell gNB

        {

          message c1: systemInformationBlockType1: {

            cellSelectionInfo {

              q-RxLevMin -70,

              q-QualMin -20

            },

            cellAccessRelatedInfo {

              plmn-IdentityInfoList {

                {

                  plmn-IdentityList {

                    {

                      mcc {

                        0,

                        0,

                        1

                      },

                      mnc {

                        0,

                        1

                      }

                    }

                  },

                  trackingAreaCode '000064'H,

                  cellIdentity '001234501'H,

                  cellReservedForOperatorUse notReserved

                }

              }

            },

            connEstFailureControl {

              connEstFailCount n1,

              connEstFailOffsetValidity s30,

              connEstFailOffset 1

            },

            servingCellConfigCommon {

              downlinkConfigCommon {

                frequencyInfoDL {

                  frequencyBandList {

                    {

                      freqBandIndicatorNR 3

                    }

                  },

                  offsetToPointA 38,

                  scs-SpecificCarrierList {

                    {

                      offsetToCarrier 0,

                      subcarrierSpacing kHz30,

                      carrierBandwidth 51

                    }

                  }

                },

                initialDownlinkBWP {

                  genericParameters {

                    locationAndBandwidth 13750,

                    subcarrierSpacing kHz30

                  },

                  pdcch-ConfigCommon setup: {

                    commonSearchSpaceList {

                      {

                        searchSpaceId 1,

                        controlResourceSetId 0,

                        monitoringSlotPeriodicityAndOffset sl1: NULL,

                        monitoringSymbolsWithinSlot '10000000000000'B,

                        nrofCandidates {

                          aggregationLevel1 n0,

                          aggregationLevel2 n0,

                          aggregationLevel4 n4,

                          aggregationLevel8 n0,

                          aggregationLevel16 n0

                        },

                        searchSpaceType common: {

                          dci-Format0-0-AndFormat1-0 {

                          }

                        }

                      }

                    },

                    searchSpaceSIB1 0,

                    searchSpaceOtherSystemInformation 1,

                    pagingSearchSpace 1,

                    ra-SearchSpace 1

                  },

                  pdsch-ConfigCommon setup: {

                    pdsch-TimeDomainAllocationList {

                      {

                        mappingType typeA,

                        startSymbolAndLength 40

                      }

                    }

                  }

                },

                bcch-Config {

                  modificationPeriodCoeff n4

                },

                pcch-Config {

                  defaultPagingCycle rf128,

                  nAndPagingFrameOffset oneT: NULL,

                  ns one

                }

              },

              uplinkConfigCommon {

                frequencyInfoUL {

                  frequencyBandList {

                    {

                      freqBandIndicatorNR 3

                    }

                  },

                  absoluteFrequencyPointA 347664,

                  scs-SpecificCarrierList {

                    {

                      offsetToCarrier 0,

                      subcarrierSpacing kHz30,

                      carrierBandwidth 51

                    }

                  }

                },

                initialUplinkBWP {

                  genericParameters {

                    locationAndBandwidth 13750,

                    subcarrierSpacing kHz30

                  },

                  rach-ConfigCommon setup: {

                    rach-ConfigGeneric {

                      prach-ConfigurationIndex 16,

                      msg1-FDM one,

                      msg1-FrequencyStart 3,

                      zeroCorrelationZoneConfig 15,

                      preambleReceivedTargetPower -110,

                      preambleTransMax n7,

                      powerRampingStep dB4,

                      ra-ResponseWindow sl10

                    },

                    ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

                    ra-ContentionResolutionTimer sf64,

                    prach-RootSequenceIndex l839: 1,

                    restrictedSetConfig unrestrictedSet

                  },

                  pusch-ConfigCommon setup: {

                    pusch-TimeDomainAllocationList {

                      {

                        k2 4,

                        mappingType typeA,

                        startSymbolAndLength 27

                      }

                    },

                    p0-NominalWithGrant -84

                  },

                  pucch-ConfigCommon setup: {

                    pucch-ResourceCommon 11,

                    pucch-GroupHopping neither,

                    p0-nominal -90

                  }

                },

                timeAlignmentTimerCommon infinity

              },

              ssb-PositionsInBurst {

                inOneGroup '80'H

              },

              ssb-PeriodicityServingCell ms20,

              ss-PBCH-BlockPower -60

            },

            ue-TimersAndConstants {

              t300 ms1000,

              t301 ms1000,

              t310 ms1000,

              n310 n1,

              t311 ms30000,

              n311 n1,

              t319 ms1000

            }

          }

        }