From ad28a3fe43617191066b4f5b88c106d9fa788dce Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 17 Dec 2019 10:10:18 +0100 Subject: [PATCH 1/3] using the old mechanism if having L1 and gNB on the same machine --- openair1/SCHED_NR/nr_ru_procedures.c | 224 ++++++++++++++++++--------- 1 file changed, 153 insertions(+), 71 deletions(-) diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index 0ce3172bfd..7b1962ef5b 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -120,8 +120,8 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { int slot = tti_tx; int i = 0; - int j = 0; - int aa = 0; + int j = 0;//symbol + int aa = 0;//logical antenna number int ret = 0; int nb_antenna_ports = fp->N_ssb; int ofdm_mask_full = (1<<(ru->nb_tx*2))-1; @@ -133,67 +133,98 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { } start_meas(&ru->ofdm_total_stats); - - for(j=0; jsymbols_per_slot; ++j){ - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+j , 1); - start_meas(&ru->txdataF_copy_stats); - if (ru->num_gNB == 1){ - gNB = ru->gNB_list[0]; - cfg = &gNB->gNB_config; - - for(i=0; icommon.txdataF[i][j*fp->ofdm_symbol_size], - (void*)&gNB->common_vars.txdataF[i][j*fp->ofdm_symbol_size + txdataF_offset], - fp->ofdm_symbol_size*sizeof(int32_t)); - } - - }//num_gNB == 1 - stop_meas(&ru->txdataF_copy_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+j , 0); - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 ); - - if (nr_slot_select(cfg,slot,frame_tx)==SF_DL) { - // If this is not an S-tti + if(ru->num_gNB != 0){//L1 RU on same machine + for(j=0; j<2; ++j){//half slot for(i=0; inb_tx; ++i){ - if(j%2 == 0){ - while(feptx[i].instance_cnt_feptx != -1){ - usleep(5); - } + if(j == 0){ AssertFatal((ret=pthread_mutex_lock(&feptx[i].mutex_feptx))==0,"mutex_lock return %d\n",ret); feptx[i].aa = i; feptx[i].index = i; feptx[i].ru = ru; - feptx[i].symbol = j; + feptx[i].symbol = 0; feptx[i].slot = slot; feptx[i].nb_antenna_ports = nb_antenna_ports; feptx[i].instance_cnt_feptx = 0; AssertFatal(pthread_cond_signal(&feptx[i].cond_feptx) == 0,"ERROR pthread_cond_signal for feptx_ofdm_thread\n"); AssertFatal((ret=pthread_mutex_unlock(&feptx[i].mutex_feptx))==0,"mutex_lock returns %d\n",ret); - } + }//first half else{ - while(feptx[i+ru->nb_tx].instance_cnt_feptx != -1){ - usleep(5); - } AssertFatal((ret=pthread_mutex_lock(&feptx[i+ru->nb_tx].mutex_feptx))==0,"mutex_lock return %d\n",ret); feptx[i+ru->nb_tx].aa = i; feptx[i+ru->nb_tx].index = i+ru->nb_tx; feptx[i+ru->nb_tx].ru = ru; - feptx[i+ru->nb_tx].symbol = j; + feptx[i+ru->nb_tx].symbol = fp->symbols_per_tti>>1; feptx[i+ru->nb_tx].slot = slot; feptx[i+ru->nb_tx].nb_antenna_ports = nb_antenna_ports; feptx[i+ru->nb_tx].instance_cnt_feptx = 0; AssertFatal(pthread_cond_signal(&feptx[i+ru->nb_tx].cond_feptx) == 0,"ERROR pthread_cond_signal for feptx_ofdm_thread\n"); AssertFatal((ret=pthread_mutex_unlock(&feptx[i+ru->nb_tx].mutex_feptx))==0,"mutex_lock returns %d\n",ret); + }//second half + }//physical antenna + }//half slot + }//if L1 RU on same machine + else{//(RU only machine) + for(j=0; jsymbols_per_slot; ++j){ + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+j , 1); + start_meas(&ru->txdataF_copy_stats); + if (ru->num_gNB == 1){ + gNB = ru->gNB_list[0]; + cfg = &gNB->gNB_config; + + for(i=0; icommon.txdataF[i][j*fp->ofdm_symbol_size], + (void*)&gNB->common_vars.txdataF[i][j*fp->ofdm_symbol_size + txdataF_offset], + fp->ofdm_symbol_size*sizeof(int32_t)); + } + + }//num_gNB == 1 + stop_meas(&ru->txdataF_copy_stats); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+j , 0); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 ); + + if (nr_slot_select(cfg,slot,frame_tx)==SF_DL) { + // If this is not an S-tti + for(i=0; inb_tx; ++i){ + if(j%2 == 0){ + while(feptx[i].instance_cnt_feptx != -1){ + usleep(5); + } + AssertFatal((ret=pthread_mutex_lock(&feptx[i].mutex_feptx))==0,"mutex_lock return %d\n",ret); + feptx[i].aa = i; + feptx[i].index = i; + feptx[i].ru = ru; + feptx[i].symbol = j; + feptx[i].slot = slot; + feptx[i].nb_antenna_ports = nb_antenna_ports; + feptx[i].instance_cnt_feptx = 0; + AssertFatal(pthread_cond_signal(&feptx[i].cond_feptx) == 0,"ERROR pthread_cond_signal for feptx_ofdm_thread\n"); + AssertFatal((ret=pthread_mutex_unlock(&feptx[i].mutex_feptx))==0,"mutex_lock returns %d\n",ret); + } + else{ + while(feptx[i+ru->nb_tx].instance_cnt_feptx != -1){ + usleep(5); + } + AssertFatal((ret=pthread_mutex_lock(&feptx[i+ru->nb_tx].mutex_feptx))==0,"mutex_lock return %d\n",ret); + feptx[i+ru->nb_tx].aa = i; + feptx[i+ru->nb_tx].index = i+ru->nb_tx; + feptx[i+ru->nb_tx].ru = ru; + feptx[i+ru->nb_tx].symbol = j; + feptx[i+ru->nb_tx].slot = slot; + feptx[i+ru->nb_tx].nb_antenna_ports = nb_antenna_ports; + feptx[i+ru->nb_tx].instance_cnt_feptx = 0; + AssertFatal(pthread_cond_signal(&feptx[i+ru->nb_tx].cond_feptx) == 0,"ERROR pthread_cond_signal for feptx_ofdm_thread\n"); + AssertFatal((ret=pthread_mutex_unlock(&feptx[i+ru->nb_tx].mutex_feptx))==0,"mutex_lock returns %d\n",ret); + } } - } - }//if == SF_DL - else { - proc->feptx_mask = ofdm_mask_full; - } - }//jsymbols_per_slot + }//if == SF_DL + else { + proc->feptx_mask = ofdm_mask_full; + } + }//jsymbols_per_slot + }//else (RU only machine) // wait all process to finish AssertFatal((ret=pthread_mutex_lock(&proc->mutex_feptx))==0,"mutex_lock return %d\n",ret); @@ -219,9 +250,12 @@ static void *nr_feptx_thread(void *param) { RU_feptx_t *feptx = (RU_feptx_t *)param; RU_t *ru; int aa, slot, start, l, nb_antenna_ports, ret; + int i; int32_t ***bw; NR_DL_FRAME_PARMS *fp; int ofdm_mask_full; + int txdataF_offset; + int32_t *txdataF; while (!oai_exit) { @@ -239,22 +273,69 @@ static void *nr_feptx_thread(void *param) { nb_antenna_ports = feptx->nb_antenna_ports; ofdm_mask_full = (1<<(ru->nb_tx*2))-1; - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1); - start_meas(&ru->precoding_stats); - if (ru->nb_tx == 1) { - AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx); - for (int p=0; pLmax; p++) { - if ((fp->L_ssb >> p) & 0x01){ - memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size], - (void*)&ru->common.txdataF[p][l*fp->ofdm_symbol_size], - fp->ofdm_symbol_size*sizeof(int32_t)); + if(ru->num_gNB != 0){ + half_slot = feptx->half_slot; + txdataF_offset = ((slot%2)*fp->samples_per_slot_wCP); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1); + start_meas(&ru->precoding_stats); + if (ru->nb_tx == 1) { + AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx); + for (int p=0; pLmax; p++) { + if ((fp->L_ssb >> p) & 0x01){ + memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size], + (void*)&ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset + l*fp->ofdm_symbol_size], + (fp->symbols_per_tti>>1)*fp->ofdm_symbol_size*sizeof(int32_t)); + } } } - } - else { - bw = ru->beam_weights[0]; - nr_beam_precoding(ru->common.txdataF, + else { + bw = ru->beam_weights[0]; + txdataF = &ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset]; + for(i=0; isymbols_per_tti>>1; ++i){ + nr_beam_precoding(&txdataF, + ru->common.txdataF_BF, + fp, + bw, + slot, + l+i, + aa, + nb_antenna_ports); + } + } + stop_meas(&ru->precoding_stats); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0); + + + start_meas(&ru->ofdm_mod_stats); + nr_feptx0(ru,slot,start,fp->symbols_per_tti>>1,aa); + stop_meas(&ru->ofdm_mod_stats); + + AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_feptx))==0,"mutex_lock return %d\n",ret); + feptx->instance_cnt_feptx = -1; + ru->proc.feptx_mask |= 1<<(feptx->index); + if(ru->proc.feptx_mask == ofdm_mask_full) + AssertFatal(pthread_cond_signal(&ru->proc.cond_feptx) == 0,"ERROR pthread_cond_signal for precoding and ofdm finish\n"); + AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_feptx))==0,"mutex_lock returns %d\n",ret); + + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK, ru->proc.feptx_mask ); + }// if L1 RU on same machine + + else{ + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1); + start_meas(&ru->precoding_stats); + if (ru->nb_tx == 1) { + AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx); + for (int p=0; pLmax; p++) { + if ((fp->L_ssb >> p) & 0x01){ + memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size], + (void*)&ru->common.txdataF[p][l*fp->ofdm_symbol_size], + fp->ofdm_symbol_size*sizeof(int32_t)); + } + } + } + else { + bw = ru->beam_weights[0]; + nr_beam_precoding(ru->common.txdataF, ru->common.txdataF_BF, fp, bw, @@ -262,27 +343,28 @@ static void *nr_feptx_thread(void *param) { l, aa, nb_antenna_ports); - } - stop_meas(&ru->precoding_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0); + } + stop_meas(&ru->precoding_stats); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0); - start_meas(&ru->ofdm_mod_stats); - nr_feptx0(ru,slot,start,1,aa); - stop_meas(&ru->ofdm_mod_stats); + start_meas(&ru->ofdm_mod_stats); + nr_feptx0(ru,slot,start,1,aa); + stop_meas(&ru->ofdm_mod_stats); - if (release_thread(&feptx->mutex_feptx,&feptx->instance_cnt_feptx,"NR feptx thread")<0) break; + if (release_thread(&feptx->mutex_feptx,&feptx->instance_cnt_feptx,"NR feptx thread")<0) break; - if(l >= fp->symbols_per_slot -2){ - AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_feptx))==0,"mutex_lock return %d\n",ret); - ru->proc.feptx_mask |= 1<<(feptx->index); - if(ru->proc.feptx_mask == ofdm_mask_full) - AssertFatal(pthread_cond_signal(&ru->proc.cond_feptx) == 0,"ERROR pthread_cond_signal for precoding and ofdm finish\n"); - AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_feptx))==0,"mutex_lock returns %d\n",ret); - } - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK, ru->proc.feptx_mask ); + if(l >= fp->symbols_per_slot -2){ + AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_feptx))==0,"mutex_lock return %d\n",ret); + ru->proc.feptx_mask |= 1<<(feptx->index); + if(ru->proc.feptx_mask == ofdm_mask_full) + AssertFatal(pthread_cond_signal(&ru->proc.cond_feptx) == 0,"ERROR pthread_cond_signal for precoding and ofdm finish\n"); + AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_feptx))==0,"mutex_lock returns %d\n",ret); + } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK, ru->proc.feptx_mask ); + }// else (RU only machine) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+feptx->index+1 , 0 ); - } + }// while (oai_exit) return(NULL); } From 3f066dec562131e8f8f07bdc5ac1321702cb028a Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Tue, 17 Dec 2019 17:06:17 +0100 Subject: [PATCH 2/3] parameter fix --- openair1/SCHED_NR/nr_ru_procedures.c | 27 ++++++++++++++------------- targets/RT/USER/gNB_usrp.gtkw | 22 ++++++++++++---------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index 7b1962ef5b..137454d6b5 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -134,6 +134,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { start_meas(&ru->ofdm_total_stats); if(ru->num_gNB != 0){//L1 RU on same machine + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 ); for(j=0; j<2; ++j){//half slot for(i=0; inb_tx; ++i){ if(j == 0){ @@ -153,7 +154,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { feptx[i+ru->nb_tx].aa = i; feptx[i+ru->nb_tx].index = i+ru->nb_tx; feptx[i+ru->nb_tx].ru = ru; - feptx[i+ru->nb_tx].symbol = fp->symbols_per_tti>>1; + feptx[i+ru->nb_tx].symbol = fp->symbols_per_slot>>1; feptx[i+ru->nb_tx].slot = slot; feptx[i+ru->nb_tx].nb_antenna_ports = nb_antenna_ports; feptx[i+ru->nb_tx].instance_cnt_feptx = 0; @@ -239,7 +240,6 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK, proc->feptx_mask ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 ); - //write_output stop_meas(&ru->ofdm_total_stats); @@ -274,9 +274,9 @@ static void *nr_feptx_thread(void *param) { ofdm_mask_full = (1<<(ru->nb_tx*2))-1; if(ru->num_gNB != 0){ - half_slot = feptx->half_slot; txdataF_offset = ((slot%2)*fp->samples_per_slot_wCP); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1); + ////////////precoding//////////// + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 1); start_meas(&ru->precoding_stats); if (ru->nb_tx == 1) { AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx); @@ -284,14 +284,14 @@ static void *nr_feptx_thread(void *param) { if ((fp->L_ssb >> p) & 0x01){ memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size], (void*)&ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset + l*fp->ofdm_symbol_size], - (fp->symbols_per_tti>>1)*fp->ofdm_symbol_size*sizeof(int32_t)); + (fp->samples_per_slot_wCP>>1)*sizeof(int32_t)); } } } else { bw = ru->beam_weights[0]; txdataF = &ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset]; - for(i=0; isymbols_per_tti>>1; ++i){ + for(i=0; isymbols_per_slot>>1; ++i){ nr_beam_precoding(&txdataF, ru->common.txdataF_BF, fp, @@ -303,15 +303,16 @@ static void *nr_feptx_thread(void *param) { } } stop_meas(&ru->precoding_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0); - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 0); + ////////////FEPTX//////////// start_meas(&ru->ofdm_mod_stats); - nr_feptx0(ru,slot,start,fp->symbols_per_tti>>1,aa); + nr_feptx0(ru,slot,start,fp->symbols_per_slot>>1,aa); stop_meas(&ru->ofdm_mod_stats); + if (release_thread(&feptx->mutex_feptx,&feptx->instance_cnt_feptx,"NR feptx thread")<0) break; + AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_feptx))==0,"mutex_lock return %d\n",ret); - feptx->instance_cnt_feptx = -1; ru->proc.feptx_mask |= 1<<(feptx->index); if(ru->proc.feptx_mask == ofdm_mask_full) AssertFatal(pthread_cond_signal(&ru->proc.cond_feptx) == 0,"ERROR pthread_cond_signal for precoding and ofdm finish\n"); @@ -321,7 +322,7 @@ static void *nr_feptx_thread(void *param) { }// if L1 RU on same machine else{ - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 1); start_meas(&ru->precoding_stats); if (ru->nb_tx == 1) { AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx); @@ -345,7 +346,7 @@ static void *nr_feptx_thread(void *param) { nb_antenna_ports); } stop_meas(&ru->precoding_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 0); start_meas(&ru->ofdm_mod_stats); @@ -406,7 +407,7 @@ void nr_init_feptx_thread(RU_t *ru) { RU_feptx_t *feptx = proc->feptx; int i = 0; - for(i=0; i<16; i++){ + for(i=0; i<(ru->nb_tx*2); i++){ feptx[i].instance_cnt_feptx = -1; pthread_mutex_init( &feptx[i].mutex_feptx, NULL); diff --git a/targets/RT/USER/gNB_usrp.gtkw b/targets/RT/USER/gNB_usrp.gtkw index 416dd3b62b..e6726e7d9f 100644 --- a/targets/RT/USER/gNB_usrp.gtkw +++ b/targets/RT/USER/gNB_usrp.gtkw @@ -1,15 +1,15 @@ [*] -[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI -[*] Fri Sep 6 15:01:30 2019 +[*] GTKWave Analyzer v3.3.61 (w)1999-2014 BSI +[*] Tue Dec 17 15:31:51 2019 [*] -[dumpfile] "/tmp/gNB_prec.vcd" -[dumpfile_mtime] "Fri Sep 6 14:59:50 2019" -[dumpfile_size] 13106022 -[savefile] "/homes/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw" -[timestart] 2183320000 +[dumpfile] "/tmp/gNB.vcd" +[dumpfile_mtime] "Tue Dec 17 15:25:49 2019" +[dumpfile_size] 6343431 +[savefile] "/home/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw" +[timestart] 1517712000 [size] 1920 1018 -[pos] -1 -1 -*-18.423141 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[pos] -9 -33 +*-19.276148 1518358451 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [sst_width] 386 [signals_width] 344 [sst_expanded] 1 @@ -60,9 +60,11 @@ functions.phy_procedures_ru_feprx0 functions.phy_procedures_ru_feprx1 functions.phy_procedures_ru_feptx_ofdm0 functions.phy_procedures_ru_feptx_ofdm1 +functions.phy_procedures_ru_feptx_ofdm2 functions.phy_procedures_ru_feptx_prec0 functions.phy_procedures_ru_feptx_prec1 -@23 +functions.phy_procedures_ru_feptx_prec2 +@22 variables.ru_tx_ofdm_mask[63:0] [pattern_trace] 1 [pattern_trace] 0 From 1e4cbce244ae323831f19bdfa95a3fedd3b48303 Mon Sep 17 00:00:00 2001 From: Francesco Mani Date: Wed, 18 Dec 2019 16:13:42 +0100 Subject: [PATCH 3/3] multiple ssb fix --- openair1/SCHED_NR/nr_ru_procedures.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index 137454d6b5..bf1d0b4a75 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -123,7 +123,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) { int j = 0;//symbol int aa = 0;//logical antenna number int ret = 0; - int nb_antenna_ports = fp->N_ssb; + int nb_antenna_ports = fp->L_ssb; int ofdm_mask_full = (1<<(ru->nb_tx*2))-1; int txdataF_offset = ((tti_tx%2)*fp->samples_per_slot_wCP); @@ -283,7 +283,7 @@ static void *nr_feptx_thread(void *param) { for (int p=0; pLmax; p++) { if ((fp->L_ssb >> p) & 0x01){ memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size], - (void*)&ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset + l*fp->ofdm_symbol_size], + (void*)&ru->gNB_list[0]->common_vars.txdataF[p][txdataF_offset + l*fp->ofdm_symbol_size], (fp->samples_per_slot_wCP>>1)*sizeof(int32_t)); } }