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.

38.300 SUL example with DL+UL, DL only and wider SUL coverage rings

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.)

Amarisoft SUL diagram with sul and sul_prach both folded into normal cell SIB1

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

Introduction

Supplementary Uplink (SUL) is a critical feature introduced in 3GPP Rel-15 NR (New Radio) specifications to address uplink coverage limitations encountered in 5G networks, particularly in the context of higher frequency bands. In conventional NR deployments, the uplink (UL) signal range is often more constrained than the downlink (DL) due to the inherent disparity between the transmission power capabilities of User Equipment (UE) and gNodeB (gNB). SUL mitigates this challenge by enabling the use of an additional, typically lower-frequency, uplink carrier alongside the primary uplink carrier. This architectural approach leverages the superior propagation characteristics and larger coverage area of lower-frequency bands, thereby enhancing the overall uplink coverage and reliability. The SUL mechanism is particularly significant in scenarios where service continuity and robust uplink performance are required at the cell edge or in challenging radio environments. In practical deployments, such as those using the Amarisoft Callbox platform, SUL can be configured for both Time Division Duplex (TDD) and Frequency Division Duplex (FDD) modes, facilitating flexible testing and validation of SUL features in a controlled environment. Understanding the architectural concepts, configuration methodology, and operational principles of SUL is essential for network engineers, system integrators, and researchers aiming to optimize 5G performance and ensure seamless user experience across diverse deployment scenarios.

Summary of the Tutorial

This tutorial outlines the test procedures for validating Supplementary Uplink (SUL) operation in NR Standalone (SA) FDD mode using Amarisoft Callbox and UEsim. The methodology includes detailed setup, configuration, test execution, and log analysis steps.

The tutorial provides a step-by-step procedure for both configuration and validation of SUL-FDD operation, emphasizing the importance of matching configuration between gNB and UE, and verifying correct operation through log analysis. This ensures that supplementary uplink is correctly established and utilized in the test environment.

Test Setup

Test setup for this tutorial is as shown below.

The UEsim and the Callbox each hold a single SDR card and the two are cabled together through those cards, so this test runs conducted and not over the air. One SDR on each side is enough because the normal cell and the SUL cell sit on rf_port 0 and rf_port 1 of the same card.

I drive the UEsim over WiFi here, using the antenna on top of the machine. You do not have to do it that way. The ethernet port just underneath, at 192.168.1.80, is the one you would normally use to reach the UEsim.

UEsim and Callbox rear view with single SDR each and the UEsim control ports marked

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

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

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

Core network config directory with mme.cfg symbolic link pointing at mme-ims.cfg

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.

SUL itself does not depend on that choice. TDD SUL is supported as well, and I went with FDD only because that is what this tutorial walks through. NR_TDD is what selects between the #if NR_TDD == 1 branch and the #else branch in the cell list further down, so putting 0 here is what makes the band 28 and band 3 settings take effect instead of the band 78 pair.

The other defines stay at their usual values in this run. N_ANTENNA_DL and N_ANTENNA_UL are both 1 for SISO, NR_BANDWIDTH is 20 MHz and NR_LONG_PUCCH_FORMAT is 2. NR_TDD_CONFIG is 2 but it only applies inside the TDD branch, so it has no effect in this test.

gNB defines block with NR_TDD set to 0 selecting FDD for this test

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.

The normal cell in this run is rf_port 0 with cell_id 0x00 and n_id_cell 500, and the FDD branch puts it on band 28 with dl_nr_arfcn 156100 and ssb_subcarrier_spacing 15 kHz. The band 78 pair just above belongs to the TDD branch and does nothing here.

Inside sul, cell_id is 0x01, and that is the identifier of the cell whose uplink is going to be used as the SUL. prach_index is 0, which is the index into the sul_prach array of that cell, so it picks the first and in this file only entry there. prach_rsrp_threshold is -50, which is what becomes rsrp-ThresholdSSB-SUL, and it is mandatory once prach_index is 0 or higher. Under channels I set pucch to "sul_only" so PUCCH is carried in the supplementaryUplink configuration, while pusch and srs are set to "both". pusch_switch_snr_threshold is 15.0 and that is the SNR at which PUSCH moves between the two uplinks.

If you want the PUCCH on the normal uplink instead, set pucch to "normal_only", which is also what you get if you leave the entry out. I did not set channels_prach_on_sul in this cell, so a UE that comes in through the SUL PRACH resource ends up with the same channel selection as the one above.

Normal cell block on band 28 with the sul object and its channel selection

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.

The SUL cell is on rf_port 1 with cell_id 0x01 and n_id_cell 501, and the FDD branch places it on band 3 with dl_nr_arfcn 368500 and ssb_subcarrier_spacing 15 kHz. That cell_id 0x01 is the value the sul object of the normal cell points at, so the two have to agree or the normal cell has no SUL to offer.

serve_as_sul: true is what turns this into the SUL cell rather than a second ordinary cell. The sul_prach array below it holds a single entry and the only parameter I set inside it is root_sequence_index 128. msg1_frequency_start is left commented out here, so it keeps its default and comes out that way in the SIB1 of the normal cell. If you need the SUL preamble to start at a different PRB, uncomment that line and the value shows up as msg1-FrequencyStart in the supplementaryUplink IE.

