From ba020c807f917fdc7355dc1250f628956f36c56b Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Thu, 21 Apr 2016 22:28:21 -0700 Subject: [PATCH] oaisim compilation error, ulsim 20 MHz segfault. ulsim tests. --- .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 2 + openair1/PHY/INIT/lte_param_init.c | 1 + openair1/PHY/LTE_TRANSPORT/group_hopping.c | 20 +++++----- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 40 ++++++++++++++----- openair1/SCHED/phy_procedures_lte_eNb.c | 1 + openair1/SIMULATION/LTE_PHY/ulsim.c | 19 ++++----- targets/SIMU/USER/init_lte.c | 1 + targets/SIMU/USER/oaisim.h | 2 +- 8 files changed, 56 insertions(+), 30 deletions(-) diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index ee78dd0773..0227a45a3d 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -1000,6 +1000,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, #if defined(__x86_64__) || defined(__i386__) + // note: this makes valgrind freak __m128i avg=_mm_set1_epi32(0); for (i=0; i<(3*(n>>4))+1; i++) { @@ -1503,6 +1504,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp2=_mm_and_si128(tmp,mask); tmp2=_mm_cmpeq_epi16(tmp2,mask); + // printf("decoded_bytes %p\n",decoded_bytes); decoded_bytes[n_128*0+i]=(uint8_t) _mm_movemask_epi8(_mm_packs_epi16(tmp2,zeros)); int j; diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c index 2b827dcb0e..0db51e8b17 100644 --- a/openair1/PHY/INIT/lte_param_init.c +++ b/openair1/PHY/INIT/lte_param_init.c @@ -45,6 +45,7 @@ void lte_param_init(unsigned char N_tx, lte_frame_parms->N_RB_UL = N_RB_DL; lte_frame_parms->threequarter_fs = threequarter_fs; lte_frame_parms->Ncp = extended_prefix_flag; + lte_frame_parms->Ncp_UL = extended_prefix_flag; lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->nb_antennas_tx = N_tx; diff --git a/openair1/PHY/LTE_TRANSPORT/group_hopping.c b/openair1/PHY/LTE_TRANSPORT/group_hopping.c index 992ac3088d..64c0830386 100644 --- a/openair1/PHY/LTE_TRANSPORT/group_hopping.c +++ b/openair1/PHY/LTE_TRANSPORT/group_hopping.c @@ -52,7 +52,7 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms) x2 = frame_parms->Nid_cell/30; #ifdef DEBUG_GROUPHOP - msg("[PHY] GroupHop:"); + printf("[PHY] GroupHop:"); #endif for (ns=0; ns<20; ns++) { @@ -68,12 +68,12 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms) } #ifdef DEBUG_GROUPHOP - msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns]); + printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns]); #endif } #ifdef DEBUG_GROUPHOP - msg("\n"); + printf("\n"); #endif } @@ -89,7 +89,7 @@ void generate_seqhop(LTE_DL_FRAME_PARMS *frame_parms) s = lte_gold_generic(&x1,&x2,reset); #ifdef DEBUG_GROUPHOP - msg("[PHY] SeqHop:"); + printf("[PHY] SeqHop:"); #endif for (ns=0; ns<20; ns++) { @@ -100,12 +100,12 @@ void generate_seqhop(LTE_DL_FRAME_PARMS *frame_parms) frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns] = 0; #ifdef DEBUG_GROUPHOP - msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns]); + printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns]); #endif } #ifdef DEBUG_GROUPHOP - msg("\n"); + printf("\n"); #endif } @@ -116,7 +116,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms) uint8_t reset=1; uint32_t x1, x2, s=0; // This is from Section 5.5.1.3 - uint8_t Nsymb_UL = (frame_parms->Ncp_UL == 0) ? 7 : 6; + uint8_t Nsymb_UL = (frame_parms->Ncp_UL == NORMAL) ? 7 : 6; uint16_t next = 0; uint8_t ns=0; @@ -124,7 +124,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms) x2 = (32*(uint32_t)(frame_parms->Nid_cell/30)) + fss_pusch; #ifdef DEBUG_GROUPHOP - msg("[PHY] nPRS:"); + printf("[PHY] nPRS:"); #endif for (n=0; n<(20*Nsymb_UL); n++) { //loop over total number of bytes to generate @@ -137,7 +137,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms) if (n == next) { frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns] = ((uint8_t*)&s)[next&3]; #ifdef DEBUG_GROUPHOP - msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns]); + printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns]); #endif ns++; next+=Nsymb_UL; @@ -145,7 +145,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms) } #ifdef DEBUG_GROUPHOP - msg("\n"); + printf("\n"); #endif } diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 60838c44b7..a0a5602261 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -142,7 +142,6 @@ LTE_eNB_ULSCH_t *new_eNB_ulsch(uint8_t max_turbo_iterations,uint8_t N_RB_UL, uin if (abstraction_flag==0) { for (r=0; r<MAX_NUM_ULSCH_SEGMENTS/bw_scaling; r++) { ulsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+768); - if (ulsch->harq_processes[i]->c[r]) memset(ulsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+768); else @@ -338,6 +337,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, // CLEAR LLR's HERE for first packet in process } + // printf("after segmentation c[%d] = %p\n",0,ulsch_harq->c[0]); sumKr = 0; @@ -449,6 +449,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, // Rmux = Hpp*Q_m/Cmux; Rmux_prime = Hpp/Cmux; + // Clear "tag" interleaving matrix to allow for CQI/DATA identification memset(ytag,0,Cmux*Rmux_prime); @@ -457,6 +458,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, i=0; memset(y,LTE_NULL,Q_m*Hpp); + // printf("before unscrambling c[%d] = %p\n",0,ulsch_harq->c[0]); // read in buffer and unscramble llrs for everything but placeholder bits // llrs stored per symbol correspond to columns of interleaving matrix @@ -472,6 +474,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, s = lte_gold_generic(&x1, &x2, 0); } + // printf("after unscrambling c[%d] = %p\n",0,ulsch_harq->c[0]); + if (frame_parms->Ncp == 0) columnset = cs_ri_normal; else @@ -495,6 +499,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, } + // printf("after RI c[%d] = %p\n",0,ulsch_harq->c[0]); + // HARQ-ACK Bits (Note these overwrite some bits) if (frame_parms->Ncp == 0) columnset = cs_ack_normal; @@ -664,6 +670,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, j=(j+3)&3; } + // printf("after ACKNAK c[%d] = %p\n",0,ulsch_harq->c[0]); // RI BITS @@ -708,6 +715,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, j=(j+3)&3; } + // printf("after RI2 c[%d] = %p\n",0,ulsch_harq->c[0]); + // CQI and Data bits j=0; j2=0; @@ -736,10 +745,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, j2+=Q_m; } - + switch (Q_m) { case 2: - for (iprime=0; iprime<G<<1;) { + for (iprime=0; iprime<G;) { while (ytag[j]==LTE_NULL) { j++; j2+=2; @@ -754,7 +763,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, break; case 4: - for (iprime=0; iprime<G<<2;) { + for (iprime=0; iprime<G;) { while (ytag[j]==LTE_NULL) { j++; j2+=4; @@ -770,7 +779,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, break; case 6: - for (iprime=0; iprime<G*6;) { + for (iprime=0; iprime<G;) { while (ytag[j]==LTE_NULL) { j++; j2+=6; @@ -788,8 +797,11 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, break; } - } + + + } // Q_RI>0 else { + for (i=0; i<(Q_CQI/Q_m); i++) { for (q=0; q<Q_m; q++) { @@ -804,16 +816,16 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, j2+=Q_m; } - + // printf("after CQI0 c[%d] = %p\n",0,ulsch_harq->c[0]); switch (Q_m) { case 2: - for (iprime=0; iprime<G<<1;) { + for (iprime=0; iprime<G;) { ulsch_harq->e[iprime++] = y[j2++]; ulsch_harq->e[iprime++] = y[j2++]; } break; case 4: - for (iprime=0; iprime<G<<2;) { + for (iprime=0; iprime<G;) { ulsch_harq->e[iprime++] = y[j2++]; ulsch_harq->e[iprime++] = y[j2++]; ulsch_harq->e[iprime++] = y[j2++]; @@ -821,7 +833,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, } break; case 6: - for (iprime=0; iprime<G*6;) { + for (iprime=0; iprime<G;) { ulsch_harq->e[iprime++] = y[j2++]; ulsch_harq->e[iprime++] = y[j2++]; ulsch_harq->e[iprime++] = y[j2++]; @@ -832,6 +844,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, break; } } + // printf("after ACKNAK2 c[%d] = %p (iprime %d, G %d)\n",0,ulsch_harq->c[0],iprime,G); + // Do CQI/RI/HARQ-ACK Decoding first and pass to MAC // HARQ-ACK @@ -904,6 +918,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, // CQI + // printf("before cqi c[%d] = %p\n",0,ulsch_harq->c[0]); if (Q_CQI>0) { memset((void *)&dummy_w_cc[0],0,3*(ulsch_harq->Or1+8+32)); @@ -971,6 +986,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, for (r=0; r<ulsch_harq->C; r++) { + // printf("before subblock deinterleaving c[%d] = %p\n",r,ulsch_harq->c[r]); // Get Turbo interleaver parameters if (r<ulsch_harq->Cminus) Kr = ulsch_harq->Kminus; @@ -1043,6 +1059,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, for (r=0; r<ulsch_harq->C; r++) { + /* printf("c[%d] : %p\n",r, + ulsch_harq->c[r]); + */ + if (ulsch_harq->C == 1) crc_type = CRC24_A; else diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index ff3d17ad49..8e2cdf39f2 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2547,6 +2547,7 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eN const int frame = phy_vars_eNB->proc[sched_subframe].frame_rx; uint16_t rnti=0; int ret=0; + int i; num_active_cba_groups = phy_vars_eNB->ulsch_eNB[UE_id]->num_active_cba_groups; diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 4d0de016a2..56f8eb146a 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -308,7 +308,7 @@ int main(int argc, char **argv) break; default: - msg("Unsupported channel model!\n"); + printf("Unsupported channel model!\n"); exit(-1); break; } @@ -332,7 +332,7 @@ int main(int argc, char **argv) if ((transmission_mode!=1) && (transmission_mode!=2)) { - msg("Unsupported transmission mode %d\n",transmission_mode); + printf("Unsupported transmission mode %d\n",transmission_mode); exit(-1); } @@ -382,10 +382,10 @@ int main(int argc, char **argv) case 'i': input_fdUL = fopen(optarg,"r"); - msg("Reading in %s (%p)\n",optarg,input_fdUL); + printf("Reading in %s (%p)\n",optarg,input_fdUL); if (input_fdUL == (FILE*)NULL) { - msg("Unknown file %s\n",optarg); + printf("Unknown file %s\n",optarg); exit(-1); } @@ -509,7 +509,7 @@ int main(int argc, char **argv) // r_re0 = malloc(2*sizeof(double*)); // r_im0 = malloc(2*sizeof(double*)); - nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == 0) ? 14 : 12; + nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == NORMAL) ? 14 : 12; sprintf(bler_fname,"ULbler_mcs%d_nrb%d_ChannelModel%d_nsim%d.csv",mcs,nb_rb,chMod,n_frames); @@ -760,9 +760,9 @@ int main(int argc, char **argv) PHY_vars_eNB->proc[sf].subframe_rx=sf; } - msg("Init UL hopping UE\n"); + printf("Init UL hopping UE\n"); init_ul_hopping(&PHY_vars_UE->lte_frame_parms); - msg("Init UL hopping eNB\n"); + printf("Init UL hopping eNB\n"); init_ul_hopping(&PHY_vars_eNB->lte_frame_parms); PHY_vars_eNB->proc[subframe].frame_rx = PHY_vars_UE->frame_tx; @@ -1063,7 +1063,7 @@ int main(int argc, char **argv) start_meas(&PHY_vars_UE->ofdm_mod_stats); for (aa=0; aa<1; aa++) { - if (frame_parms->Ncp == 1) + if (frame_parms->Ncp == EXTENDED) PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input &txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output PHY_vars_UE->lte_frame_parms.ofdm_symbol_size, @@ -1257,6 +1257,7 @@ int main(int argc, char **argv) */ start_meas(&PHY_vars_eNB->ulsch_decoding_stats); + ret= ulsch_decoding(PHY_vars_eNB, 0, // UE_id subframe, @@ -1293,7 +1294,7 @@ int main(int argc, char **argv) if (PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->o_ACK[0] != PHY_vars_UE->ulsch_ue[0]->o_ACK[0]) ack_errors++; - // msg("ulsch_coding: O[%d] %d\n",i,o_flip[i]); + // printf("ulsch_coding: O[%d] %d\n",i,o_flip[i]); if (ret <= PHY_vars_eNB->ulsch_eNB[0]->max_turbo_iterations) { diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index c6784cc5a2..861bfa6cbf 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -247,6 +247,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], (frame_parms[CC_id])->phich_config_common.phich_resource = oneSixth; (frame_parms[CC_id])->phich_config_common.phich_duration = normal; (frame_parms[CC_id])->Ncp = extended_prefix_flag; + (frame_parms[CC_id])->Ncp_UL = extended_prefix_flag; (frame_parms[CC_id])->Nid_cell = Nid_cell; (frame_parms[CC_id])->nushift = (Nid_cell%6); (frame_parms[CC_id])->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2; diff --git a/targets/SIMU/USER/oaisim.h b/targets/SIMU/USER/oaisim.h index 8d3edbe9eb..6fb16b82db 100644 --- a/targets/SIMU/USER/oaisim.h +++ b/targets/SIMU/USER/oaisim.h @@ -73,7 +73,7 @@ int ulsch_abstraction(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nb_rb, ui void calc_path_loss(node_desc_t* node_tx, node_desc_t* node_rx, channel_desc_t *ch_desc, Environment_System_Config env_desc, double **SF); -void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); +void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); void reset_opp_meas(void); void print_opp_meas(void); -- 2.26.2