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
Michael Black
OpenXG-RAN
Commits
2bfaedcd
Commit
2bfaedcd
authored
Feb 15, 2021
by
frtabu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix dlsim dlsch parallelisation
parent
a7229937
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
80 deletions
+48
-80
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+37
-75
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+11
-5
No files found.
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
2bfaedcd
...
@@ -282,9 +282,8 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
...
@@ -282,9 +282,8 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
LOG_D
(
PHY
,
"****** start TX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
slot_tx
);
LOG_D
(
PHY
,
"****** start TX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
slot_tx
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
phy_proc_tx
);
start_meas
(
&
ue
->
phy_proc_tx
);
#endif
if
(
ue
->
UE_mode
[
gNB_id
]
<=
PUSCH
){
if
(
ue
->
UE_mode
[
gNB_id
]
<=
PUSCH
){
...
@@ -296,9 +295,8 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
...
@@ -296,9 +295,8 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX
,
VCD_FUNCTION_OUT
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
phy_proc_tx
);
stop_meas
(
&
ue
->
phy_proc_tx
);
#endif
}
}
...
@@ -749,9 +747,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id,
...
@@ -749,9 +747,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id,
// send to mac
// send to mac
ue
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
ue
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_rx_pdcch_stats
);
stop_meas
(
&
ue
->
dlsch_rx_pdcch_stats
);
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES
,
VCD_FUNCTION_OUT
);
return
(
dci_cnt
);
return
(
dci_cnt
);
...
@@ -833,12 +829,10 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
...
@@ -833,12 +829,10 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
else
else
first_symbol_flag
=
0
;
first_symbol_flag
=
0
;
#if UE_TIMING_TRACE
uint8_t
slot
=
0
;
uint8_t
slot
=
0
;
if
(
m
>=
ue
->
frame_parms
.
symbols_per_slot
>>
1
)
if
(
m
>=
ue
->
frame_parms
.
symbols_per_slot
>>
1
)
slot
=
1
;
slot
=
1
;
start_meas
(
&
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
]);
start_meas
(
&
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
]);
#endif
// process DLSCH received symbols in the slot
// process DLSCH received symbols in the slot
// symbol by symbol processing (if data/DMRS are multiplexed is checked inside the function)
// symbol by symbol processing (if data/DMRS are multiplexed is checked inside the function)
if
(
pdsch
==
PDSCH
||
pdsch
==
SI_PDSCH
||
pdsch
==
RA_PDSCH
)
{
if
(
pdsch
==
PDSCH
||
pdsch
==
SI_PDSCH
||
pdsch
==
RA_PDSCH
)
{
...
@@ -857,13 +851,11 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
...
@@ -857,13 +851,11 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
return
-
1
;
return
-
1
;
}
else
AssertFatal
(
1
==
0
,
"Not RA_PDSCH, SI_PDSCH or PDSCH
\n
"
);
}
else
AssertFatal
(
1
==
0
,
"Not RA_PDSCH, SI_PDSCH or PDSCH
\n
"
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
]);
stop_meas
(
&
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
if
(
first_symbol_flag
)
{
if
(
first_symbol_flag
)
{
...
@@ -971,9 +963,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -971,9 +963,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dmrs_len
,
dmrs_len
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Nl
);
dlsch0
->
harq_processes
[
harq_pid
]
->
Nl
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_unscrambling_stats
);
start_meas
(
&
ue
->
dlsch_unscrambling_stats
);
#endif
nr_dlsch_unscrambling
(
pdsch_vars
->
llr
[
0
],
nr_dlsch_unscrambling
(
pdsch_vars
->
llr
[
0
],
dlsch0
->
harq_processes
[
harq_pid
]
->
G
,
dlsch0
->
harq_processes
[
harq_pid
]
->
G
,
0
,
0
,
...
@@ -981,9 +972,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -981,9 +972,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dlsch0
->
rnti
);
dlsch0
->
rnti
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_unscrambling_stats
);
stop_meas
(
&
ue
->
dlsch_unscrambling_stats
);
#endif
#if 0
#if 0
LOG_I(PHY," ------ start ldpc decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, nr_slot_rx, harq_pid);
LOG_I(PHY," ------ start ldpc decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, nr_slot_rx, harq_pid);
...
@@ -996,9 +986,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -996,9 +986,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
LOG_I(PHY,"start ldpc decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, nr_slot_rx, harq_pid, ue->pdcch_vars[proc->thread_id][gNB_id]->num_pdcch_symbols);
LOG_I(PHY,"start ldpc decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, nr_slot_rx, harq_pid, ue->pdcch_vars[proc->thread_id][gNB_id]->num_pdcch_symbols);
#endif
#endif
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
start_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#endif
if
(
dlsch_parallel
)
{
if
(
dlsch_parallel
)
{
ret
=
nr_dlsch_decoding_mthread
(
ue
,
ret
=
nr_dlsch_decoding_mthread
(
ue
,
...
@@ -1059,9 +1048,9 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1059,9 +1048,9 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
" --> Unscrambling for CW0 %5.3f
\n
"
,
printf
(
" --> Unscrambling for CW0 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
printf
(
"AbsSubframe %d.%d --> LDPC Decoding for CW0 %5.3f
\n
"
,
printf
(
"AbsSubframe %d.%d --> LDPC Decoding for CW0 %5.3f
\n
"
,
...
@@ -1073,7 +1062,6 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1073,7 +1062,6 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
if
(
is_cw1_active
)
{
if
(
is_cw1_active
)
{
// start ldpc decode for CW 1
// start ldpc decode for CW 1
dlsch1
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch1
->
harq_processes
[
harq_pid
]
->
nb_rb
,
dlsch1
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch1
->
harq_processes
[
harq_pid
]
->
nb_rb
,
...
@@ -1082,17 +1070,13 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1082,17 +1070,13 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dmrs_len
,
dmrs_len
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Nl
);
dlsch1
->
harq_processes
[
harq_pid
]
->
Nl
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_unscrambling_stats
);
start_meas
(
&
ue
->
dlsch_unscrambling_stats
);
#endif
nr_dlsch_unscrambling
(
pdsch_vars
->
llr
[
1
],
nr_dlsch_unscrambling
(
pdsch_vars
->
llr
[
1
],
dlsch1
->
harq_processes
[
harq_pid
]
->
G
,
dlsch1
->
harq_processes
[
harq_pid
]
->
G
,
0
,
0
,
ue
->
frame_parms
.
Nid_cell
,
ue
->
frame_parms
.
Nid_cell
,
dlsch1
->
rnti
);
dlsch1
->
rnti
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_unscrambling_stats
);
stop_meas
(
&
ue
->
dlsch_unscrambling_stats
);
#endif
#if 0
#if 0
LOG_I(PHY,"start ldpc decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, nr_slot_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb);
LOG_I(PHY,"start ldpc decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, nr_slot_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb);
...
@@ -1104,9 +1088,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1104,9 +1088,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
LOG_I(PHY,"start ldpc decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, nr_slot_rx, harq_pid, ue->pdcch_vars[proc->thread_id][gNB_id]->num_pdcch_symbols);
LOG_I(PHY,"start ldpc decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, nr_slot_rx, harq_pid, ue->pdcch_vars[proc->thread_id][gNB_id]->num_pdcch_symbols);
#endif
#endif
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
start_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#endif
if
(
dlsch_parallel
)
{
if
(
dlsch_parallel
)
{
ret1
=
nr_dlsch_decoding_mthread
(
ue
,
ret1
=
nr_dlsch_decoding_mthread
(
ue
,
...
@@ -1141,9 +1124,9 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1141,9 +1124,9 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
LOG_T
(
PHY
,
"CWW sequential dlsch decoding, ret1 = %d
\n
"
,
ret1
);
LOG_T
(
PHY
,
"CWW sequential dlsch decoding, ret1 = %d
\n
"
,
ret1
);
}
}
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
" --> Unscrambling for CW1 %5.3f
\n
"
,
printf
(
" --> Unscrambling for CW1 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
printf
(
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
printf
(
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
...
@@ -1155,7 +1138,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1155,7 +1138,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
LOG_D
(
PHY
,
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
LOG_D
(
PHY
,
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
...
@@ -1372,9 +1355,9 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1372,9 +1355,9 @@ void *UE_thread_slot1_dl_processing(void *arg) {
}
}
/**** Slot1 FE Processing ****/
/**** Slot1 FE Processing ****/
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
]);
start_meas
(
&
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
]);
#endif
// I- start dl slot1 processing
// I- start dl slot1 processing
// do first symbol of next downlink nr_slot_rx for channel estimation
// do first symbol of next downlink nr_slot_rx for channel estimation
/*
/*
...
@@ -1399,9 +1382,8 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1399,9 +1382,8 @@ void *UE_thread_slot1_dl_processing(void *arg) {
{
{
//if( (l != pilot0) && (l != pilot1))
//if( (l != pilot0) && (l != pilot1))
{
{
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
ofdm_demod_stats
);
start_meas
(
&
ue
->
ofdm_demod_stats
);
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP
,
VCD_FUNCTION_IN
);
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,nr_slot_rx,slot1,l);
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,nr_slot_rx,slot1,l);
front_end_fft
(
ue
,
front_end_fft
(
ue
,
...
@@ -1410,9 +1392,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1410,9 +1392,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
0
,
0
,
0
);
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP
,
VCD_FUNCTION_OUT
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
ofdm_demod_stats
);
stop_meas
(
&
ue
->
ofdm_demod_stats
);
#endif
}
}
}
// for l=1..l2
}
// for l=1..l2
...
@@ -1465,14 +1445,13 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1465,14 +1445,13 @@ void *UE_thread_slot1_dl_processing(void *arg) {
//printf(" [slot1 dl processing] ==> Start LLR Comuptation slot1 for AbsSubframe %d.%d \n", proc->frame_rx, proc->nr_slot_rx);
//printf(" [slot1 dl processing] ==> Start LLR Comuptation slot1 for AbsSubframe %d.%d \n", proc->frame_rx, proc->nr_slot_rx);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
]);
stop_meas
(
&
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
//wait until pdcch is decoded
//wait until pdcch is decoded
...
@@ -1490,9 +1469,8 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1490,9 +1469,8 @@ void *UE_thread_slot1_dl_processing(void *arg) {
//printf("AbsSubframe %d.%d Pdsch Procedure (slot1)\n",frame_rx,nr_slot_rx);
//printf("AbsSubframe %d.%d Pdsch Procedure (slot1)\n",frame_rx,nr_slot_rx);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
]);
start_meas
(
&
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
]);
#endif
// start slave thread for Pdsch Procedure (slot1)
// start slave thread for Pdsch Procedure (slot1)
// do procedures for C-RNTI
// do procedures for C-RNTI
uint8_t
gNB_id
=
0
;
uint8_t
gNB_id
=
0
;
...
@@ -1562,13 +1540,11 @@ void *UE_thread_slot1_dl_processing(void *arg) {
...
@@ -1562,13 +1540,11 @@ void *UE_thread_slot1_dl_processing(void *arg) {
proc
->
llr_slot1_available
=
1
;
proc
->
llr_slot1_available
=
1
;
//printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,nr_slot_rx);
//printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,nr_slot_rx);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
]);
stop_meas
(
&
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
if
(
pthread_mutex_lock
(
&
proc
->
mutex_slot1_dl_processing
)
!=
0
)
{
if
(
pthread_mutex_lock
(
&
proc
->
mutex_slot1_dl_processing
)
!=
0
)
{
...
@@ -1711,13 +1687,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1711,13 +1687,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
(
ue
->
symbol_offset
+
i
)
%
(
fp
->
symbols_per_slot
),
(
ue
->
symbol_offset
+
i
)
%
(
fp
->
symbols_per_slot
),
nr_slot_rx
);
nr_slot_rx
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
nr_pbch_channel_estimation
(
ue
,
proc
,
gNB_id
,
nr_slot_rx
,(
ue
->
symbol_offset
+
i
)
%
(
fp
->
symbols_per_slot
),
i
-
1
,(
fp
->
ssb_index
)
&
7
,
fp
->
half_frame_bit
);
nr_pbch_channel_estimation
(
ue
,
proc
,
gNB_id
,
nr_slot_rx
,(
ue
->
symbol_offset
+
i
)
%
(
fp
->
symbols_per_slot
),
i
-
1
,(
fp
->
ssb_index
)
&
7
,
fp
->
half_frame_bit
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
}
}
nr_ue_rsrp_measurements
(
ue
,
gNB_id
,
proc
,
nr_slot_rx
,
0
);
nr_ue_rsrp_measurements
(
ue
,
gNB_id
,
proc
,
nr_slot_rx
,
0
);
...
@@ -1757,9 +1730,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1757,9 +1730,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
for
(
uint16_t
l
=
0
;
l
<
nb_symb_pdcch
;
l
++
)
{
for
(
uint16_t
l
=
0
;
l
<
nb_symb_pdcch
;
l
++
)
{
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
ofdm_demod_stats
);
start_meas
(
&
ue
->
ofdm_demod_stats
);
#endif
nr_slot_fep
(
ue
,
nr_slot_fep
(
ue
,
proc
,
proc
,
l
,
l
,
...
@@ -1783,9 +1754,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1783,9 +1754,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
fp
->
first_carrier_offset
+
(
pdcch_vars
->
pdcch_config
[
n_ss
].
BWPStart
+
coreset_start_rb
)
*
12
,
fp
->
first_carrier_offset
+
(
pdcch_vars
->
pdcch_config
[
n_ss
].
BWPStart
+
coreset_start_rb
)
*
12
,
coreset_nb_rb
);
coreset_nb_rb
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
ofdm_demod_stats
);
stop_meas
(
&
ue
->
ofdm_demod_stats
);
#endif
}
}
dci_cnt
=
dci_cnt
+
nr_ue_pdcch_procedures
(
gNB_id
,
ue
,
proc
,
n_ss
);
dci_cnt
=
dci_cnt
+
nr_ue_pdcch_procedures
(
gNB_id
,
ue
,
proc
,
n_ss
);
}
}
...
@@ -1836,9 +1806,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1836,9 +1806,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
curMsg
->
ue_sched_mode
=
ONLY_PUSCH
;
curMsg
->
ue_sched_mode
=
ONLY_PUSCH
;
pushTpool
(
&
(
get_nrUE_params
()
->
Tpool
),
newElt
);
pushTpool
(
&
(
get_nrUE_params
()
->
Tpool
),
newElt
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
generic_stat
);
start_meas
(
&
ue
->
generic_stat
);
#endif
// do procedures for C-RNTI
// do procedures for C-RNTI
int
ret_pdsch
=
0
;
int
ret_pdsch
=
0
;
if
(
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
==
1
)
{
if
(
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
==
1
)
{
...
@@ -1935,9 +1904,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1935,9 +1904,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
\n
"
,
nr_slot_rx
);
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
\n
"
,
nr_slot_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC
,
VCD_FUNCTION_IN
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
start_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
#endif
if
(
ret_pdsch
>=
0
)
if
(
ret_pdsch
>=
0
)
nr_ue_dlsch_procedures
(
ue
,
nr_ue_dlsch_procedures
(
ue
,
...
@@ -1949,10 +1916,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1949,10 +1916,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
&
ue
->
dlsch_errors
[
gNB_id
],
&
ue
->
dlsch_errors
[
gNB_id
],
dlsch_parallel
);
dlsch_parallel
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
stop_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
"[SFN %d] Slot1: Pdsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
pdsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[SFN %d] Slot1: Pdsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
pdsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
#else
...
@@ -1960,7 +1925,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1960,7 +1925,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
LOG_D
(
PHY
,
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
// deactivate dlsch once dlsch proc is done
// deactivate dlsch once dlsch proc is done
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
=
0
;
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
=
0
;
...
@@ -1969,9 +1934,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1969,9 +1934,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
}
}
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
generic_stat
);
start_meas
(
&
ue
->
generic_stat
);
#endif
#if 0
#if 0
...
@@ -2036,8 +2000,8 @@ if (nr_slot_rx==9) {
...
@@ -2036,8 +2000,8 @@ if (nr_slot_rx==9) {
}
}
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat
);
stop_meas
(
&
ue
->
generic_stat
);
#if PHYSIM
printf
(
"after tubo until end of Rx %5.2f
\n
"
,
ue
->
generic_stat
.
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"after tubo until end of Rx %5.2f
\n
"
,
ue
->
generic_stat
.
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
...
@@ -2048,14 +2012,12 @@ phy_procedures_emos_UE_RX(ue,slot,gNB_id);
...
@@ -2048,14 +2012,12 @@ phy_procedures_emos_UE_RX(ue,slot,gNB_id);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_OUT
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
phy_proc_rx
[
proc
->
thread_id
]);
stop_meas
(
&
ue
->
phy_proc_rx
[
proc
->
thread_id
]);
#if
DISABLE_LOG_X
#if
PHYSIM
printf
(
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
#else
LOG_D
(
PHY
,
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
#endif
//#endif //pdsch
//#endif //pdsch
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
2bfaedcd
...
@@ -429,7 +429,9 @@ int main(int argc, char **argv)
...
@@ -429,7 +429,9 @@ int main(int argc, char **argv)
FILE
*
scg_fd
=
NULL
;
FILE
*
scg_fd
=
NULL
;
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:d:e:m:w:T:U:q"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:D:e:m:w:T:U:q"
))
!=
-
1
)
{
switch
(
c
)
{
switch
(
c
)
{
case
'f'
:
case
'f'
:
scg_fd
=
fopen
(
optarg
,
"r"
);
scg_fd
=
fopen
(
optarg
,
"r"
);
...
@@ -595,7 +597,7 @@ int main(int argc, char **argv)
...
@@ -595,7 +597,7 @@ int main(int argc, char **argv)
case
'b'
:
case
'b'
:
g_rbSize
=
atoi
(
optarg
);
g_rbSize
=
atoi
(
optarg
);
break
;
break
;
case
'
d
'
:
case
'
D
'
:
dlsch_threads
=
atoi
(
optarg
);
dlsch_threads
=
atoi
(
optarg
);
break
;
break
;
case
'e'
:
case
'e'
:
...
@@ -668,7 +670,7 @@ int main(int argc, char **argv)
...
@@ -668,7 +670,7 @@ int main(int argc, char **argv)
printf
(
"-U Change DMRS Config, arguments list DMRS TYPE{0=A,1=B} DMRS AddPos{0:2} DMRS ConfType{1:2}, e.g. -U 3 0 2 1
\n
"
);
printf
(
"-U Change DMRS Config, arguments list DMRS TYPE{0=A,1=B} DMRS AddPos{0:2} DMRS ConfType{1:2}, e.g. -U 3 0 2 1
\n
"
);
printf
(
"-P Print DLSCH performances
\n
"
);
printf
(
"-P Print DLSCH performances
\n
"
);
printf
(
"-w Write txdata to binary file (one frame)
\n
"
);
printf
(
"-w Write txdata to binary file (one frame)
\n
"
);
printf
(
"-
d
number of dlsch threads, 0: no dlsch parallelization
\n
"
);
printf
(
"-
D
number of dlsch threads, 0: no dlsch parallelization
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
break
;
break
;
}
}
...
@@ -685,7 +687,7 @@ int main(int argc, char **argv)
...
@@ -685,7 +687,7 @@ int main(int argc, char **argv)
if
(
snr1set
==
0
)
if
(
snr1set
==
0
)
snr1
=
snr0
+
10
;
snr1
=
snr0
+
10
;
init_dlsch_tpool
(
dlsch_threads
);
RC
.
gNB
=
(
PHY_VARS_gNB
**
)
malloc
(
sizeof
(
PHY_VARS_gNB
*
));
RC
.
gNB
=
(
PHY_VARS_gNB
**
)
malloc
(
sizeof
(
PHY_VARS_gNB
*
));
...
@@ -977,7 +979,11 @@ int main(int argc, char **argv)
...
@@ -977,7 +979,11 @@ int main(int argc, char **argv)
reset_meas
(
&
msgDataTx
->
phy_proc_tx
);
reset_meas
(
&
msgDataTx
->
phy_proc_tx
);
gNB
->
phy_proc_tx_0
=
&
msgDataTx
->
phy_proc_tx
;
gNB
->
phy_proc_tx_0
=
&
msgDataTx
->
phy_proc_tx
;
pushTpool
(
gNB
->
threadPool
,
msgL1Tx
);
pushTpool
(
gNB
->
threadPool
,
msgL1Tx
);
if
(
dlsch_threads
)
{
init_dlsch_tpool
(
dlsch_threads
);
pthread_t
dlsch0_threads
;
threadCreate
(
&
dlsch0_threads
,
dlsch_thread
,
(
void
*
)
UE
,
"DLthread"
,
-
1
,
OAI_PRIORITY_RT_MAX
-
1
);
}
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
.
2
)
{
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
.
2
)
{
varArray_t
*
table_tx
=
initVarArray
(
1000
,
sizeof
(
double
));
varArray_t
*
table_tx
=
initVarArray
(
1000
,
sizeof
(
double
));
...
...
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