SUL cell block on band 3 with serve_as_sul true and the sul_prach array

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.

I put force_full_bsr: true in nr_cell_default rather than in either cell so that it lands on the normal cell and the SUL cell at once. With it set, the gNB treats the UE as always having a full buffer, so there is uplink traffic in the RB map all the time and it is easy to see in the WebGUI which uplink is being used at any moment. It is not mandatory and the SUL operation is the same without it, you just have to push uplink traffic yourself before the RB maps show anything.

The rest of nr_cell_default is left alone in this test. subcarrier_spacing is 30 kHz on both branches, bandwidth comes from NR_BANDWIDTH, and the mac_config block keeps its usual values, msg3_max_harq_tx 5, ul_max_harq_tx and dl_max_harq_tx 5, ul_max_consecutive_retx and dl_max_consecutive_retx 30, periodic_bsr_timer 20, retx_bsr_timer 320, periodic_phr_timer 500 and prohibit_phr_timer 200.

nr_cell_default with mac_config timers and force_full_bsr set for both cells

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

UEsim config directory with ue.cfg symbolic link pointing at ue-nr-sa-sul-fdd.cfg

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.

N_CELL is 2 in this file, and that is what makes room for the two entries in the cells list further down, the normal cell and the SUL cell. N_ANTENNA_DL and N_ANTENNA_UL are both 1 for SISO and NR_BANDWIDTH is 20 MHz, the same values I used on the gNB, and NR_TDD at 0 selects the same #else branch in this file that it selects in the gNB configuration.

UEsim defines with N_CELL 2 and NR_TDD 0 for the two cell FDD setup

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.

The first entry of cells is on rf_port 0 and the FDD branch gives it band 28, dl_nr_arfcn 156100 and ssb_nr_arfcn 156010, with ssb_subcarrier_spacing 15 kHz against subcarrier_spacing 30 kHz. band and dl_nr_arfcn are the two that have to agree with the gNB, and ssb_nr_arfcn has to point at where the gNB actually puts the SSB, otherwise the UE never finds the cell in the first place.

The band 78 values above the #else are the TDD branch and are not used in this run.

UEsim first cell entry on rf_port 0 with band 28 and its SSB ARFCN

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.

The second entry is on rf_port 1 with band 3, dl_nr_arfcn 368500 and ssb_nr_arfcn 368410. The band and dl_nr_arfcn are the same values I gave the SUL cell on the gNB, and rf_port 1 has to be the port the gNB puts that cell on as well, since that is the RF path the cable carries. As on the normal cell, the band 78 entries belong to the TDD branch.

Nothing marks this entry as a SUL cell on the UEsim side. It is an ordinary cell here, and what makes the UE treat it as the supplementary uplink is the supplementaryUplink IE it reads in the SIB1 of the cell it camps on.

UEsim second cell entry on rf_port 1 matching the gNB SUL cell on band 3

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.

cell_index 0 points at the first entry of the cells list, which is the band 28 normal cell, so the UE reads SIB1 there and picks up the supplementaryUplink configuration from it. Setting it to 1 would send the UE to camp on the SUL cell directly, which is not what you want in a SUL test.

The rest of the ue_list entry is the usual set. as_release is 15, ue_category is "nr", and imsi and K are the default test values that have to match the subscriber record in the core network. tun_setup_script stays commented out in this run because I only need the throughput reading, not a routed interface.

UEsim ue_list entry with cell_index 0 and sul_support enabled

Perform the Test

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

Both cells come up the way I configured them. Cell 00000 is on n28 with DL ARFCN 156100 and UL ARFCN 145100, and cell 0x001 is on n3 with DL ARFCN 368500 and UL ARFCN 349500. That 349500 is the uplink the UE will actually transmit on when it uses the SUL, and it is the one value that does not appear anywhere in the configuration file, since I only set the downlink ARFCN there.

Both cells run BW 20 with SCS 30, ANT 1 and NL 1, and their SSBs sit at SCS 15 on ARFCN 156010 and 368410. The P column is the rf_port, 0 for the first cell and 1 for the second. The cell command underneath confirms pci 500 and 501, which come from n_id_cell, and both cells share TAC 0x000064 and plmn 00101. If one of the two lines is missing or lands on the wrong ARFCN, sort that out before powering the UE on.

cell phy output listing the n28 and n3 cells with their DL and UL ARFCNs

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)

The reply I am after is Cell 0: SIB found. Cell 0 is the entry that cell_index points at, so this one line says the UE has decoded SIB1 on band 28 and now holds the supplementaryUplink configuration it needs. If power_on comes back with nothing, the UE has not found that cell at all and there is no point looking at the SUL side yet.

UEsim power_on command answered by Cell 0 SIB found

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) 

The trace is started with t and stopped with return. Four PRACH lines come out of it, three at seq=45 and seq=42 with snr around 14.9 to 15.0 dB and ta values of 309, 1136 and 1138, and then one at seq=6 with ta=5 and snr=29.1 dB. The last one is the attempt that lands, and the periodic statistics start right after it.

