From 42a4649afd3ab9c1ff7a288d9ed4da244e0094a1 Mon Sep 17 00:00:00 2001 From: sebastian Date: Tue, 24 Sep 2019 17:50:51 +0200 Subject: [PATCH] Optimized llr2cnProcBuf for BG1 and R13 but needs clean up. --- .../PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h | 208 +++++++++++++++++- 1 file changed, 197 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h index f011393594..9ab8f92050 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h @@ -33,7 +33,7 @@ #include #include "nrLDPC_defs.h" - +#include "nrLDPC_tools/nrLDPC_debug.h" /** \brief Circular memcpy (src) str2 = |xxxxxxxxxxxxxxxxxxxx\--------| @@ -89,7 +89,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; const uint8_t* lut_llr2llrProcBufNumBn = p_lut->llr2llrProcBufNumBn; const uint8_t* lut_llr2llrProcBufNumEl = p_lut->llr2llrProcBufNumEl; - + //nrLDPC_debug_initBuffer2File(nrLDPC_buffers_LLR_PROC); uint16_t numLlr = 0; int8_t* llrProcBuf = p_procBuf->llrProcBuf; @@ -111,6 +111,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL memcpy(&llrProcBuf[lut_llr2llrProcBufAddr[i]], llr, numLlr); llr+=numLlr; } + //nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_PROC, p_procBuf); } /** @@ -136,7 +137,10 @@ static inline void nrLDPC_llr2CnProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLD uint8_t startColParity = NR_LDPC_START_COL_PARITY_BG1; uint32_t colG1; const uint32_t* p_lutEntry = lut_llr2CnProcBuf; - + int8_t *p_llr = llr; + + // nrLDPC_debug_initBuffer2File(nrLDPC_buffers_CN_PROC); +/* if (BG == 2) { startColParity = NR_LDPC_START_COL_PARITY_BG2; @@ -148,43 +152,225 @@ static inline void nrLDPC_llr2CnProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLD { numEdges = lut_numEdgesPerBn[k]; + p_llr = &llr[k*Z]; + for (i=0; inumCnInCnGroups; - /* - const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0]; + const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; + const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->circShift[2]; + const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->circShift[3]; + const uint16_t (*lut_circShift_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->circShift[4]; + const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->circShift[5]; + const uint16_t (*lut_circShift_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->circShift[6]; + const uint16_t (*lut_circShift_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->circShift[7]; + const uint16_t (*lut_circShift_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->circShift[8]; + + const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; + uint32_t idxBn = 0; int8_t* p_cnProcBuf; uint32_t bitOffsetInGroup; + + // ===================================================================== + // CN group with 3 BNs + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; const uint8_t lut_CNG3[3] = {0, 1, 26}; - for (j=0; j<2; j++) + for (j=0; j<3; j++) { p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; nrLDPC_inv_circ_memcpy(p_cnProcBuf, &llr[lut_CNG3[j]*Z], Z, lut_circShift_CNG3[j][0]); } - */ + // ===================================================================== + // CN group with 4 BNs + + //p_lut_cn2bn += (M*3); // Number of elements of previous group + //M = lut_numCnInCnGroups[1]*Z; + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX; + static const uint8_t posBnInCnProcBuf_BG1_R13_CNG4[4][5] = {{1, 1, 0, 0, 1},{6, 13, 8, 4, 6},{8, 23, 17, 24, 10},{49, 59, 62, 64, 67}}; + + for (j=0; j<4; j++) + { + p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; + + for (i=0; i