Fix PUCCH2 RRC scheduling

This commit is contained in:
Ismael Gomez 2021-08-29 22:37:02 +02:00 committed by Nils Fürste
parent a9a23214b0
commit 00653bdd46
6 changed files with 6 additions and 15 deletions

View File

@ -28,7 +28,6 @@ inline const char* to_string(rrc_cfg_cqi_mode_t mode)
struct rrc_cfg_cqi_t { struct rrc_cfg_cqi_t {
uint32_t sf_mapping[80]; uint32_t sf_mapping[80];
uint32_t nof_subframes; uint32_t nof_subframes;
uint32_t nof_prb;
uint32_t period; uint32_t period;
uint32_t m_ri; uint32_t m_ri;
bool is_subband_enabled; bool is_subband_enabled;

View File

@ -45,7 +45,6 @@ phy_cnfg =
simultaneousAckCQI = true; simultaneousAckCQI = true;
period = 40; // in ms period = 40; // in ms
//subframe = [0, 10, 20, 30]; // Optional vector of subframe indices every period where CQI resources will be allocated (default uses all) //subframe = [0, 10, 20, 30]; // Optional vector of subframe indices every period where CQI resources will be allocated (default uses all)
nof_prb = 1;
m_ri = 8; // RI period in CQI period m_ri = 8; // RI period in CQI period
//subband_k = 1; // If enabled and > 0, configures sub-band CQI reporting and defines K (see 36.213 7.2.2). If disabled, configures wideband CQI //subband_k = 1; // If enabled and > 0, configures sub-band CQI reporting and defines K (see 36.213 7.2.2). If disabled, configures wideband CQI
}; };

View File

