|
|
|
@@ -1438,7 +1438,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
|
|
|
|
|
|
|
|
|
// deactivate service request
|
|
|
|
|
// ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
|
|
|
|
LOG_I(PHY,"Generating PUSCH (Abssubframe: %d.%d): harq-Id: %d, round: %d, MaxReTrans: %d \n",frame_tx,subframe_tx,harq_pid,ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,ue->ulsch[eNB_id]->Mlimit);
|
|
|
|
|
LOG_D(PHY,"Generating PUSCH (Abssubframe: %d.%d): harq-Id: %d, round: %d, MaxReTrans: %d \n",frame_tx,subframe_tx,harq_pid,ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,ue->ulsch[eNB_id]->Mlimit);
|
|
|
|
|
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round >= (ue->ulsch[eNB_id]->Mlimit - 1))
|
|
|
|
|
{
|
|
|
|
|
LOG_D(PHY,"PUSCH MAX Retransmission achieved ==> send last pusch\n");
|
|
|
|
@@ -1492,8 +1492,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
|
|
|
|
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,
|
|
|
|
|
"[UE %d][PUSCH %d] AbsSubframe %d.%d %d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, bundling %d\n",
|
|
|
|
|
Mod_id,harq_pid,frame_tx,subframe_tx,proc->subframe_rx,
|
|
|
|
|
first_rb,nb_rb,
|
|
|
|
@@ -1509,7 +1509,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
|
|
|
|
ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
|
|
|
|
|
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK,
|
|
|
|
|
ue->ulsch[eNB_id]->bundling);
|
|
|
|
|
//#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2840,7 +2840,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY,"[UE %d] AbsSubFrame %d.%d, Mode %s: DCI found %i --> rnti %x / crnti %x : format %d\n",
|
|
|
|
|
LOG_D(PHY,"[UE %d] AbsSubFrame %d.%d, Mode %s: DCI found %i --> rnti %x / crnti %x : format %d\n",
|
|
|
|
|
ue->Mod_id,frame_rx%1024,subframe_rx,mode_string[ue->UE_mode[eNB_id]],
|
|
|
|
|
dci_cnt,
|
|
|
|
|
dci_alloc_rx[0].rnti,
|
|
|
|
@@ -3361,16 +3361,18 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo
|
|
|
|
|
dlsch0->harq_processes[0]->b,
|
|
|
|
|
&ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
|
|
|
|
|
ue->prach_resources[eNB_id]->ra_PreambleIndex);
|
|
|
|
|
|
|
|
|
|
ue->pdcch_vars[(subframe_rx+1) & 0x1][eNB_id]->crnti = ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (timing_advance!=0xffff) {
|
|
|
|
|
|
|
|
|
|
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
|
|
|
|
|
ue->Mod_id,
|
|
|
|
|
frame_rx,
|
|
|
|
|
subframe_rx,
|
|
|
|
|
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
|
|
|
|
|
timing_advance);
|
|
|
|
|
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
|
|
|
|
|
ue->Mod_id,
|
|
|
|
|
frame_rx,
|
|
|
|
|
subframe_rx,
|
|
|
|
|
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
|
|
|
|
|
timing_advance);
|
|
|
|
|
|
|
|
|
|
// remember this c-rnti is still a tc-rnti
|
|
|
|
|
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti_is_temporary = 1;
|
|
|
|
@@ -3543,9 +3545,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
|
|
|
|
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
|
|
|
|
|
stop_meas(&ue->dlsch_decoding_stats);
|
|
|
|
|
|
|
|
|
|
printf(" --> Unscrambling for CW0 %5.3f\n",
|
|
|
|
|
LOG_D(PHY," --> Unscrambling for CW0 %5.3f\n",
|
|
|
|
|
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
|
|
|
|
printf(" --> Turbo Decoding for CW0 %5.3f\n",
|
|
|
|
|
LOG_D(PHY," --> Turbo Decoding for CW0 %5.3f\n",
|
|
|
|
|
(ue->dlsch_decoding_stats.p_time)/(cpuf*1000.0));
|
|
|
|
|
|
|
|
|
|
if(is_cw1_active)
|
|
|
|
@@ -3593,13 +3595,13 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
|
|
|
|
dlsch1->harq_processes[harq_pid]->TBS>256?1:0);
|
|
|
|
|
stop_meas(&ue->dlsch_decoding_stats);
|
|
|
|
|
|
|
|
|
|
printf(" --> Unscrambling for CW1 %5.3f\n",
|
|
|
|
|
LOG_D(PHY," --> Unscrambling for CW1 %5.3f\n",
|
|
|
|
|
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
|
|
|
|
printf(" --> Turbo Decoding for CW1 %5.3f\n",
|
|
|
|
|
LOG_D(PHY," --> Turbo Decoding for CW1 %5.3f\n",
|
|
|
|
|
(ue->dlsch_decoding_stats.p_time)/(cpuf*1000.0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ end turbo decoder for AbsSubframe %d.%d ------ \n", frame_rx, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ end turbo decoder for AbsSubframe %d.%d ------ \n", frame_rx, subframe_rx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
@@ -3618,7 +3620,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
|
|
|
|
|
|
|
|
|
if(dlsch0->rnti != 0xffff)
|
|
|
|
|
{
|
|
|
|
|
LOG_I(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : DLSCH CW0 in error (rv %d,mcs %d,TBS %d)\n",
|
|
|
|
|
LOG_D(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : DLSCH CW0 in error (rv %d,mcs %d,TBS %d)\n",
|
|
|
|
|
ue->Mod_id,dlsch0->rnti,
|
|
|
|
|
harq_pid,frame_rx,subframe_rx,
|
|
|
|
|
dlsch0->harq_processes[harq_pid]->rvidx,
|
|
|
|
@@ -3630,7 +3632,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
|
|
|
|
} else {
|
|
|
|
|
if(dlsch0->rnti != 0xffff)
|
|
|
|
|
{
|
|
|
|
|
LOG_I(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : Received DLSCH CW0 (rv %d,mcs %d,TBS %d)\n",
|
|
|
|
|
LOG_D(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : Received DLSCH CW0 (rv %d,mcs %d,TBS %d)\n",
|
|
|
|
|
ue->Mod_id,dlsch0->rnti,
|
|
|
|
|
harq_pid,frame_rx,subframe_rx,
|
|
|
|
|
dlsch0->harq_processes[harq_pid]->rvidx,
|
|
|
|
@@ -3788,7 +3790,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
|
|
|
|
|
// start timers
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
start_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
|
|
|
|
|
start_meas(&ue->generic_stat);
|
|
|
|
|
|
|
|
|
@@ -3843,8 +3845,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
l=1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_I(PHY," ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
for (; l<=l2; l++) {
|
|
|
|
|
if (abstraction_flag == 0) {
|
|
|
|
|
start_meas(&ue->ofdm_demod_stats);
|
|
|
|
@@ -3874,7 +3876,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
} // for l=1..l2
|
|
|
|
|
ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
// If this is PMCH, call procedures and return
|
|
|
|
|
if (pmch_flag == 1) {
|
|
|
|
|
ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag);
|
|
|
|
@@ -3890,9 +3892,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
|
|
|
|
|
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
|
|
|
|
|
stop_meas(&ue->generic_stat);
|
|
|
|
|
printf("[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY,"[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
start_meas(&ue->generic_stat);
|
|
|
|
|
// do procedures for C-RNTI
|
|
|
|
|
if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
|
|
|
|
@@ -3909,7 +3911,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
// do procedures for SI-RNTI
|
|
|
|
|
if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
|
|
|
|
@@ -3955,8 +3957,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_I(PHY," ------ --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
|
|
|
|
|
if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe
|
|
|
|
|
for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
|
|
|
|
@@ -3991,16 +3993,17 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
} // not an S-subframe
|
|
|
|
|
|
|
|
|
|
stop_meas(&ue->generic_stat);
|
|
|
|
|
printf("[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY,"[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
|
|
|
|
|
if ( (subframe_rx == 0) && (ue->decode_MIB == 1))
|
|
|
|
|
{
|
|
|
|
|
ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// do procedures for C-RNTI
|
|
|
|
|
LOG_I(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
|
|
|
|
|
start_meas(&ue->pdsch_procedures_stat);
|
|
|
|
@@ -4014,9 +4017,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
ue->frame_parms.symbols_per_tti-1,
|
|
|
|
|
abstraction_flag);
|
|
|
|
|
stop_meas(&ue->pdsch_procedures_stat);
|
|
|
|
|
LOG_I(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
|
|
|
|
|
start_meas(&ue->dlsch_procedures_stat);
|
|
|
|
|
ue_dlsch_procedures(ue,
|
|
|
|
|
proc,
|
|
|
|
@@ -4028,8 +4032,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
mode,
|
|
|
|
|
abstraction_flag);
|
|
|
|
|
stop_meas(&ue->dlsch_procedures_stat);
|
|
|
|
|
printf("[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
printf("[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY,"[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY,"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
|
|
|
|
|
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
|
|
|
|
|
|
|
|
|
@@ -4141,9 +4145,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|
|
|
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
|
|
|
|
|
stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
|
|
|
|
|
|
|
|
|
|
printf("------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
LOG_D(PHY,"------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
|
|
|
|
|
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
|
|
|
|
return (0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|