diff --git a/.gitignore b/.gitignore index 06a51f1b64f1ef0c6e06ee8973335fce4a45a136..73e0407c4bc7be31e24154b4c91b44570966916d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # log and exec file cmake_targets/log/ cmake_targets/*/build/ +cmake_targets/ran_build/ log/ lte_build_oai/ -targets/bin/ \ No newline at end of file +targets/bin/ diff --git a/executables/nr-ru.c b/executables/nr-ru.c index d9db47d02f6a139a2473813e6f28de96d8de2f02..807495f0b49ad484ec8e5039d43c24940305bf85 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -659,6 +659,7 @@ void rx_rf(RU_t *ru,int *frame,int *slot) { ru->nb_rx); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); proc->timestamp_rx = ts-ru->ts_offset; @@ -1445,6 +1446,7 @@ static void *ru_thread( void *param ) { } // synchronization on input FH interface, acquire signals/data and block + LOG_D(PHY,"[RU_thread] read data: frame_rx = %d, tti_rx = %d\n", frame, slot); if (ru->fh_south_in) ru->fh_south_in(ru,&frame,&slot); else AssertFatal(1==0, "No fronthaul interface at south port"); @@ -1471,14 +1473,12 @@ static void *ru_thread( void *param ) { // do RX front-end processing (frequency-shift, dft) if needed if (ru->feprx) ru->feprx(ru,proc->tti_rx); - LOG_I(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx); - LOG_I(PHY,"gNB proc: frame_rx = %d, slot_rx = %d\n", RC.gNB[0][0]->proc.frame_rx, RC.gNB[0][0]->proc.slot_rx); - LOG_I(PHY,"Copying rxdataF from RU to gNB\n"); + LOG_D(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx); + LOG_D(PHY,"Copying rxdataF from RU to gNB\n"); for (aa=0;aa<ru->nb_rx;aa++) memcpy((void*)RC.gNB[0][0]->common_vars.rxdataF[aa], - (void*)&ru->common.rxdataF[aa][proc->tti_rx*fp->symbols_per_tti*fp->ofdm_symbol_size], - fp->symbols_per_tti*fp->ofdm_symbol_size*sizeof(int32_t)); + (void*)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t)); // At this point, all information for subframe has been received on FH interface @@ -2152,7 +2152,7 @@ void init_NR_RU(char *rf_config_file) if (gNB0) { LOG_I(PHY,"Copying frame parms from gNB %d to ru %d\n",gNB0->Mod_id,ru->idx); memcpy((void *)fp,(void *)&gNB0->frame_parms,sizeof(NR_DL_FRAME_PARMS)); - memset((void *)ru->frame_parms, 0, sizeof(LTE_DL_FRAME_PARMS)); + memset((void *)ru->nr_frame_parms, 0, sizeof(NR_DL_FRAME_PARMS)); // attach all RU to all gNBs in its list/ LOG_D(PHY,"ru->num_gNB:%d gNB0->num_RU:%d\n", ru->num_gNB, gNB0->num_RU); diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 41d048ccf79498fb9d1dd729d0e2d4d5928f3cce..4770f2dc155e878f94620f331e2271641430fd52 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -141,8 +141,10 @@ PHY_VARS_NR_UE *init_nr_ue_vars(NR_DL_FRAME_PARMS *frame_parms, ue = (PHY_VARS_NR_UE *)malloc(sizeof(PHY_VARS_NR_UE)); memset(ue,0,sizeof(PHY_VARS_NR_UE)); memcpy(&(ue->frame_parms), frame_parms, sizeof(NR_DL_FRAME_PARMS)); + ue->Mod_id = UE_id; ue->mac_enabled = 1; + // initialize all signal buffers init_nr_ue_signal(ue,1,abstraction_flag); // intialize transport @@ -430,14 +432,12 @@ void UE_processing(void *arg) { (UE->frame_parms.frame_type == FDD) ) #endif */ - if (proc->nr_tti_tx == NR_UPLINK_SLOT){ - - LOG_I(PHY, "[UE_processing] Frame = %d, Slot = %d\n", proc->frame_tx, proc->nr_tti_tx); + //if (proc->nr_tti_tx == NR_UPLINK_SLOT){ if (UE->mode != loop_through_memory) phy_procedures_nrUE_TX(UE,proc,0,0); - } + //} //phy_procedures_UE_TX(UE,proc,0,0,UE->mode,no_relay); @@ -664,7 +664,7 @@ void *UE_thread(void *arg) { slot_nr*UE->frame_parms.samples_per_slot]; for (int i=0; i<UE->frame_parms.nb_antennas_tx; i++) - txp[i] = (void *)&UE->common_vars.txdata[i][curMsg->proc.nr_tti_tx*UE->frame_parms.samples_per_slot]; + txp[i] = (void *)&UE->common_vars.txdata[i][((curMsg->proc.nr_tti_rx + 2)%nb_slot_frame)*UE->frame_parms.samples_per_slot]; int readBlockSize, writeBlockSize; diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 7f29da6d8dbcea384ce8b7da8f30594158a16e76..05d0f485e77b7f794ffb116322b88a11184b1a90 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -77,6 +77,7 @@ unsigned short config_frames[4] = {2,9,11,13}; #include <forms.h> + /* Callbacks, globals and object handlers */ extern void reset_stats( FL_OBJECT *, long ); @@ -735,6 +736,7 @@ int main( int argc, char **argv ) { PHY_vars_UE_g[0][CC_id] = init_nr_ue_vars(frame_parms[CC_id], 0,abstraction_flag); UE[CC_id] = PHY_vars_UE_g[0][CC_id]; + if (phy_test==1) UE[CC_id]->mac_enabled = 0; else diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c index 00b2b6a7da16791dbc02f4e2bfafcbd72e0d1fdc..ad29a95ef4a7c8b3910e80f28ada2b0d55c2b48b 100644 --- a/openair1/PHY/INIT/nr_parms.c +++ b/openair1/PHY/INIT/nr_parms.c @@ -224,6 +224,8 @@ int nr_init_frame_parms0(NR_DL_FRAME_PARMS *fp, fp->slots_per_frame = 10* fp->slots_per_subframe; fp->nb_antenna_ports_eNB = 1; // default value until overwritten by RRCConnectionReconfiguration + fp->nb_antennas_rx = 1; // default value until overwritten by RRCConnectionReconfiguration + fp->nb_antennas_tx = 1; // default value until overwritten by RRCConnectionReconfiguration fp->symbols_per_slot = ((Ncp == NORMAL)? 14 : 12); // to redefine for different slot formats fp->samples_per_subframe_wCP = fp->ofdm_symbol_size * fp->symbols_per_slot * fp->slots_per_subframe; diff --git a/openair1/PHY/NR_REFSIG/nr_gold.c b/openair1/PHY/NR_REFSIG/nr_gold.c index 476d1d25556f9221c4891814f214366fde1b3048..48fcd04a0f1f3638e72421e5f10bb38a6389021c 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold.c +++ b/openair1/PHY/NR_REFSIG/nr_gold.c @@ -143,7 +143,7 @@ void nr_gold_pusch(PHY_VARS_gNB* gNB, unsigned short lbar,unsigned short *n_idDM //printf("x1 : %x, x2 : %x\n",x1,x2); } - for (n=0; n<52; n++) { + for (n=0; n<NR_MAX_PUSCH_DMRS_INIT_LENGTH_DWORD; n++) { x1 = (x1>>1) ^ (x1>>4); x1 = x1 ^ (x1<<31) ^ (x1<<28); x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 1af31d77e9c23db0d86aef623e36943aa27cf9f1..0cb9f56ae48b37959e612b6c2a0d5558a7642f21 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -176,96 +176,96 @@ void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch) unsigned char i, j; if (ulsch) { - ulsch->harq_mask = 0; - ulsch->bundling = 0; - ulsch->beta_offset_cqi_times8 = 0; - ulsch->beta_offset_ri_times8 = 0; - ulsch->beta_offset_harqack_times8 = 0; - ulsch->Msg3_active = 0; - ulsch->Msg3_flag = 0; - ulsch->Msg3_subframe = 0; - ulsch->Msg3_frame = 0; - ulsch->rnti = 0; - ulsch->rnti_type = 0; - ulsch->cyclicShift = 0; - ulsch->cooperation_flag = 0; - ulsch->Mlimit = 0; - ulsch->max_ldpc_iterations = 0; - ulsch->last_iteration_cnt = 0; - ulsch->num_active_cba_groups = 0; - for (i=0;i<NUM_MAX_CBA_GROUP;i++) ulsch->cba_rnti[i] = 0; - for (i=0;i<NR_MAX_SLOTS_PER_FRAME;i++) ulsch->harq_process_id[i] = 0; - - for (i=0; i<NR_MAX_ULSCH_HARQ_PROCESSES; i++) { - if (ulsch->harq_processes[i]){ - /// Nfapi ULSCH PDU - //nfapi_nr_ul_config_ulsch_pdu ulsch_pdu; - ulsch->harq_processes[i]->frame=0; - ulsch->harq_processes[i]->subframe=0; - ulsch->harq_processes[i]->round=0; - ulsch->harq_processes[i]->TPC=0; - ulsch->harq_processes[i]->mimo_mode=0; - ulsch->harq_processes[i]->dci_alloc=0; - ulsch->harq_processes[i]->rar_alloc=0; - ulsch->harq_processes[i]->status=0; - ulsch->harq_processes[i]->subframe_scheduling_flag=0; - ulsch->harq_processes[i]->subframe_cba_scheduling_flag=0; - ulsch->harq_processes[i]->phich_active=0; - ulsch->harq_processes[i]->phich_ACK=0; - ulsch->harq_processes[i]->previous_first_rb=0; - ulsch->harq_processes[i]->handled=0; - ulsch->harq_processes[i]->delta_TF=0; - - ulsch->harq_processes[i]->TBS=0; - /// Pointer to the payload (38.212 V15.4.0 section 5.1) - //uint8_t *b; - ulsch->harq_processes[i]->B=0; - /// Pointers to code blocks after code block segmentation and CRC attachment (38.212 V15.4.0 section 5.2.2) - //uint8_t *c[MAX_NUM_NR_ULSCH_SEGMENTS]; - ulsch->harq_processes[i]->K=0; - ulsch->harq_processes[i]->F=0; - ulsch->harq_processes[i]->C=0; - /// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2) - //int16_t *d[MAX_NUM_NR_ULSCH_SEGMENTS]; - /// LDPC processing buffer - //t_nrLDPC_procBuf* p_nrLDPC_procBuf[MAX_NUM_NR_ULSCH_SEGMENTS]; - ulsch->harq_processes[i]->Z=0; - /// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1) - //int16_t e[MAX_NUM_NR_DLSCH_SEGMENTS][3*8448]; - ulsch->harq_processes[i]->E=0; - - - ulsch->harq_processes[i]->n_DMRS=0; - ulsch->harq_processes[i]->n_DMRS2=0; - ulsch->harq_processes[i]->previous_n_DMRS=0; - - - ulsch->harq_processes[i]->cqi_crc_status=0; - for (j=0;j<MAX_CQI_BYTES;j++) ulsch->harq_processes[i]->o[j]=0; - ulsch->harq_processes[i]->uci_format=0; - ulsch->harq_processes[i]->Or1=0; - ulsch->harq_processes[i]->Or2=0; - ulsch->harq_processes[i]->o_RI[0]=0; ulsch->harq_processes[i]->o_RI[1]=0; - ulsch->harq_processes[i]->O_RI=0; - ulsch->harq_processes[i]->o_ACK[0]=0; ulsch->harq_processes[i]->o_ACK[1]=0; - ulsch->harq_processes[i]->o_ACK[2]=0; ulsch->harq_processes[i]->o_ACK[3]=0; - ulsch->harq_processes[i]->O_ACK=0; - ulsch->harq_processes[i]->V_UL_DAI=0; - /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27) - //int8_t q[MAX_CQI_PAYLOAD]; - ulsch->harq_processes[i]->o_RCC=0; - /// coded and interleaved CQI bits - //int8_t o_w[(MAX_CQI_BITS+8)*3]; - /// coded CQI bits - //int8_t o_d[96+((MAX_CQI_BITS+8)*3)]; - for (j=0;j<MAX_ACK_PAYLOAD;j++) ulsch->harq_processes[i]->q_ACK[j]=0; - for (j=0;j<MAX_RI_PAYLOAD;j++) ulsch->harq_processes[i]->q_RI[j]=0; - /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled - //uint8_t h[MAX_NUM_CHANNEL_BITS]; - /// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15) - //int16_t w[MAX_NUM_ULSCH_SEGMENTS][3*(6144+64)]; - } - } + ulsch->harq_mask = 0; + ulsch->bundling = 0; + ulsch->beta_offset_cqi_times8 = 0; + ulsch->beta_offset_ri_times8 = 0; + ulsch->beta_offset_harqack_times8 = 0; + ulsch->Msg3_active = 0; + ulsch->Msg3_flag = 0; + ulsch->Msg3_subframe = 0; + ulsch->Msg3_frame = 0; + ulsch->rnti = 0; + ulsch->rnti_type = 0; + ulsch->cyclicShift = 0; + ulsch->cooperation_flag = 0; + ulsch->Mlimit = 0; + ulsch->max_ldpc_iterations = 0; + ulsch->last_iteration_cnt = 0; + ulsch->num_active_cba_groups = 0; + for (i=0;i<NUM_MAX_CBA_GROUP;i++) ulsch->cba_rnti[i] = 0; + for (i=0;i<NR_MAX_SLOTS_PER_FRAME;i++) ulsch->harq_process_id[i] = 0; + + for (i=0; i<NR_MAX_ULSCH_HARQ_PROCESSES; i++) { + if (ulsch->harq_processes[i]){ + /// Nfapi ULSCH PDU + //nfapi_nr_ul_config_ulsch_pdu ulsch_pdu; + ulsch->harq_processes[i]->frame=0; + ulsch->harq_processes[i]->subframe=0; + ulsch->harq_processes[i]->round=0; + ulsch->harq_processes[i]->TPC=0; + ulsch->harq_processes[i]->mimo_mode=0; + ulsch->harq_processes[i]->dci_alloc=0; + ulsch->harq_processes[i]->rar_alloc=0; + ulsch->harq_processes[i]->status=0; + ulsch->harq_processes[i]->subframe_scheduling_flag=0; + ulsch->harq_processes[i]->subframe_cba_scheduling_flag=0; + ulsch->harq_processes[i]->phich_active=0; + ulsch->harq_processes[i]->phich_ACK=0; + ulsch->harq_processes[i]->previous_first_rb=0; + ulsch->harq_processes[i]->handled=0; + ulsch->harq_processes[i]->delta_TF=0; + + ulsch->harq_processes[i]->TBS=0; + /// Pointer to the payload (38.212 V15.4.0 section 5.1) + //uint8_t *b; + ulsch->harq_processes[i]->B=0; + /// Pointers to code blocks after code block segmentation and CRC attachment (38.212 V15.4.0 section 5.2.2) + //uint8_t *c[MAX_NUM_NR_ULSCH_SEGMENTS]; + ulsch->harq_processes[i]->K=0; + ulsch->harq_processes[i]->F=0; + ulsch->harq_processes[i]->C=0; + /// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2) + //int16_t *d[MAX_NUM_NR_ULSCH_SEGMENTS]; + /// LDPC processing buffer + //t_nrLDPC_procBuf* p_nrLDPC_procBuf[MAX_NUM_NR_ULSCH_SEGMENTS]; + ulsch->harq_processes[i]->Z=0; + /// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1) + //int16_t e[MAX_NUM_NR_DLSCH_SEGMENTS][3*8448]; + ulsch->harq_processes[i]->E=0; + + + ulsch->harq_processes[i]->n_DMRS=0; + ulsch->harq_processes[i]->n_DMRS2=0; + ulsch->harq_processes[i]->previous_n_DMRS=0; + + + ulsch->harq_processes[i]->cqi_crc_status=0; + for (j=0;j<MAX_CQI_BYTES;j++) ulsch->harq_processes[i]->o[j]=0; + ulsch->harq_processes[i]->uci_format=0; + ulsch->harq_processes[i]->Or1=0; + ulsch->harq_processes[i]->Or2=0; + ulsch->harq_processes[i]->o_RI[0]=0; ulsch->harq_processes[i]->o_RI[1]=0; + ulsch->harq_processes[i]->O_RI=0; + ulsch->harq_processes[i]->o_ACK[0]=0; ulsch->harq_processes[i]->o_ACK[1]=0; + ulsch->harq_processes[i]->o_ACK[2]=0; ulsch->harq_processes[i]->o_ACK[3]=0; + ulsch->harq_processes[i]->O_ACK=0; + ulsch->harq_processes[i]->V_UL_DAI=0; + /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27) + //int8_t q[MAX_CQI_PAYLOAD]; + ulsch->harq_processes[i]->o_RCC=0; + /// coded and interleaved CQI bits + //int8_t o_w[(MAX_CQI_BITS+8)*3]; + /// coded CQI bits + //int8_t o_d[96+((MAX_CQI_BITS+8)*3)]; + for (j=0;j<MAX_ACK_PAYLOAD;j++) ulsch->harq_processes[i]->q_ACK[j]=0; + for (j=0;j<MAX_RI_PAYLOAD;j++) ulsch->harq_processes[i]->q_RI[j]=0; + /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled + //uint8_t h[MAX_NUM_CHANNEL_BITS]; + /// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15) + //int16_t w[MAX_NUM_ULSCH_SEGMENTS][3*(6144+64)]; + } + } } } @@ -642,7 +642,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, // harq_process->harq_ack.harq_id = harq_pid; // harq_process->harq_ack.send_harq_status = 1; // harq_process->errors[harq_process->round]++; - harq_process->round++; + //harq_process->round++; if (harq_process->round >= ulsch->Mlimit) { harq_process->status = SCH_IDLE; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 53c6615dbd36603a7c0ef16d88b28d2091a0b9a0..e842ca9e4d8dc87666973ec5fdad278381b31b04 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -275,7 +275,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, } #if UE_TIMING_TRACE - if(symbol > ue->frame_parms.symbols_per_tti>>1) + if(symbol > ue->frame_parms.symbols_per_slot>>1) { slot = 1; } @@ -1064,9 +1064,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, #if T_TRACER T(T_UE_PHY_PDSCH_IQ, T_INT(eNB_id), T_INT(ue->Mod_id), T_INT(frame%1024), T_INT(nr_tti_rx), T_INT(nb_rb), - T_INT(frame_parms->N_RB_UL), T_INT(frame_parms->symbols_per_tti), + T_INT(frame_parms->N_RB_UL), T_INT(frame_parms->symbols_per_slot), T_BUFFER(&pdsch_vars[eNB_id]->rxdataF_comp0[eNB_id][0], - 2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL *12*frame_parms->symbols_per_tti*2)); + 2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL *12*frame_parms->symbols_per_slot*2)); #endif return(0); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c index 5c8493c3709197a43207a5c83c410801985e8bbb..c56f22fd202de89a67967e039cd2081d41aa9d11 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c @@ -317,6 +317,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, /////////// ///////////////////////////////////////////////////////////////////////////////////// +opp_enabled=0; ///////////////////////// c---->| LDCP coding |---->d ///////////////////////// /////////// diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 741f1db0a30b02a7ae81de0e0afc87d05262c0c7..6141841c0a8d5320991ccf29538a892b1c060d3b 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -239,7 +239,6 @@ uint8_t nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, /////////////////////////DMRS Modulation///////////////////////// /////////// - pusch_dmrs = UE->nr_gold_pusch_dmrs[slot]; n_dmrs = (harq_process_ul_ue->nb_rb*ulsch_ue->nb_re_dmrs); int16_t mod_dmrs[n_dmrs<<1]; @@ -249,7 +248,6 @@ uint8_t nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, l0 = get_l0_ul(mapping_type, 2); nr_modulation(pusch_dmrs[l0][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated - /////////// //////////////////////////////////////////////////////////////////////// @@ -338,7 +336,7 @@ uint8_t nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, ((int16_t*)txdataF[ap])[((sample_offsetF)<<1) + 1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15; #ifdef DEBUG_PUSCH_MAPPING - printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d\n", + printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t dmrs: %d %d\n", dmrs_idx, l, k, k_prime, n, ((int16_t*)txdataF[ap])[(sample_offsetF)<<1], ((int16_t*)txdataF[ap])[((sample_offsetF)<<1) + 1]); #endif @@ -369,7 +367,6 @@ uint8_t nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, } } } - /////////// //////////////////////////////////////////////////////////////////////// @@ -415,7 +412,6 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, frame_parms); } } - /////////// //////////////////////////////////////////////////// return 0; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index cb4a85333ce1a74bc4ada58f3e65d367e391586d..0ced3e1dac9bc5f60b61c5261c384355d26af123 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -669,7 +669,7 @@ typedef struct PHY_VARS_gNB_s { uint32_t ****nr_gold_pdsch_dmrs; /// PUSCH DMRS - uint32_t nr_gold_pusch[2][20][2][52]; + uint32_t nr_gold_pusch[2][20][2][NR_MAX_PUSCH_DMRS_INIT_LENGTH_DWORD]; /// Indicator set to 0 after first SR uint8_t first_sr[NUMBER_OF_UE_MAX]; diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index c10144c072c58d9b4a7f046bf2b3c4b252d33fac..3ac808fac2791043dc670e4ba706053c32f0809f 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -264,7 +264,7 @@ void nr_fep0(RU_t *ru, int first_half) { end_symbol = NR_SYMBOLS_PER_SLOT; } - LOG_I(PHY,"In fep0 for slot = %d, first_half = %d, start_symbol = %d, end_symbol = %d\n", proc->tti_rx, first_half, start_symbol, end_symbol); + LOG_D(PHY,"In fep0 for slot = %d, first_half = %d, start_symbol = %d, end_symbol = %d\n", proc->tti_rx, first_half, start_symbol, end_symbol); // printf("fep0: slot %d\n",slot); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX+proc->tti_rx, 1); @@ -405,7 +405,7 @@ void nr_fep_full(RU_t *ru, int slot) { // remove_7_5_kHz(ru,proc->tti_rx<<1); // remove_7_5_kHz(ru,1+(proc->tti_rx<<1)); - for (l = 0; l < fp->symbols_per_tti; l++) { + for (l = 0; l < fp->symbols_per_slot; l++) { for (aa = 0; aa < fp->nb_antennas_rx; aa++) { nr_slot_fep_ul(fp, ru->common.rxdata[aa], diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 2b5b7f340e81f5c5f6438910556b05bfa2c5b922..1a386a68907dd931af22fa96eafc54e5dacd6dc4 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -282,7 +282,7 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, uint8_t harq_pid = 0; // [hna] Previously in LTE, the harq_pid was obtained from the subframe number (Synchronous HARQ) // In NR, this should be signaled through uplink scheduling dci (i.e, DCI 0_0, 0_1) (Asynchronous HARQ) - for (UE_id = 0; UE_id < NUMBER_OF_NR_UE_MAX; UE_id++) { + for (UE_id = 0; UE_id < 1; UE_id++) { // temporary set to 1 untill list of connected UEs is implemented for(symbol = symbol_start; symbol < symbol_end; symbol++) { diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 89d89cbae2f763ce36c2f1fb3d0176b89fb1a6b1..cf5183c0754cb559be394e346aac11bbc6ba82f8 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -2483,7 +2483,6 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, start_meas(&ue->phy_proc_tx); #endif - harq_pid = 0; //temporary implementation /* @@ -2498,11 +2497,26 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, TBS = nr_compute_tbs( harq_process_ul_ue->mcs, harq_process_ul_ue->nb_rb, ulsch_ue->Nsymb_pusch, ulsch_ue->nb_re_dmrs, ulsch_ue->length_dmrs, harq_process_ul_ue->Nl); + LOG_I(PHY, "[phy_procedures_nrUE_TX] mcs = %d, nb_rb = %d \n , Nsymb_pusch = %d, nb_re_dmrs = %d, length_dmrs = %d, precod_nbr_layers = %d, TBS = %d\n", + harq_process_ul_ue->mcs, + harq_process_ul_ue->nb_rb, + ulsch_ue->Nsymb_pusch, + ulsch_ue->nb_re_dmrs, + ulsch_ue->length_dmrs, + harq_process_ul_ue->Nl, + TBS); + + //-----------------------------------------------------// // to be removed later when MAC is ready - for (i = 0; i < TBS / 8; i++) - harq_process_ul_ue->a[i] = (unsigned char) rand(); + if (harq_process_ul_ue != NULL){ + for (i = 0; i < TBS / 8; i++) + harq_process_ul_ue->a[i] = (unsigned char) rand(); + } else { + LOG_E(PHY, "[phy_procedures_nrUE_TX] harq_process_ul_ue is NULL !!\n"); + return; + } //-----------------------------------------------------// @@ -2529,6 +2543,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, &ue->frame_parms); + /* if ((ue->UE_mode[eNB_id] == PRACH) && (ue->frame_parms.prach_config_common.prach_Config_enabled==1)) { @@ -3405,7 +3420,7 @@ void nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB first_symbol_flag = 0; #if UE_TIMING_TRACE uint8_t slot = 0; - if(m >= ue->frame_parms.symbols_per_tti>>1) + if(m >= ue->frame_parms.symbols_per_slot>>1) slot = 1; start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[nr_tti_rx]][slot]); #endif @@ -3898,7 +3913,7 @@ void *UE_thread_slot1_dl_processing(void *arg) { 0); */ // 1- perform FFT - for (int l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) + for (int l=1; l<ue->frame_parms.symbols_per_slot>>1; l++) { //if( (l != pilot0) && (l != pilot1)) { @@ -3930,7 +3945,7 @@ void *UE_thread_slot1_dl_processing(void *arg) { } // 2- perform Channel Estimation for slot1 - for (int l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) + for (int l=1; l<ue->frame_parms.symbols_per_slot>>1; l++) { if(l == pilot1) { @@ -4018,8 +4033,8 @@ void *UE_thread_slot1_dl_processing(void *arg) { PDSCH, ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0], NULL, - (ue->frame_parms.symbols_per_tti>>1), - ue->frame_parms.symbols_per_tti-1, + (ue->frame_parms.symbols_per_slot>>1), + ue->frame_parms.symbols_per_slot-1, abstraction_flag); LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, nr_tti_rx); LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, nr_tti_rx); @@ -4033,8 +4048,8 @@ void *UE_thread_slot1_dl_processing(void *arg) { SI_PDSCH, ue->dlsch_SI[eNB_id], NULL, - (ue->frame_parms.symbols_per_tti>>1), - ue->frame_parms.symbols_per_tti-1, + (ue->frame_parms.symbols_per_slot>>1), + ue->frame_parms.symbols_per_slot-1, abstraction_flag); } @@ -4046,8 +4061,8 @@ void *UE_thread_slot1_dl_processing(void *arg) { P_PDSCH, ue->dlsch_p[eNB_id], NULL, - (ue->frame_parms.symbols_per_tti>>1), - ue->frame_parms.symbols_per_tti-1, + (ue->frame_parms.symbols_per_slot>>1), + ue->frame_parms.symbols_per_slot-1, abstraction_flag); } // do procedures for RA-RNTI @@ -4058,8 +4073,8 @@ void *UE_thread_slot1_dl_processing(void *arg) { RA_PDSCH, ue->dlsch_ra[eNB_id], NULL, - (ue->frame_parms.symbols_per_tti>>1), - ue->frame_parms.symbols_per_tti-1, + (ue->frame_parms.symbols_per_slot>>1), + ue->frame_parms.symbols_per_slot-1, abstraction_flag); } @@ -4228,7 +4243,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, //set active for testing, to be removed ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1; } - else + else ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 0; #if UE_TIMING_TRACE diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 3f642cac4b39e8b02fd494151483b3a9d7e40deb..96a7ba32057c66b75e73391751fe5e27751d2bac 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -91,6 +91,8 @@ typedef struct { uint32_t slot; /// ssb_index, if ssb is not present in current TTI, thie value set to -1 int ssb_index; + /// dci reception indication structure + fapi_nr_dci_indication_t *dci_ind; } nr_uplink_indication_t; // Downlink subframe P7