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
55af93e3
Commit
55af93e3
authored
Feb 10, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/oai-ue-time-meas' into integration_2022_wk06_a
parents
d6cab858
4f7262c7
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
303 additions
and
534 deletions
+303
-534
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-1
common/utils/telnetsrv/telnetsrv_cpumeasur_def.h
common/utils/telnetsrv/telnetsrv_cpumeasur_def.h
+5
-3
executables/nr-ue.c
executables/nr-ue.c
+48
-1
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+1
-1
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+9
-68
openair1/PHY/NR_TRANSPORT/nr_scrambling.c
openair1/PHY/NR_TRANSPORT/nr_scrambling.c
+107
-0
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
+9
-0
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+3
-54
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
+1
-12
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+19
-48
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+2
-4
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+7
-7
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+19
-6
openair1/PHY/TOOLS/time_meas.h
openair1/PHY/TOOLS/time_meas.h
+10
-0
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+8
-3
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-8
openair1/SCHED_NR_UE/defs.h
openair1/SCHED_NR_UE/defs.h
+1
-2
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+44
-311
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+2
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+0
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
55af93e3
...
...
@@ -1711,6 +1711,8 @@ set(PHY_SRC_UE
set
(
PHY_NR_SRC_COMMON
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_prach_common.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_scrambling.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/scrambling_luts.c
)
set
(
PHY_NR_SRC
...
...
@@ -1736,7 +1738,6 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_dmrs_rx.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_csi_rs.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gold.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/scrambling_luts.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gen_mod_table.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/dmrs_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/ptrs_nr.c
...
...
common/utils/telnetsrv/telnetsrv_cpumeasur_def.h
View file @
55af93e3
...
...
@@ -106,12 +106,13 @@
{"phy_proc", &(UE->phy_proc[0]),0,RX_NB_TH},\
{"phy_proc_rx", &(UE-> phy_proc_rx[0]),0,RX_NB_TH},\
{"phy_proc_tx", &(UE->phy_proc_tx),0,1},\
{"ue_ul_indication_stats", &(UE->ue_ul_indication_stats),0,1},\
{"ofdm_mod_stats", &(UE->ofdm_mod_stats),0,1},\
{"ulsch_encoding_stats", &(UE->ulsch_encoding_stats),0,1},\
{"ulsch_modulation_stats", &(UE->ulsch_modulation_stats),0,1},\
{"ulsch_segmentation_stats", &(UE->ulsch_segmentation_stats),0,1},\
{"ulsch_rate_matching_stats", &(UE->ulsch_rate_matching_stats),0,1},\
{"ulsch_
turbo_encoding_stats", &(UE->ulsch_turbo
_encoding_stats),0,1},\
{"ulsch_
ldpc_encoding_stats", &(UE->ulsch_ldpc
_encoding_stats),0,1},\
{"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\
{"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\
{"generic_stat", &(UE->generic_stat),0,1},\
...
...
@@ -123,12 +124,12 @@
{"dlsch_f...timation_stats", &(UE->dlsch_freq_offset_estimation_stats),0,1},\
{"dlsch_demodulation_stats", &(UE->dlsch_demodulation_stats),0,1},\
{"dlsch_rate_unmatching_stats", &(UE->dlsch_rate_unmatching_stats),0,1},\
{"dlsch_
turbo_decoding_stats", &(UE->dlsch_turbo
_decoding_stats),0,1},\
{"dlsch_
ldpc_decoding_stats", &(UE->dlsch_ldpc
_decoding_stats),0,1},\
{"dlsch_deinterleaving_stats", &(UE->dlsch_deinterleaving_stats),0,1},\
{"dlsch_llr_stats", &(UE->dlsch_llr_stats),0,1},\
{"dlsch_unscrambling_stats", &(UE->dlsch_unscrambling_stats),0,1},\
{"dlsch_rate_matching_stats", &(UE->dlsch_rate_matching_stats),0,1},\
{"dlsch_
turbo_encoding_stats", &(UE->dlsch_turbo
_encoding_stats),0,1},\
{"dlsch_
ldpc_encoding_stats", &(UE->dlsch_ldpc
_encoding_stats),0,1},\
{"dlsch_interleaving_stats", &(UE->dlsch_interleaving_stats),0,1},\
{"dlsch_tc_init_stats", &(UE->dlsch_tc_init_stats),0,1},\
{"dlsch_tc_alpha_stats", &(UE->dlsch_tc_alpha_stats),0,1},\
...
...
@@ -146,6 +147,7 @@
{"ue_front_end_stat", &(UE->ue_front_end_stat[0]),0,RX_NB_TH},\
{"ue_front_end_per_slot_stat", &(UE->ue_front_end_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
{"pdcch_procedures_stat", &(UE->pdcch_procedures_stat[0]),0,RX_NB_TH},\
{"rx_pdsch_stats", &(UE->rx_pdsch_stats), 0, 1}, \
{"pdsch_procedures_stat", &(UE->pdsch_procedures_stat[0]),0,RX_NB_TH},\
{"pdsch_procedures_per_slot_stat", &(UE->pdsch_procedures_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
{"dlsch_procedures_stat", &(UE->dlsch_procedures_stat[0]),0,RX_NB_TH},\
...
...
executables/nr-ue.c
View file @
55af93e3
...
...
@@ -104,6 +104,49 @@ queue_t nr_rach_ind_queue;
static
void
*
NRUE_phy_stub_standalone_pnf_task
(
void
*
arg
);
static
int
dump_L1_UE_meas_stats
(
PHY_VARS_NR_UE
*
ue
,
char
*
output
,
int
max_len
)
{
int
stroff
=
0
;
stroff
+=
print_meas_log
(
&
ue
->
phy_proc_tx
,
"L1 TX processing"
,
NULL
,
NULL
,
output
);
stroff
+=
print_meas_log
(
&
ue
->
ulsch_encoding_stats
,
"ULSCH encoding"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
phy_proc_rx
[
0
],
"L1 RX processing t0"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
phy_proc_rx
[
1
],
"L1 RX processing t1"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
ue_ul_indication_stats
,
"UL Indication"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
rx_pdsch_stats
,
"PDSCH receiver"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_decoding_stats
[
0
],
"PDSCH decoding t0"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_decoding_stats
[
1
],
"PDSCH decoding t1"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_deinterleaving_stats
,
" -> Deinterleive"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_rate_unmatching_stats
,
" -> Rate Unmatch"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_ldpc_decoding_stats
,
" -> LDPC Decode"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_unscrambling_stats
,
"PDSCH unscrambling"
,
NULL
,
NULL
,
output
+
stroff
);
stroff
+=
print_meas_log
(
&
ue
->
dlsch_rx_pdcch_stats
,
"PDCCH handling"
,
NULL
,
NULL
,
output
+
stroff
);
return
stroff
;
}
static
void
*
nrL1_UE_stats_thread
(
void
*
param
)
{
PHY_VARS_NR_UE
*
ue
=
(
PHY_VARS_NR_UE
*
)
param
;
const
int
max_len
=
16384
;
char
output
[
max_len
];
char
filename
[
30
];
snprintf
(
filename
,
29
,
"nrL1_UE_stats-%d.log"
,
ue
->
Mod_id
);
filename
[
29
]
=
0
;
FILE
*
fd
=
fopen
(
filename
,
"w"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open %s
\n
"
,
filename
);
while
(
!
oai_exit
)
{
sleep
(
1
);
const
int
len
=
dump_L1_UE_meas_stats
(
ue
,
output
,
max_len
);
AssertFatal
(
len
<
max_len
,
"exceeded length
\n
"
);
fwrite
(
output
,
len
+
1
,
1
,
fd
);
// + 1 for terminating NULL byte
fflush
(
fd
);
fseek
(
fd
,
0
,
SEEK_SET
);
}
fclose
(
fd
);
return
NULL
;
}
void
init_nr_ue_vars
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
UE_id
,
uint8_t
abstraction_flag
)
...
...
@@ -593,7 +636,7 @@ static void UE_synch(void *arg) {
uint64_t
dl_carrier
,
ul_carrier
;
nr_get_carrier_frequencies
(
UE
,
&
dl_carrier
,
&
ul_carrier
);
if
(
nr_initial_sync
(
&
syncD
->
proc
,
UE
,
2
,
get_softmodem_params
()
->
sa
,
get_nrUE_params
()
->
nr_dlsch_parallel
)
==
0
)
{
if
(
nr_initial_sync
(
&
syncD
->
proc
,
UE
,
2
,
get_softmodem_params
()
->
sa
)
==
0
)
{
freq_offset
=
UE
->
common_vars
.
freq_offset
;
// frequency offset computed with pss in initial sync
hw_slot_offset
=
((
UE
->
rx_offset
<<
1
)
/
UE
->
frame_parms
.
samples_per_subframe
*
UE
->
frame_parms
.
slots_per_subframe
)
+
round
((
float
)((
UE
->
rx_offset
<<
1
)
%
UE
->
frame_parms
.
samples_per_subframe
)
/
UE
->
frame_parms
.
samples_per_slot0
);
...
...
@@ -666,6 +709,7 @@ void processSlotTX(void *arg) {
// trigger L2 to run ue_scheduler thru IF module
// [TODO] mapping right after NR initial sync
if
(
UE
->
if_inst
!=
NULL
&&
UE
->
if_inst
->
ul_indication
!=
NULL
)
{
start_meas
(
&
UE
->
ue_ul_indication_stats
);
nr_uplink_indication_t
ul_indication
;
memset
((
void
*
)
&
ul_indication
,
0
,
sizeof
(
ul_indication
));
...
...
@@ -680,6 +724,7 @@ void processSlotTX(void *arg) {
ul_indication
.
ue_sched_mode
=
rxtxD
->
ue_sched_mode
;
UE
->
if_inst
->
ul_indication
(
&
ul_indication
);
stop_meas
(
&
UE
->
ue_ul_indication_stats
);
}
if
((
UE
->
mode
!=
loop_through_memory
)
&&
(
rxtxD
->
ue_sched_mode
!=
NOT_PUSCH
))
{
...
...
@@ -1164,6 +1209,8 @@ void init_NR_UE_threads(int nb_inst) {
LOG_I
(
PHY
,
"Intializing UE Threads for instance %d (%p,%p)...
\n
"
,
inst
,
PHY_vars_UE_g
[
inst
],
PHY_vars_UE_g
[
inst
][
0
]);
threadCreate
(
&
threads
[
inst
],
UE_thread
,
(
void
*
)
UE
,
"UEthread"
,
-
1
,
OAI_PRIORITY_RT_MAX
);
pthread_t
stat_pthread
;
threadCreate
(
&
stat_pthread
,
nrL1_UE_stats_thread
,
UE
,
"L1_UE_stats"
,
-
1
,
OAI_PRIORITY_RT_LOW
);
}
}
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
55af93e3
...
...
@@ -542,6 +542,7 @@ void init_N_TA_offset(PHY_VARS_NR_UE *ue){
void
phy_init_nr_top
(
PHY_VARS_NR_UE
*
ue
)
{
NR_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
crcTableInit
();
init_scrambling_luts
();
load_dftslib
();
init_context_synchro_nr
(
frame_parms
);
generate_ul_reference_signal_sequences
(
SHRT_MAX
);
...
...
@@ -553,6 +554,5 @@ void phy_init_nr_top(PHY_VARS_NR_UE *ue) {
//generate_16qam_table();
//generate_RIV_tables();
//init_unscrambling_lut();
//init_scrambling_lut();
//set_taus_seed(1328);
}
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
55af93e3
...
...
@@ -47,70 +47,11 @@ void nr_pdsch_codeword_scrambling(uint8_t *in,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
uint8_t
reset
,
b_idx
;
uint32_t
x1
,
x2
,
s
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_CODEWORD_SCRAMBLING
,
1
);
reset
=
1
;
x2
=
(
n_RNTI
<<
15
)
+
(
q
<<
14
)
+
Nid
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
b_idx
=
i
&
0x1f
;
if
(
b_idx
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
if
(
i
)
out
++
;
}
*
out
^=
(((
in
[
i
])
&
1
)
^
((
s
>>
b_idx
)
&
1
))
<<
b_idx
;
//printf("i %d b_idx %d in %d s 0x%08x out 0x%08x\n", i, b_idx, in[i], s, *out);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_CODEWORD_SCRAMBLING
,
0
);
uint32_t
*
out
)
{
nr_codeword_scrambling
(
in
,
size
,
q
,
Nid
,
n_RNTI
,
out
);
}
void
nr_pdsch_codeword_scrambling_optim
(
uint8_t
*
in
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
uint32_t
x1
,
x2
,
s
=
0
,
in32
;
x2
=
(
n_RNTI
<<
15
)
+
(
q
<<
14
)
+
Nid
;
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
#if defined(__AVX2__)
for
(
int
i
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
)
{
in32
=
_mm256_movemask_epi8
(
_mm256_slli_epi16
(((
__m256i
*
)
in
)[
i
],
7
));
out
[
i
]
=
(
in32
^
s
);
//printf("in[%d] %x => %x\n",i,in32,out[i]);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
#elif defined(__SSE4__)
_m128i
*
in128
;
for
(
int
i
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
)
{
in128
=&
((
__m128i
*
)
in
)[
i
<<
1
];
((
uint16_t
*
)
&
in32
)[
0
]
=
_mm128_movemask_epi8
(
_mm256_slli_epi16
(
in128
[
0
],
7
));
((
uint16_t
*
)
&
in32
)[
1
]
=
_mm128_movemask_epi8
(
_mm256_slli_epi16
(
in128
[
1
],
7
));
out
[
i
]
=
(
in32
^
s
);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
//#elsif defined(__arm__) || defined(__aarch64)
#else
nr_pdsch_codeword_scrambling
(
in
,
size
,
q
,
Nid
,
n_RNTI
,
out
);
#endif
}
void
nr_generate_pdsch
(
processingData_L1tx_t
*
msgTx
,
int
frame
,
int
slot
)
{
...
...
@@ -214,12 +155,12 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
for
(
int
q
=
0
;
q
<
rel15
->
NrOfCodewords
;
q
++
)
memset
((
void
*
)
scrambled_output
[
q
],
0
,
(
encoded_length
>>
5
)
*
sizeof
(
uint32_t
));
for
(
int
q
=
0
;
q
<
rel15
->
NrOfCodewords
;
q
++
)
nr_pdsch_codeword_scrambling
_optim
(
output
,
encoded_length
,
q
,
rel15
->
dataScramblingId
,
rel15
->
rnti
,
scrambled_output
[
q
]);
nr_pdsch_codeword_scrambling
(
output
,
encoded_length
,
q
,
rel15
->
dataScramblingId
,
rel15
->
rnti
,
scrambled_output
[
q
]);
stop_meas
(
dlsch_scrambling_stats
);
#ifdef DEBUG_DLSCH
...
...
openair1/PHY/NR_TRANSPORT/nr_scrambling.c
0 → 100644
View file @
55af93e3
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "nr_transport_common_proto.h"
#include "PHY/NR_REFSIG/nr_refsig.h"
#include "common/utils/LOG/vcd_signal_dumper.h"
void
nr_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
uint32_t
x1
;
uint32_t
x2
=
(
n_RNTI
<<
15
)
+
(
q
<<
14
)
+
Nid
;
uint32_t
s
=
0
;
#if defined(__AVX2__)
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
for
(
int
i
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
)
{
__m256i
c
=
((
__m256i
*
)
in
)[
i
];
uint32_t
in32
=
_mm256_movemask_epi8
(
_mm256_slli_epi16
(
c
,
7
));
out
[
i
]
=
(
in32
^
s
);
//printf("in[%d] %x => %x\n",i,in32,out[i]);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
#elif defined(__SSE4__)
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
__m128i
*
in128
;
for
(
int
i
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
)
{
in128
=&
((
__m128i
*
)
in
)[
i
<<
1
];
uint32_t
in32
;
((
uint16_t
*
)
&
in32
)[
0
]
=
_mm_movemask_epi8
(
_mm_slli_epi16
(
in128
[
0
],
7
));
((
uint16_t
*
)
&
in32
)[
1
]
=
_mm_movemask_epi8
(
_mm_slli_epi16
(
in128
[
1
],
7
));
out
[
i
]
=
(
in32
^
s
);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
//#elsif defined(__arm__) || defined(__aarch64)
#else
uint8_t
reset
=
1
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_CODEWORD_SCRAMBLING
,
1
);
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
const
uint8_t
b_idx
=
i
&
0x1f
;
if
(
b_idx
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
if
(
i
)
out
++
;
}
*
out
^=
(((
in
[
i
])
&
1
)
^
((
s
>>
b_idx
)
&
1
))
<<
b_idx
;
//printf("i %d b_idx %d in %d s 0x%08x out 0x%08x\n", i, b_idx, in[i], s, *out);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_CODEWORD_SCRAMBLING
,
0
);
#endif
}
void
nr_codeword_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
uint32_t
x1
;
uint32_t
x2
=
(
n_RNTI
<<
15
)
+
(
q
<<
14
)
+
Nid
;
uint32_t
s
=
0
;
#if defined(__x86_64__) || defined(__i386__)
uint8_t
*
s8
=
(
uint8_t
*
)
&
s
;
__m128i
*
llr128
=
(
__m128i
*
)
llr
;
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
for
(
int
i
=
0
,
j
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
,
j
+=
4
)
{
llr128
[
j
]
=
_mm_mullo_epi16
(
llr128
[
j
],
byte2m128i
[
s8
[
0
]]);
llr128
[
j
+
1
]
=
_mm_mullo_epi16
(
llr128
[
j
+
1
],
byte2m128i
[
s8
[
1
]]);
llr128
[
j
+
2
]
=
_mm_mullo_epi16
(
llr128
[
j
+
2
],
byte2m128i
[
s8
[
2
]]);
llr128
[
j
+
3
]
=
_mm_mullo_epi16
(
llr128
[
j
+
3
],
byte2m128i
[
s8
[
3
]]);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
#else
uint8_t
reset
=
1
;
for
(
uint32_t
i
=
0
;
i
<
size
;
i
++
)
{
if
((
i
&
0x1f
)
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
if
(((
s
>>
(
i
&
0x1f
))
&
1
)
==
1
)
llr
[
i
]
=
-
llr
[
i
];
}
#endif
}
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
View file @
55af93e3
...
...
@@ -77,6 +77,15 @@ void nr_fill_du(uint16_t N_ZC,uint16_t *prach_root_sequence_map);
void
init_nr_prach_tables
(
int
N_ZC
);
void
nr_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
);
void
nr_codeword_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
);
/**@}*/
void
init_pucch2_luts
(
void
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
55af93e3
...
...
@@ -33,7 +33,6 @@
#include <stdint.h>
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_REFSIG/nr_refsig.h"
int16_t
find_nr_ulsch
(
uint16_t
rnti
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
)
{
...
...
@@ -82,59 +81,9 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB,
}
void
nr_ulsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
uint8_t
reset
;
uint32_t
x1
,
x2
,
s
=
0
;
reset
=
1
;
x2
=
(
n_RNTI
<<
15
)
+
Nid
;
for
(
uint32_t
i
=
0
;
i
<
size
;
i
++
)
{
if
((
i
&
0x1f
)
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
if
(((
s
>>
(
i
&
0x1f
))
&
1
)
==
1
)
llr
[
i
]
=
-
llr
[
i
];
}
}
void
nr_ulsch_unscrambling_optim
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
#if defined(__x86_64__) || defined(__i386__)
uint32_t
x1
,
x2
,
s
=
0
;
x2
=
(
n_RNTI
<<
15
)
+
Nid
;
uint8_t
*
s8
=
(
uint8_t
*
)
&
s
;
__m128i
*
llr128
=
(
__m128i
*
)
llr
;
int
j
=
0
;
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
for
(
int
i
=
0
;
i
<
((
size
>>
5
)
+
((
size
&
0x1f
)
>
0
?
1
:
0
));
i
++
,
j
+=
4
)
{
llr128
[
j
]
=
_mm_mullo_epi16
(
llr128
[
j
],
byte2m128i
[
s8
[
0
]]);
llr128
[
j
+
1
]
=
_mm_mullo_epi16
(
llr128
[
j
+
1
],
byte2m128i
[
s8
[
1
]]);
llr128
[
j
+
2
]
=
_mm_mullo_epi16
(
llr128
[
j
+
2
],
byte2m128i
[
s8
[
2
]]);
llr128
[
j
+
3
]
=
_mm_mullo_epi16
(
llr128
[
j
+
3
],
byte2m128i
[
s8
[
3
]]);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
#else
nr_ulsch_unscrambling
(
llr
,
size
,
q
,
Nid
,
n_RNTI
);
#endif
void
nr_ulsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
nr_codeword_unscrambling
(
llr
,
size
,
0
,
Nid
,
n_RNTI
);
}
void
dump_pusch_stats
(
FILE
*
fd
,
PHY_VARS_gNB
*
gNB
)
{
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
View file @
55af93e3
...
...
@@ -69,18 +69,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
@param n_RNTI, CRNTI
*/
void
nr_ulsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
);
void
nr_ulsch_unscrambling_optim
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
);
void
nr_ulsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
);
void
nr_ulsch_procedures
(
PHY_VARS_gNB
*
gNB
,
int
frame_rx
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
55af93e3
...
...
@@ -206,25 +206,9 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
return
(
NULL
);
}
void
nr_dlsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
uint8_t
reset
;
uint32_t
x1
,
x2
,
s
=
0
;
reset
=
1
;
x2
=
(
n_RNTI
<<
15
)
+
(
q
<<
14
)
+
Nid
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
((
i
&
0x1f
)
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
if
(((
s
>>
(
i
&
0x1f
))
&
1
)
==
1
)
llr
[
i
]
=
-
llr
[
i
];
}
void
nr_dlsch_unscrambling
(
int16_t
*
llr
,
uint32_t
size
,
uint8_t
q
,
uint32_t
Nid
,
uint32_t
n_RNTI
)
{
nr_codeword_unscrambling
(
llr
,
size
,
q
,
Nid
,
n_RNTI
);
}
bool
nr_ue_postDecode
(
PHY_VARS_NR_UE
*
phy_vars_ue
,
notifiedFIFO_elt_t
*
req
,
bool
last
,
notifiedFIFO_t
*
nf_p
)
{
...
...
@@ -233,6 +217,10 @@ bool nr_ue_postDecode(PHY_VARS_NR_UE *phy_vars_ue, notifiedFIFO_elt_t *req, bool
NR_UE_DLSCH_t
*
dlsch
=
(
NR_UE_DLSCH_t
*
)
rdata
->
dlsch
;
int
r
=
rdata
->
segment_r
;
merge_meas
(
&
phy_vars_ue
->
dlsch_deinterleaving_stats
,
&
rdata
->
ts_deinterleave
);
merge_meas
(
&
phy_vars_ue
->
dlsch_rate_unmatching_stats
,
&
rdata
->
ts_rate_unmatch
);
merge_meas
(
&
phy_vars_ue
->
dlsch_ldpc_decoding_stats
,
&
rdata
->
ts_ldpc_decode
);
bool
decodeSuccess
=
(
rdata
->
decodeIterations
<
(
1
+
dlsch
->
max_ldpc_iterations
));
if
(
decodeSuccess
)
{
...
...
@@ -295,12 +283,6 @@ bool nr_ue_postDecode(PHY_VARS_NR_UE *phy_vars_ue, notifiedFIFO_elt_t *req, bool
void
nr_processDLSegment
(
void
*
arg
)
{
ldpcDecode_ue_t
*
rdata
=
(
ldpcDecode_ue_t
*
)
arg
;
NR_UE_DLSCH_t
*
dlsch
=
rdata
->
dlsch
;
#if UE_TIMING_TRACE //TBD
PHY_VARS_NR_UE
*
phy_vars_ue
=
rdata
->
phy_vars_ue
;
time_stats_t
*
dlsch_rate_unmatching_stats
=&
phy_vars_ue
->
dlsch_rate_unmatching_stats
;
time_stats_t
*
dlsch_turbo_decoding_stats
=&
phy_vars_ue
->
dlsch_turbo_decoding_stats
;
time_stats_t
*
dlsch_deinterleaving_stats
=&
phy_vars_ue
->
dlsch_deinterleaving_stats
;
#endif
NR_DL_UE_HARQ_t
*
harq_process
=
rdata
->
harq_process
;
t_nrLDPC_dec_params
*
p_decoderParms
=
&
rdata
->
decoderParms
;
int
length_dec
;
...
...
@@ -340,21 +322,16 @@ void nr_processDLSegment(void* arg) {
t_nrLDPC_procBuf
**
p_nrLDPC_procBuf
=
harq_process
->
p_nrLDPC_procBuf
;
#if UE_TIMING_TRACE
start_meas
(
dlsch_deinterleaving_stats
);
#endif
start_meas
(
&
rdata
->
ts_deinterleave
);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN);
nr_deinterleaving_ldpc
(
E
,
Qm
,
harq_process
->
w
[
r
],
// [hna] w is e
dlsch_llr
+
r_offset
);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT);
#if UE_TIMING_TRACE
stop_meas
(
dlsch_deinterleaving_stats
);
#endif
#if UE_TIMING_TRACE
start_meas
(
dlsch_rate_unmatching_stats
);
#endif
stop_meas
(
&
rdata
->
ts_deinterleave
);
start_meas
(
&
rdata
->
ts_rate_unmatch
);
/* LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,E %d, F %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
harq_pid,r, G,E,harq_process->F,
Kr*3,
...
...
@@ -379,17 +356,12 @@ void nr_processDLSegment(void* arg) {
harq_process
->
F
,
Kr
-
harq_process
->
F
-
2
*
(
p_decoderParms
->
Z
))
==-
1
)
{
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT);
#if UE_TIMING_TRACE
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
stop_meas
(
&
rdata
->
ts_rate_unmatch
);
LOG_E
(
PHY
,
"dlsch_decoding.c: Problem in rate_matching
\n
"
);
rdata
->
decodeIterations
=
dlsch
->
max_ldpc_iterations
+
1
;
return
;
}
else
{
#if UE_TIMING_TRACE
stop_meas
(
dlsch_rate_unmatching_stats
);
#endif
return
;
}
stop_meas
(
&
rdata
->
ts_rate_unmatch
);
r_offset
+=
E
;
...
...
@@ -417,9 +389,7 @@ void nr_processDLSegment(void* arg) {
}
{
#if UE_TIMING_TRACE
start_meas
(
dlsch_turbo_decoding_stats
);
#endif
start_meas
(
&
rdata
->
ts_ldpc_decode
);
//set first 2*Z_c bits to zeros
memset
(
&
z
[
0
],
0
,
2
*
harq_process
->
Z
*
sizeof
(
int16_t
));
//set Filler bits
...
...
@@ -469,9 +439,7 @@ void nr_processDLSegment(void* arg) {
harq_process
->
c
[
r
][
m
]
=
(
uint8_t
)
llrProcBuf
[
m
];
}
#if UE_TIMING_TRACE
stop_meas
(
dlsch_turbo_decoding_stats
);
#endif
stop_meas
(
&
rdata
->
ts_ldpc_decode
);
}
}
...
...
@@ -673,6 +641,9 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
rdata
->
offset
=
offset
;
rdata
->
dlsch
=
dlsch
;
rdata
->
dlsch_id
=
0
;
reset_meas
(
&
rdata
->
ts_deinterleave
);
reset_meas
(
&
rdata
->
ts_rate_unmatch
);
reset_meas
(
&
rdata
->
ts_ldpc_decode
);
pushTpool
(
&
(
pool_dl
),
req
);
nbDecode
++
;
LOG_D
(
PHY
,
"Added a block to decode, in pipe: %d
\n
"
,
nbDecode
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
55af93e3
...
...
@@ -196,8 +196,7 @@ char prefix_string[2][9] = {"NORMAL","EXTENDED"};
int
nr_initial_sync
(
UE_nr_rxtx_proc_t
*
proc
,
PHY_VARS_NR_UE
*
ue
,
int
n_frames
,
int
sa
,
int
dlsch_parallel
)
int
n_frames
,
int
sa
)
{
int32_t
sync_pos
,
sync_pos_frame
;
// k_ssb, N_ssb_crb, sync_pos2,
...
...
@@ -528,8 +527,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
SI_PDSCH
,
ue
->
dlsch_SI
[
gnb_id
],
NULL
,
&
ue
->
dlsch_SI_errors
[
gnb_id
],
dlsch_parallel
);
&
ue
->
dlsch_SI_errors
[
gnb_id
]);
// deactivate dlsch once dlsch proc is done
ue
->
dlsch_SI
[
gnb_id
]
->
active
=
0
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
55af93e3
...
...
@@ -1055,14 +1055,15 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
@param[in] size, of input bits
@param[in] Nid, cell id
@param[in] n_RNTI, CRNTI
@param[in] uci_on_pusch whether UCI placeholder bits need to be scrambled (true -> no optimized scrambling)
@param[out] out, the scrambled bits
*/
void
nr_pusch_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
);
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
bool
uci_on_pusch
,
uint32_t
*
out
);
/** \brief Perform the following functionalities:
- encoding
...
...
@@ -1423,8 +1424,7 @@ void generate_RIV_tables(void);
int
nr_initial_sync
(
UE_nr_rxtx_proc_t
*
proc
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
n_frames
,
int
sa
,
int
dlsch_parallel
);
int
sa
);
/*!
\brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the availability of the latter
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
View file @
55af93e3
...
...
@@ -149,7 +149,7 @@ typedef struct {
/// ACK/NAK Bundling flag
uint8_t
bundling
;
/// Concatenated "g"-sequences (for definition see 36-212 V15.4.0 2018-12, p.31)
uint8_t
g
[
MAX_NUM_NR_CHANNEL_BITS
];
uint8_t
g
[
MAX_NUM_NR_CHANNEL_BITS
]
__attribute__
((
aligned
(
32
)))
;
/// Interleaved "h"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
uint8_t
h
[
MAX_NUM_NR_CHANNEL_BITS
];
/// Scrambled "b"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
55af93e3
...
...
@@ -53,12 +53,12 @@
//extern int32_t uplink_counter;
void
nr_pusch_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
void
nr_pusch_codeword_scrambling
_uci
(
uint8_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
uint8_t
reset
,
b_idx
;
uint32_t
x1
,
x2
,
s
=
0
,
temp_out
;
...
...
@@ -89,7 +89,19 @@ void nr_pusch_codeword_scrambling(uint8_t *in,
*
out
^=
(((
in
[
i
])
&
1
)
^
((
s
>>
b_idx
)
&
1
))
<<
b_idx
;
//printf("i %d b_idx %d in %d s 0x%08x out 0x%08x\n", i, b_idx, in[i], s, *out);
}
}
void
nr_pusch_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
bool
uci_on_pusch
,
uint32_t
*
out
)
{
if
(
uci_on_pusch
)
nr_pusch_codeword_scrambling_uci
(
in
,
size
,
Nid
,
n_RNTI
,
out
);
else
nr_codeword_scrambling
(
in
,
size
,
0
,
Nid
,
n_RNTI
,
out
);
}
void
nr_ue_ulsch_procedures
(
PHY_VARS_NR_UE
*
UE
,
...
...
@@ -187,6 +199,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
available_bits
,
ulsch_ue
->
Nid_cell
,
rnti
,
false
,
scrambled_output
[
cwd_index
]);
// assume one codeword for the moment
...
...
openair1/PHY/TOOLS/time_meas.h
View file @
55af93e3
...
...
@@ -179,6 +179,16 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts) {
}
}
static
inline
void
merge_meas
(
time_stats_t
*
dst_ts
,
time_stats_t
*
src_ts
)
{
if
(
!
opp_enabled
)
return
;
dst_ts
->
trials
+=
src_ts
->
trials
;
dst_ts
->
diff
+=
src_ts
->
diff
;
if
(
src_ts
->
max
>
dst_ts
->
max
)
dst_ts
->
max
=
src_ts
->
max
;
}
extern
notifiedFIFO_t
measur_fifo
;
#define CPUMEASUR_SECTION "cpumeasur"
...
...
openair1/PHY/defs_nr_UE.h
View file @
55af93e3
...
...
@@ -1012,6 +1012,8 @@ typedef struct {
time_stats_t
phy_proc_tx
;
time_stats_t
phy_proc_rx
[
RX_NB_TH
];
time_stats_t
ue_ul_indication_stats
;
uint32_t
use_ia_receiver
;
time_stats_t
ofdm_mod_stats
;
...
...
@@ -1020,7 +1022,6 @@ typedef struct {
time_stats_t
ulsch_modulation_stats
;
time_stats_t
ulsch_segmentation_stats
;
time_stats_t
ulsch_rate_matching_stats
;
time_stats_t
ulsch_turbo_encoding_stats
;
time_stats_t
ulsch_interleaving_stats
;
time_stats_t
ulsch_multiplexing_stats
;
...
...
@@ -1033,6 +1034,7 @@ typedef struct {
time_stats_t
pdsch_procedures_per_slot_stat
[
RX_NB_TH
][
LTE_SLOTS_PER_SUBFRAME
];
time_stats_t
dlsch_procedures_stat
[
RX_NB_TH
];
time_stats_t
rx_pdsch_stats
;
time_stats_t
ofdm_demod_stats
;
time_stats_t
dlsch_rx_pdcch_stats
;
time_stats_t
rx_dft_stats
;
...
...
@@ -1041,13 +1043,13 @@ typedef struct {
time_stats_t
dlsch_decoding_stats
[
2
];
time_stats_t
dlsch_demodulation_stats
;
time_stats_t
dlsch_rate_unmatching_stats
;
time_stats_t
dlsch_
turbo
_decoding_stats
;
time_stats_t
dlsch_
ldpc
_decoding_stats
;
time_stats_t
dlsch_deinterleaving_stats
;
time_stats_t
dlsch_llr_stats
;
time_stats_t
dlsch_llr_stats_parallelization
[
RX_NB_TH
][
LTE_SLOTS_PER_SUBFRAME
];
time_stats_t
dlsch_unscrambling_stats
;
time_stats_t
dlsch_rate_matching_stats
;
time_stats_t
dlsch_
turbo
_encoding_stats
;
time_stats_t
dlsch_
ldpc
_encoding_stats
;
time_stats_t
dlsch_interleaving_stats
;
time_stats_t
dlsch_tc_init_stats
;
time_stats_t
dlsch_tc_alpha_stats
;
...
...
@@ -1106,6 +1108,9 @@ typedef struct LDPCDecode_ue_s {
int
offset
;
int
Tbslbrm
;
int
decodeIterations
;
time_stats_t
ts_deinterleave
;
time_stats_t
ts_rate_unmatch
;
time_stats_t
ts_ldpc_decode
;
}
ldpcDecode_ue_t
;
#include "SIMULATION/ETH_TRANSPORT/defs.h"
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
55af93e3
...
...
@@ -186,8 +186,6 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
}
}
if
(
do_meas
==
1
)
stop_meas
(
&
msgTx
->
phy_proc_tx
);
// if ((frame&127) == 0) dump_pdsch_stats(gNB);
//apply the OFDM symbol rotation here
...
...
@@ -196,8 +194,8 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX
+
offset
,
0
);
//pthread_mutex_unlock(&mutextest);
if
(
do_meas
==
1
)
stop_meas
(
&
msgTx
->
phy_proc_tx
);
}
void
nr_postDecode
(
PHY_VARS_gNB
*
gNB
,
notifiedFIFO_elt_t
*
req
)
{
...
...
@@ -353,11 +351,10 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
//------------------- ULSCH unscrambling -------------------
//----------------------------------------------------------
start_meas
(
&
gNB
->
ulsch_unscrambling_stats
);
nr_ulsch_unscrambling_optim
(
gNB
->
pusch_vars
[
ULSCH_id
]
->
llr
,
G
,
0
,
pusch_pdu
->
data_scrambling_id
,
pusch_pdu
->
rnti
);
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
ULSCH_id
]
->
llr
,
G
,
pusch_pdu
->
data_scrambling_id
,
pusch_pdu
->
rnti
);
stop_meas
(
&
gNB
->
ulsch_unscrambling_stats
);
//----------------------------------------------------------
//--------------------- ULSCH decoding ---------------------
...
...
openair1/SCHED_NR_UE/defs.h
View file @
55af93e3
...
...
@@ -406,8 +406,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
PDSCH_t
pdsch
,
NR_UE_DLSCH_t
*
dlsch0
,
NR_UE_DLSCH_t
*
dlsch1
,
int
*
dlsch_errors
,
uint8_t
dlsch_parallel
);
int
*
dlsch_errors
);
int
nr_ue_pdsch_procedures
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
55af93e3
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
55af93e3
...
...
@@ -90,8 +90,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
PDSCH_t
pdsch
,
NR_UE_DLSCH_t
*
dlsch0
,
NR_UE_DLSCH_t
*
dlsch1
,
int
*
dlsch_errors
,
uint8_t
dlsch_parallel
)
{
int
*
dlsch_errors
)
{
return
false
;
}
...
...
@@ -713,7 +712,7 @@ int main(int argc, char **argv)
}
if
(
UE
->
is_synchronized
==
0
)
{
UE_nr_rxtx_proc_t
proc
=
{
0
};
ret
=
nr_initial_sync
(
&
proc
,
UE
,
1
,
0
,
0
);
ret
=
nr_initial_sync
(
&
proc
,
UE
,
1
,
0
);
printf
(
"nr_initial_sync1 returns %d
\n
"
,
ret
);
if
(
ret
<
0
)
n_errors
++
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
55af93e3
...
...
@@ -273,7 +273,6 @@ bool is_xlsch_in_slot(uint64_t bitmap, sub_frame_t slot) {
void
gNB_dlsch_ulsch_scheduler
(
module_id_t
module_idP
,
frame_t
frame
,
sub_frame_t
slot
){
//pthread_mutex_lock(&mutextest);
protocol_ctxt_t
ctxt
=
{
0
};
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
module_idP
,
ENB_FLAG_YES
,
NOT_A_RNTI
,
frame
,
slot
,
module_idP
);
...
...
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