mirror of https://github.com/pvnis/srsRAN_4G.git
sched,nr: implementation of slot grid class
parent
4fa27f3841
commit
407da794e1
@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSRAN_SCHED_NR_RB_GRID_H
|
||||||
|
#define SRSRAN_SCHED_NR_RB_GRID_H
|
||||||
|
|
||||||
|
#include "sched_nr_interface.h"
|
||||||
|
#include "sched_nr_ue.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
namespace sched_nr_impl {
|
||||||
|
|
||||||
|
class slot_grid
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit slot_grid(uint32_t cc, const sched_nr_cfg& cfg_);
|
||||||
|
void new_tti(tti_point tti_rx_, sched_nr_res_t& sched_res_);
|
||||||
|
bool alloc_pdsch(slot_ue& ue, const rbgmask_t& dl_mask);
|
||||||
|
bool alloc_pusch(slot_ue& ue, const rbgmask_t& dl_mask);
|
||||||
|
|
||||||
|
void generate_dcis();
|
||||||
|
|
||||||
|
tti_point tti_tx_dl() const { return tti_rx + TX_ENB_DELAY; }
|
||||||
|
tti_point tti_tx_ul() const { return tti_tx_dl() + K2; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
static const size_t K0 = 0, K1 = 4, K2 = 4;
|
||||||
|
const uint32_t cc;
|
||||||
|
const sched_nr_cfg& cfg;
|
||||||
|
|
||||||
|
tti_point tti_rx;
|
||||||
|
rbgmask_t pdsch_mask;
|
||||||
|
rbgmask_t pusch_mask;
|
||||||
|
sched_nr_res_t* sched_res = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sched_nr_impl
|
||||||
|
} // namespace srsenb
|
||||||
|
|
||||||
|
#endif // SRSRAN_SCHED_NR_RB_GRID_H
|
@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "srsenb/hdr/stack/mac/nr/sched_nr_harq.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
namespace sched_nr_impl {
|
||||||
|
|
||||||
|
bool harq_proc::new_tx(tti_point tti_tx_, const rbgmask_t& rbgmask_, uint32_t mcs, uint32_t ack_delay_)
|
||||||
|
{
|
||||||
|
if (not empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tti_tx = tti_tx_;
|
||||||
|
ack_delay = ack_delay_;
|
||||||
|
rbgmask = rbgmask_;
|
||||||
|
tb[0].mcs = mcs;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
harq_entity::harq_entity()
|
||||||
|
{
|
||||||
|
dl_harqs.reserve(SCHED_NR_NOF_HARQS);
|
||||||
|
ul_harqs.reserve(SCHED_NR_NOF_HARQS);
|
||||||
|
for (uint32_t pid = 0; pid < SCHED_NR_NOF_HARQS; ++pid) {
|
||||||
|
dl_harqs.emplace_back(pid);
|
||||||
|
ul_harqs.emplace_back(pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void harq_entity::new_tti(tti_point tti_rx_)
|
||||||
|
{
|
||||||
|
tti_rx = tti_rx_;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace sched_nr_impl
|
||||||
|
} // namespace srsenb
|
@ -0,0 +1,80 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "srsenb/hdr/stack/mac/nr/sched_nr_rb_grid.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
namespace sched_nr_impl {
|
||||||
|
|
||||||
|
slot_grid::slot_grid(uint32_t cc_, const sched_nr_cfg& cfg_) : cc(cc_), cfg(cfg_) {}
|
||||||
|
|
||||||
|
void slot_grid::new_tti(tti_point tti_rx_, sched_nr_res_t& sched_res_)
|
||||||
|
{
|
||||||
|
tti_rx = tti_rx_;
|
||||||
|
sched_res = &sched_res_;
|
||||||
|
|
||||||
|
pdsch_mask.reset();
|
||||||
|
pusch_mask.reset();
|
||||||
|
*sched_res = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
bool slot_grid::alloc_pdsch(slot_ue& ue, const rbgmask_t& dl_mask)
|
||||||
|
{
|
||||||
|
const uint32_t tbs = 100, mcs = 20;
|
||||||
|
if (ue.h_dl == nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((pdsch_mask & dl_mask).any()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (sched_res->dl_res.data.full()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (not ue.h_dl->new_tx(tti_tx_dl(), dl_mask, mcs, K1)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdsch_mask |= dl_mask;
|
||||||
|
sched_res->dl_res.data.emplace_back();
|
||||||
|
sched_nr_data_t& data = sched_res->dl_res.data.back();
|
||||||
|
data.tbs.resize(1);
|
||||||
|
data.tbs[0] = tbs;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool slot_grid::alloc_pusch(slot_ue& ue, const rbgmask_t& ul_mask)
|
||||||
|
{
|
||||||
|
const uint32_t tbs = 100, mcs = 20;
|
||||||
|
if ((pusch_mask & ul_mask).any()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (sched_res->ul_res.pusch.full()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (not ue.h_ul->new_tx(tti_tx_ul(), ul_mask, mcs, 0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pusch_mask |= ul_mask;
|
||||||
|
sched_res->ul_res.pusch.emplace_back();
|
||||||
|
sched_nr_data_t& data = sched_res->ul_res.pusch.back();
|
||||||
|
data.tbs.resize(1);
|
||||||
|
data.tbs[0] = tbs;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void slot_grid::generate_dcis() {}
|
||||||
|
|
||||||
|
} // namespace sched_nr_impl
|
||||||
|
} // namespace srsenb
|
Loading…
Reference in New Issue