That periodic line is where the throughput check happens. UL brate settles at roughly 12.2 to 12.3 Mbps with rxok around 3860 per interval and only a few tens of rxko, while DL brate stays at about 2.12k because nothing is running downstream, so the mcs sitting near 27.0 on the DL side is just the small periodic traffic. phr is 22 with pl 12 and ta around 4.5 to 4.9, which is the UE reporting that it still has power headroom to spare.

Callbox trace with four PRACH attempts followed by the periodic UE throughput line

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.

Both cells are broadcasting SIB1 on BCCH-NR here, the Cell column alternating between 0 and 1 every 0.160 s, so open one of the Cell 0 rows to get the normal cell. The supplementaryUplink list opens with freqBandIndicatorNR 80 and absoluteFrequencyPointA 347664, which is the band 80 uplink that goes with the band 3 SUL cell, and scs-SpecificCarrierList gives offsetToCarrier 0, subcarrierSpacing kHz30 and carrierBandwidth 51. initialUplinkBWP follows with locationAndBandwidth 13750 at kHz30.

rach-ConfigCommon inside it is what sul_prach produced. prach-RootSequenceIndex reads l839: 128, which is the root_sequence_index I set on the SUL cell, and around it are 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 and ra-ContentionResolutionTimer sf64. rsrp-ThresholdSSB-SUL carries 106 in this run for the -50 I put in prach_rsrp_threshold, and pusch-ConfigCommon and pucch-ConfigCommon close the list with p0-NominalWithGrant -84 and pucch-ResourceCommon 11.

Normal cell SIB1 opened on the supplementaryUplink IE with its RACH parameters

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.

The two PRACH entries at 14:08:21.166 and 14:08:22.594 read sequence_index=42 with ta=1136 and ta=1138 and no sul_index field at all. The one at 14:08:32.565 reads sequence_index=6 ta=5 prb=3:3 sul_index=0 snr=29.1, and this is the one that went onto the supplementary uplink. The 0 in sul_index is the index of the SUL configuration that was used, so it is the presence of the field and not its value that tells you where the preamble landed.

Everything that follows is the ordinary contention resolution, so you can see the attempt succeed. RAR comes back with rapid=6, matching the sequence_index, then Msg3 on PUSCH, then RRC setup request and RRC setup on CCCH-NR.

PRACH entry carrying sul_index followed by RAR, Msg3 and RRC setup

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 )

The Resource Block Allocation view lists four rows for this log, #0 DL, #0 UL, #1 DL and #1 UL, so the second row is the uplink of the normal cell and the fourth is the uplink of the SUL cell. Tick or untick them in the Cell list on the left to keep only the pair you care about. The legend gives the colours you read them by, PUSCH in red, PUCCH in green, PRACH in yellow, PDSCH in blue and a hatched fill for retransmissions.

At 14:08:32.562, just after the connection comes up, the wide full band PUSCH blocks are on the normal cell uplink and three of the four are hatched, so they are retransmissions. The SUL uplink at the same moment carries only small allocations at the top of the band.

RB allocation with wide PUSCH blocks on the normal uplink and small ones on SUL

About 600 ms later, at 14:08:33.198, the same four rows tell a different story. The normal cell uplink is empty across the whole window and the SUL uplink is solid PUSCH from one edge to the other. This is the switch that pusch: "both" allows and that pusch_switch_snr_threshold decides the moment of, and it is why force_full_bsr is worth setting, because without traffic there would be nothing in either row to compare.

RB allocation a moment later with all PUSCH moved onto the SUL uplink

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)

The row to open is the PDCCH one, not the PUSCH that follows it, because the grant is what carries the choice and the PUSCH only shows the result. This one at 14:08:32.602 reads ss_id=2 cce_index=4 al=2 dci=0_1 k2=4, and the decoded content behind it is rb_alloc=0x12f, mcs=14, ndi=0, rv_idx=2, harq_process=3, dai=3, tpc_command=1, antenna_ports=0, srs_request=0, dmrs_seq_init=0, ul_sch_indicator=1 and sul_ind=0.

sul_ind only exists in DCI format 0_1, so filtering on dci=0_1 is how you find the grants worth reading. A format 0_0 grant carries no such field and tells you nothing about which uplink was picked.

Decoded DCI 0_1 grant with sul_ind zero scheduling the normal cell uplink

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

This grant carries the same timestamp of 14:08:32.602 and is only three messages further on, ss_id=2 cce_index=0 al=2 dci=0_1 k2=4 with ul_sch_indicator=1 again. What changed is sul_ind=1, and with it rb_alloc=0x2 against 0x12f and mcs=7 against 14, so the SUL grant here is a much smaller allocation at a lower modulation than the one before it.

Two grants that close together going to different uplinks is what the switching looks like in practice. The gNB makes the choice per grant rather than once for the connection, so read sul_ind on each DCI instead of assuming the uplink stayed where you last saw it.

Decoded DCI 0_1 grant with sul_ind one scheduling the SUL cell uplink

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

            }

          }

        }