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
wangwenhui
OpenXG-RAN
Commits
bc4b6cf2
Commit
bc4b6cf2
authored
Jun 26, 2019
by
Wang Tsu-Han
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adding timing measurement for RT execution
parent
08e91003
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
71 additions
and
37 deletions
+71
-37
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-1
executables/nr-gnb.c
executables/nr-gnb.c
+22
-0
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
+24
-24
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+10
-2
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+5
-1
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+0
-6
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+2
-2
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
bc4b6cf2
...
...
@@ -21,7 +21,7 @@
# Author: laurent THOMAS, Lionel GAUTHIER
cmake_minimum_required
(
VERSION
3.0
)
cmake_minimum_required
(
VERSION
2.8
)
#############################################
# Base directories, compatible with legacy OAI building
...
...
executables/nr-gnb.c
View file @
bc4b6cf2
...
...
@@ -684,6 +684,27 @@ static void* gNB_thread_prach( void* param ) {
extern
void
init_td_thread
(
PHY_VARS_gNB
*
);
extern
void
init_te_thread
(
PHY_VARS_gNB
*
);
static
void
*
process_stats_thread
(
void
*
param
)
{
PHY_VARS_gNB
*
gNB
=
(
PHY_VARS_gNB
*
)
param
;
reset_meas
(
&
gNB
->
dlsch_encoding_stats
);
reset_meas
(
&
gNB
->
dlsch_scrambling_stats
);
reset_meas
(
&
gNB
->
dlsch_modulation_stats
);
wait_sync
(
"process_stats_thread"
);
while
(
!
oai_exit
)
{
sleep
(
1
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"pdsch_encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_scrambling_stats
,
"pdsch_scrambling"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_modulation_stats
,
"pdsch_modulation"
,
NULL
,
NULL
);
}
return
(
NULL
);
}
void
init_gNB_proc
(
int
inst
)
{
int
i
=
0
;
int
CC_id
;
...
...
@@ -731,6 +752,7 @@ void init_gNB_proc(int inst) {
threadCreate
(
&
L1_proc_tx
->
pthread
,
gNB_L1_thread_tx
,
gNB
,
"L1_proc_tx"
,
-
1
,
OAI_PRIORITY_RT
);
}
if
(
opp_enabled
==
1
)
threadCreate
(
&
proc
->
L1_stats_thread
,
process_stats_thread
,(
void
*
)
gNB
,
"time_meas"
,
-
1
,
OAI_PRIORITY_RT_LOW
);
//pthread_create( &proc->pthread_prach, attr_prach, gNB_thread_prach, gNB );
char
name
[
16
];
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
View file @
bc4b6cf2
...
...
@@ -271,17 +271,17 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
for
(
i
=
0
;
i
<
block_length
;
i
++
)
{
c
[
i
]
=
(
test_input
[
i
/
8
]
&
(
1
<<
(
i
&
7
)))
>>
(
i
&
7
);
//printf("c(%d,%d)=%d\n",j,i,temp);
}
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -296,11 +296,11 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -308,12 +308,12 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
memcpy
(
&
channel_input
[
0
],
&
c
[
2
*
Zc
],
(
block_length
-
2
*
Zc
)
*
sizeof
(
unsigned
char
));
memcpy
(
&
channel_input
[
block_length
-
2
*
Zc
],
&
d
[
0
],
((
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
)
*
sizeof
(
unsigned
char
));
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
...
...
@@ -408,7 +408,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
#if 0
for (i=0; i<block_length; i++) {
for (j=0; j<n_segments; j++) {
...
...
@@ -441,11 +441,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
#endif
#endif
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -460,11 +460,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -472,7 +472,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
/*
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
...
...
@@ -513,7 +513,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
AssertFatal
(
1
==
0
,
"Need AVX2 for now
\n
"
);
#endif
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
...
...
@@ -613,7 +613,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
#if 0
for (i=0; i<block_length; i++) {
//for (j=0; j<n_segments; j++) {
...
...
@@ -649,11 +649,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
#endif
#endif
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -668,11 +668,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -680,7 +680,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
/*
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
...
...
@@ -726,7 +726,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
AssertFatal
(
1
==
0
,
"Need AVX2 for now
\n
"
);
#endif
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
bc4b6cf2
...
...
@@ -74,7 +74,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
int
frame
,
uint8_t
slot
,
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_config_request_t
*
config
)
{
nfapi_nr_config_request_t
*
config
,
time_stats_t
*
dlsch_encoding_stats
,
time_stats_t
*
dlsch_scrambling_stats
,
time_stats_t
*
dlsch_modulation_stats
)
{
NR_DL_gNB_HARQ_t
*
harq
=
dlsch
->
harq_processes
[
dci_alloc
->
harq_pid
];
nfapi_nr_dl_config_dlsch_pdu_rel15_t
*
rel15
=
&
harq
->
dlsch_pdu
.
dlsch_pdu_rel15
;
...
...
@@ -89,7 +92,9 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
/// CRC, coding, interleaving and rate matching
AssertFatal
(
harq
->
pdu
!=
NULL
,
"harq->pdu is null
\n
"
);
start_meas
(
dlsch_encoding_stats
);
nr_dlsch_encoding
(
harq
->
pdu
,
frame
,
slot
,
dlsch
,
frame_parms
);
stop_meas
(
dlsch_encoding_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH encoding:
\n
Payload:
\n
"
);
for
(
int
i
=
0
;
i
<
harq
->
B
>>
7
;
i
++
)
{
...
...
@@ -107,6 +112,7 @@ printf("\n");
#endif
/// scrambling
start_meas
(
dlsch_scrambling_stats
);
for
(
int
q
=
0
;
q
<
rel15
->
nb_codewords
;
q
++
)
memset
((
void
*
)
scrambled_output
[
q
],
0
,
(
encoded_length
>>
5
)
*
sizeof
(
uint32_t
));
uint16_t
n_RNTI
=
(
pdcch_params
.
search_space_type
==
NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC
)
?
\
...
...
@@ -120,6 +126,7 @@ printf("\n");
Nid
,
n_RNTI
,
scrambled_output
[
q
]);
stop_meas
(
dlsch_scrambling_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH scrambling:
\n
"
);
for
(
int
i
=
0
;
i
<
encoded_length
>>
8
;
i
++
)
{
...
...
@@ -130,12 +137,13 @@ for (int i=0; i<encoded_length>>8; i++) {
#endif
/// Modulation
start_meas
(
dlsch_modulation_stats
);
for
(
int
q
=
0
;
q
<
rel15
->
nb_codewords
;
q
++
)
nr_modulation
(
scrambled_output
[
q
],
encoded_length
,
Qm
,
mod_symbs
[
q
]);
stop_meas
(
dlsch_modulation_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH Modulation: Qm %d(%d)
\n
"
,
Qm
,
nb_symbols
);
for
(
int
i
=
0
;
i
<
nb_symbols
>>
3
;
i
++
)
{
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
bc4b6cf2
...
...
@@ -74,7 +74,11 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
int
frame
,
uint8_t
slot
,
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_config_request_t
*
config
);
nfapi_nr_config_request_t
*
config
,
time_stats_t
*
dlsch_encoding_stats
,
time_stats_t
*
dlsch_scrambling_stats
,
time_stats_t
*
dlsch_modulation_stats
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
bc4b6cf2
...
...
@@ -366,7 +366,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
//printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG);
//start_meas(te_stats);
for
(
r
=
0
;
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
r
++
)
{
//d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
//channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
...
...
@@ -398,7 +397,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
//ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
ldpc_encoder_optim_8seg
(
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
,
Kr
,
BG
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
NULL
,
NULL
,
NULL
,
NULL
);
//stop_meas(te_stats);
//printf("end ldpc encoder -- output\n");
#ifdef DEBUG_DLSCH_CODING
...
...
@@ -425,7 +423,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
mod_order
,
nb_rb
);
#endif
//start_meas(rm_stats);
#ifdef DEBUG_DLSCH_CODING
printf
(
"rvidx in encoding = %d
\n
"
,
rel15
.
redundancy_version
);
#endif
...
...
@@ -447,14 +444,11 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
+
r_offset
],
r_offset
);
#endif
//stop_meas(rm_stats);
//start_meas(i_stats);
nr_interleaving_ldpc
(
E
,
mod_order
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
+
r_offset
);
//stop_meas(i_stats);
#ifdef DEBUG_DLSCH_CODING
...
...
openair1/PHY/NR_TRANSPORT/nr_pbch.c
View file @
bc4b6cf2
...
...
@@ -239,7 +239,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
uint8_t
nushift
;
uint32_t
unscrambling_mask
;
uint64_t
a_reversed
=
0
;
LOG_
I
(
PHY
,
"PBCH generation started
\n
"
);
LOG_
D
(
PHY
,
"PBCH generation started
\n
"
);
///Payload generation
memset
((
void
*
)
pbch
,
0
,
sizeof
(
NR_gNB_PBCH
));
pbch
->
pbch_a
=
0
;
...
...
@@ -267,7 +267,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
else
pbch
->
pbch_a
|=
((
config
->
sch_config
.
ssb_subcarrier_offset
.
value
>>
4
)
&
1
)
<<
29
;
//MSB of k_SSB (bit index 4)
LOG_
I
(
PHY
,
"After extra byte: pbch_a = 0x%08x
\n
"
,
pbch
->
pbch_a
);
LOG_
D
(
PHY
,
"After extra byte: pbch_a = 0x%08x
\n
"
,
pbch
->
pbch_a
);
// Payload interleaving
...
...
openair1/PHY/defs_gNB.h
View file @
bc4b6cf2
...
...
@@ -465,6 +465,8 @@ typedef struct gNB_L1_proc_t_s {
pthread_t
pthread_single
;
/// pthread structure for asychronous RX/TX processing thread
pthread_t
pthread_asynch_rxtx
;
/// pthread structure for printing time meas
pthread_t
L1_stats_thread
;
/// flag to indicate first RX acquisition
int
first_rx
;
/// flag to indicate first TX transmission
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
bc4b6cf2
...
...
@@ -196,7 +196,11 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
&
gNB
->
pdcch_vars
.
dci_alloc
[
0
],
gNB
->
nr_gold_pdsch_dmrs
[
slot
],
gNB
->
common_vars
.
txdataF
,
AMP
,
frame
,
slot
,
fp
,
cfg
);
AMP
,
frame
,
slot
,
fp
,
cfg
,
&
gNB
->
dlsch_encoding_stats
,
&
gNB
->
dlsch_scrambling_stats
,
&
gNB
->
dlsch_modulation_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH
,
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