Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
9187b768
Commit
9187b768
authored
Dec 18, 2019
by
Francesco Mani
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ru-parallel-beamforming-fix' into NR_RRCConfiguration
parents
5fb96382
6808c350
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
187 additions
and
99 deletions
+187
-99
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+175
-89
targets/RT/USER/gNB_usrp.gtkw
targets/RT/USER/gNB_usrp.gtkw
+12
-10
No files found.
openair1/SCHED_NR/nr_ru_procedures.c
View file @
9187b768
...
...
@@ -121,10 +121,10 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
int
slot
=
tti_tx
;
int
i
=
0
;
int
j
=
0
;
int
aa
=
0
;
int
j
=
0
;
//symbol
int
aa
=
0
;
//logical antenna number
int
ret
=
0
;
int
nb_antenna_ports
=
fp
->
N
_ssb
;
int
nb_antenna_ports
=
fp
->
L
_ssb
;
int
ofdm_mask_full
=
(
1
<<
(
ru
->
nb_tx
*
2
))
-
1
;
int
txdataF_offset
=
((
tti_tx
%
2
)
*
fp
->
samples_per_slot_wCP
);
...
...
@@ -135,27 +135,61 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
start_meas
(
&
ru
->
ofdm_total_stats
);
AssertFatal
(
ru
->
num_gNB
==
1
,
"ru->num_gNB = %d != 1
\n
"
,
ru
->
num_gNB
);
if
(
nr_slot_select
(
cfg
,
frame_tx
,
slot
)
==
NR_DOWNLINK_SLOT
)
{
if
(
ru
->
num_gNB
!=
0
){
//L1 RU on same machine
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
for
(
j
=
0
;
j
<
2
;
++
j
){
//half slot
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
++
i
){
if
(
j
==
0
){
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
feptx
[
i
].
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
feptx
[
i
].
aa
=
i
;
feptx
[
i
].
index
=
i
;
feptx
[
i
].
ru
=
ru
;
feptx
[
i
].
symbol
=
0
;
feptx
[
i
].
slot
=
slot
;
feptx
[
i
].
nb_antenna_ports
=
nb_antenna_ports
;
feptx
[
i
].
instance_cnt_feptx
=
0
;
AssertFatal
(
pthread_cond_signal
(
&
feptx
[
i
].
cond_feptx
)
==
0
,
"ERROR pthread_cond_signal for feptx_ofdm_thread
\n
"
);
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
feptx
[
i
].
mutex_feptx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
}
//first half
else
{
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
feptx
[
i
+
ru
->
nb_tx
].
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
feptx
[
i
+
ru
->
nb_tx
].
aa
=
i
;
feptx
[
i
+
ru
->
nb_tx
].
index
=
i
+
ru
->
nb_tx
;
feptx
[
i
+
ru
->
nb_tx
].
ru
=
ru
;
feptx
[
i
+
ru
->
nb_tx
].
symbol
=
fp
->
symbols_per_slot
>>
1
;
feptx
[
i
+
ru
->
nb_tx
].
slot
=
slot
;
feptx
[
i
+
ru
->
nb_tx
].
nb_antenna_ports
=
nb_antenna_ports
;
feptx
[
i
+
ru
->
nb_tx
].
instance_cnt_feptx
=
0
;
AssertFatal
(
pthread_cond_signal
(
&
feptx
[
i
+
ru
->
nb_tx
].
cond_feptx
)
==
0
,
"ERROR pthread_cond_signal for feptx_ofdm_thread
\n
"
);
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
feptx
[
i
+
ru
->
nb_tx
].
mutex_feptx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
}
//second half
}
//physical antenna
}
//half slot
}
//if L1 RU on same machine
else
{
//(RU only machine)
for
(
j
=
0
;
j
<
fp
->
symbols_per_slot
;
++
j
){
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
j
,
1
);
start_meas
(
&
ru
->
txdataF_copy_stats
);
if
(
ru
->
num_gNB
==
1
){
gNB
=
ru
->
gNB_list
[
0
];
cfg
=
&
gNB
->
gNB_config
;
for
(
i
=
0
;
i
<
nb_antenna_ports
;
++
i
){
memcpy
((
void
*
)
&
ru
->
common
.
txdataF
[
i
][
j
*
fp
->
ofdm_symbol_size
],
(
void
*
)
&
gNB
->
common_vars
.
txdataF
[
i
][
j
*
fp
->
ofdm_symbol_size
+
txdataF_offset
],
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
}
}
//num_gNB == 1
stop_meas
(
&
ru
->
txdataF_copy_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
j
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
if
(
nr_slot_select
(
cfg
,
frame_tx
,
slot
)
==
NR_DOWNLINK_SLOT
)
{
if
(
nr_slot_select
(
cfg
,
slot
,
frame_tx
)
==
SF_DL
)
{
// If this is not an S-tti
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
++
i
){
if
(
j
%
2
==
0
){
...
...
@@ -189,13 +223,13 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
feptx
[
i
+
ru
->
nb_tx
].
mutex_feptx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
}
}
}
//if == SF_DL
else
{
proc
->
feptx_mask
=
ofdm_mask_full
;
}
}
//j<fp->symbols_per_slot
}
//else (RU only machine)
}
// wait all process to finish
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
proc
->
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
while
(
proc
->
feptx_mask
!=
ofdm_mask_full
)
{
...
...
@@ -209,7 +243,6 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK
,
proc
->
feptx_mask
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
//write_output
stop_meas
(
&
ru
->
ofdm_total_stats
);
...
...
@@ -220,9 +253,12 @@ static void *nr_feptx_thread(void *param) {
RU_feptx_t
*
feptx
=
(
RU_feptx_t
*
)
param
;
RU_t
*
ru
;
int
aa
,
slot
,
start
,
l
,
nb_antenna_ports
,
ret
;
int
i
;
int32_t
***
bw
;
NR_DL_FRAME_PARMS
*
fp
;
int
ofdm_mask_full
;
int
txdataF_offset
;
int32_t
*
txdataF
;
while
(
!
oai_exit
)
{
ret
=
0
;
...
...
@@ -238,10 +274,59 @@ static void *nr_feptx_thread(void *param) {
nb_antenna_ports
=
feptx
->
nb_antenna_ports
;
ofdm_mask_full
=
(
1
<<
(
ru
->
nb_tx
*
2
))
-
1
;
if
(
ru
->
num_gNB
!=
0
){
txdataF_offset
=
((
slot
%
2
)
*
fp
->
samples_per_slot_wCP
);
////////////precoding////////////
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
feptx
->
index
+
1
,
1
);
start_meas
(
&
ru
->
precoding_stats
);
if
(
ru
->
nb_tx
==
1
)
{
AssertFatal
(
fp
->
N_ssb
==
ru
->
nb_tx
,
"Attempting to transmit %d SSB while Nb_tx = %d"
,
fp
->
N_ssb
,
ru
->
nb_tx
);
for
(
int
p
=
0
;
p
<
fp
->
Lmax
;
p
++
)
{
if
((
fp
->
L_ssb
>>
p
)
&
0x01
){
memcpy
((
void
*
)
&
ru
->
common
.
txdataF_BF
[
0
][
l
*
fp
->
ofdm_symbol_size
],
(
void
*
)
&
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
p
][
txdataF_offset
+
l
*
fp
->
ofdm_symbol_size
],
(
fp
->
samples_per_slot_wCP
>>
1
)
*
sizeof
(
int32_t
));
}
}
}
else
{
bw
=
ru
->
beam_weights
[
0
];
txdataF
=
&
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
0
][
txdataF_offset
];
for
(
i
=
0
;
i
<
fp
->
symbols_per_slot
>>
1
;
++
i
){
nr_beam_precoding
(
&
txdataF
,
ru
->
common
.
txdataF_BF
,
fp
,
bw
,
slot
,
l
+
i
,
aa
,
nb_antenna_ports
);
}
}
stop_meas
(
&
ru
->
precoding_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
feptx
->
index
+
1
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
,
1
);
////////////FEPTX////////////
start_meas
(
&
ru
->
ofdm_mod_stats
);
nr_feptx0
(
ru
,
slot
,
start
,
fp
->
symbols_per_slot
>>
1
,
aa
);
stop_meas
(
&
ru
->
ofdm_mod_stats
);
if
(
release_thread
(
&
feptx
->
mutex_feptx
,
&
feptx
->
instance_cnt_feptx
,
"NR feptx thread"
)
<
0
)
break
;
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
ru
->
proc
.
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
ru
->
proc
.
feptx_mask
|=
1
<<
(
feptx
->
index
);
if
(
ru
->
proc
.
feptx_mask
==
ofdm_mask_full
)
AssertFatal
(
pthread_cond_signal
(
&
ru
->
proc
.
cond_feptx
)
==
0
,
"ERROR pthread_cond_signal for precoding and ofdm finish
\n
"
);
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
ru
->
proc
.
mutex_feptx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK
,
ru
->
proc
.
feptx_mask
);
}
// if L1 RU on same machine
else
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
feptx
->
index
+
1
,
1
);
start_meas
(
&
ru
->
precoding_stats
);
if
(
ru
->
nb_tx
==
1
)
{
AssertFatal
(
fp
->
N_ssb
==
ru
->
nb_tx
,
"Attempting to transmit %d SSB while Nb_tx = %d"
,
fp
->
N_ssb
,
ru
->
nb_tx
);
for
(
int
p
=
0
;
p
<
fp
->
Lmax
;
p
++
)
{
if
((
fp
->
L_ssb
>>
p
)
&
0x01
){
memcpy
((
void
*
)
&
ru
->
common
.
txdataF_BF
[
0
][
l
*
fp
->
ofdm_symbol_size
],
...
...
@@ -262,7 +347,7 @@ static void *nr_feptx_thread(void *param) {
nb_antenna_ports
);
}
stop_meas
(
&
ru
->
precoding_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
+
feptx
->
index
+
1
,
0
);
start_meas
(
&
ru
->
ofdm_mod_stats
);
...
...
@@ -279,8 +364,9 @@ static void *nr_feptx_thread(void *param) {
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
ru
->
proc
.
mutex_feptx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
}
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK
,
ru
->
proc
.
feptx_mask
);
}
// else (RU only machine)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
feptx
->
index
+
1
,
0
);
}
}
// while (oai_exit)
return
(
NULL
);
}
...
...
@@ -324,7 +410,7 @@ void nr_init_feptx_thread(RU_t *ru) {
RU_feptx_t
*
feptx
=
proc
->
feptx
;
int
i
=
0
;
for
(
i
=
0
;
i
<
16
;
i
++
){
for
(
i
=
0
;
i
<
(
ru
->
nb_tx
*
2
)
;
i
++
){
feptx
[
i
].
instance_cnt_feptx
=
-
1
;
pthread_mutex_init
(
&
feptx
[
i
].
mutex_feptx
,
NULL
);
...
...
targets/RT/USER/gNB_usrp.gtkw
View file @
9187b768
[*]
[*] GTKWave Analyzer v3.3.
58
(w)1999-2014 BSI
[*]
Fri Sep 6 15:01:30
2019
[*] GTKWave Analyzer v3.3.
61
(w)1999-2014 BSI
[*]
Tue Dec 17 15:31:51
2019
[*]
[dumpfile] "/tmp/gNB
_prec
.vcd"
[dumpfile_mtime] "
Fri Sep 6 14:59:50
2019"
[dumpfile_size]
13106022
[savefile] "/home
s
/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
[timestart]
2183320
000
[dumpfile] "/tmp/gNB.vcd"
[dumpfile_mtime] "
Tue Dec 17 15:25:49
2019"
[dumpfile_size]
6343431
[savefile] "/home/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
[timestart]
1517712
000
[size] 1920 1018
[pos] -
1 -1
*-1
8.423141 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[pos] -
9 -33
*-1
9.276148 151835845
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width] 386
[signals_width] 344
[sst_expanded] 1
...
...
@@ -60,9 +60,11 @@ functions.phy_procedures_ru_feprx0
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_ofdm2
functions.phy_procedures_ru_feptx_prec0
functions.phy_procedures_ru_feptx_prec1
@23
functions.phy_procedures_ru_feptx_prec2
@22
variables.ru_tx_ofdm_mask[63:0]
[pattern_trace] 1
[pattern_trace] 0
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