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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
80c40669
Commit
80c40669
authored
Oct 09, 2024
by
Yi-Hung Chang
Committed by
Romain Beurdouche
Dec 16, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(nrLDPC_coding_interface): Use reworked interface in UE
parent
00e1ad12
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
629 additions
and
802 deletions
+629
-802
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+6
-5
executables/nr-uesoftmodem.h
executables/nr-uesoftmodem.h
+0
-2
executables/softmodem-common.h
executables/softmodem-common.h
+0
-3
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+2
-0
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+274
-355
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+48
-42
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+4
-0
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+130
-171
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+96
-108
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+3
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+66
-115
No files found.
executables/nr-uesoftmodem.c
View file @
80c40669
...
...
@@ -42,6 +42,7 @@
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
#include "openair1/PHY/MODULATION/nr_modulation.h"
#include "PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface.h"
#include "PHY/phy_vars_nr_ue.h"
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
...
...
@@ -219,7 +220,6 @@ void set_options(int CC_id, PHY_VARS_NR_UE *UE){
UE
->
rf_map
.
card
=
0
;
UE
->
rf_map
.
chain
=
CC_id
+
0
;
UE
->
max_ldpc_iterations
=
nrUE_params
.
max_ldpc_iterations
;
UE
->
ldpc_offload_enable
=
nrUE_params
.
ldpc_offload_flag
;
UE
->
UE_scan_carrier
=
nrUE_params
.
UE_scan_carrier
;
UE
->
UE_fo_compensation
=
nrUE_params
.
UE_fo_compensation
;
UE
->
if_freq
=
nrUE_params
.
if_freq
;
...
...
@@ -388,6 +388,7 @@ configmodule_interface_t *uniqCfg = NULL;
// A global var to reduce the changes size
ldpc_interface_t
ldpc_interface
=
{
0
},
ldpc_interface_offload
=
{
0
};
nrLDPC_coding_interface_t
nrLDPC_coding_interface
=
{
0
};
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -427,10 +428,8 @@ int main(int argc, char **argv)
init_opt
();
if
(
nrUE_params
.
ldpc_offload_flag
)
load_LDPClib
(
"_t2"
,
&
ldpc_interface_offload
);
load_LDPClib
(
NULL
,
&
ldpc_interface
);
int
ret_loader
=
load_nrLDPC_coding_interface
(
NULL
,
&
nrLDPC_coding_interface
);
AssertFatal
(
ret_loader
==
0
,
"error loading LDPC library
\n
"
);
if
(
ouput_vcd
)
{
vcd_signal_dumper_init
(
"/tmp/openair_dump_nrUE.vcd"
);
...
...
@@ -445,6 +444,8 @@ int main(int argc, char **argv)
for
(
int
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_UE_g
[
inst
][
CC_id
]
=
malloc
(
sizeof
(
*
PHY_vars_UE_g
[
inst
][
CC_id
]));
memset
(
PHY_vars_UE_g
[
inst
][
CC_id
],
0
,
sizeof
(
*
PHY_vars_UE_g
[
inst
][
CC_id
]));
// All instances use the same coding interface
PHY_vars_UE_g
[
inst
][
CC_id
]
->
nrLDPC_coding_interface
=
nrLDPC_coding_interface
;
}
}
...
...
executables/nr-uesoftmodem.h
View file @
80c40669
...
...
@@ -42,7 +42,6 @@
{"dlsch-parallel", CONFIG_HLP_DLSCH_PARA, 0, .u8ptr=NULL, .defintval=0, TYPE_UINT8, 0}, \
{"offset-divisor", CONFIG_HLP_OFFSET_DIV, 0, .uptr=&nrUE_params.ofdm_offset_divisor, .defuintval=8, TYPE_UINT32, 0}, \
{"max-ldpc-iterations", CONFIG_HLP_MAX_LDPC_ITERATIONS, 0, .iptr=&nrUE_params.max_ldpc_iterations, .defuintval=8, TYPE_UINT8, 0}, \
{"ldpc-offload-enable", CONFIG_HLP_LDPC_OFFLOAD, PARAMFLAG_BOOL, .iptr=&(nrUE_params.ldpc_offload_flag), .defintval=0, TYPE_INT, 0}, \
{"V" , CONFIG_HLP_VCD, PARAMFLAG_BOOL, .iptr=&nrUE_params.vcdflag, .defintval=0, TYPE_INT, 0}, \
{"uecap_file", CONFIG_HLP_UECAP_FILE, 0, .strptr=&nrUE_params.uecap_file, .defstrval="./uecap_ports1.xml", TYPE_STRING, 0}, \
{"reconfig-file", CONFIG_HLP_RE_CFG_FILE, 0, .strptr=&nrUE_params.reconfig_file, .defstrval="./reconfig.raw", TYPE_STRING, 0}, \
...
...
@@ -91,7 +90,6 @@ typedef struct {
int
nb_antennas_tx
;
int
N_RB_DL
;
int
ssb_start_subcarrier
;
int
ldpc_offload_flag
;
double
time_sync_P
;
double
time_sync_I
;
unsigned
int
ntn_koffset
;
...
...
executables/softmodem-common.h
View file @
80c40669
...
...
@@ -108,7 +108,6 @@ extern "C"
#define CONFIG_HLP_CONTINUOUS_TX "perform continuous transmission, even in TDD mode (to work around USRP issues)\n"
#define CONFIG_HLP_STATS_DISABLE "disable globally the stats generation and persistence"
#define CONFIG_HLP_NOITTI "Do not start itti threads, call queue processing in place, inside the caller thread"
#define CONFIG_HLP_LDPC_OFFLOAD "Enable LDPC offload to AMD Xilinx T2 telco card\n"
#define CONFIG_HLP_SYNC_REF "UE acts a Sync Reference in Sidelink. 0-none 1-GNB 2-GNSS 4-localtiming\n"
#define CONFIG_HLP_TADV \
"Set RF board timing_advance to compensate fix delay inside the RF board between Rx and Tx timestamps (RF board internal " \
...
...
@@ -181,7 +180,6 @@ extern int usrp_tx_thread;
{"continuous-tx", CONFIG_HLP_CONTINUOUS_TX, PARAMFLAG_BOOL, .iptr=&CONTINUOUS_TX, .defintval=0, TYPE_INT, 0}, \
{"disable-stats", CONFIG_HLP_STATS_DISABLE, PARAMFLAG_BOOL, .iptr=&stats_disabled, .defintval=0, TYPE_INT, 0}, \
{"no-itti-threads", CONFIG_HLP_NOITTI, PARAMFLAG_BOOL, .iptr=&softmodem_params.no_itti, .defintval=0, TYPE_INT, 0}, \
{"ldpc-offload-enable", CONFIG_HLP_LDPC_OFFLOAD, PARAMFLAG_BOOL, .iptr=&LDPC_OFFLOAD_FLAG, .defstrval=0, TYPE_INT, 0}, \
{"sync-ref", CONFIG_HLP_SYNC_REF, 0, .uptr=&SYNC_REF, .defintval=0, TYPE_UINT, 0}, \
{"A" , CONFIG_HLP_TADV, 0, .iptr=&softmodem_params.command_line_sample_advance,.defintval=0, TYPE_INT, 0}, \
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, .iptr=&softmodem_params.threequarter_fs, .defintval=0, TYPE_INT, 0}, \
...
...
@@ -231,7 +229,6 @@ extern int usrp_tx_thread;
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
}
// clang-format on
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
80c40669
...
...
@@ -356,6 +356,7 @@ void free_nr_ue_dl_harq(NR_DL_UE_HARQ_t harq_list[2][NR_MAX_DLSCH_HARQ_PROCESSES
free_and_zero
(
harq_list
[
j
][
i
].
c
[
r
]);
free_and_zero
(
harq_list
[
j
][
i
].
d
[
r
]);
}
free_and_zero
(
harq_list
[
j
][
i
].
b
);
free_and_zero
(
harq_list
[
j
][
i
].
c
);
free_and_zero
(
harq_list
[
j
][
i
].
d
);
}
...
...
@@ -406,6 +407,7 @@ void nr_init_dl_harq_processes(NR_DL_UE_HARQ_t harq_list[2][NR_MAX_DLSCH_HARQ_PR
memset
(
harq_list
[
j
]
+
i
,
0
,
sizeof
(
NR_DL_UE_HARQ_t
));
init_downlink_harq_status
(
harq_list
[
j
]
+
i
);
harq_list
[
j
][
i
].
b
=
malloc16_clear
(
a_segments
*
1056
);
harq_list
[
j
][
i
].
c
=
malloc16
(
a_segments
*
sizeof
(
uint8_t
*
));
harq_list
[
j
][
i
].
d
=
malloc16
(
a_segments
*
sizeof
(
int16_t
*
));
const
int
sz
=
5
*
8448
*
sizeof
(
int16_t
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
80c40669
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
80c40669
...
...
@@ -65,50 +65,51 @@ void nr_conjch0_mult_ch1(int *ch0,
unsigned
short
nb_rb
,
unsigned
char
output_shift0
);
/** \brief This is the top-level entry point for DLSCH decoding in UE. It should be replicated on several
threads (on multi-core machines) corresponding to different HARQ processes. The routine first
computes the segmentation information, followed by rate dematching and sub-block deinterleaving the of the
received LLRs computed by dlsch_demodulation for each transport block segment. It then calls the
turbo-decoding algorithm for each segment and stops after either after unsuccesful decoding of at least
one segment or correct decoding of all segments. Only the segment CRCs are check for the moment, the
overall CRC is ignored. Finally transport block reassembly is performed.
@param phy_vars_ue Pointer to ue variables
@param proc
@param eNB_id
@param dlsch_llr Pointer to LLR values computed by dlsch_demodulation
@param frame_parms Pointer to frame descriptor
@param dlsch Pointer to DLSCH descriptor
@param harq_process
@param frame Frame number
@param nb_symb_sch
@param nr_slot_rx Slot number
@param harq_pid
@param b_size
@param b
/** \brief This is the alternative top-level entry point for DLSCH decoding in UE.
It handles all the HARQ processes in only one call. The routine first
computes the segmentation information and then call LDPC decoder on the
received LLRs computed by dlsch_demodulation.
It stops after either unsuccesful decoding of at least
one segment or correct decoding of all segments. Only the segment CRCs are checked for the moment, the
overall CRC is ignored. Finally transport block reassembly is performed.
@param[in] phy_vars_ue Pointer to ue variables
@param[in] proc
@param[in] dlsch_llr Pointers to LLR values computed by dlsch_demodulation
@param[in] b
@param[in] G array of Gs
@param[in] nb_dlsch number of active downlink shared channels
@param[in] DLSCH_ids array of active downlink shared channels
@returns 0 on success, 1 on unsuccessful decoding
*/
uint32_t
nr_dlsch_decoding
(
PHY_VARS_NR_UE
*
phy_vars_ue
,
const
UE_nr_rxtx_proc_t
*
proc
,
int
eNB_id
,
short
*
dlsch_llr
,
NR_DL_FRAME_PARMS
*
frame_parms
,
NR_UE_DLSCH_t
*
dlsch
,
NR_DL_UE_HARQ_t
*
harq_process
,
uint32_t
frame
,
uint16_t
nb_symb_sch
,
uint8_t
nr_slot_rx
,
uint8_t
harq_pid
,
int
b_size
,
uint8_t
b
[
b_size
],
int
G
);
short
**
dlsch_llr
,
uint8_t
**
b
,
int
*
G
,
int
nb_dlsch
,
uint8_t
*
DLSCH_ids
);
/** \brief This is the alternative top-level entry point for ULSCH encoding in UE.
It handles all the HARQ processes in only one call. The routine first
computes the segmentation information, followed by LDPC encoding algorithm of the
Transport Block.
@param[in] phy_vars_ue pointer to ue variables
@param[in] ulsch Pointer to ULSCH descriptor
@param[in] frame frame index
@param[in] slot slot index
@param[in] G array of Gs
@param[in] nb_ulsch number of uplink shared channels
@param[in] ULSCH_ids array of uplink shared channel ids
@returns 0 on success, -1 on unsuccessful decoding
*/
int
nr_ulsch_encoding
(
PHY_VARS_NR_UE
*
ue
,
NR_UE_ULSCH_t
*
ulsch
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
harq_pid
,
uint32_t
tb_size
,
unsigned
int
G
);
NR_UE_ULSCH_t
*
ulsch
,
const
uint32_t
frame
,
const
uint8_t
slot
,
unsigned
int
*
G
,
int
nb_ulsch
,
uint8_t
*
ULSCH_ids
);
/*! \brief Perform PUSCH scrambling. TS 38.211 V15.4.0 subclause 6.3.1.1
@param[in] in Pointer to input bits
...
...
@@ -125,18 +126,23 @@ void nr_pusch_codeword_scrambling(uint8_t *in,
bool
uci_on_pusch
,
uint32_t
*
out
);
/** \brief Perform the following functionalities:
/** \brief Alternative entry point to UE uplink shared channels procedures.
It handles all the HARQ processes in only one call.
Performs the following functionalities:
- encoding
- scrambling
- modulation
- transform precoding
@param[in] UE pointer to ue variables
@param[in] frame frame index
@param[in] slot slot index
@param[in] phy_data PHY layer informations
@param[in] c16_t
*/
void
nr_ue_ulsch_procedures
(
PHY_VARS_NR_UE
*
UE
,
const
unsigned
char
harq_pid
,
const
uint32_t
frame
,
const
uint8_t
slot
,
const
int
gNB_id
,
nr_phy_data_tx_t
*
phy_data
,
c16_t
**
txdataF
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
View file @
80c40669
...
...
@@ -104,6 +104,8 @@ typedef struct {
uint8_t
first_rx
;
/// DLSCH status flag indicating
SCH_status_t
status
;
/// Pointer to the payload (38.212 V15.4.0 section 5.1)
uint8_t
*
b
;
/// Pointers to transport block segments
uint8_t
**
c
;
/// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
...
...
@@ -126,6 +128,8 @@ typedef struct {
/// Last index of LLR buffer that contains information.
/// Used for computing LDPC decoder R
int
llrLen
;
/// Number of segments processed so far
uint32_t
processedSegments
;
decode_abort_t
abort_decode
;
}
NR_DL_UE_HARQ_t
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
View file @
80c40669
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
80c40669
This diff is collapsed.
Click to expand it.
openair1/PHY/defs_nr_UE.h
View file @
80c40669
...
...
@@ -89,6 +89,7 @@
#include "impl_defs_nr.h"
#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface.h"
#include "PHY/TOOLS/tools_defs.h"
#include "common/platform_types.h"
#include "NR_UE_TRANSPORT/nr_transport_ue.h"
...
...
@@ -481,9 +482,10 @@ typedef struct PHY_VARS_NR_UE_s {
/// N0 (used for abstraction)
double
N0
;
/// NR LDPC coding related
nrLDPC_coding_interface_t
nrLDPC_coding_interface
;
uint8_t
max_ldpc_iterations
;
int
ldpc_offload_enable
;
/// SRS variables
nr_srs_info_t
*
nr_srs_info
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
80c40669
This diff is collapsed.
Click to expand it.
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