Merge branch 'ru_parallel' into ru-parallel-beamforming
Conflicts: executables/nr-ru.c nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h openair1/SCHED_NR/nr_ru_procedures.c
This commit is contained in:
@@ -271,17 +271,17 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||
|
||||
start_meas(tinput);
|
||||
if(tinput != NULL) start_meas(tinput);
|
||||
for (i=0; i<block_length; i++) {
|
||||
c[i] = (test_input[i/8]&(1<<(i&7)))>>(i&7);
|
||||
//printf("c(%d,%d)=%d\n",j,i,temp);
|
||||
}
|
||||
|
||||
stop_meas(tinput);
|
||||
if(tinput != NULL) stop_meas(tinput);
|
||||
|
||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||
// extend matrix
|
||||
start_meas(tprep);
|
||||
if(tprep != NULL) start_meas(tprep);
|
||||
for (i1=0; i1 < ncols; i1++)
|
||||
{
|
||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||
@@ -296,11 +296,11 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
||||
printf("\n");
|
||||
*/
|
||||
}
|
||||
stop_meas(tprep);
|
||||
if(tprep != NULL) stop_meas(tprep);
|
||||
//parity check part
|
||||
start_meas(tparity);
|
||||
if(tparity != NULL) start_meas(tparity);
|
||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||
stop_meas(tparity);
|
||||
if(tparity != NULL) stop_meas(tparity);
|
||||
}
|
||||
else {
|
||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||
@@ -308,12 +308,12 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
start_meas(toutput);
|
||||
if(toutput != NULL) start_meas(toutput);
|
||||
// information part and puncture columns
|
||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||
memcpy(&channel_input[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char));
|
||||
|
||||
stop_meas(toutput);
|
||||
if(toutput != NULL) stop_meas(toutput);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -408,7 +408,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||
|
||||
start_meas(tinput);
|
||||
if(tinput != NULL) start_meas(tinput);
|
||||
#if 0
|
||||
for (i=0; i<block_length; i++) {
|
||||
for (j=0; j<n_segments; j++) {
|
||||
@@ -441,11 +441,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
||||
#endif
|
||||
#endif
|
||||
|
||||
stop_meas(tinput);
|
||||
if(tinput != NULL) stop_meas(tinput);
|
||||
|
||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||
// extend matrix
|
||||
start_meas(tprep);
|
||||
if(tprep != NULL) start_meas(tprep);
|
||||
for (i1=0; i1 < ncols; i1++)
|
||||
{
|
||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||
@@ -460,11 +460,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
||||
printf("\n");
|
||||
*/
|
||||
}
|
||||
stop_meas(tprep);
|
||||
if(tprep != NULL) stop_meas(tprep);
|
||||
//parity check part
|
||||
start_meas(tparity);
|
||||
if(tparity != NULL) start_meas(tparity);
|
||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||
stop_meas(tparity);
|
||||
if(tparity != NULL) stop_meas(tparity);
|
||||
}
|
||||
else {
|
||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||
@@ -472,7 +472,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
start_meas(toutput);
|
||||
if(toutput != NULL) start_meas(toutput);
|
||||
// information part and puncture columns
|
||||
/*
|
||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||
@@ -513,7 +513,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
||||
AssertFatal(1==0,"Need AVX2 for now\n");
|
||||
#endif
|
||||
|
||||
stop_meas(toutput);
|
||||
if(toutput != NULL) stop_meas(toutput);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||
|
||||
start_meas(tinput);
|
||||
if(tinput != NULL) start_meas(tinput);
|
||||
#if 0
|
||||
for (i=0; i<block_length; i++) {
|
||||
//for (j=0; j<n_segments; j++) {
|
||||
@@ -649,11 +649,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
#endif
|
||||
#endif
|
||||
|
||||
stop_meas(tinput);
|
||||
if(tinput != NULL) stop_meas(tinput);
|
||||
|
||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||
// extend matrix
|
||||
start_meas(tprep);
|
||||
if(tprep != NULL) start_meas(tprep);
|
||||
for (i1=0; i1 < ncols; i1++)
|
||||
{
|
||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||
@@ -668,11 +668,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
printf("\n");
|
||||
*/
|
||||
}
|
||||
stop_meas(tprep);
|
||||
if(tprep != NULL) stop_meas(tprep);
|
||||
//parity check part
|
||||
start_meas(tparity);
|
||||
if(tparity != NULL) start_meas(tparity);
|
||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||
stop_meas(tparity);
|
||||
if(tparity != NULL) stop_meas(tparity);
|
||||
}
|
||||
else {
|
||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||
@@ -680,7 +680,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
start_meas(toutput);
|
||||
if(toutput != NULL) start_meas(toutput);
|
||||
// information part and puncture columns
|
||||
/*
|
||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||
@@ -726,7 +726,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
AssertFatal(1==0,"Need AVX2 for now\n");
|
||||
#endif
|
||||
|
||||
stop_meas(toutput);
|
||||
if(toutput != NULL) stop_meas(toutput);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
||||
int frame,
|
||||
uint8_t slot,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
nfapi_nr_config_request_t *config) {
|
||||
nfapi_nr_config_request_t *config,
|
||||
time_stats_t *dlsch_encoding_stats,
|
||||
time_stats_t *dlsch_scrambling_stats,
|
||||
time_stats_t *dlsch_modulation_stats) {
|
||||
|
||||
NR_DL_gNB_HARQ_t *harq = dlsch->harq_processes[dci_alloc->harq_pid];
|
||||
nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &harq->dlsch_pdu.dlsch_pdu_rel15;
|
||||
@@ -89,7 +92,9 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
||||
|
||||
/// CRC, coding, interleaving and rate matching
|
||||
AssertFatal(harq->pdu!=NULL,"harq->pdu is null\n");
|
||||
start_meas(dlsch_encoding_stats);
|
||||
nr_dlsch_encoding(harq->pdu, frame, slot, dlsch, frame_parms);
|
||||
stop_meas(dlsch_encoding_stats);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH encoding:\nPayload:\n");
|
||||
for (int i=0; i<harq->B>>7; i++) {
|
||||
@@ -107,6 +112,7 @@ printf("\n");
|
||||
#endif
|
||||
|
||||
/// scrambling
|
||||
start_meas(dlsch_scrambling_stats);
|
||||
for (int q=0; q<rel15->nb_codewords; q++)
|
||||
memset((void*)scrambled_output[q], 0, (encoded_length>>5)*sizeof(uint32_t));
|
||||
uint16_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? \
|
||||
@@ -120,6 +126,7 @@ printf("\n");
|
||||
Nid,
|
||||
n_RNTI,
|
||||
scrambled_output[q]);
|
||||
stop_meas(dlsch_scrambling_stats);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH scrambling:\n");
|
||||
for (int i=0; i<encoded_length>>8; i++) {
|
||||
@@ -130,12 +137,13 @@ for (int i=0; i<encoded_length>>8; i++) {
|
||||
#endif
|
||||
|
||||
/// Modulation
|
||||
|
||||
start_meas(dlsch_modulation_stats);
|
||||
for (int q=0; q<rel15->nb_codewords; q++)
|
||||
nr_modulation(scrambled_output[q],
|
||||
encoded_length,
|
||||
Qm,
|
||||
mod_symbs[q]);
|
||||
stop_meas(dlsch_modulation_stats);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_symbols);
|
||||
for (int i=0; i<nb_symbols>>3; i++) {
|
||||
|
||||
@@ -74,7 +74,11 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
||||
int frame,
|
||||
uint8_t slot,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
nfapi_nr_config_request_t *config);
|
||||
nfapi_nr_config_request_t *config,
|
||||
time_stats_t *dlsch_encoding_stats,
|
||||
time_stats_t *dlsch_scrambling_stats,
|
||||
time_stats_t *dlsch_modulation_stats);
|
||||
|
||||
|
||||
void free_gNB_dlsch(NR_gNB_DLSCH_t *dlsch);
|
||||
|
||||
|
||||
@@ -366,7 +366,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
||||
|
||||
//printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG);
|
||||
|
||||
//start_meas(te_stats);
|
||||
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
||||
//d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
||||
//channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
||||
@@ -398,7 +397,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
||||
//ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
||||
ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,dlsch->harq_processes[harq_pid]->d,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
||||
|
||||
//stop_meas(te_stats);
|
||||
//printf("end ldpc encoder -- output\n");
|
||||
|
||||
#ifdef DEBUG_DLSCH_CODING
|
||||
@@ -425,7 +423,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
||||
mod_order,nb_rb);
|
||||
#endif
|
||||
|
||||
//start_meas(rm_stats);
|
||||
#ifdef DEBUG_DLSCH_CODING
|
||||
printf("rvidx in encoding = %d\n", rel15.redundancy_version);
|
||||
#endif
|
||||
@@ -447,14 +444,11 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
||||
for (int i =0; i<16; i++)
|
||||
printf("output ratematching e[%d]= %d r_offset %d\n", i,dlsch->harq_processes[harq_pid]->e[i+r_offset], r_offset);
|
||||
#endif
|
||||
//stop_meas(rm_stats);
|
||||
|
||||
//start_meas(i_stats);
|
||||
nr_interleaving_ldpc(E,
|
||||
mod_order,
|
||||
dlsch->harq_processes[harq_pid]->e+r_offset,
|
||||
dlsch->harq_processes[harq_pid]->f+r_offset);
|
||||
//stop_meas(i_stats);
|
||||
|
||||
|
||||
#ifdef DEBUG_DLSCH_CODING
|
||||
|
||||
@@ -465,6 +465,8 @@ typedef struct gNB_L1_proc_t_s {
|
||||
pthread_t pthread_single;
|
||||
/// pthread structure for asychronous RX/TX processing thread
|
||||
pthread_t pthread_asynch_rxtx;
|
||||
/// pthread structure for printing time meas
|
||||
pthread_t L1_stats_thread;
|
||||
/// flag to indicate first RX acquisition
|
||||
int first_rx;
|
||||
/// flag to indicate first TX transmission
|
||||
|
||||
@@ -243,40 +243,47 @@ void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx) {
|
||||
void nr_feptx_prec(RU_t *ru,int frame,int tti_tx) {
|
||||
|
||||
int l,aa;
|
||||
NR_DL_FRAME_PARMS *fp=ru->nr_frame_parms;
|
||||
int32_t ***bw;
|
||||
PHY_VARS_gNB **gNB_list = ru->gNB_list,*gNB;
|
||||
gNB = gNB_list[0];
|
||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||
nfapi_nr_config_request_t *cfg;
|
||||
int32_t ***bw;
|
||||
|
||||
if (ru->nb_tx == 1) {
|
||||
|
||||
if (ru->num_gNB == 1){
|
||||
gNB = gNB_list[0];
|
||||
cfg = &gNB->gNB_config;
|
||||
if (nr_slot_select(cfg,tti_tx) == SF_UL) return;
|
||||
|
||||
if (ru->nb_tx == 1) {
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
|
||||
|
||||
AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx);
|
||||
AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx);
|
||||
|
||||
for (int p=0; p<fp->Lmax; p++) {
|
||||
for (int p=0; p<fp->Lmax; p++) {
|
||||
if ((fp->L_ssb >> p) & 0x01)
|
||||
memcpy((void*)ru->common.txdataF_BF[0],
|
||||
(void*)gNB->common_vars.txdataF[p],
|
||||
fp->samples_per_slot_wCP*sizeof(int32_t));
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
|
||||
}
|
||||
else {
|
||||
bw = ru->beam_weights[0];
|
||||
for (l=0;l<fp->symbols_per_slot;l++) {
|
||||
for (aa=0;aa<ru->nb_tx;aa++) {
|
||||
nr_beam_precoding(ru->gNB_list[0]->common_vars.txdataF,
|
||||
ru->common.txdataF_BF,
|
||||
fp,
|
||||
bw,
|
||||
tti_tx,
|
||||
l,
|
||||
aa);
|
||||
|
||||
(void*)gNB->common_vars.txdataF[p],
|
||||
fp->samples_per_slot_wCP*sizeof(int32_t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
|
||||
}// if (ru->nb_tx == 1)
|
||||
else {
|
||||
bw = ru->beam_weights[0];
|
||||
for (l=0;l<fp->symbols_per_slot;l++) {
|
||||
for (aa=0;aa<ru->nb_tx;aa++) {
|
||||
nr_beam_precoding(gNB->common_vars.txdataF,
|
||||
ru->common.txdataF_BF,
|
||||
fp,
|
||||
bw,
|
||||
tti_tx,
|
||||
l,
|
||||
aa);
|
||||
|
||||
}// for (aa=0;aa<ru->nb_tx;aa++)
|
||||
}// for (l=0;l<fp->symbols_per_slot;l++)
|
||||
}// if (ru->nb_tx == 1)
|
||||
}// if (ru->num_gNB == 1)
|
||||
}
|
||||
|
||||
|
||||
@@ -197,7 +197,11 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
||||
&gNB->pdcch_vars.dci_alloc[0],
|
||||
gNB->nr_gold_pdsch_dmrs[slot],
|
||||
gNB->common_vars.txdataF,
|
||||
AMP, frame, slot, fp, cfg);
|
||||
AMP, frame, slot, fp, cfg,
|
||||
&gNB->dlsch_encoding_stats,
|
||||
&gNB->dlsch_scrambling_stats,
|
||||
&gNB->dlsch_modulation_stats);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user