handling csirs and calling the phy function
This commit is contained in:
@@ -25,13 +25,16 @@
|
|||||||
|
|
||||||
//#define NR_CSIRS_DEBUG
|
//#define NR_CSIRS_DEBUG
|
||||||
|
|
||||||
int nr_generate_csi_rs(uint32_t **gold_csi_rs,
|
|
||||||
int32_t** txdataF,
|
|
||||||
int16_t amp,
|
|
||||||
NR_DL_FRAME_PARMS frame_parms,
|
|
||||||
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
void nr_generate_csi_rs(PHY_VARS_gNB *gNB,
|
||||||
|
int16_t amp,
|
||||||
|
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params,
|
||||||
|
int slot){
|
||||||
|
|
||||||
|
NR_DL_FRAME_PARMS frame_parms=gNB->frame_parms;
|
||||||
|
uint32_t **gold_csi_rs = gNB->nr_gold_csi_rs[slot];
|
||||||
|
int32_t **txdataF = gNB->common_vars.txdataF;
|
||||||
|
int txdataF_offset = (slot%2)*frame_parms.samples_per_slot_wCP;
|
||||||
int16_t mod_csi[frame_parms.symbols_per_slot][NR_MAX_CSI_RS_LENGTH>>1];
|
int16_t mod_csi[frame_parms.symbols_per_slot][NR_MAX_CSI_RS_LENGTH>>1];
|
||||||
uint16_t b = csi_params.freq_domain;
|
uint16_t b = csi_params.freq_domain;
|
||||||
uint16_t n, csi_bw, csi_start, p, k, l, mprime, na, kpn, csi_length;
|
uint16_t n, csi_bw, csi_start, p, k, l, mprime, na, kpn, csi_length;
|
||||||
@@ -586,16 +589,17 @@ int nr_generate_csi_rs(uint32_t **gold_csi_rs,
|
|||||||
}
|
}
|
||||||
// ZP CSI RS
|
// ZP CSI RS
|
||||||
if (csi_params.csi_type == 2) {
|
if (csi_params.csi_type == 2) {
|
||||||
((int16_t*)txdataF[p])[(l*frame_parms.ofdm_symbol_size + k)<<1] = 0;
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+(2*txdataF_offset)] = 0;
|
||||||
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1) + 1] = 0;
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+1+(2*txdataF_offset)] = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
((int16_t*)txdataF[p])[(l*frame_parms.ofdm_symbol_size + k)<<1] = (beta*wt*wf*mod_csi[l][mprime<<1]) >> 15;
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+(2*txdataF_offset)] = (beta*wt*wf*mod_csi[l][mprime<<1]) >> 15;
|
||||||
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1) + 1] = (beta*wt*wf*mod_csi[l][(mprime<<1) + 1]) >> 15;
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+1+(2*txdataF_offset)] = (beta*wt*wf*mod_csi[l][(mprime<<1) + 1]) >> 15;
|
||||||
}
|
}
|
||||||
#ifdef NR_CSIRS_DEBUG
|
#ifdef NR_CSIRS_DEBUG
|
||||||
printf("l,k (%d %d) seq. index %d \t port %d \t (%d,%d)\n",l,k-start_sc,mprime,p+3000,((int16_t*)txdataF[p])[(l*frame_parms.ofdm_symbol_size + k)<<1],
|
printf("l,k (%d %d) seq. index %d \t port %d \t (%d,%d)\n",l,k-start_sc,mprime,p+3000,
|
||||||
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1) + 1]);
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+(2*txdataF_offset)],
|
||||||
|
((int16_t*)txdataF[p])[((l*frame_parms.ofdm_symbol_size + k)<<1)+1+(2*txdataF_offset)]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -603,6 +607,4 @@ int nr_generate_csi_rs(uint32_t **gold_csi_rs,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,11 +326,10 @@ void init_prach_list(PHY_VARS_gNB *gNB);
|
|||||||
void init_prach_ru_list(RU_t *ru);
|
void init_prach_ru_list(RU_t *ru);
|
||||||
void free_nr_ru_prach_entry(RU_t *ru, int prach_id);
|
void free_nr_ru_prach_entry(RU_t *ru, int prach_id);
|
||||||
|
|
||||||
int nr_generate_csi_rs(uint32_t **gold_csi_rs,
|
void nr_generate_csi_rs(PHY_VARS_gNB *gNB,
|
||||||
int32_t **txdataF,
|
int16_t amp,
|
||||||
int16_t amp,
|
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params,
|
||||||
NR_DL_FRAME_PARMS frame_parms,
|
int slot);
|
||||||
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params);
|
|
||||||
|
|
||||||
void nr_decode_pucch1(int32_t **rxdataF,
|
void nr_decode_pucch1(int32_t **rxdataF,
|
||||||
pucch_GroupHopping_t pucch_GroupHopping,
|
pucch_GroupHopping_t pucch_GroupHopping,
|
||||||
|
|||||||
@@ -118,6 +118,13 @@ typedef struct {
|
|||||||
nfapi_nr_dl_tti_pdcch_pdu pdcch_pdu;
|
nfapi_nr_dl_tti_pdcch_pdu pdcch_pdu;
|
||||||
} NR_gNB_PDCCH_t;
|
} NR_gNB_PDCCH_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t active;
|
||||||
|
int frame;
|
||||||
|
int slot;
|
||||||
|
nfapi_nr_dl_tti_csi_rs_pdu csirs_pdu;
|
||||||
|
} NR_gNB_CSIRS_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int frame;
|
int frame;
|
||||||
int slot;
|
int slot;
|
||||||
@@ -712,6 +719,7 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
NR_gNB_PUSCH *pusch_vars[NUMBER_OF_NR_ULSCH_MAX];
|
NR_gNB_PUSCH *pusch_vars[NUMBER_OF_NR_ULSCH_MAX];
|
||||||
NR_gNB_PUCCH_t *pucch[NUMBER_OF_NR_PUCCH_MAX];
|
NR_gNB_PUCCH_t *pucch[NUMBER_OF_NR_PUCCH_MAX];
|
||||||
NR_gNB_PDCCH_t pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
NR_gNB_PDCCH_t pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
||||||
|
NR_gNB_CSIRS_t csirs_pdu[NUMBER_OF_NR_CSIRS_MAX];
|
||||||
NR_gNB_UL_PDCCH_t ul_pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
NR_gNB_UL_PDCCH_t ul_pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
||||||
NR_gNB_DLSCH_t *dlsch[NUMBER_OF_NR_DLSCH_MAX][2]; // Nusers times two spatial streams
|
NR_gNB_DLSCH_t *dlsch[NUMBER_OF_NR_DLSCH_MAX][2]; // Nusers times two spatial streams
|
||||||
NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX][2]; // [Nusers times][2 codewords]
|
NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX][2]; // [Nusers times][2 codewords]
|
||||||
|
|||||||
@@ -98,10 +98,9 @@ void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
nr_fill_dci(gNB,frame,slot,pdcch_pdu);
|
nr_fill_dci(gNB,frame,slot,pdcch_pdu);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
|
void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
|
||||||
int frame, int slot,
|
int frame, int slot,
|
||||||
nfapi_nr_ul_dci_request_pdus_t *ul_dci_request_pdu) {
|
nfapi_nr_ul_dci_request_pdus_t *ul_dci_request_pdu) {
|
||||||
@@ -115,6 +114,28 @@ void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void handle_nfapi_nr_csirs_pdu(PHY_VARS_gNB *gNB,
|
||||||
|
int frame, int slot,
|
||||||
|
nfapi_nr_dl_tti_csi_rs_pdu *csirs_pdu) {
|
||||||
|
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
for (int id=0; id<NUMBER_OF_NR_CSIRS_MAX; id++) {
|
||||||
|
NR_gNB_CSIRS_t *csirs = &gNB->csirs_pdu[id];
|
||||||
|
if (csirs->active == 0) {
|
||||||
|
csirs->frame = frame;
|
||||||
|
csirs->slot = slot;
|
||||||
|
csirs->active = 1;
|
||||||
|
memcpy((void*)&csirs->csirs_pdu, (void*)csirs_pdu, sizeof(nfapi_nr_dl_tti_csi_rs_pdu));
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found == 0)
|
||||||
|
LOG_E(MAC,"CSI-RS list is full\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void handle_nr_nfapi_pdsch_pdu(PHY_VARS_gNB *gNB,int frame,int slot,
|
void handle_nr_nfapi_pdsch_pdu(PHY_VARS_gNB *gNB,int frame,int slot,
|
||||||
nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu,
|
nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu,
|
||||||
uint8_t *sdu)
|
uint8_t *sdu)
|
||||||
@@ -184,6 +205,12 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
|
|||||||
pdcch_received = 1;
|
pdcch_received = 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
|
||||||
|
LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE for %d.%d\n",frame,slot,DL_req->SFN,DL_req->Slot);
|
||||||
|
handle_nfapi_nr_csirs_pdu(gNB,
|
||||||
|
frame, slot,
|
||||||
|
&dl_tti_pdu->csi_rs_pdu);
|
||||||
|
break;
|
||||||
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
|
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,6 +38,10 @@
|
|||||||
|
|
||||||
void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO);
|
void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO);
|
||||||
|
|
||||||
|
void handle_nfapi_nr_csirs_pdu(PHY_VARS_gNB *gNB,
|
||||||
|
int frame, int slot,
|
||||||
|
nfapi_nr_dl_tti_csi_rs_pdu *csirs_pdu);
|
||||||
|
|
||||||
void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
|
void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
|
||||||
int frame, int subframe,
|
int frame, int subframe,
|
||||||
nfapi_nr_dl_tti_pdcch_pdu *dcl_dl_pdu);
|
nfapi_nr_dl_tti_pdcch_pdu *dcl_dl_pdu);
|
||||||
|
|||||||
@@ -197,6 +197,18 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=0;i<NUMBER_OF_NR_CSIRS_MAX;i++){
|
||||||
|
NR_gNB_CSIRS_t *csirs = &gNB->csirs_pdu[i];
|
||||||
|
if ((csirs->active == 1) &&
|
||||||
|
(csirs->frame == frame) &&
|
||||||
|
(csirs->slot == slot) ) {
|
||||||
|
LOG_D(PHY, "CSI-RS generation started in frame %d.%d\n",frame,slot);
|
||||||
|
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params = csirs->csirs_pdu.csi_rs_pdu_rel15;
|
||||||
|
nr_generate_csi_rs(gNB, AMP, csi_params, slot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,7 @@
|
|||||||
#define NUMBER_OF_NR_PUCCH_MAX 16
|
#define NUMBER_OF_NR_PUCCH_MAX 16
|
||||||
#define NUMBER_OF_NR_SR_MAX 16
|
#define NUMBER_OF_NR_SR_MAX 16
|
||||||
#define NUMBER_OF_NR_PDCCH_MAX 16
|
#define NUMBER_OF_NR_PDCCH_MAX 16
|
||||||
|
#define NUMBER_OF_NR_CSIRS_MAX 16
|
||||||
|
|
||||||
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
||||||
#define MAX_MANAGED_GNB_PER_MOBILE 2
|
#define MAX_MANAGED_GNB_PER_MOBILE 2
|
||||||
|
|||||||
Reference in New Issue
Block a user