Merge remote-tracking branch 'origin/nr_pdsch' into nr-polar-encoder-optimizations
Conflicts: cmake_targets/CMakeLists.txt openair1/PHY/CODING/TESTBENCH/ldpctest.c openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c openair1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c openair1/PHY/CODING/nr_compute_tbs.c openair1/PHY/CODING/nr_segmentation.c openair1/PHY/MODULATION/slot_fep_nr.c openair1/PHY/NR_REFSIG/nr_dmrs_rx.c openair1/PHY/NR_TRANSPORT/nr_dci_tools.c openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c openair1/PHY/NR_UE_TRANSPORT/dci_nr.c openair1/SCHED_NR/fapi_nr_l1.c openair1/SCHED_NR/nr_ru_procedures.c openair1/SCHED_NR/phy_procedures_nr_common.c openair1/SCHED_NR/phy_procedures_nr_gNB.c openair1/SCHED_NR_UE/defs.h openair1/SCHED_NR_UE/fapi_nr_ue_l1.c openair1/SCHED_NR_UE/phy_procedures_nr_ue.c openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c targets/RT/USER/nr-gnb.c targets/RT/USER/nr-ru.c targets/RT/USER/nr-ue.c
This commit is contained in:
@@ -204,6 +204,7 @@ typedef struct {
|
||||
//! clock source
|
||||
clock_source_t clock_source;
|
||||
//! Manual SDR IP address
|
||||
//#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
char *sdr_addrs;
|
||||
//! Auto calibration flag
|
||||
int autocal[4];
|
||||
|
||||
@@ -262,7 +262,7 @@ RUs = (
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
|
||||
@@ -24,9 +24,9 @@ variables.trx_tst[63:0]
|
||||
functions.eNB_thread_rxtx0
|
||||
@24
|
||||
variables.frame_number_RX0_RU[63:0]
|
||||
variables.subframe_number_RX0_RU[63:0]
|
||||
variables.tti_number_RX0_RU[63:0]
|
||||
variables.frame_number_TX0_RU[63:0]
|
||||
variables.subframe_number_TX0_RU[63:0]
|
||||
variables.tti_number_TX0_RU[63:0]
|
||||
@28
|
||||
functions.mac_schedule_dlsch
|
||||
functions.macxface_eNB_dlsch_ulsch_scheduler
|
||||
@@ -34,16 +34,16 @@ functions.macxface_ue_scheduler
|
||||
functions.phy_eNB_ofdm_mod_l
|
||||
@24
|
||||
variables.frame_number_RX0_gNB[63:0]
|
||||
variables.subframe_number_RX0_gNB[63:0]
|
||||
variables.slot_number_RX0_gNB[63:0]
|
||||
variables.frame_number_TX0_gNB[63:0]
|
||||
variables.subframe_number_TX0_gNB[63:0]
|
||||
variables.slot_number_TX0_gNB[63:0]
|
||||
@28
|
||||
functions.gNB_thread_rxtx0
|
||||
@24
|
||||
variables.frame_number_RX1_gNB[63:0]
|
||||
variables.subframe_number_RX1_gNB[63:0]
|
||||
variables.slot_number_RX1_gNB[63:0]
|
||||
variables.frame_number_TX1_gNB[63:0]
|
||||
variables.subframe_number_TX1_gNB[63:0]
|
||||
variables.slot_number_TX1_gNB[63:0]
|
||||
@28
|
||||
functions.gNB_thread_rxtx1
|
||||
functions.phy_procedures_ru_feprx0
|
||||
|
||||
@@ -904,87 +904,7 @@ void print_opp_meas(void) {
|
||||
print_meas(&softmodem_stats_rx_sf,"[gNB][total_phy_proc_rx]",NULL,NULL);
|
||||
}
|
||||
}
|
||||
/*
|
||||
void free_transport(PHY_VARS_gNB *gNB)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
LOG_I(PHY, "Freeing Transport Channel Buffers for DLSCH, UE %d\n",i);
|
||||
for (j=0; j<2; j++) free_gNB_dlsch(gNB->dlsch[i][j]);
|
||||
|
||||
LOG_I(PHY, "Freeing Transport Channel Buffer for ULSCH, UE %d\n",i);
|
||||
free_gNB_ulsch(gNB->ulsch[1+i]);
|
||||
}
|
||||
free_gNB_ulsch(gNB->ulsch[0]);
|
||||
}*/
|
||||
|
||||
/*
|
||||
void init_transport(PHY_VARS_gNB *gNB) {
|
||||
|
||||
int i;
|
||||
int j;
|
||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||
|
||||
LOG_I(PHY, "Initialise transport\n");
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH, UE %d\n",i);
|
||||
for (j=0; j<2; j++) {
|
||||
gNB->dlsch[i][j] = new_gNB_dlsch(1,8,NSOFT,fp->N_RB_DL,0,fp);
|
||||
if (!gNB->dlsch[i][j]) {
|
||||
LOG_E(PHY,"Can't get gNB dlsch structures for UE %d \n", i);
|
||||
exit(-1);
|
||||
} else {
|
||||
gNB->dlsch[i][j]->rnti=0;
|
||||
LOG_D(PHY,"dlsch[%d][%d] => %p rnti:%d\n",i,j,gNB->dlsch[i][j], gNB->dlsch[i][j]->rnti);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i);
|
||||
gNB->ulsch[1+i] = new_gNB_ulsch(MAX_TURBO_ITERATIONS,fp->N_RB_UL, 0);
|
||||
|
||||
if (!gNB->ulsch[1+i]) {
|
||||
LOG_E(PHY,"Can't get gNB ulsch structures\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
// this is the transmission mode for the signalling channels
|
||||
// this will be overwritten with the real transmission mode by the RRC once the UE is connected
|
||||
gNB->transmission_mode[i] = fp->nb_antenna_ports_gNB==1 ? 1 : 2;
|
||||
}
|
||||
// ULSCH for RA
|
||||
gNB->ulsch[0] = new_gNB_ulsch(MAX_TURBO_ITERATIONS, fp->N_RB_UL, 0);
|
||||
|
||||
if (!gNB->ulsch[0]) {
|
||||
LOG_E(PHY,"Can't get gNB ulsch structures\n");
|
||||
exit(-1);
|
||||
}
|
||||
gNB->dlsch_SI = new_gNB_dlsch(1,8,NSOFT,fp->N_RB_DL, 0, fp);
|
||||
LOG_D(PHY,"gNB %d.%d : SI %p\n",gNB->Mod_id,gNB->CC_id,gNB->dlsch_SI);
|
||||
gNB->dlsch_ra = new_gNB_dlsch(1,8,NSOFT,fp->N_RB_DL, 0, fp);
|
||||
LOG_D(PHY,"gNB %d.%d : RA %p\n",gNB->Mod_id,gNB->CC_id,gNB->dlsch_ra);
|
||||
gNB->dlsch_MCH = new_gNB_dlsch(1,8,NSOFT,fp->N_RB_DL, 0, fp);
|
||||
LOG_D(PHY,"gNB %d.%d : MCH %p\n",gNB->Mod_id,gNB->CC_id,gNB->dlsch_MCH);
|
||||
|
||||
|
||||
gNB->rx_total_gain_dB=130;
|
||||
|
||||
for(i=0; i<NUMBER_OF_UE_MAX; i++)
|
||||
gNB->mu_mimo_mode[i].dl_pow_off = 2;
|
||||
|
||||
gNB->check_for_total_transmissions = 0;
|
||||
|
||||
gNB->check_for_MUMIMO_transmissions = 0;
|
||||
|
||||
gNB->FULL_MUMIMO_transmissions = 0;
|
||||
|
||||
gNB->check_for_SUMIMO_transmissions = 0;
|
||||
|
||||
fp->pucch_config_common.deltaPUCCH_Shift = 1;
|
||||
|
||||
} */
|
||||
|
||||
/// eNB kept in function name for nffapi calls, TO FIX
|
||||
void init_eNB_afterRU(void) {
|
||||
@@ -1035,8 +955,7 @@ void init_eNB_afterRU(void) {
|
||||
* In monolithic mode, we come here with nb_antennas_rx == 0
|
||||
* (not tested in other modes).
|
||||
*/
|
||||
/// Transport init necessary for NR synchro
|
||||
//init_transport(gNB);
|
||||
|
||||
//init_precoding_weights(RC.gNB[inst][CC_id]);
|
||||
}
|
||||
init_gNB_proc(inst);
|
||||
|
||||
@@ -764,6 +764,7 @@ void tx_rf(RU_t *ru) {
|
||||
(SF_type == SF_S)) {
|
||||
|
||||
int siglen=fp->samples_per_slot,flags=1;
|
||||
|
||||
/*
|
||||
if (SF_type == SF_S) {
|
||||
siglen = fp->dl_symbols_in_S_subframe*(fp->ofdm_symbol_size+fp->nb_prefix_samples0);
|
||||
@@ -788,13 +789,9 @@ void tx_rf(RU_t *ru) {
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, proc->tti_tx );
|
||||
|
||||
for (i=0; i<ru->nb_tx; i++)
|
||||
|
||||
txp[i] = (void*)&ru->common.txdata[i][(proc->tti_tx*fp->samples_per_slot)-sf_extension];
|
||||
/*
|
||||
if (proc->tti_tx == 0){
|
||||
write_output("txdataF_frame.m","txdataF_frame",&ru->common.txdataF_BF[i],fp->samples_per_subframe_wCP, 1, 1);
|
||||
write_output("txdata_frame.m","txdata_frame",&ru->common.txdata[i],fp->samples_per_subframe, 1, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff );
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
|
||||
// prepare tx buffer pointers
|
||||
|
||||
@@ -103,6 +103,9 @@ static pthread_t forms_thread; //xforms
|
||||
|
||||
#endif //XFORMS
|
||||
|
||||
short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT] = {0,0,16384,16384,-16384,-16384,16384,16384,16384,-16384,-16384,16384,-16384,-16384,7327,7327,7327,21981,21981,7327,21981,21981,7327,-7327,7327,-21981,21981,-7327,21981,-21981,-7327,7327,-7327,21981,-21981,7327,-21981,21981,-7327,-7327,-7327,-21981,-21981,-7327,-21981,-21981,10726,10726,10726,3576,3576,10726,3576,3576,10726,17876,10726,25027,3576,17876,3576,25027,17876,10726,17876,3576,25027,10726,25027,3576,17876,17876,17876,25027,25027,17876,25027,25027,10726,-10726,10726,-3576,3576,-10726,3576,-3576,10726,-17876,10726,-25027,3576,-17876,3576,-25027,17876,-10726,17876,-3576,25027,-10726,25027,-3576,17876,-17876,17876,-25027,25027,-17876,25027,-25027,-10726,10726,-10726,3576,-3576,10726,-3576,3576,-10726,17876,-10726,25027,-3576,17876,-3576,25027,-17876,10726,-17876,3576,-25027,10726,-25027,3576,-17876,17876,-17876,25027,-25027,17876,-25027,25027,-10726,-10726,-10726,-3576,-3576,-10726,-3576,-3576,-10726,-17876,-10726,-25027,-3576,-17876,-3576,-25027,-17876,-10726,-17876,-3576,-25027,-10726,-25027,-3576,-17876,-17876,-17876,-25027,-25027,-17876,-25027,-25027,8886,8886,8886,12439,12439,8886,12439,12439,8886,5332,8886,1778,12439,5332,12439,1778,5332,8886,5332,12439,1778,8886,1778,12439,5332,5332,5332,1778,1778,5332,1778,1778,8886,19547,8886,15993,12439,19547,12439,15993,8886,23101,8886,26655,12439,23101,12439,26655,5332,19547,5332,15993,1778,19547,1778,15993,5332,23101,5332,26655,1778,23101,1778,26655,19547,8886,19547,12439,15993,8886,15993,12439,19547,5332,19547,1778,15993,5332,15993,1778,23101,8886,23101,12439,26655,8886,26655,12439,23101,5332,23101,1778,26655,5332,26655,1778,19547,19547,19547,15993,15993,19547,15993,15993,19547,23101,19547,26655,15993,23101,15993,26655,23101,19547,23101,15993,26655,19547,26655,15993,23101,23101,23101,26655,26655,23101,26655,26655,8886,-8886,8886,-12439,12439,-8886,12439,-12439,8886,-5332,8886,-1778,12439,-5332,12439,-1778,5332,-8886,5332,-12439,1778,-8886,1778,-12439,5332,-5332,5332,-1778,1778,-5332,1778,-1778,8886,-19547,8886,-15993,12439,-19547,12439,-15993,8886,-23101,8886,-26655,12439,-23101,12439,-26655,5332,-19547,5332,-15993,1778,-19547,1778,-15993,5332,-23101,5332,-26655,1778,-23101,1778,-26655,19547,-8886,19547,-12439,15993,-8886,15993,-12439,19547,-5332,19547,-1778,15993,-5332,15993,-1778,23101,-8886,23101,-12439,26655,-8886,26655,-12439,23101,-5332,23101,-1778,26655,-5332,26655,-1778,19547,-19547,19547,-15993,15993,-19547,15993,-15993,19547,-23101,19547,-26655,15993,-23101,15993,-26655,23101,-19547,23101,-15993,26655,-19547,26655,-15993,23101,-23101,23101,-26655,26655,-23101,26655,-26655,-8886,8886,-8886,12439,-12439,8886,-12439,12439,-8886,5332,-8886,1778,-12439,5332,-12439,1778,-5332,8886,-5332,12439,-1778,8886,-1778,12439,-5332,5332,-5332,1778,-1778,5332,-1778,1778,-8886,19547,-8886,15993,-12439,19547,-12439,15993,-8886,23101,-8886,26655,-12439,23101,-12439,26655,-5332,19547,-5332,15993,-1778,19547,-1778,15993,-5332,23101,-5332,26655,-1778,23101,-1778,26655,-19547,8886,-19547,12439,-15993,8886,-15993,12439,-19547,5332,-19547,1778,-15993,5332,-15993,1778,-23101,8886,-23101,12439,-26655,8886,-26655,12439,-23101,5332,-23101,1778,-26655,5332,-26655,1778,-19547,19547,-19547,15993,-15993,19547,-15993,15993,-19547,23101,-19547,26655,-15993,23101,-15993,26655,-23101,19547,-23101,15993,-26655,19547,-26655,15993,-23101,23101,-23101,26655,-26655,23101,-26655,26655,-8886,-8886,-8886,-12439,-12439,-8886,-12439,-12439,-8886,-5332,-8886,-1778,-12439,-5332,-12439,-1778,-5332,-8886,-5332,-12439,-1778,-8886,-1778,-12439,-5332,-5332,-5332,-1778,-1778,-5332,-1778,-1778,-8886,-19547,-8886,-15993,-12439,-19547,-12439,-15993,-8886,-23101,-8886,-26655,-12439,-23101,-12439,-26655,-5332,-19547,-5332,-15993,-1778,-19547,-1778,-15993,-5332,-23101,-5332,-26655,-1778,-23101,-1778,-26655,-19547,-8886,-19547,-12439,-15993,-8886,-15993,-12439,-19547,-5332,-19547,-1778,-15993,-5332,-15993,-1778,-23101,-8886,-23101,-12439,-26655,-8886,-26655,-12439,-23101,-5332,-23101,-1778,-26655,-5332,-26655,-1778,-19547,-19547,-19547,-15993,-15993,-19547,-15993,-15993,-19547,-23101,-19547,-26655,-15993,-23101,-15993,-26655,-23101,-19547,-23101,-15993,-26655,-19547,-26655,-15993,-23101,-23101,-23101,-26655,-26655,-23101,-26655,-26655};
|
||||
|
||||
|
||||
pthread_cond_t nfapi_sync_cond;
|
||||
pthread_mutex_t nfapi_sync_mutex;
|
||||
int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
|
||||
@@ -384,11 +387,11 @@ void reset_stats(FL_OBJECT *button, long arg)
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
for (k=0; k<8; k++) { //harq_processes
|
||||
for (j=0; j<phy_vars_gNB->dlsch[i][0]->Mlimit; j++) {
|
||||
/* for (j=0; j<phy_vars_gNB->dlsch[i][0]->Mlimit; j++) {
|
||||
phy_vars_gNB->UE_stats[i].dlsch_NAK[k][j]=0;
|
||||
phy_vars_gNB->UE_stats[i].dlsch_ACK[k][j]=0;
|
||||
phy_vars_gNB->UE_stats[i].dlsch_trials[k][j]=0;
|
||||
}
|
||||
}*/
|
||||
|
||||
phy_vars_gNB->UE_stats[i].dlsch_l2_errors[k]=0;
|
||||
phy_vars_gNB->UE_stats[i].ulsch_errors[k]=0;
|
||||
|
||||
+24
-20
@@ -226,7 +226,7 @@ PHY_VARS_NR_UE* init_nr_ue_vars(NR_DL_FRAME_PARMS *frame_parms,
|
||||
// initialize all signal buffers
|
||||
init_nr_ue_signal(ue,1,abstraction_flag);
|
||||
// intialize transport
|
||||
//init_nr_ue_transport(ue,abstraction_flag);
|
||||
init_nr_ue_transport(ue,abstraction_flag);
|
||||
|
||||
return(ue);
|
||||
}
|
||||
@@ -442,6 +442,8 @@ static void *UE_thread_synch(void *arg) {
|
||||
#endif
|
||||
if (nr_initial_sync( UE, UE->mode ) == 0) {
|
||||
|
||||
//write_output("txdata_sym.m", "txdata_sym", UE->common_vars.rxdata[0], (10*UE->frame_parms.samples_per_subframe), 1, 1);
|
||||
|
||||
hw_slot_offset = (UE->rx_offset<<1) / UE->frame_parms.samples_per_subframe;
|
||||
printf("Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %d (DL %u, UL %u), UE_scan_carrier %d\n",
|
||||
hw_slot_offset,
|
||||
@@ -594,7 +596,7 @@ static void *UE_thread_synch(void *arg) {
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef XFORMS
|
||||
#if 0 //defined XFORMS
|
||||
if (do_forms) {
|
||||
extern FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
|
||||
@@ -603,7 +605,7 @@ static void *UE_thread_synch(void *arg) {
|
||||
0,0,7);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
|
||||
// indicate readiness
|
||||
UE->proc.instance_cnt_synch--;
|
||||
@@ -688,10 +690,10 @@ static void *UE_thread_rxn_txnp4(void *arg) {
|
||||
UE->if_inst->dcireq(&UE->dcireq);
|
||||
|
||||
#ifdef UE_SLOT_PARALLELISATION
|
||||
phy_procedures_slot_parallelization_UE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay, NULL );
|
||||
phy_procedures_slot_parallelization_nrUE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay, NULL );
|
||||
#else
|
||||
phy_procedures_nrUE_RX( UE, proc, 0, 1, UE->mode);
|
||||
printf(">>> nr_ue_pdcch_procedures ended\n");
|
||||
// printf(">>> nr_ue_pdcch_procedures ended\n");
|
||||
|
||||
#endif
|
||||
}
|
||||
@@ -699,7 +701,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&UE->generic_stat);
|
||||
#endif
|
||||
printf(">>> mac init\n");
|
||||
//printf(">>> mac init\n");
|
||||
|
||||
if (UE->mac_enabled==1) {
|
||||
|
||||
@@ -770,7 +772,7 @@ printf(">>> mac init\n");
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&UE->generic_stat);
|
||||
#endif
|
||||
printf(">>> mac ended\n");
|
||||
//printf(">>> mac ended\n");
|
||||
|
||||
// Prepare the future Tx data
|
||||
#if 0
|
||||
@@ -874,13 +876,14 @@ void *UE_thread(void *arg) {
|
||||
usleep(500*1000);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (instance_cnt_synch < 0) { // we can invoke the synch
|
||||
// grab 10 ms of signal and wakeup synch thread
|
||||
for (int i=0; i<UE->frame_parms.nb_antennas_rx; i++)
|
||||
rxp[i] = (void*)&UE->common_vars.rxdata[i][0];
|
||||
|
||||
if (UE->mode != loop_through_memory)
|
||||
AssertFatal( UE->frame_parms.samples_per_subframe*10 ==
|
||||
AssertFatal( UE->frame_parms.samples_per_subframe*10==
|
||||
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||
×tamp,
|
||||
rxp,
|
||||
@@ -933,10 +936,10 @@ void *UE_thread(void *arg) {
|
||||
}
|
||||
UE->rx_offset=0;
|
||||
UE->time_sync_cell=0;
|
||||
//UE->proc.proc_rxtx[0].frame_rx++;
|
||||
UE->proc.proc_rxtx[0].frame_rx++;
|
||||
//UE->proc.proc_rxtx[1].frame_rx++;
|
||||
for (th_id=0; th_id < RX_NB_TH; th_id++) {
|
||||
UE->proc.proc_rxtx[th_id].frame_rx++;
|
||||
for (th_id=1; th_id < RX_NB_TH; th_id++) {
|
||||
UE->proc.proc_rxtx[th_id].frame_rx = UE->proc.proc_rxtx[0].frame_rx;
|
||||
}
|
||||
|
||||
//printf("first stream frame rx %d\n",UE->proc.proc_rxtx[0].frame_rx);
|
||||
@@ -955,6 +958,10 @@ void *UE_thread(void *arg) {
|
||||
rt_sleep_ns(1000*1000);
|
||||
|
||||
} else {
|
||||
thread_idx++;
|
||||
if(thread_idx>=RX_NB_TH)
|
||||
thread_idx = 0;
|
||||
|
||||
subframe_nr++;
|
||||
subframe_nr %= NR_NUMBER_OF_SUBFRAMES_PER_FRAME;
|
||||
UE_nr_rxtx_proc_t *proc = &UE->proc.proc_rxtx[thread_idx];
|
||||
@@ -975,9 +982,6 @@ void *UE_thread(void *arg) {
|
||||
|
||||
LOG_D(PHY,"Process subframe %d thread Idx %d \n", subframe_nr, UE->current_thread_id[subframe_nr]);
|
||||
|
||||
thread_idx++;
|
||||
if(thread_idx>=RX_NB_TH)
|
||||
thread_idx = 0;
|
||||
|
||||
if (UE->mode != loop_through_memory) {
|
||||
for (i=0; i<UE->frame_parms.nb_antennas_rx; i++)
|
||||
@@ -1046,10 +1050,10 @@ void *UE_thread(void *arg) {
|
||||
// operate on thread sf mod 2
|
||||
AssertFatal(pthread_mutex_lock(&proc->mutex_rxtx) ==0,"");
|
||||
if(subframe_nr == 0) {
|
||||
//UE->proc.proc_rxtx[0].frame_rx++;
|
||||
UE->proc.proc_rxtx[0].frame_rx++;
|
||||
//UE->proc.proc_rxtx[1].frame_rx++;
|
||||
for (th_id=0; th_id < RX_NB_TH; th_id++) {
|
||||
UE->proc.proc_rxtx[th_id].frame_rx++;
|
||||
for (th_id=1; th_id < RX_NB_TH; th_id++) {
|
||||
UE->proc.proc_rxtx[th_id].frame_rx = UE->proc.proc_rxtx[0].frame_rx;
|
||||
}
|
||||
#ifdef SAIF_ENABLED
|
||||
if (!(proc->frame_rx%4000))
|
||||
@@ -1069,7 +1073,7 @@ void *UE_thread(void *arg) {
|
||||
|
||||
proc->nr_tti_rx=subframe_nr;
|
||||
proc->subframe_rx=subframe_nr;
|
||||
|
||||
|
||||
proc->frame_tx = proc->frame_rx;
|
||||
proc->nr_tti_tx= subframe_nr + DURATION_RX_TO_TX;
|
||||
if (proc->nr_tti_tx > NR_NUMBER_OF_SUBFRAMES_PER_FRAME) {
|
||||
@@ -1194,11 +1198,11 @@ void init_UE_threads(PHY_VARS_NR_UE *UE) {
|
||||
#ifdef UE_DLSCH_PARALLELISATION
|
||||
pthread_mutex_init(&UE->proc.proc_rxtx[i].mutex_dlsch_td,NULL);
|
||||
pthread_cond_init(&UE->proc.proc_rxtx[i].cond_dlsch_td,NULL);
|
||||
pthread_create(&UE->proc.proc_rxtx[i].pthread_dlsch_td,NULL,dlsch_decoding_2thread0, rtd);
|
||||
pthread_create(&UE->proc.proc_rxtx[i].pthread_dlsch_td,NULL,nr_dlsch_decoding_2thread0, rtd);
|
||||
//thread 2
|
||||
pthread_mutex_init(&UE->proc.proc_rxtx[i].mutex_dlsch_td1,NULL);
|
||||
pthread_cond_init(&UE->proc.proc_rxtx[i].cond_dlsch_td1,NULL);
|
||||
pthread_create(&UE->proc.proc_rxtx[i].pthread_dlsch_td1,NULL,dlsch_decoding_2thread1, rtd);
|
||||
pthread_create(&UE->proc.proc_rxtx[i].pthread_dlsch_td1,NULL,nr_dlsch_decoding_2thread1, rtd);
|
||||
#endif
|
||||
|
||||
#ifdef UE_SLOT_PARALLELISATION
|
||||
|
||||
@@ -85,10 +85,10 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||
// at eNB 0, an UL scope for every UE
|
||||
FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
||||
//FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
//FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
||||
char title[255];
|
||||
unsigned char scope_enb_num_ue = 2;
|
||||
//unsigned char scope_enb_num_ue = 2;
|
||||
static pthread_t forms_thread; //xforms
|
||||
#endif //XFORMS
|
||||
#include "nr-uesoftmodem.h"
|
||||
@@ -119,6 +119,8 @@ int threequarter_fs=0;
|
||||
uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
||||
|
||||
extern int16_t nr_dlsch_demod_shift;
|
||||
|
||||
|
||||
//static char *conf_config_file_name = NULL;
|
||||
|
||||
@@ -435,21 +437,21 @@ static void *scope_thread(void *arg) {
|
||||
|
||||
#endif
|
||||
|
||||
while (!oai_exit) {
|
||||
while (!oai_exit) {
|
||||
//len = dump_ue_stats (PHY_vars_UE_g[0][0], &PHY_vars_UE_g[0][0]->proc.proc_rxtx[0],stats_buffer, 0, mode,rx_input_level_dBm);
|
||||
//fl_set_object_label(form_stats->stats_text, stats_buffer);
|
||||
fl_clear_browser(form_stats->stats_text);
|
||||
fl_add_browser_line(form_stats->stats_text, stats_buffer);
|
||||
//fl_clear_browser(form_stats->stats_text);
|
||||
//fl_add_browser_line(form_stats->stats_text, stats_buffer);
|
||||
|
||||
if (PHY_vars_UE_g[0][0]->is_synchronized == 1)
|
||||
//if (PHY_vars_UE_g[0][0]->is_synchronized == 1)
|
||||
phy_scope_UE(form_ue[0],
|
||||
PHY_vars_UE_g[0][0],
|
||||
0,0,7);
|
||||
0,0,1);
|
||||
//else it is done in the synch thread
|
||||
|
||||
//printf("doing forms\n");
|
||||
//usleep(100000); // 100 ms
|
||||
sleep(1);
|
||||
sleep(0.1);
|
||||
}
|
||||
|
||||
// printf("%s",stats_buffer);
|
||||
@@ -547,7 +549,7 @@ static void get_options(void) {
|
||||
set_glog_onlinelog(online_log_messages);
|
||||
}
|
||||
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) {
|
||||
set_glog(glog_level);
|
||||
set_glog(glog_level);
|
||||
}
|
||||
|
||||
if (start_telnetsrv) {
|
||||
@@ -872,23 +874,6 @@ int main( int argc, char **argv ) {
|
||||
T_Config_Init();
|
||||
#endif
|
||||
|
||||
// initialize the log (see log.h for details)
|
||||
set_glog(OAILOG_DEBUG);
|
||||
|
||||
set_log(HW, OAILOG_DEBUG);
|
||||
set_log(PHY, OAILOG_DEBUG);
|
||||
set_log(MAC, OAILOG_INFO);
|
||||
set_log(RLC, OAILOG_INFO);
|
||||
set_log(PDCP, OAILOG_INFO);
|
||||
set_log(OTG, OAILOG_INFO);
|
||||
set_log(RRC, OAILOG_INFO);
|
||||
#if defined(ENABLE_ITTI)
|
||||
set_log(SIM, OAILOG_INFO);
|
||||
# if defined(ENABLE_USE_MME)
|
||||
set_log(NAS, OAILOG_INFO);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
//randominit (0);
|
||||
set_taus_seed (0);
|
||||
|
||||
@@ -1131,6 +1116,8 @@ int main( int argc, char **argv ) {
|
||||
pthread_cond_init(&sync_cond,NULL);
|
||||
pthread_mutex_init(&sync_mutex, NULL);
|
||||
|
||||
init_UE(1);
|
||||
|
||||
#ifdef XFORMS
|
||||
int UE_id;
|
||||
int fl_argc=1;
|
||||
@@ -1140,8 +1127,8 @@ int main( int argc, char **argv ) {
|
||||
fl_initialize (&fl_argc, argv, NULL, 0, 0);
|
||||
// restore the original command line args
|
||||
// argv = fl_get_cmdline_args( &argc );
|
||||
form_stats = create_form_stats_form();
|
||||
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||
//form_stats = create_form_stats_form();
|
||||
//fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||
UE_id = 0;
|
||||
form_ue[UE_id] = create_lte_phy_scope_ue();
|
||||
sprintf (title, "NR DL SCOPE UE");
|
||||
@@ -1171,7 +1158,6 @@ int main( int argc, char **argv ) {
|
||||
|
||||
rt_sleep_ns(10*100000000ULL);
|
||||
|
||||
init_UE(1);
|
||||
number_of_cards = 1;
|
||||
|
||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
@@ -1232,8 +1218,8 @@ int main( int argc, char **argv ) {
|
||||
|
||||
if (do_forms==1) {
|
||||
pthread_join(forms_thread,&status);
|
||||
fl_hide_form(form_stats->stats_form);
|
||||
fl_free_form(form_stats->stats_form);
|
||||
//fl_hide_form(form_stats->stats_form);
|
||||
//fl_free_form(form_stats->stats_form);
|
||||
fl_hide_form(form_ue[0]->lte_phy_scope_ue);
|
||||
fl_free_form(form_ue[0]->lte_phy_scope_ue);
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
{"threadThreeSubframe", NULL, 0, iptr:&(threads.three), defintval:1, TYPE_INT, 0}, \
|
||||
{"threadSlot1ProcOne", NULL, 0, iptr:&(threads.slot1_proc_one), defintval:1, TYPE_INT, 0}, \
|
||||
{"threadSlot1ProcTwo", NULL, 0, iptr:&(threads.slot1_proc_two), defintval:1, TYPE_INT, 0}, \
|
||||
{"dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
||||
{"nr_dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&nr_dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
||||
{"A" , CONFIG_HLP_TADV, 0, uptr:&timing_advance, defintval:0, TYPE_UINT, 0}, \
|
||||
{"C" , CONFIG_HLP_DLF, 0, uptr:&(downlink_frequency[0][0]), defuintval:2680000000, TYPE_UINT, 0}, \
|
||||
{"a" , CONFIG_HLP_CHOFF, 0, iptr:&chain_offset, defintval:0, TYPE_INT, 0}, \
|
||||
|
||||
Reference in New Issue
Block a user