Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
spbro
OpenXG-RAN
Commits
85f194b5
Commit
85f194b5
authored
Aug 26, 2024
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add documentation and sample config for FHI 7.2 multi-RU operation
Co-authored-by:
Raymond Knopp
<
raymond.knopp@eurecom.fr
>
parent
7e18293c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
426 additions
and
0 deletions
+426
-0
doc/ORAN_FHI7.2_Tutorial.md
doc/ORAN_FHI7.2_Tutorial.md
+137
-0
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.fhi72.8x8-benetel-650-550.conf
...NF/gnb-du.sa.band78.106prb.fhi72.8x8-benetel-650-550.conf
+289
-0
No files found.
doc/ORAN_FHI7.2_Tutorial.md
View file @
85f194b5
...
...
@@ -891,6 +891,143 @@ do not do any jumps (during the last hour). While an occasional jump is not
necessarily problematic for the gNB, many such messages mean that the system is
not working, and UEs might not be able to attach or reach good performance.
# Operation with multiple RUs
It is possible to connect up to 4 RUs to one DU at the same time and operate
them as a (single) distributed antenna (array). This works since all RUs and
the DU are synchronized onto a common clock using PTP. The assumed
configuration is that with N RUs each having an M×M configuration, we
effectively reach an (N×M)×(N×M) configuration.
Some caveats:
-
Since it's a distributed antenna, this implies that this setup will deploy a
single cell only -- multiple cells on different RUs are not supported.
-
All RUs should use the same MTU, so either "normal" (1500 byte) MTU or jumbo
frames, but not a mix of both.
-
We tested only two RUs as of now, i.e., an 8×8 configuration.
-
Testing is currently limited to 4 logical antenna ports in DL; in UL, up to 8 can be used.
For two RUs each using a 4x4 configuration, make sure to configure the 8x8
configuration, i.e., set
`nb_tx`
and
`nb_rx`
under
`RUs`
to 8 each (NOT two
RUs!). Also, set the antenna port information as listed above, i.e.,
```
pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 2;
pusch_AntennaPorts = 8;
maxMIMO_layers = 2;
```
Once testing for 8 antenna ports in DL is complete, we will change pdsch_AntennaPorts_N1 to 4.
Next, configure the
`fhi_72`
section as indicated below:
```
fhi_72 = {
dpdk_devices = ("ru1_up_vf_pci", "ru1_cp_vf_pci", "ru2_up_vf_pci", "ru2_cp_vf_pci");
// core config as always
du_addr = ("du_ru1_up_mac_addr", "du_ru1_cp_mac_addr", "du_ru2_up_mac_addr", "du_ru2_cp_mac_addr");
ru_addr = ("ru1_up_mac_addr", "ru1_cp_mac_addr", "ru2_up_mac_addr", "ru2_cp_mac_addr");
// mtu, file_prefix ...
fh_config = (
{
// timing, ru_config, prach_config of RU1
},
{
// timing, ru_config, prach_config of RU2
}
);
};
```
i.e., for
`dpdk_devices`
,
`du_addr`
, and
`ru_addr`
is configured for
both RUs in a (flat) array, and the individual radio configuration is given for
each RU individually inside the
`fh_config`
.
<details>
<summary>
Sample FHI 7.2 configuration for two RUs (Benetel 550 and 650)
</summary>
```
fhi_72 = {
dpdk_devices = ("0000:01:01.0", "0000:01:01.1", "0000:01:01.2", "0000:01:01.3");
system_core = 0;
io_core = 1;
worker_cores = (2);
du_addr = ("00:11:22:33:44:66","00:11:22:33:44:67","00:11:22:33:44:66","00:11:22:33:44:67");
ru_addr = ("70:b3:d5:e1:5b:ff","70:b3:d5:e1:5b:ff","70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81");
mtu = 9216;
file_prefix = "fhi_72";
fh_config = (
# RAN650
{
Tadv_cp_dl = 125;
T2a_cp_dl = (259, 500);
T2a_cp_ul = (25, 500);
T2a_up = (134, 375);
Ta3 = (152, 160);
T1a_cp_dl = (419, 470);
T1a_cp_ul = (285, 336);
T1a_up = (294, 345);
Ta4 = (0, 200);
ru_config = {
iq_width = 9;
iq_width_prach = 9;
};
prach_config = {
eAxC_offset = 4;
};
},
# RAN550
{
Tadv_cp_dl = 125;
T2a_cp_dl = (259, 500);
T2a_cp_ul = (25, 500);
T2a_up = (134, 375);
Ta3 = (152, 160);
T1a_cp_dl = (419, 470);
T1a_cp_ul = (285, 336);
T1a_up = (294, 345);
Ta4 = (0, 200);
ru_config = {
iq_width = 9;
iq_width_prach = 9;
};
prach_config = {
eAxC_offset = 4;
};
});
```
</details>
Compare also with the example (DU) configuration in
[
`gnb-du.sa.band78.106prb.fhi72.8x8-benetel-650-550.conf`
](
../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.fhi72.8x8-benetel-650-550.conf
)
.
Afterwards, start the gNB with the modified configuration file. If everything
went well, you should see the RU counters for both RUs go up:
```
[NR_PHY] [o-du 0][rx 614400 pps 61440 kbps 844953][tx 1275076 pps 127488 kbps 1998585][Total Msgs_Rcvd 614400]
[NR_PHY] [o_du0][pusch0 107520 prach0 46080]
[NR_PHY] [o_du0][pusch1 107520 prach1 46080]
[NR_PHY] [o_du0][pusch2 107520 prach2 46080]
[NR_PHY] [o_du0][pusch3 107520 prach3 46080]
[NR_PHY] [o-du 1][rx 614400 pps 61440 kbps 844953][tx 1275076 pps 127488 kbps 1998585][Total Msgs_Rcvd 614400]
[NR_PHY] [o_du1][pusch0 107520 prach0 46080]
[NR_PHY] [o_du1][pusch1 107520 prach1 46080]
[NR_PHY] [o_du1][pusch2 107520 prach2 46080]
[NR_PHY] [o_du1][pusch3 107520 prach3 46080]
```
You can also verify that there is signal on all RX antennas like so:
```
bash
$
cat
nrL1_stats.log
[
...]
max_IO
=
66
(
81
)
, min_I0
=
0
(
53
)
, avg_I0
=
51 dB
(
46.48.45.46.51.56.55.45.
)
PRACH I0
=
38.0 dB
```
Note the eight entries after
`avg_IO`
.
You should be able to connect a UE now.
# Contact in case of questions
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.fhi72.8x8-benetel-650-550.conf
0 → 100644
View file @
85f194b5
Active_gNBs
= (
"gNB-OAI-DU"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
=
(
{
//////////
Identification
parameters
:
gNB_ID
=
0
xe00
;
gNB_DU_ID
=
0
xe00
;
gNB_name
=
"gNB-OAI-DU"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
99
;
mnc_length
=
2
;
snssaiList
= ( {
sst
=
1
; }); });
nr_cellid
=
1
;
//////////
Physical
parameters
:
pdsch_AntennaPorts_XP
=
2
;
pdsch_AntennaPorts_N1
=
2
;
pusch_AntennaPorts
=
8
;
do_CSIRS
=
1
;
do_SRS
=
0
;
sib1_tda
=
15
;
# force_UL256qam_off = 1;
maxMIMO_layers
=
2
;
pdcch_ConfigSIB1
= (
{
controlResourceSetZero
=
11
;
searchSpaceZero
=
0
;
}
);
servingCellConfigCommon
= (
{
#spCellConfigCommon
physCellId
=
0
;
# n_TimingAdvanceOffset = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3430.56 MHz (center frequency)
absoluteFrequencySSB
=
628704
;
dl_frequencyBand
=
78
;
# this is 3411.48 MHz
dl_absoluteFrequencyPointA
=
627432
;
#scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
1
;
dl_carrierBandwidth
=
106
;
#initialDownlinkBWP
#genericParameters
initialDLBWPlocationAndBandwidth
=
28875
;
#38.101-1 Table 5.3.2-1
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
11
;
initialDLBWPsearchSpaceZero
=
0
;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand
=
78
;
#scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
1
;
ul_carrierBandwidth
=
106
;
pMax
=
23
;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth
=
28875
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
1
;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex
=
154
;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
0
;
preambleReceivedTargetPower
= -
100
;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
8
;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
3
;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow
=
5
;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
3
;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
15
;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing
=
1
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
msg3_DeltaPreamble
=
2
;
p0_NominalWithGrant
= -
96
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
0
;
p0_nominal
= -
96
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
0
x10001L
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
1
;
#tdd-UL-DL-ConfigurationCommon
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 8=ms3 9=ms4
referenceSubcarrierSpacing
=
1
;
dl_UL_TransmissionPeriodicity
=
8
;
nrofDownlinkSlots
=
3
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
=
10
;
}
);
# ------- SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
};
}
);
MACRLCs
= (
{
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"f1"
;
local_n_if_name
=
"enp193s0f0"
;
local_n_address
=
"172.21.16.51"
;
remote_n_address
=
"172.21.6.90"
;
local_n_portc
=
500
;
local_n_portd
=
2153
;
remote_n_portc
=
501
;
remote_n_portd
=
2153
;
pusch_TargetSNRx10
=
230
;
pucch_TargetSNRx10
=
270
;
dl_bler_target_upper
= .
35
;
dl_bler_target_lower
= .
15
;
ul_bler_target_upper
= .
35
;
ul_bler_target_lower
= .
15
;
pusch_FailureThres
=
100
;
ul_max_mcs
=
28
;
}
);
L1s
= (
{
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
100
;
pucch0_dtx_threshold
=
80
;
pusch_dtx_threshold
=
10
;
max_ldpc_iterations
=
10
;
tx_amp_backoff_dB
=
12
;
# needs to match O-RU configuration
L1_rx_thread_core
=
8
;
L1_tx_thread_core
=
10
;
# relevant after merge of l1_tx_thread
phase_compensation
=
0
;
# needs to match O-RU configuration
}
);
RUs
= (
{
local_rf
=
"no"
;
nb_tx
=
8
;
nb_rx
=
8
;
att_tx
=
0
att_rx
=
0
;
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
75
;
sf_extension
=
0
;
eNB_instances
= [
0
];
ru_thread_core
=
9
;
sl_ahead
=
10
;
clock_src
=
"internal"
;
tr_preference
=
"raw_if4p5"
;
# important: activate FHI7.2
do_precoding
=
0
;
# needs to match O-RU configuration
}
);
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
f1ap_log_level
=
"info"
;
};
fhi_72
= {
dpdk_devices
= (
"0000:01:01.0"
,
"0000:01:01.1"
,
"0000:01:01.2"
,
"0000:01:01.3"
);
system_core
=
0
;
io_core
=
1
;
worker_cores
= (
2
);
du_addr
= (
"00:11:22:33:44:66"
,
"00:11:22:33:44:67"
,
"00:11:22:33:44:68"
,
"00:11:22:33:44:69"
);
ru_addr
= (
"70:b3:d5:e1:5b:ff"
,
"70:b3:d5:e1:5b:ff"
,
"70:b3:d5:e1:5b:81"
,
"70:b3:d5:e1:5b:81"
);
mtu
=
9216
;
file_prefix
=
"fhi_72"
;
fh_config
= (
# RAN650
{
Tadv_cp_dl
=
125
;
T2a_cp_dl
= (
259
,
500
);
T2a_cp_ul
= (
25
,
500
);
T2a_up
= (
134
,
375
);
Ta3
= (
152
,
160
);
T1a_cp_dl
= (
419
,
470
);
T1a_cp_ul
= (
285
,
336
);
T1a_up
= (
294
,
345
);
Ta4
= (
0
,
200
);
ru_config
= {
iq_width
=
9
;
iq_width_prach
=
9
;
};
prach_config
= {
eAxC_offset
=
4
;
};
},
# RAN550
{
Tadv_cp_dl
=
125
;
T2a_cp_dl
= (
259
,
500
);
T2a_cp_ul
= (
25
,
500
);
T2a_up
= (
134
,
375
);
Ta3
= (
152
,
160
);
T1a_cp_dl
= (
419
,
470
);
T1a_cp_ul
= (
285
,
336
);
T1a_up
= (
294
,
345
);
Ta4
= (
0
,
200
);
ru_config
= {
iq_width
=
9
;
iq_width_prach
=
9
;
};
prach_config
= {
eAxC_offset
=
4
;
};
});
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment