Merge branch 'develop-nr' into bug-fix-channel-est
This commit is contained in:
+6
-6
@@ -321,7 +321,7 @@ static inline void fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t ti
|
|||||||
|
|
||||||
LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx);
|
LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx);
|
||||||
|
|
||||||
if (nr_slot_select(&ru->gNB_list[0]->gNB_config,ru->proc.tti_tx)!=SF_UL) send_IF4p5(ru,frame, slot, IF4p5_PDLFFT);
|
if (nr_slot_select(&ru->gNB_list[0]->gNB_config,ru->proc.tti_tx,frame)!=SF_UL) send_IF4p5(ru,frame, slot, IF4p5_PDLFFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
@@ -536,10 +536,10 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
|
|||||||
do {
|
do {
|
||||||
recv_IF4p5(ru, &frame_tx, &slot_tx, &packet_type, &symbol_number);
|
recv_IF4p5(ru, &frame_tx, &slot_tx, &packet_type, &symbol_number);
|
||||||
|
|
||||||
if ((nr_slot_select(cfg,slot_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
|
if ((nr_slot_select(cfg,slot_tx,frame_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
|
||||||
|
|
||||||
LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n",
|
LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n",
|
||||||
*slot,nr_slot_select(cfg,*slot),frame_tx,slot_tx,symbol_number);
|
*slot,nr_slot_select(cfg,*slot,*frame),frame_tx,slot_tx,symbol_number);
|
||||||
|
|
||||||
if (proc->first_tx != 0) {
|
if (proc->first_tx != 0) {
|
||||||
*frame = frame_tx;
|
*frame = frame_tx;
|
||||||
@@ -558,7 +558,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
|
|||||||
} else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type);
|
} else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type);
|
||||||
} while (symbol_mask != symbol_mask_full);
|
} while (symbol_mask != symbol_mask_full);
|
||||||
|
|
||||||
if (nr_slot_select(cfg,slot_tx) == SF_DL) stop_meas(&ru->rx_fhaul);
|
if (nr_slot_select(cfg,slot_tx,frame_tx) == SF_DL) stop_meas(&ru->rx_fhaul);
|
||||||
|
|
||||||
proc->tti_tx = slot_tx;
|
proc->tti_tx = slot_tx;
|
||||||
proc->frame_tx = frame_tx;
|
proc->frame_tx = frame_tx;
|
||||||
@@ -728,7 +728,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
|
|||||||
T(T_ENB_PHY_OUTPUT_SIGNAL, T_INT(0), T_INT(0), T_INT(frame), T_INT(slot),
|
T(T_ENB_PHY_OUTPUT_SIGNAL, T_INT(0), T_INT(0), T_INT(frame), T_INT(slot),
|
||||||
T_INT(0), T_BUFFER(&ru->common.txdata[0][slot * fp->samples_per_slot], fp->samples_per_slot * 4));
|
T_INT(0), T_BUFFER(&ru->common.txdata[0][slot * fp->samples_per_slot], fp->samples_per_slot * 4));
|
||||||
int sf_extension = 0;
|
int sf_extension = 0;
|
||||||
//nr_subframe_t SF_type = nr_slot_select(cfg,slot%fp->slots_per_frame);
|
//nr_subframe_t SF_type = nr_slot_select(cfg,slot%fp->slots_per_frame,frame);
|
||||||
|
|
||||||
if ((slot == 0) ||
|
if ((slot == 0) ||
|
||||||
(slot == 1) || IS_SOFTMODEM_RFSIM ) {
|
(slot == 1) || IS_SOFTMODEM_RFSIM ) {
|
||||||
@@ -819,7 +819,7 @@ static void *ru_thread_asynch_rxtx( void *param ) {
|
|||||||
if (ru->fh_south_asynch_in) ru->fh_south_asynch_in(ru,&frame,&subframe);
|
if (ru->fh_south_asynch_in) ru->fh_south_asynch_in(ru,&frame,&subframe);
|
||||||
// asynchronous receive from north (RRU IF4/IF5)
|
// asynchronous receive from north (RRU IF4/IF5)
|
||||||
else if (ru->fh_north_asynch_in) {
|
else if (ru->fh_north_asynch_in) {
|
||||||
if (nr_slot_select(&ru->gNB_list[0]->gNB_config,subframe)!=SF_UL)
|
if (nr_slot_select(&ru->gNB_list[0]->gNB_config,subframe,frame)!=SF_UL)
|
||||||
ru->fh_north_asynch_in(ru,&frame,&subframe);
|
ru->fh_north_asynch_in(ru,&frame,&subframe);
|
||||||
} else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
|
} else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -521,14 +521,23 @@ void init_openair0(void) {
|
|||||||
if (frame_parms[0]->threequarter_fs) {
|
if (frame_parms[0]->threequarter_fs) {
|
||||||
openair0_cfg[card].sample_rate=92.16e6;
|
openair0_cfg[card].sample_rate=92.16e6;
|
||||||
openair0_cfg[card].samples_per_frame = 921600;
|
openair0_cfg[card].samples_per_frame = 921600;
|
||||||
openair0_cfg[card].tx_bw = 40e6;
|
|
||||||
openair0_cfg[card].rx_bw = 40e6;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
openair0_cfg[card].sample_rate=122.88e6;
|
openair0_cfg[card].sample_rate=122.88e6;
|
||||||
openair0_cfg[card].samples_per_frame = 1228800;
|
openair0_cfg[card].samples_per_frame = 1228800;
|
||||||
openair0_cfg[card].tx_bw = 40e6;
|
}
|
||||||
openair0_cfg[card].rx_bw = 40e6;
|
} else {
|
||||||
|
LOG_E(PHY,"Unsupported numerology!\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}else if(frame_parms[0]->N_RB_DL == 273) {
|
||||||
|
if (numerology==1) {
|
||||||
|
if (frame_parms[0]->threequarter_fs) {
|
||||||
|
AssertFatal(0 == 1,"three quarter sampling not supported for N_RB 273\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
openair0_cfg[card].sample_rate=122.88e6;
|
||||||
|
openair0_cfg[card].samples_per_frame = 1228800;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_E(PHY,"Unsupported numerology!\n");
|
LOG_E(PHY,"Unsupported numerology!\n");
|
||||||
@@ -539,32 +548,22 @@ void init_openair0(void) {
|
|||||||
if (frame_parms[0]->threequarter_fs) {
|
if (frame_parms[0]->threequarter_fs) {
|
||||||
openair0_cfg[card].sample_rate=23.04e6;
|
openair0_cfg[card].sample_rate=23.04e6;
|
||||||
openair0_cfg[card].samples_per_frame = 230400;
|
openair0_cfg[card].samples_per_frame = 230400;
|
||||||
openair0_cfg[card].tx_bw = 10e6;
|
|
||||||
openair0_cfg[card].rx_bw = 10e6;
|
|
||||||
} else {
|
} else {
|
||||||
openair0_cfg[card].sample_rate=30.72e6;
|
openair0_cfg[card].sample_rate=30.72e6;
|
||||||
openair0_cfg[card].samples_per_frame = 307200;
|
openair0_cfg[card].samples_per_frame = 307200;
|
||||||
openair0_cfg[card].tx_bw = 10e6;
|
|
||||||
openair0_cfg[card].rx_bw = 10e6;
|
|
||||||
}
|
}
|
||||||
} else if (numerology==1) {
|
} else if (numerology==1) {
|
||||||
if (frame_parms[0]->threequarter_fs) {
|
if (frame_parms[0]->threequarter_fs) {
|
||||||
openair0_cfg[card].sample_rate=46.08e6;
|
openair0_cfg[card].sample_rate=46.08e6;
|
||||||
openair0_cfg[card].samples_per_frame = 480800;
|
openair0_cfg[card].samples_per_frame = 480800;
|
||||||
openair0_cfg[card].tx_bw = 20e6;
|
|
||||||
openair0_cfg[card].rx_bw = 20e6;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
openair0_cfg[card].sample_rate=61.44e6;
|
openair0_cfg[card].sample_rate=61.44e6;
|
||||||
openair0_cfg[card].samples_per_frame = 614400;
|
openair0_cfg[card].samples_per_frame = 614400;
|
||||||
openair0_cfg[card].tx_bw = 20e6;
|
|
||||||
openair0_cfg[card].rx_bw = 20e6;
|
|
||||||
}
|
}
|
||||||
} else if (numerology==2) {
|
} else if (numerology==2) {
|
||||||
openair0_cfg[card].sample_rate=122.88e6;
|
openair0_cfg[card].sample_rate=122.88e6;
|
||||||
openair0_cfg[card].samples_per_frame = 1228800;
|
openair0_cfg[card].samples_per_frame = 1228800;
|
||||||
openair0_cfg[card].tx_bw = 40e6;
|
|
||||||
openair0_cfg[card].rx_bw = 40e6;
|
|
||||||
} else {
|
} else {
|
||||||
LOG_E(PHY,"Unsupported numerology!\n");
|
LOG_E(PHY,"Unsupported numerology!\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
@@ -572,18 +571,12 @@ void init_openair0(void) {
|
|||||||
} else if(frame_parms[0]->N_RB_DL == 50) {
|
} else if(frame_parms[0]->N_RB_DL == 50) {
|
||||||
openair0_cfg[card].sample_rate=15.36e6;
|
openair0_cfg[card].sample_rate=15.36e6;
|
||||||
openair0_cfg[card].samples_per_frame = 153600;
|
openair0_cfg[card].samples_per_frame = 153600;
|
||||||
openair0_cfg[card].tx_bw = 5e6;
|
|
||||||
openair0_cfg[card].rx_bw = 5e6;
|
|
||||||
} else if (frame_parms[0]->N_RB_DL == 25) {
|
} else if (frame_parms[0]->N_RB_DL == 25) {
|
||||||
openair0_cfg[card].sample_rate=7.68e6;
|
openair0_cfg[card].sample_rate=7.68e6;
|
||||||
openair0_cfg[card].samples_per_frame = 76800;
|
openair0_cfg[card].samples_per_frame = 76800;
|
||||||
openair0_cfg[card].tx_bw = 2.5e6;
|
|
||||||
openair0_cfg[card].rx_bw = 2.5e6;
|
|
||||||
} else if (frame_parms[0]->N_RB_DL == 6) {
|
} else if (frame_parms[0]->N_RB_DL == 6) {
|
||||||
openair0_cfg[card].sample_rate=1.92e6;
|
openair0_cfg[card].sample_rate=1.92e6;
|
||||||
openair0_cfg[card].samples_per_frame = 19200;
|
openair0_cfg[card].samples_per_frame = 19200;
|
||||||
openair0_cfg[card].tx_bw = 1.5e6;
|
|
||||||
openair0_cfg[card].rx_bw = 1.5e6;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_E(PHY,"Unknown NB_RB %d!\n",frame_parms[0]->N_RB_DL);
|
LOG_E(PHY,"Unknown NB_RB %d!\n",frame_parms[0]->N_RB_DL);
|
||||||
|
|||||||
@@ -79,30 +79,39 @@ int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp, uint8_t i_ssb, uint8_t half_f
|
|||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_is_ssb_slot(nfapi_nr_config_request_t *cfg, int slot)
|
int nr_is_ssb_slot(nfapi_nr_config_request_t *cfg, int slot, int frame)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint8_t n_hf;
|
uint8_t n_hf;
|
||||||
|
uint16_t p,mu,hf_slots;
|
||||||
|
uint64_t ssb_map;
|
||||||
int rel_slot;
|
int rel_slot;
|
||||||
|
|
||||||
|
mu = cfg->subframe_config.numerology_index_mu.value;
|
||||||
|
|
||||||
|
ssb_map = cfg->sch_config.ssb_scg_position_in_burst.value;
|
||||||
|
p = cfg->sch_config.ssb_periodicity.value;
|
||||||
n_hf = cfg->sch_config.half_frame_index.value;
|
n_hf = cfg->sch_config.half_frame_index.value;
|
||||||
|
|
||||||
// if SSB periodicity is 5ms, they are transmitted in both half frames
|
// checking if the ssb is transmitted in given frame according to periodicity
|
||||||
if ( cfg->sch_config.ssb_periodicity.value == 5) {
|
if ( (p>10) && (frame%(p/10)) )
|
||||||
if (slot<10)
|
|
||||||
n_hf=0;
|
|
||||||
else
|
|
||||||
n_hf=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// to set a effective slot number between 0 to 9 in the half frame where the SSB is supposed to be
|
|
||||||
rel_slot = (n_hf)? (slot-10) : slot;
|
|
||||||
|
|
||||||
if(rel_slot<10 && rel_slot>=0)
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
|
else {
|
||||||
|
hf_slots = (10<<mu)>>1; // number of slots per half frame
|
||||||
|
// if SSB periodicity is 5ms, they are transmitted in both half frames
|
||||||
|
if ( p == 5) {
|
||||||
|
if (slot<hf_slots)
|
||||||
|
n_hf=0;
|
||||||
|
else
|
||||||
|
n_hf=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// to set a effective slot number between 0 to hf_slots-1 in the half frame where the SSB is supposed to be
|
||||||
|
rel_slot = (n_hf)? (slot-hf_slots) : slot;
|
||||||
|
|
||||||
|
// there are two potential SSB per slot
|
||||||
|
return ( ((ssb_map >> rel_slot*2) & 0x01) || ((ssb_map >> (1+rel_slot*2)) & 0x01) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ void phy_config_request(PHY_Config_t *phy_config);
|
|||||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
||||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
||||||
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp, uint8_t i_ssb, uint8_t half_frame_index);
|
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp, uint8_t i_ssb, uint8_t half_frame_index);
|
||||||
int nr_is_ssb_slot(nfapi_nr_config_request_t *cfg, int slot);
|
int nr_is_ssb_slot(nfapi_nr_config_request_t *cfg, int slot, int frame);
|
||||||
int nr_init_frame_parms(nfapi_nr_config_request_t *config, NR_DL_FRAME_PARMS *frame_parms);
|
int nr_init_frame_parms(nfapi_nr_config_request_t *config, NR_DL_FRAME_PARMS *frame_parms);
|
||||||
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms,int mu,int Ncp,int N_RB_DL,int n_ssb_crb,int ssb_subcarrier_offset);
|
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms,int mu,int Ncp,int N_RB_DL,int n_ssb_crb,int ssb_subcarrier_offset);
|
||||||
int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
|
int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
|
|||||||
|
|
||||||
start_meas(&ru->ofdm_mod_stats);
|
start_meas(&ru->ofdm_mod_stats);
|
||||||
|
|
||||||
if (nr_slot_select(cfg,slot) == SF_UL) return;
|
if (nr_slot_select(cfg,slot,frame_tx) == SF_UL) return;
|
||||||
|
|
||||||
// this copy should be done in the precoding thread (currently inactive)
|
// this copy should be done in the precoding thread (currently inactive)
|
||||||
for (int aa=0;aa<ru->nb_tx;aa++)
|
for (int aa=0;aa<ru->nb_tx;aa++)
|
||||||
@@ -133,7 +133,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
|
|||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
|
||||||
|
|
||||||
if (nr_slot_select(cfg,slot)==SF_DL) {
|
if (nr_slot_select(cfg,slot,frame_tx)==SF_DL) {
|
||||||
// If this is not an S-tti
|
// If this is not an S-tti
|
||||||
if (pthread_mutex_timedlock(&proc->mutex_feptx,&wait) != 0) {
|
if (pthread_mutex_timedlock(&proc->mutex_feptx,&wait) != 0) {
|
||||||
printf("[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)\n", proc->instance_cnt_feptx);
|
printf("[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)\n", proc->instance_cnt_feptx);
|
||||||
@@ -232,8 +232,8 @@ void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx) {
|
|||||||
memcpy((void*)ru->common.txdataF_BF[aa],
|
memcpy((void*)ru->common.txdataF_BF[aa],
|
||||||
(void*)ru->gNB_list[0]->common_vars.txdataF[aa], fp->samples_per_slot_wCP*sizeof(int32_t));
|
(void*)ru->gNB_list[0]->common_vars.txdataF[aa], fp->samples_per_slot_wCP*sizeof(int32_t));
|
||||||
|
|
||||||
if ((nr_slot_select(cfg,slot)==SF_DL)||
|
if ((nr_slot_select(cfg,slot,frame_tx)==SF_DL)||
|
||||||
((nr_slot_select(cfg,slot)==SF_S))) {
|
((nr_slot_select(cfg,slot,frame_tx)==SF_S))) {
|
||||||
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
|
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
|
||||||
|
|
||||||
nr_feptx0(ru,slot,0,fp->symbols_per_slot);
|
nr_feptx0(ru,slot,0,fp->symbols_per_slot);
|
||||||
|
|||||||
@@ -33,10 +33,9 @@
|
|||||||
#include "sched_nr.h"
|
#include "sched_nr.h"
|
||||||
#include "PHY/INIT/phy_init.h"
|
#include "PHY/INIT/phy_init.h"
|
||||||
|
|
||||||
nr_subframe_t nr_slot_select(nfapi_nr_config_request_t *cfg,
|
nr_subframe_t nr_slot_select(nfapi_nr_config_request_t *cfg, unsigned char slot, int frame)
|
||||||
unsigned char slot)
|
|
||||||
{
|
{
|
||||||
if (cfg->subframe_config.duplex_mode.value == FDD || slot == NR_DOWNLINK_SLOT)
|
if (cfg->subframe_config.duplex_mode.value == FDD || slot == NR_DOWNLINK_SLOT || nr_is_ssb_slot(cfg,slot,frame)==1)
|
||||||
return(SF_DL);
|
return(SF_DL);
|
||||||
else if (slot == NR_UPLINK_SLOT)
|
else if (slot == NR_UPLINK_SLOT)
|
||||||
return (SF_UL);
|
return (SF_UL);
|
||||||
|
|||||||
@@ -96,23 +96,24 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
|
|||||||
uint8_t *pbch_pdu=&gNB->pbch_pdu[0];
|
uint8_t *pbch_pdu=&gNB->pbch_pdu[0];
|
||||||
uint8_t ssb_index, n_hf;
|
uint8_t ssb_index, n_hf;
|
||||||
int ssb_start_symbol, rel_slot;
|
int ssb_start_symbol, rel_slot;
|
||||||
|
uint16_t slots_per_hf = fp->slots_per_frame / 2;
|
||||||
|
|
||||||
n_hf = cfg->sch_config.half_frame_index.value;
|
n_hf = cfg->sch_config.half_frame_index.value;
|
||||||
|
|
||||||
// if SSB periodicity is 5ms, they are transmitted in both half frames
|
// if SSB periodicity is 5ms, they are transmitted in both half frames
|
||||||
if ( cfg->sch_config.ssb_periodicity.value == 5) {
|
if ( cfg->sch_config.ssb_periodicity.value == 5) {
|
||||||
if (slot<10)
|
if (slot<slots_per_hf)
|
||||||
n_hf=0;
|
n_hf=0;
|
||||||
else
|
else
|
||||||
n_hf=1;
|
n_hf=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// to set a effective slot number between 0 to 9 in the half frame where the SSB is supposed to be
|
// to set a effective slot number between 0 to 9 in the half frame where the SSB is supposed to be
|
||||||
rel_slot = (n_hf)? (slot-10) : slot;
|
rel_slot = (n_hf)? (slot-slots_per_hf) : slot;
|
||||||
|
|
||||||
LOG_D(PHY,"common_signal_procedures: frame %d, slot %d\n",frame,slot);
|
LOG_D(PHY,"common_signal_procedures: frame %d, slot %d\n",frame,slot);
|
||||||
|
|
||||||
if(rel_slot<10 && rel_slot>=0) {
|
if(rel_slot<slots_per_hf && rel_slot>=0) {
|
||||||
for (int i=0; i<2; i++) { // max two SSB per frame
|
for (int i=0; i<2; i++) { // max two SSB per frame
|
||||||
|
|
||||||
ssb_index = i + 2*rel_slot; // computing the ssb_index
|
ssb_index = i + 2*rel_slot; // computing the ssb_index
|
||||||
@@ -160,7 +161,7 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
else
|
else
|
||||||
ssb_frame_periodicity = (cfg->sch_config.ssb_periodicity.value)/10 ; // 10ms is the frame length
|
ssb_frame_periodicity = (cfg->sch_config.ssb_periodicity.value)/10 ; // 10ms is the frame length
|
||||||
|
|
||||||
if ((cfg->subframe_config.duplex_mode.value == TDD) && (nr_slot_select(cfg,slot)==SF_UL)) return;
|
if ((cfg->subframe_config.duplex_mode.value == TDD) && (nr_slot_select(cfg,slot,frame)==SF_UL)) return;
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,1);
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
||||||
|
|
||||||
|
|
||||||
nr_slot_t nr_slot_select (nfapi_nr_config_request_t *cfg, unsigned char slot);
|
nr_slot_t nr_slot_select (nfapi_nr_config_request_t *cfg, unsigned char slot, int frame);
|
||||||
void nr_set_ssb_first_subcarrier(nfapi_nr_config_request_t *cfg, NR_DL_FRAME_PARMS *fp);
|
void nr_set_ssb_first_subcarrier(nfapi_nr_config_request_t *cfg, NR_DL_FRAME_PARMS *fp);
|
||||||
void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, int frame_tx, int slot_tx, int do_meas);
|
void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, int frame_tx, int slot_tx, int do_meas);
|
||||||
void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx);
|
void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx);
|
||||||
|
|||||||
@@ -807,7 +807,7 @@ 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;
|
NRRRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL;
|
||||||
//if(N_RB_DL == 217) sf_ahead = 2;
|
//if(N_RB_DL == 217) sf_ahead = 2;
|
||||||
//else if(N_RB_DL == 106) sf_ahead = 4;
|
//else if(N_RB_DL == 106) sf_ahead = 4;
|
||||||
if ((N_RB_DL != 217) && (N_RB_DL != 106))
|
if ((N_RB_DL != 273) && (N_RB_DL != 217) && (N_RB_DL != 106))
|
||||||
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);
|
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);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+375
-335
File diff suppressed because it is too large
Load Diff
@@ -65,30 +65,28 @@ uint8_t get_adjacent_cell_mod_id_NR(uint16_t phyCellId);
|
|||||||
@param phich_duration PHICH duration parameter
|
@param phich_duration PHICH duration parameter
|
||||||
@param frame radio frame number
|
@param frame radio frame number
|
||||||
@return size of encoded bit stream in bytes*/
|
@return size of encoded bit stream in bytes*/
|
||||||
uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
|
uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
|
||||||
uint32_t frame,
|
uint32_t frame,
|
||||||
uint32_t ssb_SubcarrierOffset,
|
uint32_t ssb_SubcarrierOffset,
|
||||||
uint32_t pdcch_ConfigSIB1,
|
uint32_t pdcch_ConfigSIB1,
|
||||||
uint32_t subCarrierSpacingCommon,
|
uint32_t subCarrierSpacingCommon,
|
||||||
uint32_t dmrs_TypeA_Position);
|
uint32_t dmrs_TypeA_Position);
|
||||||
/**
|
/**
|
||||||
\brief Generate configuration for SIB1 (eNB).
|
\brief Generate configuration for SIB1 (gNB).
|
||||||
@param carrier pointer to Carrier information
|
@param carrier pointer to Carrier information
|
||||||
@param Mod_id Instance of eNB
|
@param configuration Pointer Configuration Request structure
|
||||||
@param Component carrier Component carrier to configure
|
|
||||||
@param configuration Pointer Configuration Request structure
|
|
||||||
@return size of encoded bit stream in bytes*/
|
@return size of encoded bit stream in bytes*/
|
||||||
|
uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier
|
||||||
uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
|
#if defined(ENABLE_ITTI)
|
||||||
int Mod_id,
|
, gNB_RrcConfigurationReq *configuration
|
||||||
int CC_id,
|
#endif
|
||||||
gNB_RrcConfigurationReq *configuration);
|
);
|
||||||
|
|
||||||
void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
|
void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
gNB_RrcConfigurationReq *configuration,
|
gNB_RrcConfigurationReq *configuration,
|
||||||
#endif
|
#endif
|
||||||
int initial_flag);
|
int initial_flag);
|
||||||
|
|
||||||
void do_RLC_BEARER(uint8_t Mod_id,
|
void do_RLC_BEARER(uint8_t Mod_id,
|
||||||
|
|||||||
@@ -56,8 +56,10 @@
|
|||||||
//#include "RRCConnectionRequest.h"
|
//#include "RRCConnectionRequest.h"
|
||||||
//#include "RRCConnectionReestablishmentRequest.h"
|
//#include "RRCConnectionReestablishmentRequest.h"
|
||||||
#include "NR_RRCReestablishmentRequest.h"
|
#include "NR_RRCReestablishmentRequest.h"
|
||||||
//#include "BCCH-DL-SCH-Message.h"
|
#include "NR_BCCH-DL-SCH-Message.h"
|
||||||
#include "NR_BCCH-BCH-Message.h"
|
#include "NR_BCCH-BCH-Message.h"
|
||||||
|
#include "NR_PLMN-IdentityInfo.h"
|
||||||
|
#include "NR_MCC-MNC-Digit.h"
|
||||||
//#include "MCCH-Message.h"
|
//#include "MCCH-Message.h"
|
||||||
//#include "MBSFNAreaConfiguration-r9.h"
|
//#include "MBSFNAreaConfiguration-r9.h"
|
||||||
//#include "SCellToAddMod-r10.h"
|
//#include "SCellToAddMod-r10.h"
|
||||||
@@ -374,6 +376,9 @@ typedef struct {
|
|||||||
uint8_t *MIB;
|
uint8_t *MIB;
|
||||||
uint8_t sizeof_MIB;
|
uint8_t sizeof_MIB;
|
||||||
|
|
||||||
|
uint8_t *SIB1;
|
||||||
|
uint8_t sizeof_SIB1;
|
||||||
|
|
||||||
uint8_t *ServingCellConfigCommon;
|
uint8_t *ServingCellConfigCommon;
|
||||||
uint8_t sizeof_servingcellconfigcommon;
|
uint8_t sizeof_servingcellconfigcommon;
|
||||||
|
|
||||||
@@ -388,6 +393,7 @@ typedef struct {
|
|||||||
|
|
||||||
//are the only static one (memory has been already allocated)
|
//are the only static one (memory has been already allocated)
|
||||||
NR_BCCH_BCH_Message_t mib;
|
NR_BCCH_BCH_Message_t mib;
|
||||||
|
NR_BCCH_DL_SCH_Message_t *siblock1;
|
||||||
|
|
||||||
NR_ServingCellConfigCommon_t *servingcellconfigcommon;
|
NR_ServingCellConfigCommon_t *servingcellconfigcommon;
|
||||||
|
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ RUs = (
|
|||||||
THREAD_STRUCT = (
|
THREAD_STRUCT = (
|
||||||
{
|
{
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
worker_config = "WORKER_DISABLE";
|
worker_config = "WORKER_DISABLE";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,287 @@
|
|||||||
|
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "3GPP_gNODEB";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "TDD";
|
||||||
|
DL_prefix_type = "NORMAL";
|
||||||
|
UL_prefix_type = "NORMAL";
|
||||||
|
eutra_band = 78;
|
||||||
|
downlink_frequency = 3510000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 273;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
MIB_subCarrierSpacingCommon = 30;
|
||||||
|
MIB_ssb_SubcarrierOffset = 0;
|
||||||
|
MIB_dmrs_TypeA_Position = 2;
|
||||||
|
pdcch_ConfigSIB1 = 0;
|
||||||
|
SIB1_frequencyOffsetSSB = "khz5";
|
||||||
|
SIB1_ssb_PeriodicityServingCell = 5;
|
||||||
|
SIB1_ss_PBCH_BlockPower = -60;
|
||||||
|
absoluteFrequencySSB = 0;
|
||||||
|
DL_FreqBandIndicatorNR = 15;
|
||||||
|
DL_absoluteFrequencyPointA = 15;
|
||||||
|
DL_offsetToCarrier = 15;
|
||||||
|
DL_SCS_SubcarrierSpacing = "kHz30";
|
||||||
|
DL_SCS_SpecificCarrier_k0 = 0;
|
||||||
|
DL_carrierBandwidth = 15;
|
||||||
|
DL_locationAndBandwidth = 15;
|
||||||
|
DL_BWP_SubcarrierSpacing = "kHz30";
|
||||||
|
DL_BWP_prefix_type = "NORMAL";
|
||||||
|
UL_FreqBandIndicatorNR = 15;
|
||||||
|
UL_absoluteFrequencyPointA = 13;
|
||||||
|
UL_additionalSpectrumEmission = 3;
|
||||||
|
UL_p_Max = -1;
|
||||||
|
UL_frequencyShift7p5khz = "TRUE";
|
||||||
|
UL_offsetToCarrier = 10;
|
||||||
|
UL_SCS_SubcarrierSpacing = "kHz30";
|
||||||
|
UL_SCS_SpecificCarrier_k0 = 0;
|
||||||
|
UL_carrierBandwidth = 15;
|
||||||
|
UL_locationAndBandwidth = 15;
|
||||||
|
UL_BWP_SubcarrierSpacing = "kHz30";
|
||||||
|
UL_BWP_prefix_type = "NORMAL";
|
||||||
|
UL_timeAlignmentTimerCommon = "infinity";
|
||||||
|
ServingCellConfigCommon_n_TimingAdvanceOffset = "n0"
|
||||||
|
ServingCellConfigCommon_ssb_PositionsInBurst_PR = 0x01;
|
||||||
|
ServingCellConfigCommon_ssb_periodicityServingCell = 10;
|
||||||
|
ServingCellConfigCommon_dmrs_TypeA_Position = 2;
|
||||||
|
NIA_SubcarrierSpacing = "kHz15";
|
||||||
|
ServingCellConfigCommon_ss_PBCH_BlockPower = -60;
|
||||||
|
referenceSubcarrierSpacing = "kHz15";
|
||||||
|
dl_UL_TransmissionPeriodicity = "ms0p5";
|
||||||
|
nrofDownlinkSlots = 10;
|
||||||
|
nrofDownlinkSymbols = 10;
|
||||||
|
nrofUplinkSlots = 10;
|
||||||
|
nrofUplinkSymbols = 10;
|
||||||
|
rach_totalNumberOfRA_Preambles = 63;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice = "oneEighth";
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth = 4;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth = 8;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf = 16;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one = 24;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two = 32;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four = 8;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight = 4;
|
||||||
|
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen = 2;
|
||||||
|
rach_groupBconfigured = "ENABLE";
|
||||||
|
rach_ra_Msg3SizeGroupA = 56;
|
||||||
|
rach_messagePowerOffsetGroupB = "dB0";
|
||||||
|
rach_numberOfRA_PreamblesGroupA = 32;
|
||||||
|
rach_ra_ContentionResolutionTimer = 8;
|
||||||
|
rsrp_ThresholdSSB = 64;
|
||||||
|
rsrp_ThresholdSSB_SUL = 64;
|
||||||
|
prach_RootSequenceIndex_choice = "l839";
|
||||||
|
prach_RootSequenceIndex_l839 = 0;
|
||||||
|
prach_RootSequenceIndex_l139 = 0;
|
||||||
|
prach_msg1_SubcarrierSpacing = "kHz30";
|
||||||
|
restrictedSetConfig = "unrestrictedSet";
|
||||||
|
msg3_transformPrecoding = "ENABLE";
|
||||||
|
prach_ConfigurationIndex = 10;
|
||||||
|
prach_msg1_FDM = "one";
|
||||||
|
prach_msg1_FrequencyStart = 10;
|
||||||
|
zeroCorrelationZoneConfig = 10;
|
||||||
|
preambleReceivedTargetPower = -150;
|
||||||
|
preambleTransMax = 6;
|
||||||
|
powerRampingStep = "dB0";
|
||||||
|
ra_ResponseWindow = 8;
|
||||||
|
groupHoppingEnabledTransformPrecoding = "ENABLE";
|
||||||
|
msg3_DeltaPreamble = 0;
|
||||||
|
p0_NominalWithGrant = 0;
|
||||||
|
PUSCH_TimeDomainResourceAllocation_k2 = 0;
|
||||||
|
PUSCH_TimeDomainResourceAllocation_mappingType = "typeA";
|
||||||
|
PUSCH_TimeDomainResourceAllocation_startSymbolAndLength = 0;
|
||||||
|
pucch_ResourceCommon = 0;
|
||||||
|
pucch_GroupHopping = "neither";
|
||||||
|
hoppingId = 0;
|
||||||
|
p0_nominal = -30;
|
||||||
|
PDSCH_TimeDomainResourceAllocation_k0 = 2;
|
||||||
|
PDSCH_TimeDomainResourceAllocation_mappingType = "typeA";
|
||||||
|
PDSCH_TimeDomainResourceAllocation_startSymbolAndLength = 0;
|
||||||
|
rateMatchPatternId = 0;
|
||||||
|
RateMatchPattern_patternType = "bitmaps";
|
||||||
|
symbolsInResourceBlock = "oneSlot";
|
||||||
|
periodicityAndPattern = 2;
|
||||||
|
RateMatchPattern_controlResourceSet = 5;
|
||||||
|
RateMatchPattern_subcarrierSpacing = "kHz30";
|
||||||
|
RateMatchPattern_mode = "dynamic";
|
||||||
|
controlResourceSetZero = 0;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
searchSpaceSIB1 = 10;
|
||||||
|
searchSpaceOtherSystemInformation = 10;
|
||||||
|
pagingSearchSpace = 10;
|
||||||
|
ra_SearchSpace = 10;
|
||||||
|
PDCCH_common_controlResourceSetId = 5;
|
||||||
|
PDCCH_common_ControlResourceSet_duration = 2;
|
||||||
|
PDCCH_cce_REG_MappingType = "nonInterleaved";
|
||||||
|
PDCCH_reg_BundleSize = 3;
|
||||||
|
PDCCH_interleaverSize = 3;
|
||||||
|
PDCCH_shiftIndex = 10;
|
||||||
|
PDCCH_precoderGranularity = "sameAsREG-bundle";
|
||||||
|
PDCCH_TCI_StateId = 32;
|
||||||
|
tci_PresentInDCI = "ENABLE";
|
||||||
|
PDCCH_DMRS_ScramblingID = 0;
|
||||||
|
SearchSpaceId = 10;
|
||||||
|
commonSearchSpaces_controlResourceSetId = 5;
|
||||||
|
SearchSpace_monitoringSlotPeriodicityAndOffset_choice = "sl1";
|
||||||
|
SearchSpace_monitoringSlotPeriodicityAndOffset_value = 0;
|
||||||
|
SearchSpace_duration = 2;
|
||||||
|
SearchSpace_nrofCandidates_aggregationLevel1 = 0;
|
||||||
|
SearchSpace_nrofCandidates_aggregationLevel2 = 0;
|
||||||
|
SearchSpace_nrofCandidates_aggregationLevel4 = 0;
|
||||||
|
SearchSpace_nrofCandidates_aggregationLevel8 = 0;
|
||||||
|
SearchSpace_nrofCandidates_aggregationLevel16 = 0;
|
||||||
|
SearchSpace_searchSpaceType = "common";
|
||||||
|
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 = 1;
|
||||||
|
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 = 1;
|
||||||
|
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 = 1;
|
||||||
|
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 = 1;
|
||||||
|
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 = 1;
|
||||||
|
Common_dci_Format2_3_monitoringPeriodicity = 1;
|
||||||
|
Common_dci_Format2_3_nrofPDCCH_Candidates = 1;
|
||||||
|
ue_Specific__dci_Formats = "formats0-0-And-1-0";
|
||||||
|
RateMatchPatternLTE_CRS_carrierFreqDL = 6;
|
||||||
|
RateMatchPatternLTE_CRS_carrierBandwidthDL = 6;
|
||||||
|
RateMatchPatternLTE_CRS_nrofCRS_Ports = 1;
|
||||||
|
RateMatchPatternLTE_CRS_v_Shift = 0;
|
||||||
|
RateMatchPatternLTE_CRS_radioframeAllocationPeriod = 1;
|
||||||
|
RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0;
|
||||||
|
RateMatchPatternLTE_CRS_subframeAllocation_choice = "oneFrame";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 114;
|
||||||
|
eNB_instances = [0];
|
||||||
|
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.10.2,clock_source=external,time_source=external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
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";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
Reference in New Issue
Block a user