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
wangjie
OpenXG-RAN
Commits
358815f6
Commit
358815f6
authored
Jun 16, 2021
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Passing PDSCH beam from MAC->PHY->RU
parent
6a5f782d
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
38 additions
and
21 deletions
+38
-21
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+2
-1
executables/nr-ru.c
executables/nr-ru.c
+7
-11
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+10
-3
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+3
-3
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+12
-3
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+4
-0
No files found.
common/utils/nr/nr_common.h
View file @
358815f6
...
...
@@ -62,8 +62,9 @@ uint8_t nr_get_Qm(uint8_t Imcs, uint8_t table_idx);
uint32_t
nr_get_code_rate
(
uint8_t
Imcs
,
uint8_t
table_idx
);
int
get_subband_size
(
int
NPRB
,
int
size
);
void
SLIV2SL
(
int
SLIV
,
int
*
S
,
int
*
L
);
int
get_tdd_period_in_slots
(
int
tdd_period
,
int
slots_per_frame
);
#define NR_FRAME_DURATION 10000
#define CEILIDIV(a,b) ((a+b-1)/b)
#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
...
...
executables/nr-ru.c
View file @
358815f6
...
...
@@ -757,20 +757,16 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
// bit 11 enables the gpio programming
// currently we switch beams every 10 slots (should = 1 TDD period in FR2) and we take the beam index of the first symbol of the first slot of this period
int
beam
=
0
;
if
(
slot
%
10
==
0
)
{
if
(
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]
<
8
)
{
if
((
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]
<
8
)
||
(
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]
==
255
))
{
beam
=
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]
|
8
;
}
else
{
LOG_E
(
HW
,
"Beam index cannot be greater than 7. Attemping beam index is %d
\n
"
,
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]);
}
/*
if (slot==0 || slot==40) beam=0|8;
if (slot==10 || slot==50) beam=1|8;
if (slot==20 || slot==60) beam=2|8;
if (slot==30 || slot==70) beam=3|8;
*/
flags
|=
beam
<<
8
;
LOG_D
(
HW
,
"slot %d, beam %d
\n
"
,
slot
,
ru
->
common
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
]
);
LOG_D
(
HW
,
"slot %d, beam %d
\n
"
,
slot
,
beam
);
}
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
358815f6
...
...
@@ -37,6 +37,7 @@
#include "PHY/NR_REFSIG/dmrs_nr.h"
#include "PHY/NR_REFSIG/ptrs_nr.h"
#include "common/utils/LOG/vcd_signal_dumper.h"
#include "common/utils/nr/nr_common.h"
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
//#define DEBUG_DLSCH
...
...
@@ -513,9 +514,15 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
// since PHY can only handle BF on slot basis we set the whole slot
// first check if this slot has not already been allocated to another beam
if
(
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
frame_parms
->
symbols_per_slot
]
==
255
)
{
for
(
int
j
=
0
;
j
<
frame_parms
->
symbols_per_slot
;
j
++
)
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
frame_parms
->
symbols_per_slot
+
j
]
=
rel15
->
precodingAndBeamforming
.
prgs_list
[
0
].
dig_bf_interface_list
[
0
].
beam_idx
;
if
((
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
frame_parms
->
symbols_per_slot
]
==
255
)
||
(
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
frame_parms
->
symbols_per_slot
]
==
rel15
->
precodingAndBeamforming
.
prgs_list
[
0
].
dig_bf_interface_list
[
0
].
beam_idx
))
{
printf
(
"pdsch beam %d
\n
"
,
rel15
->
precodingAndBeamforming
.
prgs_list
[
0
].
dig_bf_interface_list
[
0
].
beam_idx
);
memset
(
&
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
frame_parms
->
symbols_per_slot
],
rel15
->
precodingAndBeamforming
.
prgs_list
[
0
].
dig_bf_interface_list
[
0
].
beam_idx
,
frame_parms
->
symbols_per_slot
*
get_tdd_period_in_slots
(
gNB
->
gNB_config
.
tdd_table
.
tdd_period
.
value
,
frame_parms
->
slots_per_frame
)
*
sizeof
(
uint8_t
));
}
else
{
LOG_W
(
PHY
,
"beam index for PDSCH allocation already taken
\n
"
);
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
358815f6
...
...
@@ -306,9 +306,9 @@ static void *nr_feptx_thread(void *param) {
start_meas
(
&
ru
->
precoding_stats
);
for
(
i
=
0
;
i
<
ru
->
nb_log_antennas
;
++
i
)
{
memcpy
((
void
*
)
&
ru
->
common
.
beam_id
[
i
][
slot
*
fp
->
symbols_per_slot
+
l
],
(
void
*
)
&
ru
->
gNB_list
[
0
]
->
common_vars
.
beam_id
[
i
][
slot
*
fp
->
symbols_per_slot
+
l
],
(
fp
->
symbols_per_slot
>>
1
)
*
sizeof
(
uint8_t
));
memcpy
((
void
*
)
&
ru
->
common
.
beam_id
[
i
][
slot
*
fp
->
symbols_per_slot
],
(
void
*
)
&
ru
->
gNB_list
[
0
]
->
common_vars
.
beam_id
[
i
][
slot
*
fp
->
symbols_per_slot
],
(
fp
->
symbols_per_slot
)
*
sizeof
(
uint8_t
));
}
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
358815f6
...
...
@@ -42,6 +42,7 @@
#include "T.h"
#include "executables/nr-softmodem.h"
#include "executables/softmodem-common.h"
#include "common/utils/nr/nr_common.h"
#include "assertions.h"
#include "msc.h"
...
...
@@ -110,8 +111,11 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
// Beam_id is currently used only for FR2
if
(
fp
->
freq_range
==
nr_FR2
){
LOG_D
(
PHY
,
"slot %d, ssb_index %d, beam %d
\n
"
,
slot
,
ssb_index
,
cfg
->
ssb_table
.
ssb_beam_id_list
[
ssb_index
].
beam_id
.
value
);
for
(
int
j
=
0
;
j
<
fp
->
symbols_per_slot
;
j
++
)
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
+
j
]
=
cfg
->
ssb_table
.
ssb_beam_id_list
[
ssb_index
].
beam_id
.
value
;
// PHY can switch beams only once per TDD
memset
(
&
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
],
cfg
->
ssb_table
.
ssb_beam_id_list
[
ssb_index
].
beam_id
.
value
,
fp
->
symbols_per_slot
*
get_tdd_period_in_slots
(
gNB
->
gNB_config
.
tdd_table
.
tdd_period
.
value
,
fp
->
slots_per_frame
)
*
sizeof
(
uint8_t
));
}
nr_generate_pbch
(
&
gNB
->
pbch
,
...
...
@@ -143,7 +147,12 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
// clear the transmit data array and beam index for the current slot
for
(
aa
=
0
;
aa
<
cfg
->
carrier_config
.
num_tx_ant
.
value
;
aa
++
)
{
memset
(
&
gNB
->
common_vars
.
txdataF
[
aa
][
txdataF_offset
],
0
,
fp
->
samples_per_slot_wCP
*
sizeof
(
int32_t
));
memset
(
&
gNB
->
common_vars
.
beam_id
[
aa
][
slot
*
fp
->
symbols_per_slot
],
255
,
fp
->
symbols_per_slot
*
sizeof
(
uint8_t
));
}
//clear the beam index array every frame
if
(
slot
==
0
)
{
for
(
aa
=
0
;
aa
<
cfg
->
carrier_config
.
num_tx_ant
.
value
;
aa
++
)
{
memset
(
&
gNB
->
common_vars
.
beam_id
[
aa
][
0
],
255
,
fp
->
symbols_per_slot
*
fp
->
slots_per_frame
*
sizeof
(
uint8_t
));
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX
,
1
);
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
358815f6
...
...
@@ -3668,3 +3668,7 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
return
valid
;
}
int
get_tdd_period_in_slots
(
int
tdd_period
,
int
slots_per_frame
)
{
int
tdd_periods_per_frame
=
NR_FRAME_DURATION
/
tdd_period_to_num
[
tdd_period
];
return
(
slots_per_frame
/
tdd_periods_per_frame
);
}
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