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
1036f0ed
Commit
1036f0ed
authored
Sep 05, 2019
by
Hongzhi Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adding nr ue ldpc offload
parent
9881036c
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1250 additions
and
0 deletions
+1250
-0
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+16
-0
cmake_targets/build_oai
cmake_targets/build_oai
+8
-0
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+152
-0
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding_ldpc_offload.c
...air1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding_ldpc_offload.c
+876
-0
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+12
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+15
-0
targets/ARCH/LDPC_OFFLOAD/slib/ldpc_decoder_offload.h
targets/ARCH/LDPC_OFFLOAD/slib/ldpc_decoder_offload.h
+171
-0
targets/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload.so
targets/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload.so
+0
-0
targets/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload415.so.1.2.0
...RCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload415.so.1.2.0
+0
-0
No files found.
cmake_targets/CMakeLists.txt
View file @
1036f0ed
...
@@ -247,6 +247,7 @@ add_boolean_option(T_TRACER True "Activate the T tracer, a debugging
...
@@ -247,6 +247,7 @@ add_boolean_option(T_TRACER True "Activate the T tracer, a debugging
add_boolean_option
(
UE_AUTOTEST_TRACE False
"Activate UE autotest specific logs"
)
add_boolean_option
(
UE_AUTOTEST_TRACE False
"Activate UE autotest specific logs"
)
add_boolean_option
(
UE_DEBUG_TRACE False
"Activate UE debug trace"
)
add_boolean_option
(
UE_DEBUG_TRACE False
"Activate UE debug trace"
)
add_boolean_option
(
UE_TIMING_TRACE False
"Activate UE timing trace"
)
add_boolean_option
(
UE_TIMING_TRACE False
"Activate UE timing trace"
)
add_boolean_option
(
LDPC_FPGA_OFFLOAD False
"Activate UE LDPC trace"
)
add_boolean_option
(
DISABLE_LOG_X False
"Deactivate all LOG_* macros"
)
add_boolean_option
(
DISABLE_LOG_X False
"Deactivate all LOG_* macros"
)
add_boolean_option
(
USRP_REC_PLAY False
"Enable USRP record playback mode"
)
add_boolean_option
(
USRP_REC_PLAY False
"Enable USRP record playback mode"
)
add_boolean_option
(
UE_NAS_USE_TUN False
"Enable UE NAS TUN device instead of ue_ip.ko"
)
add_boolean_option
(
UE_NAS_USE_TUN False
"Enable UE NAS TUN device instead of ue_ip.ko"
)
...
@@ -1425,6 +1426,7 @@ set(PHY_SRC_UE
...
@@ -1425,6 +1426,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding_ldpc_offload.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_tbs_tools.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_tbs_tools.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_sch_dmrs.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_sch_dmrs.c
...
@@ -2549,6 +2551,20 @@ target_link_libraries (nr-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${C
...
@@ -2549,6 +2551,20 @@ target_link_libraries (nr-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${C
target_link_libraries
(
nr-uesoftmodem
${
LIB_LMS_LIBRARIES
}
)
target_link_libraries
(
nr-uesoftmodem
${
LIB_LMS_LIBRARIES
}
)
target_link_libraries
(
nr-uesoftmodem
${
T_LIB
}
)
target_link_libraries
(
nr-uesoftmodem
${
T_LIB
}
)
# LDPC Decoder Offload : SYRTEM
#####################################################
if
(
${
LDPC_FPGA_OFFLOAD
}
)
set
(
LDPC_OFFLOAD_DIR
${
OPENAIR_DIR
}
/targets/ARCH/LDPC_OFFLOAD/slib
)
include_directories
(
"
${
LDPC_OFFLOAD_DIR
}
"
)
LINK_DIRECTORIES
(
"
${
LDPC_OFFLOAD_DIR
}
"
)
set
(
LDPC_OFFLOAD_LIB
"ldpc_decoder_offload"
)
endif
(
${
LDPC_FPGA_OFFLOAD
}
)
if
(
${
LDPC_FPGA_OFFLOAD
}
)
message
(
"Linking LDPC_OFFLOAD lib"
)
target_link_libraries
(
nr-uesoftmodem
${
OPENAIR_TARGETS
}
/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload.so
)
endif
(
${
LDPC_FPGA_OFFLOAD
}
)
# nr-uesoftmodem-nos1
# nr-uesoftmodem-nos1
#######################################
#######################################
...
...
cmake_targets/build_oai
View file @
1036f0ed
...
@@ -64,6 +64,7 @@ CMAKE_CMD="$CMAKE"
...
@@ -64,6 +64,7 @@ CMAKE_CMD="$CMAKE"
UE_AUTOTEST_TRACE
=
"False"
UE_AUTOTEST_TRACE
=
"False"
UE_DEBUG_TRACE
=
"False"
UE_DEBUG_TRACE
=
"False"
UE_TIMING_TRACE
=
"False"
UE_TIMING_TRACE
=
"False"
LDPC_FPGA_OFFLOAD
=
"False"
USRP_REC_PLAY
=
"False"
USRP_REC_PLAY
=
"False"
BUILD_ECLIPSE
=
0
BUILD_ECLIPSE
=
0
NR
=
"False"
NR
=
"False"
...
@@ -143,6 +144,8 @@ Options
...
@@ -143,6 +144,8 @@ Options
Disables the T tracer.
Disables the T tracer.
--disable-hardware-dependency
--disable-hardware-dependency
Disable HW dependency during installation
Disable HW dependency during installation
--ldpc_fpga_offload
Enables LDPC decoding offload in FPGA.
--ue-autotest-trace
--ue-autotest-trace
Enable specific traces for UE autotest framework
Enable specific traces for UE autotest framework
--ue-trace
--ue-trace
...
@@ -332,6 +335,10 @@ function main() {
...
@@ -332,6 +335,10 @@ function main() {
echo_info
"Disabling hardware dependency for compiling software"
echo_info
"Disabling hardware dependency for compiling software"
DISABLE_HARDWARE_DEPENDENCY
=
"True"
DISABLE_HARDWARE_DEPENDENCY
=
"True"
shift
1
;;
shift
1
;;
--ldpc_fpga_offload
)
LDPC_FPGA_OFFLOAD
=
"True"
echo_info
"Enabling the usage of LDPC decoding offload in FPGA"
shift
1
;;
--ue-autotest-trace
)
--ue-autotest-trace
)
UE_AUTOTEST_TRACE
=
"True"
UE_AUTOTEST_TRACE
=
"True"
echo_info
"Enabling autotest specific trace for UE"
echo_info
"Enabling autotest specific trace for UE"
...
@@ -563,6 +570,7 @@ function main() {
...
@@ -563,6 +570,7 @@ function main() {
echo
"set ( UE_AUTOTEST_TRACE
$UE_AUTOTEST_TRACE
)"
>>
$cmake_file
echo
"set ( UE_AUTOTEST_TRACE
$UE_AUTOTEST_TRACE
)"
>>
$cmake_file
echo
"set ( UE_DEBUG_TRACE
$UE_DEBUG_TRACE
)"
>>
$cmake_file
echo
"set ( UE_DEBUG_TRACE
$UE_DEBUG_TRACE
)"
>>
$cmake_file
echo
"set ( UE_TIMING_TRACE
$UE_TIMING_TRACE
)"
>>
$cmake_file
echo
"set ( UE_TIMING_TRACE
$UE_TIMING_TRACE
)"
>>
$cmake_file
echo
"set ( LDPC_FPGA_OFFLOAD
$LDPC_FPGA_OFFLOAD
)"
>>
$cmake_file
echo
"set ( USRP_REC_PLAY
$USRP_REC_PLAY
)"
>>
$cmake_file
echo
"set ( USRP_REC_PLAY
$USRP_REC_PLAY
)"
>>
$cmake_file
echo
'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'
>>
$cmake_file
echo
'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'
>>
$cmake_file
cd
$DIR
/
$build_dir
/build
cd
$DIR
/
$build_dir
/build
...
...
executables/nr-uesoftmodem.c
View file @
1036f0ed
...
@@ -122,6 +122,59 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
...
@@ -122,6 +122,59 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
extern
int16_t
nr_dlsch_demod_shift
;
extern
int16_t
nr_dlsch_demod_shift
;
#if LDPC_FPGA_OFFLOAD
#include <dlfcn.h>
#include "ldpc_decoder_offload.h"
typedef
uint8_t
(
*
syr_ldpc_offload_initfunc_t
)(
void
);
typedef
uint8_t
(
*
syr_ldpc_offload_finifunc_t
)(
void
);
typedef
uint8_t
(
*
syr_ldpc_offload_decodefunc_t
)(
int16_t
*
y
,
uint8_t
*
decoded_bytes
,
uint16_t
n
,
uint16_t
interleaver_f1
,
uint16_t
interleaver_f2
,
uint8_t
max_iterations
,
uint8_t
crc_type
,
uint8_t
F
,
time_stats_t
*
init_stats
,
time_stats_t
*
alpha_stats
,
time_stats_t
*
beta_stats
,
time_stats_t
*
gamma_stats
,
time_stats_t
*
ext_stats
,
time_stats_t
*
intl1_stats
,
time_stats_t
*
intl2_stats
);
syr_ldpc_offload_initfunc_t
syr_init_funct
;
syr_ldpc_offload_finifunc_t
syr_fini_funct
;
//syr_ldpc_offload_decodefunc_t syr_ldpc_decode_funct;
typedef
session_t
(
*
threegpp_nr_ldpc_decode_start_t
)(
session_desc_t
*
session_desc
);
threegpp_nr_ldpc_decode_start_t
threegpp_nr_ldpc_decode_start_funct
;
typedef
int32_t
(
*
threegpp_nr_ldpc_decode_putq_t
)(
session_t
fd
,
int16_t
*
y_16bits
,
uint8_t
*
decoded_bytes
,
uint8_t
r
,
uint16_t
n
,
uint8_t
max_iterations
,
uint8_t
crc_type
);
threegpp_nr_ldpc_decode_putq_t
threegpp_nr_ldpc_decode_putq_funct
;
typedef
int32_t
(
*
threegpp_nr_ldpc_decode_getq_t
)(
session_t
fd
,
uint8_t
*
decoded_bytes
,
uint8_t
r
,
uint8_t
crc_type
,
uint8_t
*
crc_status
,
uint8_t
*
nb_iterations
);
threegpp_nr_ldpc_decode_getq_t
threegpp_nr_ldpc_decode_getq_funct
;
typedef
int32_t
(
*
threegpp_nr_ldpc_decode_stop_t
)(
session_t
fd
);
threegpp_nr_ldpc_decode_stop_t
threegpp_nr_ldpc_decode_stop_funct
;
typedef
int32_t
(
*
threegpp_nr_ldpc_decode_run_t
)(
session_t
fd
);
threegpp_nr_ldpc_decode_run_t
threegpp_nr_ldpc_decode_run_funct
;
#endif
int
UE_scan
=
0
;
int
UE_scan
=
0
;
int
UE_scan_carrier
=
0
;
int
UE_scan_carrier
=
0
;
int
UE_fo_compensation
=
0
;
int
UE_fo_compensation
=
0
;
...
@@ -789,6 +842,105 @@ int main( int argc, char **argv ) {
...
@@ -789,6 +842,105 @@ int main( int argc, char **argv ) {
#endif
#endif
}
}
#if LDPC_FPGA_OFFLOAD
void
*
syr_handle
=
NULL
;;
uint8_t
syr_ret
=
0
;
syr_handle
=
dlopen
(
"libldpc_decoder_offload.so"
,
RTLD_LAZY
);
if
(
!
syr_handle
)
{
fprintf
(
stderr
,
"Unable to locate libldpc_decoder_offload.so: HW device set to NONE_DEV.
\n
"
);
fprintf
(
stderr
,
"%s
\n
"
,
dlerror
());
exit_fun
(
"Error loading ldpc decoder offload device"
);
}
syr_init_funct
=
dlsym
(
syr_handle
,
"phy_threegppnr_ldpc_decoder_offload_init"
);
if
(
syr_init_funct
!=
NULL
)
{
syr_ret
=
syr_init_funct
();
if
(
syr_ret
<
0
)
{
fprintf
(
stderr
,
"%s %d:ldpc decoder offload device intialization failed %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit_fun
(
"Error loading ldpc decoder offload device"
);
}
}
else
{
fprintf
(
stderr
,
"%s %d:ldpc decoder offload device init function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit_fun
(
"Error ldpc decoder offload device init function not found"
);
}
syr_fini_funct
=
dlsym
(
syr_handle
,
"phy_threegppnr_ldpc_decoder_offload_fini"
);
if
(
syr_fini_funct
==
NULL
)
{
fprintf
(
stderr
,
"%s %d:ldpc decoder offload device fini function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit_fun
(
"Error ldpc decoder offload device fini function not found"
);
}
#if 0
syr_ldpc_decode_funct = dlsym(syr_handle,"phy_threegppnr_ldpc_decoder_offload");
if (syr_ldpc_decode_funct == NULL )
{
fprintf(stderr, "%s %d:ldpc decoder offload device decode function not found %s\n", __FILE__, __LINE__, dlerror());
exit_fun("Error ldpc decoder offload device decode function not found");
}
#endif
threegpp_nr_ldpc_decode_start_funct
=
dlsym
(
syr_handle
,
"threegpp_nr_ldpc_decode_start"
);
if
(
threegpp_nr_ldpc_decode_start_funct
==
NULL
)
{
printf
(
"%s %d:threegpp_nr_ldpc_decode_start function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit
(
-
1
);
}
threegpp_nr_ldpc_decode_putq_funct
=
dlsym
(
syr_handle
,
"threegpp_nr_ldpc_decode_putq"
);
if
(
threegpp_nr_ldpc_decode_putq_funct
==
NULL
)
{
printf
(
"%s %d:threegpp_nr_ldpc_decode_putq function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit
(
-
1
);
}
threegpp_nr_ldpc_decode_getq_funct
=
dlsym
(
syr_handle
,
"threegpp_nr_ldpc_decode_getq"
);
if
(
threegpp_nr_ldpc_decode_getq_funct
==
NULL
)
{
printf
(
"%s %d:threegpp_nr_ldpc_decode_getq function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit
(
-
1
);
}
threegpp_nr_ldpc_decode_stop_funct
=
dlsym
(
syr_handle
,
"threegpp_nr_ldpc_decode_stop"
);
if
(
threegpp_nr_ldpc_decode_stop_funct
==
NULL
)
{
printf
(
"%s %d:threegpp_nr_ldpc_decode_stop function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit
(
-
1
);
}
threegpp_nr_ldpc_decode_run_funct
=
dlsym
(
syr_handle
,
"threegpp_nr_ldpc_decode_run"
);
if
(
threegpp_nr_ldpc_decode_run_funct
==
NULL
)
{
printf
(
"%s %d:threegpp_nr_ldpc_decode_run function not found %s
\n
"
,
__FILE__
,
__LINE__
,
dlerror
());
exit
(
-
1
);
}
#if 0 // Test
int16_t y[8448]; // 22.Zc -> 22x128 x 3 LLR16bits -> 8448 int16_t
uint8_t decoded_bytes[352]; // 22.Zc bits -> 352 bytes
uint16_t n = 2816; // code_block size = 2816
memset(y, 0x7F, 8448 * sizeof(int16_t));
memset(decoded_bytes, 0, 352 * sizeof(uint8_t));
syr_ret = syr_ldpc_decode_funct(y, decoded_bytes, n, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if (syr_ret < 0)
{
fprintf(stderr, "%s %d:ldpc decoder offload device intialization failed %s\n", __FILE__, __LINE__, dlerror());
exit_fun("Error loading ldpc decoder offload device");
}
#endif
#endif
// wait for end of program
// wait for end of program
printf
(
"TYPE <CTRL-C> TO TERMINATE
\n
"
);
printf
(
"TYPE <CTRL-C> TO TERMINATE
\n
"
);
init_NR_UE
(
1
);
init_NR_UE
(
1
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding_ldpc_offload.c
0 → 100644
View file @
1036f0ed
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
1036f0ed
...
@@ -1804,6 +1804,18 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
...
@@ -1804,6 +1804,18 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint8_t
is_crnti
,
uint8_t
is_crnti
,
uint8_t
llr8_flag
);
uint8_t
llr8_flag
);
uint32_t
nr_dlsch_decoding_ldpc_offload
(
PHY_VARS_NR_UE
*
phy_vars_ue
,
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_tti_rx
,
uint8_t
harq_pid
,
uint8_t
is_crnti
,
uint8_t
llr8_flag
);
int
nr_extract_dci_info
(
PHY_VARS_NR_UE
*
ue
,
int
nr_extract_dci_info
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_id
,
uint8_t
eNB_id
,
lte_frame_type_t
frame_type
,
lte_frame_type_t
frame_type
,
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
1036f0ed
...
@@ -3673,6 +3673,20 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -3673,6 +3673,20 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
LOG_T
(
PHY
,
"UE_DLSCH_PARALLELISATION is defined, ret = %d
\n
"
,
ret
);
LOG_T
(
PHY
,
"UE_DLSCH_PARALLELISATION is defined, ret = %d
\n
"
,
ret
);
#else
#else
#if LDPC_FPGA_OFFLOAD
ret
=
nr_dlsch_decoding_ldpc_offload
(
ue
,
pdsch_vars
->
llr
[
0
],
&
ue
->
frame_parms
,
dlsch0
,
dlsch0
->
harq_processes
[
harq_pid
],
frame_rx
,
nb_symb_sch
,
nr_tti_rx
,
harq_pid
,
pdsch
==
PDSCH
?
1
:
0
,
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
//printf("start cW0 dlsch decoding\n");
#else
ret
=
nr_dlsch_decoding
(
ue
,
ret
=
nr_dlsch_decoding
(
ue
,
pdsch_vars
->
llr
[
0
],
pdsch_vars
->
llr
[
0
],
&
ue
->
frame_parms
,
&
ue
->
frame_parms
,
...
@@ -3686,6 +3700,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -3686,6 +3700,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
LOG_T
(
PHY
,
"UE_DLSCH_PARALLELISATION is NOT defined, ret = %d
\n
"
,
ret
);
LOG_T
(
PHY
,
"UE_DLSCH_PARALLELISATION is NOT defined, ret = %d
\n
"
,
ret
);
//printf("start cW0 dlsch decoding\n");
//printf("start cW0 dlsch decoding\n");
#endif
#endif
#endif
#if UE_TIMING_TRACE
#if UE_TIMING_TRACE
...
...
targets/ARCH/LDPC_OFFLOAD/slib/ldpc_decoder_offload.h
0 → 100644
View file @
1036f0ed
/* ============================================================================
*
* file ldpc_decoder_offload.h
* author B.ROBERT
* date Jan 10, 2018
*
* brief LDPC Decoder Offload interface header.
*
* Infos:
* - Project : syr_ldpc_offload_lib
* - Software :
* - CVS domain : syrtemplatform5g
* - CVS component :
*
* ============================================================================
* Statement of Ownership
* ----------------------
* Copyright (c) 2018-2019 SYRTEM S.a.r.l All Rights Reserved
*
* This software is furnished under licence and may be used and copied only
* in accordance with the terms of such license and with the inclusion of the
* above COPYRIGHT notice. This SOFTWARE or any other copies thereof may not
* be provided or otherwise made available to any other person. No title to
* and ownership of the SOFTWARE is hereby transferred.
*
* The information in this SOFTWARE is subject to change without notice and
* should not be constructed as a commitment by SYRTEM.
*
* SYRTEM assumes no responsability for the use or reliability of its SOFTWARE
* on equipment or platform not explicitly validated by SYRTEM.
*
* ============================================================================
* Reference documents :
* -------------------
*
* ==========================================================================*/
#ifndef __LDPC_DECODER_OFFLOAD_LIB_H__
#define __LDPC_DECODER_OFFLOAD_LIB_H__
#define LDPC_DECODER_OFFLOAD_OK (0)
#define LDPC_DECODER_OFFLOAD_ERROR (-1)
#define LDPC_DECODER_OFFLOAD_BAD_PARAMETER (-2)
#define LDPC_DECODER_OFFLOAD_PRECONDITION_NOT_MET (-3)
#define LDPC_DECODER_OFFLOAD_NOT_SUPPORTED (-4)
#define LDPC_DECODER_OFFLOAD_NO_CONTEXT (-5)
#define LDPC_DECODER_OFFLOAD_DEVICE_NOT_FOUND (-6)
#define LDPC_DECODER_OFFLOAD_CHANNEL_NOT_FOUND (-7)
#define LDPC_DECODER_OFFLOAD_BUFFER_NOT_CREATED (-8)
#define LDPC_DECODER_OFFLOAD_INITCFG_FAILED (-9)
#define LDPC_DECODER_OFFLOAD_SELF_TEST_FAILED (-10)
#define LDPC_DECODER_OFFLOAD_SYRIQ_INIT_FAILED (-11)
#define LDPC_DECODER_OFFLOAD_TH_INIT_FAILED (-12)
#define LDPC_DECODER_OFFLOAD_DECOD_REQ_NULL (-20)
#define LDPC_DECODER_OFFLOAD_ERROR_TIMEOUT (-30)
typedef
void
*
session_t
;
typedef
struct
session_desc_s
{
uint32_t
proc_nb
;
uint32_t
frame
;
uint32_t
nr_tti_rx
;
// ~ tti number
uint32_t
BG
;
uint32_t
R
;
uint8_t
coderate
;
// 0x01:BG1 8/9 27.Zc
// 0x2A:BG1 1/3 68.Zc,
// 0x43:BG2 2/3 17.Zc,
// 0x66:BG2 1/5 52.Zc,
uint32_t
Zc
;
// 128, 160, 224, 256, 384
uint8_t
max_decoding_iterations
;
uint32_t
C
;
uint8_t
crc_type
;
uint8_t
mcs
;
}
session_desc_t
;
typedef
enum
ldpc_msgtype_e
{
LDPC_DECODING_OFFLOAD_REQ
,
LDPC_DECODING_OFFLOAD_CONF
}
ldpc_msgtype_t
;
typedef
struct
decode_req_s
{
ldpc_msgtype_t
msg_type
;
uint32_t
proc_nb
;
uint32_t
r
;
// seg. index from 1 to 16 max
int16_t
*
data
;
// 16bit LLR buffer pointer
}
decode_req_t
;
typedef
struct
decode_conf_s
{
ldpc_msgtype_t
msg_type
;
uint32_t
proc_nb
;
uint32_t
segment_no
;
// from 1 to 16 max
uint32_t
crc24_check
;
uint32_t
nb_iterations
;
uint8_t
*
data
;
// Hard decoded bits buffer pointer
}
decode_conf_t
;
session_t
threegpp_nr_ldpc_decode_start
(
session_desc_t
*
session_desc
);
int32_t
threegpp_nr_ldpc_decode_putq
(
session_t
fd
,
int16_t
*
y_16bits
,
uint8_t
*
decoded_bytes
,
uint8_t
r
,
uint16_t
n
,
uint8_t
max_iterations
,
uint8_t
crc_type
);
int32_t
threegpp_nr_ldpc_decode_getq
(
session_t
fd
,
uint8_t
*
decoded_bytes
,
uint8_t
r
,
uint8_t
crc_type
,
uint8_t
*
crc_status
,
uint8_t
*
nb_iterations
);
int32_t
threegpp_nr_ldpc_decode_stop
(
session_t
fd
);
int32_t
threegpp_nr_ldpc_decode_run
(
session_t
fd
);
/*!
\brief This routine performs max-logmap detection for the 3GPP turbo code (with termination). It is optimized for SIMD processing and 16-bit
LLR arithmetic, and requires SSE2,SSSE3 and SSE4.1 (gcc >=4.3 and appropriate CPU)
@param y LLR input (16-bit precision)
@param decoded_bytes Pointer to decoded output
@param n number of coded bits (including tail bits)
@param max_iterations The maximum number of iterations to perform
@param interleaver_f1 F1 generator
@param interleaver_f2 F2 generator
@param crc_type Length of 3GPPLTE crc (CRC24a,CRC24b,CRC16,CRC8)
@param F Number of filler bits at start of packet
@returns number of iterations used (this is 1+max if incorrect crc or if crc_len=0)
*/
uint8_t
phy_threegppnr_ldpc_decoder_offload
(
int16_t
*
y
,
uint8_t
*
decoded_bytes
,
uint16_t
n
,
uint16_t
interleaver_f1
,
uint16_t
interleaver_f2
,
uint8_t
max_iterations
,
uint8_t
crc_type
,
uint8_t
F
,
time_stats_t
*
init_stats
,
time_stats_t
*
alpha_stats
,
time_stats_t
*
beta_stats
,
time_stats_t
*
gamma_stats
,
time_stats_t
*
ext_stats
,
time_stats_t
*
intl1_stats
,
time_stats_t
*
intl2_stats
);
uint8_t
phy_threegppnr_ldpc_decoder_offload_init
(
void
);
uint8_t
phy_threegppnr_ldpc_decoder_offload_fini
(
void
);
#endif // __LDPC_DECODER_OFFLOAD_LIB_H__
targets/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload.so
0 → 100644
View file @
1036f0ed
File added
targets/ARCH/LDPC_OFFLOAD/slib/libldpc_decoder_offload415.so.1.2.0
0 → 100644
View file @
1036f0ed
File added
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