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
lizhongxiao
OpenXG-RAN
Commits
046920e6
Commit
046920e6
authored
Sep 18, 2019
by
Wang Tsu-Han
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changing ru process from slot base to symbol base
parent
9ccb93a0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
83 additions
and
53 deletions
+83
-53
executables/nr-gnb.c
executables/nr-gnb.c
+3
-3
executables/nr-ru.c
executables/nr-ru.c
+4
-4
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+1
-0
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+70
-41
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
+2
-2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
+3
-3
No files found.
executables/nr-gnb.c
View file @
046920e6
...
...
@@ -419,9 +419,9 @@ int wakeup_txfh(PHY_VARS_gNB *gNB,gNB_L1_rxtx_proc_t *proc,int frame_tx,int slot
// note this should depend on the numerology used by the TX L1 thread, set here for 500us slot time
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL
,
1
);
waitret
=
timedwait_on_condition
(
&
proc
->
mutex_RUs_tx
,
&
proc
->
cond_RUs
,
&
proc
->
instance_cnt_RUs
,
"wakeup_txfh"
,
1000000
);
AssertFatal
(
release_thread
(
&
proc
->
mutex_RUs_tx
,
&
proc
->
instance_cnt_RUs
,
"wakeup_txfh"
)
==
0
,
"error releaseing gNB lock on RUs
\n
"
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL
,
0
);
AssertFatal
(
release_thread
(
&
proc
->
mutex_RUs_tx
,
&
proc
->
instance_cnt_RUs
,
"wakeup_txfh"
)
==
0
,
"error releaseing gNB lock on RUs
\n
"
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_UE
,
proc
->
instance_cnt_RUs
);
if
(
waitret
==
ETIMEDOUT
)
{
...
...
@@ -446,7 +446,7 @@ int wakeup_txfh(PHY_VARS_gNB *gNB,gNB_L1_rxtx_proc_t *proc,int frame_tx,int slot
ru
=
gNB
->
RU_list
[
i
];
ru_proc
=
&
ru
->
proc
;
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
ru_proc
->
mutex_gNBs
))
==
0
,
"ERROR pthread_mutex_lock failed on mutex_gNBs L1_thread_tx with ret=%d
\n
"
,
ret
);
//
AssertFatal((ret = pthread_mutex_lock(&ru_proc->mutex_gNBs))==0,"ERROR pthread_mutex_lock failed on mutex_gNBs L1_thread_tx with ret=%d\n",ret);
if
(
ru_proc
->
instance_cnt_gNBs
==
0
)
{
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST_UE
,
1
);
...
...
@@ -454,7 +454,7 @@ int wakeup_txfh(PHY_VARS_gNB *gNB,gNB_L1_rxtx_proc_t *proc,int frame_tx,int slot
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
gNB
->
proc
.
mutex_RU_tx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
gNB
->
proc
.
RU_mask_tx
=
0
;
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
gNB
->
proc
.
mutex_RU_tx
))
==
0
,
"mutex_unlock returns %d
\n
"
,
ret
);
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
ru_proc
->
mutex_gNBs
))
==
0
,
"mutex_unlock return %d
\n
"
,
ret
);
//
AssertFatal((ret=pthread_mutex_unlock( &ru_proc->mutex_gNBs ))==0,"mutex_unlock return %d\n",ret);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST_UE
,
0
);
return
(
-
1
);
...
...
executables/nr-ru.c
View file @
046920e6
...
...
@@ -1340,11 +1340,11 @@ static void *ru_thread_tx( void *param ) {
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
L1_proc
->
mutex_RUs_tx
))
==
0
,
"mutex_lock returns %d
\n
"
,
ret
);
// the thread can now be woken up
if
(
L1_proc
->
instance_cnt_RUs
==-
1
)
{
AssertFatal
(
pthread_cond_signal
(
&
L1_proc
->
cond_RUs
)
==
0
,
//if (L1_proc->instance_cnt_RUs == -1) {
L1_proc
->
instance_cnt_RUs
=
0
;
AssertFatal
(
pthread_cond_signal
(
&
L1_proc
->
cond_RUs
)
==
0
,
"ERROR pthread_cond_signal for gNB_L1_thread
\n
"
);
}
//else AssertFatal(1==0,"gNB TX thread is not ready\n");
L1_proc
->
instance_cnt_RUs
=
0
;
//} //else AssertFatal(1==0,"gNB TX thread is not ready\n");
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_UE
,
L1_proc
->
instance_cnt_RUs
);
AssertFatal
((
ret
=
pthread_mutex_unlock
(
&
L1_proc
->
mutex_RUs_tx
))
==
0
,
"mutex_unlock returns %d
\n
"
,
ret
);
...
...
openair1/PHY/defs_RU.h
View file @
046920e6
...
...
@@ -183,6 +183,7 @@ typedef struct RU_feptx_t_s{
int
aa
;
//physical MAX nb_tx
int
half_slot
;
//first or second half of a slot
int
slot
;
//current slot
int
symbol
;
//current symbol
int
nb_antenna_ports
;
//number of logical port
int
index
;
}
RU_feptx_t
;
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
046920e6
...
...
@@ -120,47 +120,75 @@ 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
ret
=
0
;
int
nb_antenna_ports
=
4
;
int
nb_antenna_ports
=
8
;
int
ofdm_mask_full
=
(
1
<<
(
ru
->
nb_tx
*
2
))
-
1
;
start_meas
(
&
ru
->
ofdm_mod_stats
);
start_meas
(
&
ru
->
total_precoding_stats
);
if
(
ru
->
num_gNB
==
1
){
gNB
=
ru
->
gNB_list
[
0
];
cfg
=
&
gNB
->
gNB_config
;
if
(
nr_slot_select
(
cfg
,
tti_tx
)
==
SF_UL
)
return
;
for
(
j
=
0
;
j
<
fp
->
symbols_per_slot
;
++
j
){
for
(
i
=
0
;
i
<
nb_antenna_ports
;
++
i
){
memcpy
((
void
*
)
ru
->
common
.
txdataF
[
i
],
(
void
*
)
gNB
->
common_vars
.
txdataF
[
i
],
fp
->
samples_per_slot_wCP
*
sizeof
(
int32_t
));
}
}
//num_gNB == 1
stop_meas
(
&
ru
->
total_precoding_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
,
1
);
start_meas
(
&
ru
->
total_precoding_stats
);
if
(
ru
->
num_gNB
==
1
){
gNB
=
ru
->
gNB_list
[
0
];
cfg
=
&
gNB
->
gNB_config
;
if
(
nr_slot_select
(
cfg
,
tti_tx
)
==
SF_UL
)
return
;
start_meas
(
&
ru
->
ofdm_mod_stats
);
for
(
i
=
0
;
i
<
nb_antenna_ports
;
++
i
){
memcpy
((
void
*
)
&
ru
->
common
.
txdataF
[
i
][
j
],
(
void
*
)
&
gNB
->
common_vars
.
txdataF
[
i
][
j
],
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
}
}
//num_gNB == 1
//printf("~~~~~~~~~~~memery copy index: nb_antenna_ports = %d, samples_per_slot_wCP = %d\n", nb_antenna_ports, fp->samples_per_slot_wCP);
stop_meas
(
&
ru
->
total_precoding_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC
,
0
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_UL
)
return
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_UL
)
return
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_DL
)
{
// If this is not an S-tti
for
(
i
=
0
;
i
<
ru
->
nb_tx
*
2
;
++
i
){
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
feptx
[
i
].
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
feptx
[
i
].
half_slot
=
i
%
2
;
feptx
[
i
].
aa
=
i
>>
1
;
feptx
[
i
].
index
=
i
;
feptx
[
i
].
ru
=
ru
;
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
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_DL
)
{
// If this is not an S-tti
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
++
i
){
if
(
j
%
2
==
0
){
while
(
feptx
[
i
].
instance_cnt_feptx
!=
-
1
){
usleep
(
5
);
}
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
=
j
;
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
);
//printf("~~~~~~~~~~~~waking up thread %d with physical antenna %d, slot %d, symbol %d, total logical antenna port %d \n", feptx[i].index, feptx[i].aa, feptx[i].slot, feptx[i].symbol, feptx[i].nb_antenna_ports);
}
else
{
while
(
feptx
[
i
+
ru
->
nb_tx
].
instance_cnt_feptx
!=
-
1
){
usleep
(
5
);
}
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
=
j
;
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
);
}
}
}
}
}
//j<fp->symbols_per_slot
// wait all process to finish
AssertFatal
((
ret
=
pthread_mutex_lock
(
&
proc
->
mutex_feptx
))
==
0
,
"mutex_lock return %d
\n
"
,
ret
);
...
...
@@ -200,14 +228,14 @@ static void *nr_feptx_thread(void *param) {
ru
=
feptx
->
ru
;
slot
=
feptx
->
slot
;
aa
=
feptx
->
aa
;
l
=
feptx
->
symbol
;
fp
=
ru
->
nr_frame_parms
;
start
=
(
feptx
->
half_slot
)
?
fp
->
symbols_per_slot
>>
1
:
0
;
start
=
feptx
->
symbol
;
nb_antenna_ports
=
feptx
->
nb_antenna_ports
;
ofdm_mask_full
=
(
1
<<
(
ru
->
nb_tx
*
2
))
-
1
;
bw
=
ru
->
beam_weights
[
0
];
for
(
l
=
0
;
l
<
fp
->
symbols_per_slot
>>
1
;
l
++
)
{
nr_beam_precoding
(
ru
->
common
.
txdataF
,
nr_beam_precoding
(
ru
->
common
.
txdataF
,
ru
->
common
.
txdataF_BF
,
fp
,
bw
,
...
...
@@ -215,18 +243,19 @@ static void *nr_feptx_thread(void *param) {
l
+
start
,
aa
,
nb_antenna_ports
);
}
// for (l=0;l<fp->symbols_per_slot;l++)
nr_feptx0
(
ru
,
slot
,
start
,
fp
->
symbols_per_slot
>>
1
,
aa
);
nr_feptx0
(
ru
,
slot
,
start
,
1
,
aa
);
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
);
if
(
l
>=
fp
->
symbols_per_slot
-
2
){
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
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
feptx
->
index
+
1
,
0
);
}
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
View file @
046920e6
...
...
@@ -70,7 +70,7 @@ gNBs =
UL_BWP_prefix_type
=
"NORMAL"
;
UL_timeAlignmentTimerCommon
=
"infinity"
;
ServingCellConfigCommon_n_TimingAdvanceOffset
=
"n0"
ServingCellConfigCommon_ssb_PositionsInBurst_PR
=
0
x0f
;
#####
ServingCellConfigCommon_ssb_PositionsInBurst_PR
=
0
x0f
f
;
#####
ServingCellConfigCommon_ssb_periodicityServingCell
=
10
;
ServingCellConfigCommon_dmrs_TypeA_Position
=
2
;
NIA_SubcarrierSpacing
=
"kHz15"
;
...
...
@@ -246,7 +246,7 @@ L1s = (
RUs
= (
{
local_rf
=
"yes"
nb_tx
=
8
nb_tx
=
8
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
View file @
046920e6
...
...
@@ -70,7 +70,7 @@ gNBs =
UL_BWP_prefix_type
=
"NORMAL"
;
UL_timeAlignmentTimerCommon
=
"infinity"
;
ServingCellConfigCommon_n_TimingAdvanceOffset
=
"n0"
ServingCellConfigCommon_ssb_PositionsInBurst_PR
=
0
x0
1
;
ServingCellConfigCommon_ssb_PositionsInBurst_PR
=
0
x0
ff
;
ServingCellConfigCommon_ssb_periodicityServingCell
=
10
;
ServingCellConfigCommon_dmrs_TypeA_Position
=
2
;
NIA_SubcarrierSpacing
=
"kHz15"
;
...
...
@@ -246,7 +246,7 @@ L1s = (
RUs
= (
{
local_rf
=
"yes"
nb_tx
=
1
nb_tx
=
8
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
...
...
@@ -264,7 +264,7 @@ THREAD_STRUCT = (
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_
DIS
ABLE"
;
worker_config
=
"WORKER_
EN
ABLE"
;
}
);
...
...
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