@ -736,7 +736,6 @@ int parse_rr(all_args_t* args_, rrc_cfg_t* rrc_cfg_)
"mode", &rrc_cfg_->cqi_cfg.mode, rrc_cfg_cqi_mode_text, RRC_CFG_CQI_MODE_N_ITEMS)); "mode", &rrc_cfg_->cqi_cfg.mode, rrc_cfg_cqi_mode_text, RRC_CFG_CQI_MODE_N_ITEMS));
cqi_report_cnfg.add_field(new parser::field<uint32>("period", &rrc_cfg_->cqi_cfg.period)); cqi_report_cnfg.add_field(new parser::field<uint32>("period", &rrc_cfg_->cqi_cfg.period));
cqi_report_cnfg.add_field(new parser::field<uint32>("m_ri", &rrc_cfg_->cqi_cfg.m_ri)); cqi_report_cnfg.add_field(new parser::field<uint32>("m_ri", &rrc_cfg_->cqi_cfg.m_ri));
cqi_report_cnfg.add_field(new parser::field<uint32>("nof_prb", &rrc_cfg_->cqi_cfg.nof_prb));
cqi_report_cnfg.add_field( cqi_report_cnfg.add_field(
new parser::field<uint32>("subband_k", &rrc_cfg_->cqi_cfg.subband_k, &rrc_cfg_->cqi_cfg.is_subband_enabled)); new parser::field<uint32>("subband_k", &rrc_cfg_->cqi_cfg.subband_k, &rrc_cfg_->cqi_cfg.is_subband_enabled));
cqi_report_cnfg.add_field(new parser::field<bool>("simultaneousAckCQI", &rrc_cfg_->cqi_cfg.simultaneousAckCQI)); cqi_report_cnfg.add_field(new parser::field<bool>("simultaneousAckCQI", &rrc_cfg_->cqi_cfg.simultaneousAckCQI));
@ -1227,7 +1226,8 @@ int set_derived_args(all_args_t* args_, rrc_cfg_t* rrc_cfg_, phy_cfg_t* phy_cfg_
} }
// Check PUCCH and PRACH configuration // Check PUCCH and PRACH configuration
uint32_t nrb_pucch = std::max(rrc_cfg_->sr_cfg.nof_prb, rrc_cfg_->cqi_cfg.nof_prb); uint32_t nrb_pucch =
std::max(rrc_cfg_->sr_cfg.nof_prb, (uint32_t)rrc_cfg_->sibs[1].sib2().rr_cfg_common.pucch_cfg_common.nrb_cqi);
uint32_t prach_freq_offset = rrc_cfg_->sibs[1].sib2().rr_cfg_common.prach_cfg.prach_cfg_info.prach_freq_offset; uint32_t prach_freq_offset = rrc_cfg_->sibs[1].sib2().rr_cfg_common.prach_cfg.prach_cfg_info.prach_freq_offset;
if (args_->enb.n_prb > 6) { if (args_->enb.n_prb > 6) {
uint32_t lower_bound = nrb_pucch; uint32_t lower_bound = nrb_pucch;

View File

@ -703,7 +703,7 @@ void rrc::config_mac()
item.n1pucch_an = cfg.sibs[1].sib2().rr_cfg_common.pucch_cfg_common.n1_pucch_an; item.n1pucch_an = cfg.sibs[1].sib2().rr_cfg_common.pucch_cfg_common.n1_pucch_an;
item.nrb_cqi = cfg.sibs[1].sib2().rr_cfg_common.pucch_cfg_common.nrb_cqi; item.nrb_cqi = cfg.sibs[1].sib2().rr_cfg_common.pucch_cfg_common.nrb_cqi;
item.nrb_pucch = SRSRAN_MAX(cfg.sr_cfg.nof_prb, cfg.cqi_cfg.nof_prb); item.nrb_pucch = SRSRAN_MAX(cfg.sr_cfg.nof_prb, item.nrb_cqi);
logger.info("Allocating %d PRBs for PUCCH", item.nrb_pucch); logger.info("Allocating %d PRBs for PUCCH", item.nrb_pucch);
// Copy base cell configuration // Copy base cell configuration

View File

@ -355,17 +355,13 @@ bool ue_cell_ded_list::alloc_cqi_resources(uint32_t ue_cc_idx, uint32_t period)
return false; return false;
} }
const auto& pcell_pucch_cfg = get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->sib2.rr_cfg_common.pucch_cfg_common; uint32_t max_users = 12;
uint32_t c = SRSRAN_CP_ISNORM(cfg.cell.cp) ? 3 : 2;
uint32_t delta_pucch_shift = pcell_pucch_cfg.delta_pucch_shift.to_number();
delta_pucch_shift = SRSRAN_MAX(1, delta_pucch_shift);
uint32_t max_users = 12 * c / delta_pucch_shift;
// Allocate all CQI resources for all carriers now // Allocate all CQI resources for all carriers now
// Find freq-time resources with least number of users // Find freq-time resources with least number of users
int i_min = 0, j_min = 0; int i_min = 0, j_min = 0;
uint32_t min_users = std::numeric_limits<uint32_t>::max(); uint32_t min_users = std::numeric_limits<uint32_t>::max();
for (uint32_t i = 0; i < cfg.cqi_cfg.nof_prb; i++) { for (uint32_t i = 0; i < cfg.sibs[1].sib2().rr_cfg_common.pucch_cfg_common.nrb_cqi; i++) {
for (uint32_t j = 0; j < cfg.cqi_cfg.nof_subframes; j++) { for (uint32_t j = 0; j < cfg.cqi_cfg.nof_subframes; j++) {
if (pucch_res->cqi_sched.nof_users[i][j] < min_users) { if (pucch_res->cqi_sched.nof_users[i][j] < min_users) {
i_min = i; i_min = i;
@ -410,9 +406,6 @@ bool ue_cell_ded_list::alloc_cqi_resources(uint32_t ue_cc_idx, uint32_t period)
// Compute n_pucch_2 // Compute n_pucch_2
uint16_t n_pucch = i_min * max_users + pucch_res->cqi_sched.nof_users[i_min][j_min]; uint16_t n_pucch = i_min * max_users + pucch_res->cqi_sched.nof_users[i_min][j_min];
if (pcell_pucch_cfg.ncs_an) {
n_pucch += pcell_pucch_cfg.ncs_an;
}
cell->cqi_res_present = true; cell->cqi_res_present = true;
cell->cqi_res.pmi_idx = pmi_idx; cell->cqi_res.pmi_idx = pmi_idx;

View File

@ -222,7 +222,7 @@ void rrc_nr::config_mac()
} }
// PUCCH width // PUCCH width
cell_cfg.nrb_pucch = SRSRAN_MAX(cfg.sr_cfg.nof_prb, cfg.cqi_cfg.nof_prb); cell_cfg.nrb_pucch = SRSRAN_MAX(cfg.sr_cfg.nof_prb, /* TODO: where is n_rb2 in NR? */ 0);
logger.info("Allocating %d PRBs for PUCCH", cell_cfg.nrb_pucch); logger.info("Allocating %d PRBs for PUCCH", cell_cfg.nrb_pucch);
// Copy Cell configuration // Copy Cell configuration