PDSCH generation start
This commit is contained in:
@@ -119,6 +119,8 @@ void nr_fill_dci_and_dlsch(PHY_VARS_gNB *gNB,
|
||||
nfapi_nr_dl_config_dci_dl_pdu_rel15_t *pdu_rel15 = &pdu->dci_dl_pdu.dci_dl_pdu_rel15;
|
||||
nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &pdu->dci_dl_pdu.pdcch_params_rel15;
|
||||
nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
|
||||
NR_gNB_DLSCH_t *dlsch = &gNB->dlsch;
|
||||
NR_DL_gNB_HARQ_t **harq = dlsch->harq_processes;
|
||||
|
||||
uint16_t N_RB = fp->initial_bwp_dl.N_RB;
|
||||
uint16_t N_RB_UL = fp->initial_bwp_ul.N_RB;
|
||||
|
||||
@@ -158,6 +158,42 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t dlsch,
|
||||
NR_DL_FRAME_PARMS frame_parms,
|
||||
nfapi_nr_config_request_t config) {
|
||||
|
||||
NR_DL_gNB_HARQ_t *harq = dlsch.harq_processes[0];
|
||||
uint32_t scrambled_output[NR_MAX_NB_CODEWORDS][NR_MAX_PDSCH_ENCODED_LENGTH]={0};
|
||||
uint16_t mod_symbs[NR_MAX_NB_CODEWORDS][NR_MAX_PDSCH_ENCODED_LENGTH>>1] = {0};
|
||||
uint16_t tx_layers[NR_MAX_NB_LAYERS][NR_MAX_PDSCH_ENCODED_LENGTH>>1];
|
||||
|
||||
/// CRC, coding, interleaving and rate matching
|
||||
|
||||
/// scrambling
|
||||
uint16_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? ((pdcch_params.scrambling_id)?pdcch_params.rnti:0) : 0;
|
||||
uint16_t Nid = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? pdcch_params.scrambling_id : config.sch_config.physical_cell_id.value;
|
||||
for (int q=0; q<harq->n_codewords; q++)
|
||||
nr_pdsch_codeword_scrambling(harq->f,
|
||||
harq->TBS,
|
||||
q,
|
||||
Nid,
|
||||
n_RNTI,
|
||||
scrambled_output[q]);
|
||||
|
||||
/// Modulation
|
||||
for (int q=0; q<harq->n_codewords; q++)
|
||||
nr_pdsch_codeword_modulation(scrambled_output[q],
|
||||
harq->Qm,
|
||||
harq->TBS,
|
||||
mod_symbs[q]);
|
||||
|
||||
/// Layer mapping
|
||||
nr_pdsch_layer_mapping(mod_symbs,
|
||||
harq->n_codewords,
|
||||
harq->Nl,
|
||||
n_symbs,
|
||||
tx_layers);
|
||||
|
||||
/// Antenna port mapping -- Not yet necessary
|
||||
|
||||
/// Resource mapping
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+12
-2
@@ -132,16 +132,26 @@ typedef struct {
|
||||
uint8_t first_layer;
|
||||
/// codeword this transport block is mapped to
|
||||
uint8_t codeword;
|
||||
/// Number of codewords
|
||||
uint8_t n_codewords;
|
||||
} NR_DL_gNB_HARQ_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
|
||||
/// Pointers to 8 HARQ processes for the DLSCH
|
||||
NR_DL_gNB_HARQ_t *harq_processes[8];
|
||||
/// Pointers to 16 HARQ processes for the DLSCH
|
||||
NR_DL_gNB_HARQ_t *harq_processes[16];
|
||||
nfapi_nr_pdsch_time_domain_alloc_type_e time_alloc_type;
|
||||
uint8_t time_alloc_list_flag;
|
||||
uint8_t rbg_list[NR_MAX_NB_RBG];
|
||||
/// Time domain allocation
|
||||
uint8_t S;
|
||||
uint8_t L;
|
||||
/// Freq domain allocation
|
||||
uint16_t rb_start;
|
||||
uint16_t n_rb;
|
||||
/// BWP index
|
||||
uint8_t bwp_idx;
|
||||
|
||||
/// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
|
||||
int32_t *txdataF[8];
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
#define NR_MAX_CSET_DURATION 3
|
||||
|
||||
#define NR_MAX_NB_RBG 18
|
||||
#define NR_MAX_NB_LAYERS 8
|
||||
|
||||
typedef enum {
|
||||
NR_MU_0=0,
|
||||
|
||||
@@ -70,8 +70,8 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
|
||||
cfg->rf_config.dl_channel_bandwidth.value);
|
||||
memcpy((void*)params_rel15, (void*)&gNB->pdcch_type0_params, sizeof(nfapi_nr_dl_config_pdcch_parameters_rel15_t));
|
||||
|
||||
pdu_rel15->frequency_domain_assignment = 5;
|
||||
pdu_rel15->time_domain_assignment = 3;
|
||||
pdu_rel15->frequency_domain_assignment = get_RIV(0, 40, 106);
|
||||
pdu_rel15->time_domain_assignment = get_SLIV(8, 14);
|
||||
pdu_rel15->vrb_to_prb_mapping = 1;
|
||||
pdu_rel15->mcs = 12;
|
||||
pdu_rel15->tb_scaling = 1;
|
||||
|
||||
Reference in New Issue
Block a user