diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index c610107da6f764d2ecb4c722f08e98c0729b7f1f..e86eaf2ada2ce67f2bb7c218cd8e21668156ad13 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -682,6 +682,27 @@ static void* gNB_thread_prach( void* param ) { extern void init_td_thread(PHY_VARS_gNB *); extern void init_te_thread(PHY_VARS_gNB *); +static void* process_stats_thread(void* param) { + + PHY_VARS_gNB *gNB = (PHY_VARS_gNB*)param; + + reset_meas(&gNB->dlsch_encoding_stats); + reset_meas(&gNB->dlsch_scrambling_stats); + reset_meas(&gNB->dlsch_modulation_stats); + + wait_sync("process_stats_thread"); + + while(!oai_exit) + { + sleep(1); + print_meas(&gNB->dlsch_encoding_stats, "pdsch_encoding", NULL, NULL); + print_meas(&gNB->dlsch_scrambling_stats, "pdsch_scrambling", NULL, NULL); + print_meas(&gNB->dlsch_modulation_stats, "pdsch_modulation", NULL, NULL); + } + return(NULL); +} + + void init_gNB_proc(int inst) { int i=0; int CC_id; @@ -729,6 +750,7 @@ void init_gNB_proc(int inst) { threadCreate( &L1_proc_tx->pthread, gNB_L1_thread_tx, gNB,"L1_proc_tx", -1, OAI_PRIORITY_RT); } + if(opp_enabled == 1) threadCreate(&proc->L1_stats_thread, process_stats_thread,(void *)gNB, "time_meas", -1, OAI_PRIORITY_RT_LOW); //pthread_create( &proc->pthread_prach, attr_prach, gNB_thread_prach, gNB ); char name[16]; diff --git a/executables/nr-ru.c b/executables/nr-ru.c index c73b2fa27798a23e16ec0e196bfd47965aafa449..2337dcce7f86889955515b79369383e8b5797340 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -1077,30 +1077,42 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) { cfg->rx_bw = 1.5e6; } else AssertFatal(1==0,"Unknown N_RB %d\n",N_RB); } else if (mu == NR_MU_1) { - if(N_RB == 217) { + if(N_RB == 273) { + if (fp->threequarter_fs) { + cfg->sample_rate=115.2e6; + cfg->samples_per_frame = 1152000; + cfg->tx_bw = 100e6; + cfg->rx_bw = 100e6; + } else { + cfg->sample_rate=153.6e6; + cfg->samples_per_frame = 1536000; + cfg->tx_bw = 100e6; + cfg->rx_bw = 100e6; + } + } else if(N_RB == 217) { if (fp->threequarter_fs) { cfg->sample_rate=92.16e6; cfg->samples_per_frame = 921600; - cfg->tx_bw = 40e6; - cfg->rx_bw = 40e6; + cfg->tx_bw = 80e6; + cfg->rx_bw = 80e6; } else { cfg->sample_rate=122.88e6; cfg->samples_per_frame = 1228800; - cfg->tx_bw = 40e6; - cfg->rx_bw = 40e6; + cfg->tx_bw = 80e6; + cfg->rx_bw = 80e6; } } else if(N_RB == 106) { if (fp->threequarter_fs) { cfg->sample_rate=46.08e6; cfg->samples_per_frame = 460800; - cfg->tx_bw = 20e6; - cfg->rx_bw = 20e6; + cfg->tx_bw = 40e6; + cfg->rx_bw = 40e6; } else { cfg->sample_rate=61.44e6; cfg->samples_per_frame = 614400; - cfg->tx_bw = 20e6; - cfg->rx_bw = 20e6; + cfg->tx_bw = 40e6; + cfg->rx_bw = 40e6; } } else { AssertFatal(0==1,"N_RB %d not yet supported for numerology %d\n",N_RB,mu); @@ -1623,7 +1635,7 @@ extern void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx); extern void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx); extern void feptx_prec(RU_t *ru, int frame_tx,int tti_tx); extern void init_fep_thread(RU_t *ru); -extern void init_nr_feptx_thread(RU_t *ru); +extern void nr_init_feptx_thread(RU_t *ru); void init_RU_proc(RU_t *ru) { int i=0; @@ -1688,7 +1700,7 @@ void init_RU_proc(RU_t *ru) { threadCreate( &proc->pthread_prach, ru_thread_prach, (void *)ru,"RACH", -1, OAI_PRIORITY_RT ); } - if (get_nprocs()>=2) { + if (get_thread_worker_conf() == WORKER_ENABLE) { if (ru->feprx) init_fep_thread(ru); if (ru->feptx_ofdm) nr_init_feptx_thread(ru); @@ -1982,8 +1994,8 @@ void set_function_spec_param(RU_t *ru) { ru->fh_north_out = fh_if4p5_north_out; // send_IF4p5 on reception ru->fh_south_out = tx_rf; // send output to RF ru->fh_north_asynch_in = fh_if4p5_north_asynch_in; // TX packets come asynchronously - ru->feprx = (get_nprocs()<=2) ? fep_full :ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU) + ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? ru_fep_full_2thread : fep_full; // RX DFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // this is fep with idft only (no precoding in RRU) ru->feptx_prec = NULL; ru->nr_start_if = nr_start_if; // need to start the if interface for if4p5 ru->ifdevice.host_type = RRU_HOST; @@ -2004,8 +2016,8 @@ void set_function_spec_param(RU_t *ru) { malloc_IF4p5_buffer(ru); } else if (ru->function == gNodeB_3GPP) { ru->do_prach = 0; // no prach processing in RU - ru->feprx = (get_nprocs()<=2) ? fep_full : ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // this is fep with idft and precoding + ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? ru_fep_full_2thread : fep_full; // RX DFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // this is fep with idft and precoding ru->feptx_prec = NULL; // this is fep with idft and precoding ru->fh_north_in = NULL; // no incoming fronthaul from north ru->fh_north_out = NULL; // no outgoing fronthaul to north @@ -2034,13 +2046,13 @@ void set_function_spec_param(RU_t *ru) { case REMOTE_IF5: // the remote unit is IF5 RRU ru->do_prach = 0; - ru->feprx = (get_nprocs()<=2) ? fep_full : fep_full; // this is frequency-shift + DFTs - ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs - ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs - ru->fh_south_in = fh_if5_south_in; // synchronous IF5 reception - ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission - ru->fh_south_asynch_in = NULL; // no asynchronous UL - ru->start_rf = NULL; // no local RF + ru->feprx = fep_full; // this is frequency-shift + DFTs + ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // need to do transmit Precoding + IDFTs + ru->fh_south_in = fh_if5_south_in; // synchronous IF5 reception + ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission + ru->fh_south_asynch_in = NULL; // no asynchronous UL + ru->start_rf = NULL; // no local RF ru->stop_rf = NULL; ru->nr_start_if = nr_start_if; // need to start if interface for IF5 ru->ifdevice.host_type = RAU_HOST; diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h index d299cbdbaf887a1511898e2405bff97c4bbceea2..aad688c9d4201f4904ecb26e2cb035ff8d5c4bc6 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h @@ -574,44 +574,44 @@ typedef struct { } nfapi_nr_dl_config_bch_pdu; typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint8_t pdu_index; - uint16_t rnti; - uint16_t nb_mod_symbols; - uint8_t time_allocation_type; - uint8_t freq_allocation_type; - uint8_t start_prb; - uint8_t n_prb; - uint8_t start_symbol; - uint8_t nb_symbols; - uint8_t mcs_idx; - uint8_t ndi; - uint8_t nb_codewords; - uint8_t nb_layers; - uint16_t coding_rate; - uint8_t modulation; - uint8_t modulation_order; - uint16_t transport_block_size; - uint8_t nb_re_dmrs; - uint8_t time_alloc_list_flag; - uint8_t time_alloc_list; - uint8_t rbg_list; - uint8_t virtual_resource_block_assignment_flag; - uint32_t resource_block_coding; - uint8_t redundancy_version; - uint8_t transport_blocks; - uint8_t transmission_scheme; - uint8_t number_of_subbands; - uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS]; - uint8_t ue_category_capacity; - uint8_t pa; - uint8_t delta_power_offset_index; - uint8_t ngap; - uint8_t transmission_mode; - uint8_t num_bf_prb_per_subband; - uint8_t num_bf_vector; - nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS]; + nfapi_tl_t tl; + uint16_t length; + uint8_t pdu_index; + uint16_t rnti; + uint16_t nb_mod_symbols; + uint8_t time_allocation_type; + uint8_t freq_allocation_type; + uint16_t start_prb; + uint16_t n_prb; + uint8_t start_symbol; + uint8_t nb_symbols; + uint8_t mcs_idx; + uint8_t ndi; + uint8_t nb_codewords; + uint8_t nb_layers; + uint16_t coding_rate; + uint8_t modulation; + uint8_t modulation_order; + uint16_t transport_block_size; + uint8_t nb_re_dmrs; + uint8_t time_alloc_list_flag; + uint8_t time_alloc_list; + uint8_t rbg_list; + uint8_t virtual_resource_block_assignment_flag; + uint32_t resource_block_coding; + uint8_t redundancy_version; + uint8_t transport_blocks; + uint8_t transmission_scheme; + uint8_t number_of_subbands; + uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS]; + uint8_t ue_category_capacity; + uint8_t pa; + uint8_t delta_power_offset_index; + uint8_t ngap; + uint8_t transmission_mode; + uint8_t num_bf_prb_per_subband; + uint8_t num_bf_vector; + nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS]; }nfapi_nr_dl_config_dlsch_pdu_rel15_t; #define NFAPI_NR_DL_CONFIG_REQUEST_DLSCH_PDU_REL15_TAG diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c index 4466fc8eeae76ef5453240d9890838ff308912cd..d5a815333e56cfae089d3f83641796b7b814dd80 100644 --- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c +++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c @@ -271,17 +271,17 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh memset(c,0,sizeof(unsigned char) * ncols * Zc); memset(d,0,sizeof(unsigned char) * nrows * Zc); - start_meas(tinput); + if(tinput != NULL) start_meas(tinput); for (i=0; i<block_length; i++) { c[i] = (test_input[i/8]&(1<<(i&7)))>>(i&7); //printf("c(%d,%d)=%d\n",j,i,temp); } - stop_meas(tinput); + if(tinput != NULL) stop_meas(tinput); if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) { // extend matrix - start_meas(tprep); + if(tprep != NULL) start_meas(tprep); for (i1=0; i1 < ncols; i1++) { memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char)); @@ -296,11 +296,11 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh printf("\n"); */ } - stop_meas(tprep); + if(tprep != NULL) stop_meas(tprep); //parity check part - start_meas(tparity); + if(tparity != NULL) start_meas(tparity); encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb); - stop_meas(tparity); + if(tparity != NULL) stop_meas(tparity); } else { if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) { @@ -308,12 +308,12 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh return(-1); } } - start_meas(toutput); + if(toutput != NULL) start_meas(toutput); // information part and puncture columns memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char)); memcpy(&channel_input[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char)); - stop_meas(toutput); + if(toutput != NULL) stop_meas(toutput); return 0; } @@ -408,7 +408,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i memset(c,0,sizeof(unsigned char) * ncols * Zc); memset(d,0,sizeof(unsigned char) * nrows * Zc); - start_meas(tinput); + if(tinput != NULL) start_meas(tinput); #if 0 for (i=0; i<block_length; i++) { for (j=0; j<n_segments; j++) { @@ -441,11 +441,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i #endif #endif - stop_meas(tinput); + if(tinput != NULL) stop_meas(tinput); if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) { // extend matrix - start_meas(tprep); + if(tprep != NULL) start_meas(tprep); for (i1=0; i1 < ncols; i1++) { memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char)); @@ -460,11 +460,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i printf("\n"); */ } - stop_meas(tprep); + if(tprep != NULL) stop_meas(tprep); //parity check part - start_meas(tparity); + if(tparity != NULL) start_meas(tparity); encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb); - stop_meas(tparity); + if(tparity != NULL) stop_meas(tparity); } else { if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) { @@ -472,7 +472,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i return(-1); } } - start_meas(toutput); + if(toutput != NULL) start_meas(toutput); // information part and puncture columns /* memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char)); @@ -513,7 +513,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i AssertFatal(1==0,"Need AVX2 for now\n"); #endif - stop_meas(toutput); + if(toutput != NULL) stop_meas(toutput); return 0; } @@ -613,7 +613,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha memset(c,0,sizeof(unsigned char) * ncols * Zc); memset(d,0,sizeof(unsigned char) * nrows * Zc); - start_meas(tinput); + if(tinput != NULL) start_meas(tinput); #if 0 for (i=0; i<block_length; i++) { //for (j=0; j<n_segments; j++) { @@ -649,11 +649,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha #endif #endif - stop_meas(tinput); + if(tinput != NULL) stop_meas(tinput); if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) { // extend matrix - start_meas(tprep); + if(tprep != NULL) start_meas(tprep); for (i1=0; i1 < ncols; i1++) { memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char)); @@ -668,11 +668,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha printf("\n"); */ } - stop_meas(tprep); + if(tprep != NULL) stop_meas(tprep); //parity check part - start_meas(tparity); + if(tparity != NULL) start_meas(tparity); encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb); - stop_meas(tparity); + if(tparity != NULL) stop_meas(tparity); } else { if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) { @@ -680,7 +680,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha return(-1); } } - start_meas(toutput); + if(toutput != NULL) start_meas(toutput); // information part and puncture columns /* memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char)); @@ -726,7 +726,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha AssertFatal(1==0,"Need AVX2 for now\n"); #endif - stop_meas(toutput); + if(toutput != NULL) stop_meas(toutput); return 0; } diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index 9a4df3889514ae1c517292773013309e91f2a35d..aa75bd6555ba50c1103489ea8fdcb6841bbbc6fa 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -74,7 +74,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch, int frame, uint8_t slot, NR_DL_FRAME_PARMS *frame_parms, - nfapi_nr_config_request_t *config) { + nfapi_nr_config_request_t *config, + time_stats_t *dlsch_encoding_stats, + time_stats_t *dlsch_scrambling_stats, + time_stats_t *dlsch_modulation_stats) { NR_DL_gNB_HARQ_t *harq = dlsch->harq_processes[dci_alloc->harq_pid]; nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &harq->dlsch_pdu.dlsch_pdu_rel15; @@ -89,7 +92,9 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch, /// CRC, coding, interleaving and rate matching AssertFatal(harq->pdu!=NULL,"harq->pdu is null\n"); + start_meas(dlsch_encoding_stats); nr_dlsch_encoding(harq->pdu, frame, slot, dlsch, frame_parms); + stop_meas(dlsch_encoding_stats); #ifdef DEBUG_DLSCH printf("PDSCH encoding:\nPayload:\n"); for (int i=0; i<harq->B>>7; i++) { @@ -107,6 +112,7 @@ printf("\n"); #endif /// scrambling + start_meas(dlsch_scrambling_stats); for (int q=0; q<rel15->nb_codewords; q++) memset((void*)scrambled_output[q], 0, (encoded_length>>5)*sizeof(uint32_t)); uint16_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? \ @@ -120,6 +126,7 @@ printf("\n"); Nid, n_RNTI, scrambled_output[q]); + stop_meas(dlsch_scrambling_stats); #ifdef DEBUG_DLSCH printf("PDSCH scrambling:\n"); for (int i=0; i<encoded_length>>8; i++) { @@ -130,12 +137,13 @@ for (int i=0; i<encoded_length>>8; i++) { #endif /// Modulation - + start_meas(dlsch_modulation_stats); for (int q=0; q<rel15->nb_codewords; q++) nr_modulation(scrambled_output[q], encoded_length, Qm, mod_symbs[q]); + stop_meas(dlsch_modulation_stats); #ifdef DEBUG_DLSCH printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_symbols); for (int i=0; i<nb_symbols>>3; i++) { diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h index 7c3e22a9e713c0fb9e95e545821508ba37fa59db..3419be30faa9f5e5eeaf21924e5e65350ad3462d 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h @@ -74,7 +74,11 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch, int frame, uint8_t slot, NR_DL_FRAME_PARMS *frame_parms, - nfapi_nr_config_request_t *config); + nfapi_nr_config_request_t *config, + time_stats_t *dlsch_encoding_stats, + time_stats_t *dlsch_scrambling_stats, + time_stats_t *dlsch_modulation_stats); + void free_gNB_dlsch(NR_gNB_DLSCH_t *dlsch); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c index b3ce80d1ae2e6a2b5cfa8e841ed0791346f60d07..04098a8440115dac74328ed66b6ea8dc64c4d370 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c @@ -366,7 +366,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame, //printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG); - //start_meas(te_stats); for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) { //d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0]; //channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0]; @@ -398,7 +397,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame, //ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL); ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,dlsch->harq_processes[harq_pid]->d,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL); - //stop_meas(te_stats); //printf("end ldpc encoder -- output\n"); #ifdef DEBUG_DLSCH_CODING @@ -425,7 +423,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame, mod_order,nb_rb); #endif - //start_meas(rm_stats); #ifdef DEBUG_DLSCH_CODING printf("rvidx in encoding = %d\n", rel15.redundancy_version); #endif @@ -447,14 +444,11 @@ int nr_dlsch_encoding(unsigned char *a,int frame, for (int i =0; i<16; i++) printf("output ratematching e[%d]= %d r_offset %d\n", i,dlsch->harq_processes[harq_pid]->e[i+r_offset], r_offset); #endif - //stop_meas(rm_stats); - //start_meas(i_stats); nr_interleaving_ldpc(E, mod_order, dlsch->harq_processes[harq_pid]->e+r_offset, dlsch->harq_processes[harq_pid]->f+r_offset); - //stop_meas(i_stats); #ifdef DEBUG_DLSCH_CODING diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 5d618b60c78cb1eb97be5ef8ac9c02df292a680c..e79f9f28ac9e89c738bbf999db984bde4b18b973 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -465,6 +465,8 @@ typedef struct gNB_L1_proc_t_s { pthread_t pthread_single; /// pthread structure for asychronous RX/TX processing thread pthread_t pthread_asynch_rxtx; + /// pthread structure for printing time meas + pthread_t L1_stats_thread; /// flag to indicate first RX acquisition int first_rx; /// flag to indicate first TX transmission diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index d2a3739a1f305091d5e1f85571215d4a4cc3ae50..cb6cb7900eb23af89018d5322550212ff17523cb 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -196,7 +196,11 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, &gNB->pdcch_vars.dci_alloc[0], gNB->nr_gold_pdsch_dmrs[slot], gNB->common_vars.txdataF, - AMP, frame, slot, fp, cfg); + AMP, frame, slot, fp, cfg, + &gNB->dlsch_encoding_stats, + &gNB->dlsch_scrambling_stats, + &gNB->dlsch_modulation_stats); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0); } } diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 4c30ef9140704f21b3580554eb75e8baa515b8ec..25cfa3c51668c6f127d9706bc610984c5ed291a4 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -810,8 +810,9 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { NRRRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL; if(N_RB_DL == 217) sf_ahead = 2; else if(N_RB_DL == 106) sf_ahead = 4; - else AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for N_RB_DL choice: 106, 217 !\n", - RC.config_file_name, i, N_RB_DL); + else sf_ahead = 4; + /*else AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for N_RB_DL choice: 106, 217 !\n", + RC.config_file_name, i, N_RB_DL);*/ /* if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) { diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 6e6197c898bb024af5bda149acc58b613c9084b1..76ebd556ca6046c52caca9f9f982eac08844cef8 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1191,6 +1191,22 @@ extern "C" { LOG_I(HW,"%s() sample_rate:%u\n", __FUNCTION__, (int)openair0_cfg[0].sample_rate); switch ((int)openair0_cfg[0].sample_rate) { + case 153600000: + // from usrp_time_offset + //openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 15; //to be checked + openair0_cfg[0].tx_bw = 100e6; + openair0_cfg[0].rx_bw = 100e6; + break; + + case 115200000: + // from usrp_time_offset + //openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 15; //to be checked + openair0_cfg[0].tx_bw = 100e6; + openair0_cfg[0].rx_bw = 100e6; + break; + case 122880000: // from usrp_time_offset //openair0_cfg[0].samples_per_packet = 2048;