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
zzha zzha
OpenXG-RAN
Commits
a8a5897a
Commit
a8a5897a
authored
Jan 20, 2022
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cherry pick ldpc-decoder-crc-check
commit:
3cfefe3c
parent
b0d462e0
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
121 additions
and
256 deletions
+121
-256
openair1/PHY/CODING/TESTBENCH/ldpctest.c
openair1/PHY/CODING/TESTBENCH/ldpctest.c
+1
-8
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
+2
-11
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
+4
-16
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c
+47
-154
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
+8
-24
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h
...ir1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h
+7
-7
openair1/PHY/CODING/nrLDPC_defs.h
openair1/PHY/CODING/nrLDPC_defs.h
+1
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+51
-22
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+0
-9
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+0
-2
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+0
-2
No files found.
openair1/PHY/CODING/TESTBENCH/ldpctest.c
View file @
a8a5897a
...
@@ -139,8 +139,6 @@ int test_ldpc(short No_iteration,
...
@@ -139,8 +139,6 @@ int test_ldpc(short No_iteration,
//double code_rate_actual_vec[8] = {0.2, 0.33333, 0.4, 0.5, 0.66667, 0.73333, 0.81481, 0.88};
//double code_rate_actual_vec[8] = {0.2, 0.33333, 0.4, 0.5, 0.66667, 0.73333, 0.81481, 0.88};
t_nrLDPC_dec_params
decParams
;
t_nrLDPC_dec_params
decParams
;
t_nrLDPC_procBuf
nrLDPC_procBuf
;
t_nrLDPC_procBuf
*
p_nrLDPC_procBuf
=
&
nrLDPC_procBuf
;
t_nrLDPC_time_stats
decoder_profiler
=
{
0
};
t_nrLDPC_time_stats
decoder_profiler
=
{
0
};
t_nrLDPC_time_stats
*
p_decoder_profiler
=&
decoder_profiler
;
t_nrLDPC_time_stats
*
p_decoder_profiler
=&
decoder_profiler
;
...
@@ -194,9 +192,6 @@ int test_ldpc(short No_iteration,
...
@@ -194,9 +192,6 @@ int test_ldpc(short No_iteration,
reset_meas
(
&
decoder_profiler
.
llr2bit
);
reset_meas
(
&
decoder_profiler
.
llr2bit
);
//reset_meas(&decoder_profiler.total);
//reset_meas(&decoder_profiler.total);
// Allocate LDPC decoder buffers
p_nrLDPC_procBuf
=
nrLDPC_init_mem
();
for
(
j
=
0
;
j
<
MAX_NUM_DLSCH_SEGMENTS
;
j
++
)
{
for
(
j
=
0
;
j
<
MAX_NUM_DLSCH_SEGMENTS
;
j
++
)
{
for
(
i
=
0
;
i
<
block_length
/
8
;
i
++
)
{
for
(
i
=
0
;
i
<
block_length
/
8
;
i
++
)
{
test_input
[
j
][
i
]
=
(
unsigned
char
)
rand
();
test_input
[
j
][
i
]
=
(
unsigned
char
)
rand
();
...
@@ -398,7 +393,7 @@ int test_ldpc(short No_iteration,
...
@@ -398,7 +393,7 @@ int test_ldpc(short No_iteration,
nrLDPC_initcall
(
&
decParams
,
(
int8_t
*
)
channel_output_fixed
[
j
],
(
int8_t
*
)
estimated_output
[
j
]);
nrLDPC_initcall
(
&
decParams
,
(
int8_t
*
)
channel_output_fixed
[
j
],
(
int8_t
*
)
estimated_output
[
j
]);
for
(
j
=
0
;
j
<
n_segments
;
j
++
)
{
for
(
j
=
0
;
j
<
n_segments
;
j
++
)
{
start_meas
(
time_decoder
);
start_meas
(
time_decoder
);
n_iter
=
nrLDPC_decoder
(
&
decParams
,
(
int8_t
*
)
channel_output_fixed
[
j
],
(
int8_t
*
)
estimated_output
[
j
],
p_
nrLDPC_procBuf
,
p_
decoder_profiler
);
n_iter
=
nrLDPC_decoder
(
&
decParams
,
(
int8_t
*
)
channel_output_fixed
[
j
],
(
int8_t
*
)
estimated_output
[
j
],
p_decoder_profiler
);
stop_meas
(
time_decoder
);
stop_meas
(
time_decoder
);
}
}
...
@@ -472,8 +467,6 @@ int test_ldpc(short No_iteration,
...
@@ -472,8 +467,6 @@ int test_ldpc(short No_iteration,
//free(channel_output_fixed);
//free(channel_output_fixed);
//free(estimated_output);
//free(estimated_output);
nrLDPC_free_mem
(
p_nrLDPC_procBuf
);
print_meas
(
&
time
,
"ldpc_encoder"
,
NULL
,
NULL
);
print_meas
(
&
time
,
"ldpc_encoder"
,
NULL
,
NULL
);
print_meas
(
time_optim
,
"ldpc_encoder_optim"
,
NULL
,
NULL
);
print_meas
(
time_optim
,
"ldpc_encoder_optim"
,
NULL
,
NULL
);
print_meas
(
&
tinput
,
"ldpc_encoder_optim(input)"
,
NULL
,
NULL
);
print_meas
(
&
tinput
,
"ldpc_encoder_optim(input)"
,
NULL
,
NULL
);
...
...
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
View file @
a8a5897a
...
@@ -37,17 +37,12 @@
...
@@ -37,17 +37,12 @@
\param p_lut Pointer to decoder LUTs
\param p_lut Pointer to decoder LUTs
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_bnProcPc
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_bnProcPc
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
bnProcBuf
,
int8_t
*
bnProcBufRes
,
int8_t
*
llrProcBuf
,
int8_t
*
llrRes
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numBnInBnGroups
=
p_lut
->
numBnInBnGroups
;
const
uint8_t
*
lut_numBnInBnGroups
=
p_lut
->
numBnInBnGroups
;
const
uint32_t
*
lut_startAddrBnGroups
=
p_lut
->
startAddrBnGroups
;
const
uint32_t
*
lut_startAddrBnGroups
=
p_lut
->
startAddrBnGroups
;
const
uint16_t
*
lut_startAddrBnGroupsLlr
=
p_lut
->
startAddrBnGroupsLlr
;
const
uint16_t
*
lut_startAddrBnGroupsLlr
=
p_lut
->
startAddrBnGroupsLlr
;
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
int8_t
*
llrProcBuf
=
p_procBuf
->
llrProcBuf
;
__m128i
*
p_bnProcBuf
;
__m128i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_bnProcBufRes
;
__m128i
*
p_llrProcBuf
;
__m128i
*
p_llrProcBuf
;
...
@@ -1681,7 +1676,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
...
@@ -1681,7 +1676,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
\param p_lut Pointer to decoder LUTs
\param p_lut Pointer to decoder LUTs
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_bnProc
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_bnProc
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
bnProcBuf
,
int8_t
*
bnProcBufRes
,
int8_t
*
llrRes
,
uint16_t
Z
)
{
{
// BN Processing calculating the values to send back to the CNs for next iteration
// BN Processing calculating the values to send back to the CNs for next iteration
// bnProcBufRes contains the sum of all edges to each BN at the start of each group
// bnProcBufRes contains the sum of all edges to each BN at the start of each group
...
@@ -1690,10 +1685,6 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu
...
@@ -1690,10 +1685,6 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu
const
uint32_t
*
lut_startAddrBnGroups
=
p_lut
->
startAddrBnGroups
;
const
uint32_t
*
lut_startAddrBnGroups
=
p_lut
->
startAddrBnGroups
;
const
uint16_t
*
lut_startAddrBnGroupsLlr
=
p_lut
->
startAddrBnGroupsLlr
;
const
uint16_t
*
lut_startAddrBnGroupsLlr
=
p_lut
->
startAddrBnGroupsLlr
;
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
__m256i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_llrRes
;
__m256i
*
p_llrRes
;
...
...
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
View file @
a8a5897a
...
@@ -37,14 +37,11 @@
...
@@ -37,14 +37,11 @@
\param p_procBuf Pointer to processing buffers
\param p_procBuf Pointer to processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_cnProc_BG2
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_cnProc_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBuf
,
int8_t
*
cnProcBufRes
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBufRes
;
__m256i
*
p_cnProcBufRes
;
...
@@ -372,14 +369,11 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
...
@@ -372,14 +369,11 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
\param p_lut Pointer to decoder LUTs
\param p_lut Pointer to decoder LUTs
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_cnProc_BG1
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_cnProc_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBuf
,
int8_t
*
cnProcBufRes
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBufRes
;
__m256i
*
p_cnProcBufRes
;
...
@@ -871,14 +865,11 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
...
@@ -871,14 +865,11 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
\param Z Lifting size
\param Z Lifting size
\return 32-bit parity check indicator
\return 32-bit parity check indicator
*/
*/
static
inline
uint32_t
nrLDPC_cnProcPc_BG1
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
uint32_t
nrLDPC_cnProcPc_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBuf
,
int8_t
*
cnProcBufRes
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBufRes
;
__m256i
*
p_cnProcBufRes
;
...
@@ -1506,14 +1497,11 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -1506,14 +1497,11 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
\param Z Lifting size
\param Z Lifting size
\return 32-bit parity check indicator
\return 32-bit parity check indicator
*/
*/
static
inline
uint32_t
nrLDPC_cnProcPc_BG2
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
)
static
inline
uint32_t
nrLDPC_cnProcPc_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBuf
,
int8_t
*
cnProcBufRes
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBuf
;
__m256i
*
p_cnProcBufRes
;
__m256i
*
p_cnProcBufRes
;
...
...
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c
View file @
a8a5897a
...
@@ -45,22 +45,22 @@
...
@@ -45,22 +45,22 @@
#include "nrLDPC_tools/nrLDPC_debug.h"
#include "nrLDPC_tools/nrLDPC_debug.h"
#endif
#endif
static
inline
uint32_t
nrLDPC_decoder_core
(
int8_t
*
p_llr
,
int8_t
*
p_out
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint32_t
numLLR
,
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_dec_params
*
p_decParams
,
t_nrLDPC_time_stats
*
p_profiler
);
static
inline
uint32_t
nrLDPC_decoder_core
(
int8_t
*
p_llr
,
int8_t
*
p_out
,
uint32_t
numLLR
,
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_dec_params
*
p_decParams
,
t_nrLDPC_time_stats
*
p_profiler
);
int
check_crc
(
uint8_t
*
decoded_bytes
,
uint32_t
n
,
uint32_t
F
,
uint8_t
crc_type
);
void
nrLDPC_initcall
(
t_nrLDPC_dec_params
*
p_decParams
,
int8_t
*
p_llr
,
int8_t
*
p_out
)
{
void
nrLDPC_initcall
(
t_nrLDPC_dec_params
*
p_decParams
,
int8_t
*
p_llr
,
int8_t
*
p_out
)
{
}
}
int32_t
nrLDPC_decod
(
t_nrLDPC_dec_params
*
p_decParams
,
int8_t
*
p_llr
,
int8_t
*
p_out
,
t_nrLDPC_
procBuf
*
p_procBuf
,
t_nrLDPC_
time_stats
*
p_profiler
)
int32_t
nrLDPC_decod
(
t_nrLDPC_dec_params
*
p_decParams
,
int8_t
*
p_llr
,
int8_t
*
p_out
,
t_nrLDPC_time_stats
*
p_profiler
)
{
{
uint32_t
numLLR
;
uint32_t
numLLR
;
uint32_t
numIter
=
0
;
uint32_t
numIter
=
0
;
t_nrLDPC_lut
lut
;
t_nrLDPC_lut
lut
;
t_nrLDPC_lut
*
p_lut
=
&
lut
;
t_nrLDPC_lut
*
p_lut
=
&
lut
;
//printf("p_procBuf->cnProcBuf = %p\n", p_procBuf->cnProcBuf);
// Initialize decoder core(s) with correct LUTs
// Initialize decoder core(s) with correct LUTs
numLLR
=
nrLDPC_init
(
p_decParams
,
p_lut
);
numLLR
=
nrLDPC_init
(
p_decParams
,
p_lut
);
// Launch LDPC decoder core for one segment
// Launch LDPC decoder core for one segment
numIter
=
nrLDPC_decoder_core
(
p_llr
,
p_out
,
p_procBuf
,
numLLR
,
p_lut
,
p_decParams
,
p_profiler
);
numIter
=
nrLDPC_decoder_core
(
p_llr
,
p_out
,
numLLR
,
p_lut
,
p_decParams
,
p_profiler
);
return
numIter
;
return
numIter
;
}
}
...
@@ -74,13 +74,20 @@ int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_
...
@@ -74,13 +74,20 @@ int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_
\param p_decParams LDPC decoder parameters
\param p_decParams LDPC decoder parameters
\param p_profiler LDPC profiler statistics
\param p_profiler LDPC profiler statistics
*/
*/
static
inline
uint32_t
nrLDPC_decoder_core
(
int8_t
*
p_llr
,
int8_t
*
p_out
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint32_t
numLLR
,
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_dec_params
*
p_decParams
,
t_nrLDPC_time_stats
*
p_profiler
)
static
inline
uint32_t
nrLDPC_decoder_core
(
int8_t
*
p_llr
,
int8_t
*
p_out
,
uint32_t
numLLR
,
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_dec_params
*
p_decParams
,
t_nrLDPC_time_stats
*
p_profiler
)
{
{
uint16_t
Z
=
p_decParams
->
Z
;
uint16_t
Z
=
p_decParams
->
Z
;
uint8_t
BG
=
p_decParams
->
BG
;
uint8_t
BG
=
p_decParams
->
BG
;
uint8_t
numMaxIter
=
p_decParams
->
numMaxIter
;
uint8_t
numMaxIter
=
p_decParams
->
numMaxIter
;
e_nrLDPC_outMode
outMode
=
p_decParams
->
outMode
;
e_nrLDPC_outMode
outMode
=
p_decParams
->
outMode
;
int8_t
cnProcBuf
[
NR_LDPC_SIZE_CN_PROC_BUF
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
cnProcBufRes
[
NR_LDPC_SIZE_CN_PROC_BUF
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
bnProcBuf
[
NR_LDPC_SIZE_BN_PROC_BUF
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
bnProcBufRes
[
NR_LDPC_SIZE_BN_PROC_BUF
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
llrRes
[
NR_LDPC_MAX_NUM_LLR
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
llrProcBuf
[
NR_LDPC_MAX_NUM_LLR
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
int8_t
llrOut
[
NR_LDPC_MAX_NUM_LLR
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
// Minimum number of iterations is 1
// Minimum number of iterations is 1
// 0 iterations means hard-decision on input LLRs
// 0 iterations means hard-decision on input LLRs
uint32_t
i
=
1
;
uint32_t
i
=
1
;
...
@@ -95,9 +102,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -95,9 +102,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
else
else
{
{
// Use LLR processing buffer as temporary output buffer
// Use LLR processing buffer as temporary output buffer
p_llrOut
=
p_procBuf
->
llrProcBuf
;
p_llrOut
=
llrOut
;
// Clear llrProcBuf
memset
(
p_llrOut
,
0
,
NR_LDPC_MAX_NUM_LLR
*
sizeof
(
int8_t
));
}
}
...
@@ -105,14 +110,14 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -105,14 +110,14 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
llr2llrProcBuf
);
start_meas
(
&
p_profiler
->
llr2llrProcBuf
);
#endif
#endif
nrLDPC_llr2llrProcBuf
(
p_lut
,
p_llr
,
p_p
rocBuf
,
Z
,
BG
);
nrLDPC_llr2llrProcBuf
(
p_lut
,
p_llr
,
llrP
rocBuf
,
Z
,
BG
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
llr2llrProcBuf
);
stop_meas
(
&
p_profiler
->
llr2llrProcBuf
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_LLR_PROC
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_LLR_PROC
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_PROC
,
llrP
rocBuf
);
#endif
#endif
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
...
@@ -120,11 +125,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -120,11 +125,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_llr2CnProcBuf_BG1
(
p_lut
,
p_llr
,
p_p
rocBuf
,
Z
);
nrLDPC_llr2CnProcBuf_BG1
(
p_lut
,
p_llr
,
cnP
rocBuf
,
Z
);
}
}
else
else
{
{
nrLDPC_llr2CnProcBuf_BG2
(
p_lut
,
p_llr
,
p_p
rocBuf
,
Z
);
nrLDPC_llr2CnProcBuf_BG2
(
p_lut
,
p_llr
,
cnP
rocBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
llr2CnProcBuf
);
stop_meas
(
&
p_profiler
->
llr2CnProcBuf
);
...
@@ -132,7 +137,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -132,7 +137,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_CN_PROC
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_CN_PROC
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
cnP
rocBuf
);
#endif
#endif
// First iteration
// First iteration
...
@@ -143,11 +148,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -143,11 +148,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_cnProc_BG1
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_cnProc_BG1
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
}
else
else
{
{
nrLDPC_cnProc_BG2
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_cnProc_BG2
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cnProc
);
stop_meas
(
&
p_profiler
->
cnProc
);
...
@@ -155,7 +160,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -155,7 +160,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
,
cnProcBufRes
);
#endif
#endif
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
...
@@ -163,11 +168,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -163,11 +168,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_cn2bnProcBuf_BG1
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_cn2bnProcBuf_BG1
(
p_lut
,
cnProcBufRes
,
bnP
rocBuf
,
Z
);
}
}
else
else
{
{
nrLDPC_cn2bnProcBuf_BG2
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_cn2bnProcBuf_BG2
(
p_lut
,
cnProcBufRes
,
bnP
rocBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cn2bnProcBuf
);
stop_meas
(
&
p_profiler
->
cn2bnProcBuf
);
...
@@ -175,34 +180,34 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -175,34 +180,34 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_BN_PROC
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_BN_PROC
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC
,
bnP
rocBuf
);
#endif
#endif
// BN processing
// BN processing
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProcPc
);
start_meas
(
&
p_profiler
->
bnProcPc
);
#endif
#endif
nrLDPC_bnProcPc
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_bnProcPc
(
p_lut
,
bnProcBuf
,
bnProcBufRes
,
llrProcBuf
,
llrRes
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProcPc
);
stop_meas
(
&
p_profiler
->
bnProcPc
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_LLR_RES
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_LLR_RES
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_RES
,
llrRes
);
#endif
#endif
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProc
);
start_meas
(
&
p_profiler
->
bnProc
);
#endif
#endif
nrLDPC_bnProc
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_bnProc
(
p_lut
,
bnProcBuf
,
bnProcBufRes
,
llrRes
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProc
);
stop_meas
(
&
p_profiler
->
bnProc
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
);
nrLDPC_debug_initBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
,
bnProcBufRes
);
#endif
#endif
// BN results to CN processing buffer
// BN results to CN processing buffer
...
@@ -211,18 +216,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -211,18 +216,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_bn2cnProcBuf_BG1
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_bn2cnProcBuf_BG1
(
p_lut
,
bnProcBufRes
,
cnP
rocBuf
,
Z
);
}
}
else
else
{
{
nrLDPC_bn2cnProcBuf_BG2
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_bn2cnProcBuf_BG2
(
p_lut
,
bnProcBufRes
,
cnP
rocBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bn2cnProcBuf
);
stop_meas
(
&
p_profiler
->
bn2cnProcBuf
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
cnP
rocBuf
);
#endif
#endif
// Parity Check not necessary here since it will fail
// Parity Check not necessary here since it will fail
...
@@ -242,18 +247,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -242,18 +247,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_cnProc_BG1
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_cnProc_BG1
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
}
else
else
{
{
nrLDPC_cnProc_BG2
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_cnProc_BG2
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cnProc
);
stop_meas
(
&
p_profiler
->
cnProc
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
,
cnProcBufRes
);
#endif
#endif
// Send CN results back to BNs
// Send CN results back to BNs
...
@@ -262,43 +267,43 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -262,43 +267,43 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_cn2bnProcBuf_BG1
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_cn2bnProcBuf_BG1
(
p_lut
,
cnProcBufRes
,
bnP
rocBuf
,
Z
);
}
}
else
else
{
{
nrLDPC_cn2bnProcBuf_BG2
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_cn2bnProcBuf_BG2
(
p_lut
,
cnProcBufRes
,
bnP
rocBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cn2bnProcBuf
);
stop_meas
(
&
p_profiler
->
cn2bnProcBuf
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC
,
bnP
rocBuf
);
#endif
#endif
// BN Processing
// BN Processing
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProcPc
);
start_meas
(
&
p_profiler
->
bnProcPc
);
#endif
#endif
nrLDPC_bnProcPc
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_bnProcPc
(
p_lut
,
bnProcBuf
,
bnProcBufRes
,
llrProcBuf
,
llrRes
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProcPc
);
stop_meas
(
&
p_profiler
->
bnProcPc
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_RES
,
llrRes
);
#endif
#endif
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProc
);
start_meas
(
&
p_profiler
->
bnProc
);
#endif
#endif
nrLDPC_bnProc
(
p_lut
,
p_procBuf
,
Z
);
nrLDPC_bnProc
(
p_lut
,
bnProcBuf
,
bnProcBufRes
,
llrRes
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProc
);
stop_meas
(
&
p_profiler
->
bnProc
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
,
p_procBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
,
bnProcBufRes
);
#endif
#endif
// BN results to CN processing buffer
// BN results to CN processing buffer
...
@@ -307,18 +312,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -307,18 +312,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
nrLDPC_bn2cnProcBuf_BG1
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_bn2cnProcBuf_BG1
(
p_lut
,
bnProcBufRes
,
cnP
rocBuf
,
Z
);
}
}
else
else
{
{
nrLDPC_bn2cnProcBuf_BG2
(
p_lut
,
p_p
rocBuf
,
Z
);
nrLDPC_bn2cnProcBuf_BG2
(
p_lut
,
bnProcBufRes
,
cnP
rocBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bn2cnProcBuf
);
stop_meas
(
&
p_profiler
->
bn2cnProcBuf
);
#endif
#endif
#ifdef NR_LDPC_DEBUG_MODE
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
p_p
rocBuf
);
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
cnP
rocBuf
);
#endif
#endif
// Parity Check
// Parity Check
...
@@ -328,123 +333,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -328,123 +333,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#endif
#endif
if
(
BG
==
1
)
if
(
BG
==
1
)
{
{
pcRes
=
nrLDPC_cnProcPc_BG1
(
p_lut
,
p_procBuf
,
Z
);
pcRes
=
nrLDPC_cnProcPc_BG1
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
}
else
else
{
{
pcRes
=
nrLDPC_cnProcPc_BG2
(
p_lut
,
p_procBuf
,
Z
);
pcRes
=
nrLDPC_cnProcPc_BG2
(
p_lut
,
cnProcBuf
,
cnProcBufRes
,
Z
);
}
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cnProcPc
);
#endif
#endif
}
// Last iteration
if
(
(
i
<
numMaxIter
)
&&
(
pcRes
!=
0
)
)
{
// Increase iteration counter
i
++
;
// CN processing
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
cnProc
);
#endif
if
(
BG
==
1
)
{
nrLDPC_cnProc_BG1
(
p_lut
,
p_procBuf
,
Z
);
}
else
{
nrLDPC_cnProc_BG2
(
p_lut
,
p_procBuf
,
Z
);
}
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cnProc
);
#endif
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC_RES
,
p_procBuf
);
#endif
// Send CN results back to BNs
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
cn2bnProcBuf
);
#endif
if
(
BG
==
1
)
{
nrLDPC_cn2bnProcBuf_BG1
(
p_lut
,
p_procBuf
,
Z
);
}
else
{
nrLDPC_cn2bnProcBuf_BG2
(
p_lut
,
p_procBuf
,
Z
);
}
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cn2bnProcBuf
);
#endif
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC
,
p_procBuf
);
#endif
// BN Processing
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProcPc
);
#endif
nrLDPC_bnProcPc
(
p_lut
,
p_procBuf
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProcPc
);
#endif
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_LLR_RES
,
p_procBuf
);
#endif
// If parity check not enabled, no need to send the BN proc results
// back to CNs
#ifdef NR_LDPC_ENABLE_PARITY_CHECK
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bnProc
);
#endif
nrLDPC_bnProc
(
p_lut
,
p_procBuf
,
Z
);
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bnProc
);
#endif
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_BN_PROC_RES
,
p_procBuf
);
#endif
// BN results to CN processing buffer
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
bn2cnProcBuf
);
#endif
if
(
BG
==
1
)
{
nrLDPC_bn2cnProcBuf_BG1
(
p_lut
,
p_procBuf
,
Z
);
}
else
{
nrLDPC_bn2cnProcBuf_BG2
(
p_lut
,
p_procBuf
,
Z
);
}
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
bn2cnProcBuf
);
#endif
#ifdef NR_LDPC_DEBUG_MODE
nrLDPC_debug_writeBuffer2File
(
nrLDPC_buffers_CN_PROC
,
p_procBuf
);
#endif
// Parity Check
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
cnProcPc
);
#endif
if
(
BG
==
1
)
{
pcRes
=
nrLDPC_cnProcPc_BG1
(
p_lut
,
p_procBuf
,
Z
);
}
else
{
pcRes
=
nrLDPC_cnProcPc_BG2
(
p_lut
,
p_procBuf
,
Z
);
}
}
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
cnProcPc
);
stop_meas
(
&
p_profiler
->
cnProcPc
);
...
@@ -466,7 +359,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
...
@@ -466,7 +359,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
start_meas
(
&
p_profiler
->
llrRes2llrOut
);
start_meas
(
&
p_profiler
->
llrRes2llrOut
);
#endif
#endif
nrLDPC_llrRes2llrOut
(
p_lut
,
p_llrOut
,
p_procBuf
,
Z
,
BG
);
nrLDPC_llrRes2llrOut
(
p_lut
,
p_llrOut
,
llrRes
,
Z
,
BG
);
#ifdef NR_LDPC_PROFILER_DETAIL
#ifdef NR_LDPC_PROFILER_DETAIL
stop_meas
(
&
p_profiler
->
llrRes2llrOut
);
stop_meas
(
&
p_profiler
->
llrRes2llrOut
);
#endif
#endif
...
...
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
View file @
a8a5897a
...
@@ -97,7 +97,7 @@ static inline void *nrLDPC_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_
...
@@ -97,7 +97,7 @@ static inline void *nrLDPC_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_
\param Z Lifting size
\param Z Lifting size
\param BG Base graph
\param BG Base graph
*/
*/
static
inline
void
nrLDPC_llr2llrProcBuf
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
,
uint8_t
BG
)
static
inline
void
nrLDPC_llr2llrProcBuf
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
int8_t
*
llrP
rocBuf
,
uint16_t
Z
,
uint8_t
BG
)
{
{
uint32_t
i
;
uint32_t
i
;
const
uint8_t
numBn2CnG1
=
p_lut
->
numBnInBnGroups
[
0
];
const
uint8_t
numBn2CnG1
=
p_lut
->
numBnInBnGroups
[
0
];
...
@@ -109,7 +109,6 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
...
@@ -109,7 +109,6 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
const
uint8_t
*
lut_llr2llrProcBufBnPos
=
p_lut
->
llr2llrProcBufBnPos
;
const
uint8_t
*
lut_llr2llrProcBufBnPos
=
p_lut
->
llr2llrProcBufBnPos
;
uint32_t
idxBn
;
uint32_t
idxBn
;
int8_t
*
llrProcBuf
=
p_procBuf
->
llrProcBuf
;
// Copy LLRs connected to 1 CN
// Copy LLRs connected to 1 CN
if
(
numBn2CnG1
>
0
)
if
(
numBn2CnG1
>
0
)
...
@@ -133,7 +132,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
...
@@ -133,7 +132,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_llr2CnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_llr2CnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
int8_t
*
cnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint16_t
(
*
lut_circShift_CNG3
)
[
lut_numCnInCnGroups_BG1_R13
[
0
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG1_R13
[
0
]])
p_lut
->
circShift
[
0
];
const
uint16_t
(
*
lut_circShift_CNG3
)
[
lut_numCnInCnGroups_BG1_R13
[
0
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG1_R13
[
0
]])
p_lut
->
circShift
[
0
];
const
uint16_t
(
*
lut_circShift_CNG4
)
[
lut_numCnInCnGroups_BG1_R13
[
1
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG1_R13
[
1
]])
p_lut
->
circShift
[
1
];
const
uint16_t
(
*
lut_circShift_CNG4
)
[
lut_numCnInCnGroups_BG1_R13
[
1
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG1_R13
[
1
]])
p_lut
->
circShift
[
1
];
...
@@ -158,7 +157,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
...
@@ -158,7 +157,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
uint32_t
i
;
uint32_t
i
;
uint32_t
j
;
uint32_t
j
;
...
@@ -342,7 +340,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
...
@@ -342,7 +340,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_llr2CnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_llr2CnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llr
,
int8_t
*
cnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint16_t
(
*
lut_circShift_CNG3
)
[
lut_numCnInCnGroups_BG2_R15
[
0
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG2_R15
[
0
]])
p_lut
->
circShift
[
0
];
const
uint16_t
(
*
lut_circShift_CNG3
)
[
lut_numCnInCnGroups_BG2_R15
[
0
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG2_R15
[
0
]])
p_lut
->
circShift
[
0
];
const
uint16_t
(
*
lut_circShift_CNG4
)
[
lut_numCnInCnGroups_BG2_R15
[
1
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG2_R15
[
1
]])
p_lut
->
circShift
[
1
];
const
uint16_t
(
*
lut_circShift_CNG4
)
[
lut_numCnInCnGroups_BG2_R15
[
1
]]
=
(
const
uint16_t
(
*
)[
lut_numCnInCnGroups_BG2_R15
[
1
]])
p_lut
->
circShift
[
1
];
...
@@ -361,7 +359,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
...
@@ -361,7 +359,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
uint32_t
i
;
uint32_t
i
;
uint32_t
j
;
uint32_t
j
;
...
@@ -478,7 +475,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
...
@@ -478,7 +475,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_cn2bnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_cn2bnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBufRes
,
int8_t
*
bnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
...
@@ -504,9 +501,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -504,9 +501,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG8
)
[
lut_numCnInCnGroups
[
4
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
4
]])
p_lut
->
bnPosBnProcBuf
[
4
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG8
)
[
lut_numCnInCnGroups
[
4
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
4
]])
p_lut
->
bnPosBnProcBuf
[
4
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)
[
lut_numCnInCnGroups
[
5
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
5
]])
p_lut
->
bnPosBnProcBuf
[
5
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)
[
lut_numCnInCnGroups
[
5
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
5
]])
p_lut
->
bnPosBnProcBuf
[
5
];
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
p_cnProcBufRes
;
int8_t
*
p_cnProcBufRes
;
uint32_t
bitOffsetInGroup
;
uint32_t
bitOffsetInGroup
;
uint32_t
i
;
uint32_t
i
;
...
@@ -621,7 +615,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -621,7 +615,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_cn2bnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_cn2bnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
cnProcBufRes
,
int8_t
*
bnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
...
@@ -655,9 +649,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -655,9 +649,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)[
lut_numCnInCnGroups
[
7
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
7
]])
p_lut
->
bnPosBnProcBuf
[
7
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)[
lut_numCnInCnGroups
[
7
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
7
]])
p_lut
->
bnPosBnProcBuf
[
7
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG19
)[
lut_numCnInCnGroups
[
8
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
8
]])
p_lut
->
bnPosBnProcBuf
[
8
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG19
)[
lut_numCnInCnGroups
[
8
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
8
]])
p_lut
->
bnPosBnProcBuf
[
8
];
int8_t
*
cnProcBufRes
=
p_procBuf
->
cnProcBufRes
;
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
p_cnProcBufRes
;
int8_t
*
p_cnProcBufRes
;
uint32_t
bitOffsetInGroup
;
uint32_t
bitOffsetInGroup
;
uint32_t
i
;
uint32_t
i
;
...
@@ -819,7 +810,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -819,7 +810,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_bn2cnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_bn2cnProcBuf_BG2
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
bnProcBufRes
,
int8_t
*
cnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
...
@@ -845,9 +836,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -845,9 +836,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG8
)
[
lut_numCnInCnGroups
[
4
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
4
]])
p_lut
->
bnPosBnProcBuf
[
4
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG8
)
[
lut_numCnInCnGroups
[
4
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
4
]])
p_lut
->
bnPosBnProcBuf
[
4
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)
[
lut_numCnInCnGroups
[
5
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
5
]])
p_lut
->
bnPosBnProcBuf
[
5
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)
[
lut_numCnInCnGroups
[
5
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
5
]])
p_lut
->
bnPosBnProcBuf
[
5
];
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
p_cnProcBuf
;
int8_t
*
p_cnProcBuf
;
uint32_t
bitOffsetInGroup
;
uint32_t
bitOffsetInGroup
;
uint32_t
i
;
uint32_t
i
;
...
@@ -961,7 +949,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -961,7 +949,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
\param p_procBuf Pointer to the processing buffers
\param p_procBuf Pointer to the processing buffers
\param Z Lifting size
\param Z Lifting size
*/
*/
static
inline
void
nrLDPC_bn2cnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
t_nrLDPC_procBuf
*
p_p
rocBuf
,
uint16_t
Z
)
static
inline
void
nrLDPC_bn2cnProcBuf_BG1
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
bnProcBufRes
,
int8_t
*
cnP
rocBuf
,
uint16_t
Z
)
{
{
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint8_t
*
lut_numCnInCnGroups
=
p_lut
->
numCnInCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
const
uint32_t
*
lut_startAddrCnGroups
=
p_lut
->
startAddrCnGroups
;
...
@@ -995,9 +983,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -995,9 +983,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)[
lut_numCnInCnGroups
[
7
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
7
]])
p_lut
->
bnPosBnProcBuf
[
7
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG10
)[
lut_numCnInCnGroups
[
7
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
7
]])
p_lut
->
bnPosBnProcBuf
[
7
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG19
)[
lut_numCnInCnGroups
[
8
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
8
]])
p_lut
->
bnPosBnProcBuf
[
8
];
const
uint8_t
(
*
lut_bnPosBnProcBuf_CNG19
)[
lut_numCnInCnGroups
[
8
]]
=
(
const
uint8_t
(
*
)[
lut_numCnInCnGroups
[
8
]])
p_lut
->
bnPosBnProcBuf
[
8
];
int8_t
*
cnProcBuf
=
p_procBuf
->
cnProcBuf
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
p_cnProcBuf
;
int8_t
*
p_cnProcBuf
;
uint32_t
bitOffsetInGroup
;
uint32_t
bitOffsetInGroup
;
uint32_t
i
;
uint32_t
i
;
...
@@ -1157,7 +1142,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
...
@@ -1157,7 +1142,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
\param Z Lifting size
\param Z Lifting size
\param BG Base graph
\param BG Base graph
*/
*/
static
inline
void
nrLDPC_llrRes2llrOut
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llrOut
,
t_nrLDPC_procBuf
*
p_procBuf
,
uint16_t
Z
,
uint8_t
BG
)
static
inline
void
nrLDPC_llrRes2llrOut
(
t_nrLDPC_lut
*
p_lut
,
int8_t
*
llrOut
,
int8_t
*
llrRes
,
uint16_t
Z
,
uint8_t
BG
)
{
{
uint32_t
i
;
uint32_t
i
;
const
uint8_t
numBn2CnG1
=
p_lut
->
numBnInBnGroups
[
0
];
const
uint8_t
numBn2CnG1
=
p_lut
->
numBnInBnGroups
[
0
];
...
@@ -1168,7 +1153,6 @@ static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_n
...
@@ -1168,7 +1153,6 @@ static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_n
const
uint16_t
*
lut_llr2llrProcBufAddr
=
p_lut
->
llr2llrProcBufAddr
;
const
uint16_t
*
lut_llr2llrProcBufAddr
=
p_lut
->
llr2llrProcBufAddr
;
const
uint8_t
*
lut_llr2llrProcBufBnPos
=
p_lut
->
llr2llrProcBufBnPos
;
const
uint8_t
*
lut_llr2llrProcBufBnPos
=
p_lut
->
llr2llrProcBufBnPos
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
int8_t
*
p_llrOut
=
&
llrOut
[
0
];
int8_t
*
p_llrOut
=
&
llrOut
[
0
];
uint32_t
idxBn
;
uint32_t
idxBn
;
...
...
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h
View file @
a8a5897a
...
@@ -87,38 +87,38 @@ static inline void nrLDPC_initFile(const char* fileName)
...
@@ -87,38 +87,38 @@ static inline void nrLDPC_initFile(const char* fileName)
\brief Writes data of predefined buffers to file
\brief Writes data of predefined buffers to file
\param buffer Enum of buffer name to write
\param buffer Enum of buffer name to write
*/
*/
static
inline
void
nrLDPC_debug_writeBuffer2File
(
e_nrLDPC_buffers
buffer
,
t_nrLDPC_procBuf
*
p_procBuf
)
static
inline
void
nrLDPC_debug_writeBuffer2File
(
e_nrLDPC_buffers
buffer
,
int8_t
*
p_buffer
)
{
{
switch
(
buffer
)
switch
(
buffer
)
{
{
case
nrLDPC_buffers_LLR_PROC
:
case
nrLDPC_buffers_LLR_PROC
:
{
{
nrLDPC_writeFile
(
"llrProcBuf.txt"
,
p_
procBuf
->
llrProcBuf
,
NR_LDPC_MAX_NUM_LLR
);
nrLDPC_writeFile
(
"llrProcBuf.txt"
,
p_
buffer
,
NR_LDPC_MAX_NUM_LLR
);
break
;
break
;
}
}
case
nrLDPC_buffers_CN_PROC
:
case
nrLDPC_buffers_CN_PROC
:
{
{
nrLDPC_writeFile
(
"cnProcBuf.txt"
,
p_
procBuf
->
cnProcBuf
,
NR_LDPC_SIZE_CN_PROC_BUF
);
nrLDPC_writeFile
(
"cnProcBuf.txt"
,
p_
buffer
,
NR_LDPC_SIZE_CN_PROC_BUF
);
break
;
break
;
}
}
case
nrLDPC_buffers_CN_PROC_RES
:
case
nrLDPC_buffers_CN_PROC_RES
:
{
{
nrLDPC_writeFile
(
"cnProcBufRes.txt"
,
p_
procBuf
->
cnProcBufRes
,
NR_LDPC_SIZE_CN_PROC_BUF
);
nrLDPC_writeFile
(
"cnProcBufRes.txt"
,
p_
buffer
,
NR_LDPC_SIZE_CN_PROC_BUF
);
break
;
break
;
}
}
case
nrLDPC_buffers_BN_PROC
:
case
nrLDPC_buffers_BN_PROC
:
{
{
nrLDPC_writeFile
(
"bnProcBuf.txt"
,
p_
procBuf
->
bnProcBuf
,
NR_LDPC_SIZE_BN_PROC_BUF
);
nrLDPC_writeFile
(
"bnProcBuf.txt"
,
p_
buffer
,
NR_LDPC_SIZE_BN_PROC_BUF
);
break
;
break
;
}
}
case
nrLDPC_buffers_BN_PROC_RES
:
case
nrLDPC_buffers_BN_PROC_RES
:
{
{
nrLDPC_writeFile
(
"bnProcBufRes.txt"
,
p_
procBuf
->
bnProcBufRes
,
NR_LDPC_SIZE_BN_PROC_BUF
);
nrLDPC_writeFile
(
"bnProcBufRes.txt"
,
p_
buffer
,
NR_LDPC_SIZE_BN_PROC_BUF
);
break
;
break
;
}
}
case
nrLDPC_buffers_LLR_RES
:
case
nrLDPC_buffers_LLR_RES
:
{
{
nrLDPC_writeFile
(
"llrRes.txt"
,
p_
procBuf
->
llrRes
,
NR_LDPC_MAX_NUM_LLR
);
nrLDPC_writeFile
(
"llrRes.txt"
,
p_
buffer
,
NR_LDPC_MAX_NUM_LLR
);
break
;
break
;
}
}
}
}
...
...
openair1/PHY/CODING/nrLDPC_defs.h
View file @
a8a5897a
...
@@ -71,5 +71,5 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho
...
@@ -71,5 +71,5 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho
\param p_llrOut Output vector
\param p_llrOut Output vector
\param p_profiler LDPC profiler statistics
\param p_profiler LDPC profiler statistics
*/
*/
typedef
int32_t
(
*
nrLDPC_decoderfunc_t
)(
t_nrLDPC_dec_params
*
,
int8_t
*
,
int8_t
*
,
t_nrLDPC_procBuf
*
,
t_nrLDPC_time_stats
*
);
typedef
int32_t
(
*
nrLDPC_decoderfunc_t
)(
t_nrLDPC_dec_params
*
,
int8_t
*
,
int8_t
*
,
t_nrLDPC_time_stats
*
);
#endif
#endif
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
a8a5897a
...
@@ -91,12 +91,6 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr,uint8_t N_RB_UL)
...
@@ -91,12 +91,6 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr,uint8_t N_RB_UL)
ulsch
->
harq_processes
[
i
]
->
w
[
r
]
=
NULL
;
ulsch
->
harq_processes
[
i
]
->
w
[
r
]
=
NULL
;
}
}
}
}
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
if
(
ulsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]){
nrLDPC_free_mem
(
ulsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]);
ulsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]
=
NULL
;
}
}
free16
(
ulsch
->
harq_processes
[
i
],
sizeof
(
NR_UL_gNB_HARQ_t
));
free16
(
ulsch
->
harq_processes
[
i
],
sizeof
(
NR_UL_gNB_HARQ_t
));
ulsch
->
harq_processes
[
i
]
=
NULL
;
ulsch
->
harq_processes
[
i
]
=
NULL
;
}
}
...
@@ -120,21 +114,57 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint
...
@@ -120,21 +114,57 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint
}
}
uint16_t
ulsch_bytes
=
a_segments
*
1056
;
// allocated bytes per segment
uint16_t
ulsch_bytes
=
a_segments
*
1056
;
// allocated bytes per segment
ulsch
=
(
NR_gNB_ULSCH_t
*
)
malloc16_clear
(
sizeof
(
NR_gNB_ULSCH_t
));
ulsch
=
(
NR_gNB_ULSCH_t
*
)
malloc16
(
sizeof
(
NR_gNB_ULSCH_t
));
if
(
ulsch
)
{
memset
(
ulsch
,
0
,
sizeof
(
NR_gNB_ULSCH_t
));
ulsch
->
max_ldpc_iterations
=
max_ldpc_iterations
;
ulsch
->
max_ldpc_iterations
=
max_ldpc_iterations
;
ulsch
->
Mlimit
=
4
;
ulsch
->
Mlimit
=
4
;
for
(
i
=
0
;
i
<
NR_MAX_ULSCH_HARQ_PROCESSES
;
i
++
)
{
for
(
i
=
0
;
i
<
NR_MAX_ULSCH_HARQ_PROCESSES
;
i
++
)
{
ulsch
->
harq_processes
[
i
]
=
(
NR_UL_gNB_HARQ_t
*
)
malloc16_clear
(
sizeof
(
NR_UL_gNB_HARQ_t
));
ulsch
->
harq_processes
[
i
]
=
(
NR_UL_gNB_HARQ_t
*
)
malloc16
(
sizeof
(
NR_UL_gNB_HARQ_t
));
ulsch
->
harq_processes
[
i
]
->
b
=
(
uint8_t
*
)
malloc16_clear
(
ulsch_bytes
);
if
(
ulsch
->
harq_processes
[
i
])
{
memset
(
ulsch
->
harq_processes
[
i
],
0
,
sizeof
(
NR_UL_gNB_HARQ_t
));
ulsch
->
harq_processes
[
i
]
->
b
=
(
uint8_t
*
)
malloc16
(
ulsch_bytes
);
if
(
ulsch
->
harq_processes
[
i
]
->
b
)
memset
(
ulsch
->
harq_processes
[
i
]
->
b
,
0
,
ulsch_bytes
);
else
exit_flag
=
3
;
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
ulsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]
=
nrLDPC_init_mem
();
ulsch
->
harq_processes
[
i
]
->
c
[
r
]
=
(
uint8_t
*
)
malloc16_clear
(
8448
*
sizeof
(
uint8_t
));
ulsch
->
harq_processes
[
i
]
->
c
[
r
]
=
(
uint8_t
*
)
malloc16
(
8448
*
sizeof
(
uint8_t
));
ulsch
->
harq_processes
[
i
]
->
d
[
r
]
=
(
int16_t
*
)
malloc16_clear
((
68
*
384
)
*
sizeof
(
int16_t
));
ulsch
->
harq_processes
[
i
]
->
w
[
r
]
=
(
int16_t
*
)
malloc16_clear
((
3
*
(
6144
+
64
))
*
sizeof
(
int16_t
));
if
(
ulsch
->
harq_processes
[
i
]
->
c
[
r
])
memset
(
ulsch
->
harq_processes
[
i
]
->
c
[
r
],
0
,
8448
*
sizeof
(
uint8_t
));
else
exit_flag
=
2
;
ulsch
->
harq_processes
[
i
]
->
d
[
r
]
=
(
int16_t
*
)
malloc16
((
68
*
384
)
*
sizeof
(
int16_t
));
if
(
ulsch
->
harq_processes
[
i
]
->
d
[
r
])
memset
(
ulsch
->
harq_processes
[
i
]
->
d
[
r
],
0
,(
68
*
384
)
*
sizeof
(
int16_t
));
else
exit_flag
=
2
;
ulsch
->
harq_processes
[
i
]
->
w
[
r
]
=
(
int16_t
*
)
malloc16
((
3
*
(
6144
+
64
))
*
sizeof
(
int16_t
));
if
(
ulsch
->
harq_processes
[
i
]
->
w
[
r
])
memset
(
ulsch
->
harq_processes
[
i
]
->
w
[
r
],
0
,(
3
*
(
6144
+
64
))
*
sizeof
(
int16_t
));
else
exit_flag
=
2
;
}
}
}
else
{
exit_flag
=
1
;
}
}
}
}
}
}
...
@@ -382,7 +412,6 @@ void nr_processULSegment(void* arg) {
...
@@ -382,7 +412,6 @@ void nr_processULSegment(void* arg) {
no_iteration_ldpc
=
nrLDPC_decoder
(
p_decoderParms
,
no_iteration_ldpc
=
nrLDPC_decoder
(
p_decoderParms
,
(
int8_t
*
)
&
pl
[
0
],
(
int8_t
*
)
&
pl
[
0
],
llrProcBuf
,
llrProcBuf
,
ulsch_harq
->
p_nrLDPC_procBuf
[
r
],
p_procTime
);
p_procTime
);
if
(
check_crc
((
uint8_t
*
)
llrProcBuf
,
length_dec
,
ulsch_harq
->
F
,
crc_type
))
{
if
(
check_crc
((
uint8_t
*
)
llrProcBuf
,
length_dec
,
ulsch_harq
->
F
,
crc_type
))
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
a8a5897a
...
@@ -114,13 +114,6 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr,uint8_t N_RB_DL) {
...
@@ -114,13 +114,6 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr,uint8_t N_RB_DL) {
dlsch
->
harq_processes
[
i
]
->
w
[
r
]
=
NULL
;
dlsch
->
harq_processes
[
i
]
->
w
[
r
]
=
NULL
;
}
}
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
if
(
dlsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
])
{
nrLDPC_free_mem
(
dlsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]);
dlsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]
=
NULL
;
}
}
free16
(
dlsch
->
harq_processes
[
i
],
sizeof
(
NR_DL_UE_HARQ_t
));
free16
(
dlsch
->
harq_processes
[
i
],
sizeof
(
NR_DL_UE_HARQ_t
));
dlsch
->
harq_processes
[
i
]
=
NULL
;
dlsch
->
harq_processes
[
i
]
=
NULL
;
}
}
...
@@ -169,7 +162,6 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
...
@@ -169,7 +162,6 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
for
(
r
=
0
;
r
<
a_segments
;
r
++
)
{
dlsch
->
harq_processes
[
i
]
->
p_nrLDPC_procBuf
[
r
]
=
nrLDPC_init_mem
();
dlsch
->
harq_processes
[
i
]
->
c
[
r
]
=
(
uint8_t
*
)
malloc16
(
1056
);
dlsch
->
harq_processes
[
i
]
->
c
[
r
]
=
(
uint8_t
*
)
malloc16
(
1056
);
if
(
dlsch
->
harq_processes
[
i
]
->
c
[
r
])
if
(
dlsch
->
harq_processes
[
i
]
->
c
[
r
])
...
@@ -441,7 +433,6 @@ void nr_processDLSegment(void* arg) {
...
@@ -441,7 +433,6 @@ void nr_processDLSegment(void* arg) {
no_iteration_ldpc
=
nrLDPC_decoder
(
p_decoderParms
,
no_iteration_ldpc
=
nrLDPC_decoder
(
p_decoderParms
,
(
int8_t
*
)
&
pl
[
0
],
(
int8_t
*
)
&
pl
[
0
],
llrProcBuf
,
llrProcBuf
,
p_nrLDPC_procBuf
[
r
],
p_procTime
);
p_procTime
);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
View file @
a8a5897a
...
@@ -240,8 +240,6 @@ typedef struct {
...
@@ -240,8 +240,6 @@ typedef struct {
//double w_abs[MAX_NUM_NR_DLSCH_SEGMENTS][3*8448];
//double w_abs[MAX_NUM_NR_DLSCH_SEGMENTS][3*8448];
/// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
/// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
int16_t
*
d
[
MAX_NUM_NR_DLSCH_SEGMENTS
];
int16_t
*
d
[
MAX_NUM_NR_DLSCH_SEGMENTS
];
/// LDPC processing buffers
t_nrLDPC_procBuf
*
p_nrLDPC_procBuf
[
MAX_NUM_NR_DLSCH_SEGMENTS
];
/// Number of code segments
/// Number of code segments
uint32_t
C
;
uint32_t
C
;
/// Number of bits in code segments
/// Number of bits in code segments
...
...
openair1/PHY/defs_gNB.h
View file @
a8a5897a
...
@@ -282,8 +282,6 @@ typedef struct {
...
@@ -282,8 +282,6 @@ typedef struct {
uint32_t
C
;
uint32_t
C
;
/// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2)
/// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2)
int16_t
*
d
[
MAX_NUM_NR_ULSCH_SEGMENTS
];
int16_t
*
d
[
MAX_NUM_NR_ULSCH_SEGMENTS
];
/// LDPC processing buffer
t_nrLDPC_procBuf
*
p_nrLDPC_procBuf
[
MAX_NUM_NR_ULSCH_SEGMENTS
];
/// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1)
/// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1)
uint32_t
Z
;
uint32_t
Z
;
/// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
/// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.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