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
280423ba
Commit
280423ba
authored
Dec 06, 2023
by
Romain Beurdouche
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(ldpc-offload-xdma): feature working prototype of full slot decoding library
parent
b9150389
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
980 additions
and
486 deletions
+980
-486
CMakeLists.txt
CMakeLists.txt
+20
-9
executables/nr-gnb.c
executables/nr-gnb.c
+1
-1
openair1/PHY/CODING/nrLDPC_decoder_offload_xdma/nr_ulsch_process_slot.c
...ODING/nrLDPC_decoder_offload_xdma/nr_ulsch_process_slot.c
+850
-0
openair1/PHY/CODING/nr_ulsch_process_slot.h
openair1/PHY/CODING/nr_ulsch_process_slot.h
+33
-0
openair1/PHY/CODING/nr_ulsch_process_slot_load.c
openair1/PHY/CODING/nr_ulsch_process_slot_load.c
+53
-0
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+4
-0
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+0
-471
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+1
-1
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+17
-3
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
No files found.
CMakeLists.txt
View file @
280423ba
...
...
@@ -976,10 +976,18 @@ add_custom_target( nrLDPC_decoder_kernels_CL
SOURCES
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_CL.c
)
set
(
PHY_NR_ULSCH_SRC
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_decoder_offload_xdma/nr_ulsch_process_slot.c
)
set
(
PHY_NR_CODINGIF
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_load.c;
)
set
(
PHY_NR_ULSCHIF
${
OPENAIR1_DIR
}
/PHY/CODING/nr_ulsch_process_slot_load.c;
)
add_library
(
ldpc_orig MODULE
${
PHY_LDPC_ORIG_SRC
}
)
target_link_libraries
(
ldpc_orig PRIVATE ldpc_gen_HEADERS
)
add_library
(
ldpc_optim MODULE
${
PHY_LDPC_OPTIM_SRC
}
)
...
...
@@ -1014,6 +1022,8 @@ add_library(coding MODULE ${PHY_TURBOSRC} )
add_library
(
dfts MODULE
${
OPENAIR1_DIR
}
/PHY/TOOLS/oai_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/oai_dfts_neon.c
)
add_library
(
_nr_ulsch_process_slot MODULE
${
PHY_NR_ULSCH_SRC
}
)
target_link_libraries
(
_nr_ulsch_process_slot PRIVATE ldpc_xdma
)
set
(
PHY_SRC_COMMON
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/dci_tools_common.c
...
...
@@ -1204,6 +1214,7 @@ set(PHY_SRC_UE
${
PHY_POLARSRC
}
${
PHY_SMALLBLOCKSRC
}
${
PHY_NR_CODINGIF
}
${
PHY_NR_ULSCHIF
}
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/pucch_rx.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/srs_rx.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_uci_tools_common.c
...
...
@@ -2285,7 +2296,7 @@ target_link_libraries(nr-softmodem PRIVATE
ITTI
${
NAS_UE_LIB
}
lte_rrc nr_rrc
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU SIMU_ETH
x2ap f1ap m2ap m3ap e1ap
-Wl,--end-group z dl
ldpc_xdma
)
-Wl,--end-group z dl
)
target_link_libraries
(
nr-softmodem PRIVATE pthread m CONFIG_LIB rt crypt
${
CRYPTO_LIBRARIES
}
${
OPENSSL_LIBRARIES
}
sctp
${
ATLAS_LIBRARIES
}
)
target_link_libraries
(
nr-softmodem PRIVATE
${
T_LIB
}
)
...
...
@@ -2423,7 +2434,7 @@ add_executable(ldpctest
${
SHLIB_LOADER_SOURCES
}
)
add_dependencies
(
ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc
)
add_dependencies
(
ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc
_nr_ulsch_process_slot
)
if
(
ENABLE_LDPC_CUDA
)
add_dependencies
(
ldpctest ldpc_cuda
)
endif
()
...
...
@@ -2449,7 +2460,7 @@ add_executable(nr_dlschsim
)
target_link_libraries
(
nr_dlschsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
)
target_link_libraries
(
nr_dlschsim PRIVATE asn1_nr_rrc_hdrs
)
...
...
@@ -2467,7 +2478,7 @@ add_executable(nr_pbchsim
)
target_link_libraries
(
nr_pbchsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
)
target_link_libraries
(
nr_pbchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
...
...
@@ -2487,7 +2498,7 @@ add_executable(nr_pucchsim
)
target_link_libraries
(
nr_pucchsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
)
target_link_libraries
(
nr_pucchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
...
...
@@ -2512,7 +2523,7 @@ add_executable(nr_dlsim
)
target_link_libraries
(
nr_dlsim PRIVATE
-Wl,--start-group UTIL SIMU SIMU_ETH PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON nr_rrc CONFIG_LIB L2_NR HASHTABLE x2ap SECU_CN ngap -lz -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
)
target_link_libraries
(
nr_dlsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
...
...
@@ -2530,7 +2541,7 @@ add_executable(nr_prachsim
${
SHLIB_LOADER_SOURCES
}
)
target_link_libraries
(
nr_prachsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB CONFIG_LIB -lz -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
ldpc_xdma
)
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
)
target_link_libraries
(
nr_prachsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
add_executable
(
nr_ulschsim
...
...
@@ -2550,7 +2561,7 @@ add_executable(nr_ulschsim
)
target_link_libraries
(
nr_ulschsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI dl
)
target_link_libraries
(
nr_ulschsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
...
...
@@ -2580,7 +2591,7 @@ endif()
target_link_libraries
(
nr_ulsim PRIVATE
-Wl,--start-group UTIL SIMU SIMU_ETH PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON nr_rrc CONFIG_LIB L2_NR HASHTABLE x2ap SECU_CN ngap -lz -Wl,--end-group
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
ldpc_xdma
m pthread
${
ATLAS_LIBRARIES
}
${
T_LIB
}
ITTI
${
OPENSSL_LIBRARIES
}
dl
)
target_link_libraries
(
nr_ulsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs
)
...
...
executables/nr-gnb.c
View file @
280423ba
...
...
@@ -507,7 +507,7 @@ void init_eNB_afterRU(void) {
gNB
=
RC
.
gNB
[
inst
];
#if 1
gNB
->
ldpc_f
pga_flag
=
ldpc_offload_flag
;
gNB
->
ldpc_f
ull_slot_decoding_module
=
ldpc_offload_flag
;
#else
gNB
->
ldpc_offload_flag
=
ldpc_offload_flag
;
#endif
...
...
openair1/PHY/CODING/nrLDPC_decoder_offload_xdma/nr_ulsch_process_slot.c
0 → 100644
View file @
280423ba
This diff is collapsed.
Click to expand it.
openair1/PHY/CODING/nr_ulsch_process_slot.h
0 → 100644
View file @
280423ba
/*
* 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 "PHY/defs_gNB.h"
#ifndef __NR_ULSCH_PROCESS_SLOT__H__
#define __NR_ULSCH_PROCESS_SLOT__H__
typedef
void
(
*
nr_ulsch_process_slot_t
)(
PHY_VARS_gNB
*
gNB
,
int
frame_rx
,
int
slot_rx
);
nr_ulsch_process_slot_t
nr_ulsch_process_slot
;
int
load_nr_ulsch_process_slot
(
void
);
#endif
openair1/PHY/CODING/nr_ulsch_process_slot_load.c
0 → 100644
View file @
280423ba
/*
* 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
*/
/*! \file openair1/PHY/CODING/coding_nr_load.c
* \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET
* \date 2020
* \version 0.1
* \company NOKIA BellLabs France
* \email: francois.taburet@nokia-bell-labs.com
* \note
* \warning
*/
#define _GNU_SOURCE
#include <sys/types.h>
#include <stdlib.h>
#include <malloc.h>
#include "assertions.h"
#include "common/utils/LOG/log.h"
#define LDPC_LOADER
#include "common/config/config_userapi.h"
#include "common/utils/load_module_shlib.h"
#include "PHY/CODING/nr_ulsch_process_slot.h"
int
load_nr_ulsch_process_slot
(
void
)
{
loader_shlibfunc_t
shlib_nr_ulsch_process_slot_fdesc
;
shlib_nr_ulsch_process_slot_fdesc
.
fname
=
"nr_ulsch_process_slot"
;
int
ret
=
load_module_shlib
(
"_nr_ulsch_process_slot"
,
&
shlib_nr_ulsch_process_slot_fdesc
,
1
,
NULL
);
AssertFatal
(
(
ret
>=
0
),
"Error loading nr_ulsch_process_slot"
);
nr_ulsch_process_slot
=
(
nr_ulsch_process_slot_t
)
shlib_nr_ulsch_process_slot_fdesc
.
fptr
;
return
0
;
}
openair1/PHY/INIT/nr_init.c
View file @
280423ba
...
...
@@ -32,6 +32,7 @@
#include "openair1/PHY/MODULATION/nr_modulation.h"
#include "openair1/PHY/defs_RU.h"
#include "openair1/PHY/CODING/nrLDPC_extern.h"
#include "openair1/PHY/CODING/nr_ulsch_process_slot.h"
#include "assertions.h"
#include <math.h>
#include <complex.h>
...
...
@@ -544,6 +545,9 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
if
(
gNB
->
ldpc_offload_flag
)
load_nrLDPClib_offload
();
if
(
gNB
->
ldpc_full_slot_decoding_module
)
load_nr_ulsch_process_slot
();
gNB
->
max_nb_pdsch
=
MAX_MOBILES_PER_GNB
;
init_codebook_gNB
(
gNB
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
280423ba
This diff is collapsed.
Click to expand it.
openair1/PHY/defs_gNB.h
View file @
280423ba
...
...
@@ -685,7 +685,7 @@ typedef struct PHY_VARS_gNB_s {
uint32_t
ofdm_offset_divisor
;
int
ldpc_offload_flag
;
int
ldpc_f
pga_flag
;
// Xilinx 8038 FPGA Hardware(by VT)
int
ldpc_f
ull_slot_decoding_module
;
// Flag to use full slot decoding library
int
max_ldpc_iterations
;
/// indicate the channel estimation technique in time domain
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
280423ba
...
...
@@ -25,6 +25,7 @@
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_TRANSPORT/nr_dci.h"
#include "PHY/CODING/nr_ulsch_process_slot.h"
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
#include "nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h"
#include "nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h"
...
...
@@ -1002,9 +1003,22 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH
,
0
);
// LOG_M("rxdataF_comp.m","rxF_comp",gNB->pusch_vars[0]->rxdataF_comp[0],6900,1,1);
// LOG_M("rxdataF_ext.m","rxF_ext",gNB->pusch_vars[0]->rxdataF_ext[0],6900,1,1);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_ULSCH_PROCEDURES_RX
,
1
);
nr_ulsch_procedures
(
gNB
,
frame_rx
,
slot_rx
,
ULSCH_id
,
ulsch
->
harq_pid
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_ULSCH_PROCEDURES_RX
,
0
);
}
}
if
(
gNB
->
ldpc_full_slot_decoding_module
){
nr_ulsch_process_slot
(
gNB
,
frame_rx
,
slot_rx
);
}
else
{
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
&
gNB
->
ulsch
[
ULSCH_id
];
if
((
ulsch
->
active
==
true
)
&&
(
ulsch
->
frame
==
frame_rx
)
&&
(
ulsch
->
slot
==
slot_rx
)
&&
(
ulsch
->
handled
==
0
))
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_ULSCH_PROCEDURES_RX
,
1
);
nr_ulsch_procedures
(
gNB
,
frame_rx
,
slot_rx
,
ULSCH_id
,
ulsch
->
harq_pid
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_ULSCH_PROCEDURES_RX
,
0
);
}
}
}
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
280423ba
...
...
@@ -693,7 +693,7 @@ int main(int argc, char *argv[])
// nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,0,0x01);
gNB
->
ldpc_offload_flag
=
ldpc_offload_flag
;
gNB
->
ldpc_f
pga_flag
=
fpga_optional
;
// FPGA Xilinx 8038
gNB
->
ldpc_f
ull_slot_decoding_module
=
fpga_optional
;
gNB
->
chest_freq
=
chest_type
[
0
];
gNB
->
chest_time
=
chest_type
[
1
];
...
...
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