cuMAC-CP API 消息#

本节介绍 cuMAC-CP API 消息格式。它定义了 PHY API 消息头、消息体以及与 cuMAC-CP API 关联的错误代码。

cuMAC-CP API 消息包括 2 种类型:配置程序消息和时隙程序消息。这两种消息都以如下表所示的通用头开始

字段

类型

描述

message_count

uint8_t

PHY API 消息中包含的消息数

handle_id

uint8_t

不透明句柄(目的未定义,但用法可能包括 PHY ID 或载波 ID)

type_id

uint16_t

消息类型 ID

body_len

uint32_t

消息体长度(字节)

所有消息 ID 如下所示。

消息

消息体定义

CONFIG.request

0x02

CONFIG.response

0x03

START.request

0x04

STOP.request

0x05

STOP.response

0x06

ERROR.indication

0x07

TODO

START.response

0x08

保留

0x09-0x7F

SCH_TTI.request

0x82

TTI_END

0x83

SCH_TTI.response

0x8F

TTI_ERR.indication

0x90

TODO

保留

0x91-0xFF

配置程序消息#

配置程序消息后跟配置消息体。

CONFIG.request#

CONFIG.request 消息体在每个小区的 cuMAC 消息定义中定义。

字段

类型

描述

nMaxCell

uint8_t

小区组中最大小区数的常整数。

值:0 -> 255

nMaxActUePerCell

uint16_t

每个小区最大活动 UE 数的常整数。

值:0 -> 65535

nMaxSchUePerCell

uint8_t

每个小区每个 TTI 可以调度的最大 UE 数的常整数。

值:0 -> 255

nMaxPrg

uint16_t

每个小区中分配的最大 PRG 数的常整数

值:0 -> 65535

nPrbPerPrg

uint8_t

每个 PRG(PRB 组)的 PRB 数的常整数

值:0 -> 255

nMaxBsAnt

uint8_t

最大 BS 天线端口数的常整数。

值:0 -> 255

nMaxUeAnt

uint8_t

最大 UE 天线端口数的常整数。

值:0 -> 255

scSpacing

uint32_t

载波的子载波间隔。

值:15000、30000、60000、120000 (Hz)

allocType

uint8_t

类型 0 或类型 1 PRG 分配的指示符。

0:类型 0 分配

1:类型 1 分配

precoderType

uint8_t

预编码器类型的指示符。

0:无预编码

1:SVD 预编码

receiverType

uint8_t

接收器类型的指示符。

0:MMSE 接收器

1:MMSE-IRC 接收器

colMajChanAccess

uint8_t

指示估计的窄带 SRS 信道矩阵是以列优先顺序还是行优先顺序存储。

0:行优先

1:列优先

betaCoeff

float

用于调整多小区调度中小区边缘 UE 性能的系数。

值:非负实数。默认值为 1.0,表示纯比例公平调度。

sinValThr

float

层选择的奇异值阈值。

值:(0, 1) 之间。默认值为 0.1

corrThr

float

层选择的信道向量相关值阈值。

值:(0, 1) 之间。默认值为 0.5

prioWeightStep

uint16_t

如果 UE 未被调度,则每个 TTI 的 UE 优先级权重增量的步长大小。用于基于优先级的 UE 选择。

值:0 -> 65535。默认值为 100

CONFIG.response#

消息体如下所示。

字段

类型

描述

error_code

uint8_t

0:无错误。其他:待定

START.request#

消息体如下所示。

字段

类型

描述

start_param

uint8_t

保留,尚未使用。

START.response#

消息体如下所示。

字段

类型

描述

error_code

uint8_t

0:无错误。其他:待定

时隙程序消息#

时隙程序具有如下表所示的附加 SFN/SLOT 标头,然后是时隙消息体。

名称

类型

描述

sfn

uint16_t

SFN 编号

slot

uint16_t

SLOT 编号

SCH_TTI.request#

字段

类型

描述

taskBitMask

uint32_t

指示要调度的 cuMAC 任务。每个位代表 1 种任务类型

0x01:multiCellUeSelection

0x02:multiCellScheduler

0x04:multiCellLayerSel

0x08:mcsSelectionLUT

值:0x1、0x3、0x7、0xF

cellID

uint16_t

小区 ID。

值:0 -> 65535

ULDLSch

uint8_t

UL/DL 调度的指示。

0:UL 调度

1:DL 调度

nActiveUe

uint16_t

小区中活动 UE 的总数。

值:0 -> 65535

nSrsUe

uint16_t

小区中已刷新 SRS 信道估计的 UE 数。

值:0 -> 65535

nPrbGrp

uint16_t

当前 TTI 可分配的 PRG 数,不包括为 HARQ 重传保留的 PRG。

值:0 -> nMaxPrg

nBsAnt

uint8_t

BS 天线端口数。

值:0 -> nMaxBsAnt

nUeAnt

uint8_t

UE 天线端口数。

值:0 -> nMaxUeAnt

sigmaSqrd

float

噪声方差。

值:以瓦特为单位的噪声方差值

offsets

struct

每个数据的缓冲区偏移量

0xFFFFFFFF:未使用缓冲区(无效)。

其他:基于 nvipc data_buf 的缓冲区偏移量

数据缓冲区填充在 NVIPC DATA 缓冲区中。“offsets”结构定义了所有缓冲区的缓冲区偏移量。

注意:并非所有缓冲区都使用。未使用的缓冲区的偏移量应设置为 0xFFFFFFFF。对于每种任务类型,所需缓冲区在下表中列出。

偏移量名称

偏移量类型

缓冲区描述

CRNTI

uint32_t

小区中所有活动 UE 的 C-RNTI

srsCRNTI

uint32_t

小区中已刷新 SRS 信道估计的 UE 的 C-RNTI。

prgMsk

uint32_t

每个 PRG 的可用性位图,用于分配

postEqSinr

uint32_t

小区中所有活动 UE 的每个 PRG、每层后均衡器 SINR 数组

wbSinr

uint32_t

小区中所有活动 UE 的宽带每层后均衡器 SINR 数组

estH_fr

uint32_t

对于 FP32。小区中所有活动 UE 的子带(每 PRG)SRS 信道估计系数数组

estH_fr_half

uint32_t

对于 FP16。小区中所有活动 UE 的子带(每 PRG)SRS 信道估计系数数组

prdMat

uint32_t

小区中所有活动 UE 的预编码器/波束成形权重数组

detMat

uint32_t

小区中所有活动 UE 的检测器/波束成形权重数组

sinVal

uint32_t

从信道矩阵的 SVD 获得的每个 UE、每个 PRG、每层奇异值数组

avgRatesActUe

uint32_t

小区中所有活动 UE 的长期平均数据速率数组

prioWeightActUe

uint32_t

用于基于优先级的 UE 选择。小区中所有活动 UE 的优先级权重

tbErrLastActUe

uint32_t

小区中所有活动 UE 的 TB 解码错误指示符

newDataActUe

uint32_t

小区中所有活动 UE 的初始传输/重传指示符

allocSolLastTxActUe

uint32_t

小区中所有活动 UE 的上次传输的 PRG 分配解决方案

mcsSelSolLastTxActUe

uint32_t

小区中所有活动 UE 的上次传输的 MCS 选择解决方案

layerSelSolLastTxActUe

uint32_t

小区中所有活动 UE 的上次传输的层选择解决方案

数据缓冲区详细信息如下所述。

字段

类型

描述

CRNTI

uint16_t[nActiveUe]

小区中所有活动 UE 的 C-RNTI。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

CRNTI[uIdx] 是第 uIdx 个活动 UE 的 C-RNTI。

srsCRNTI

uint16_t[nSrsUe]

小区中已刷新 SRS 信道估计的 UE 的 C-RNTI。

每个元素的值

将 uIdx = 0, 1, …, nSrsUe-1 表示为小区中具有刷新 SRS 的 UE 的索引。

srsCRNTI[uIdx] 是第 uIdx 个 UE 的 C-RNTI。

prgMsk

uint8_t[nPrbGrp]

位图,指示每个 PRG 的可用性以进行分配。

每个元素的值

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引

prgMsk[prgIdx] 是第 prgIdx 个 PRG 的可用性指示符。

0 - 不可用,1 - 可用

postEqSinr

float[nActiveUe* nPrbGrp*nUeAnt]

小区中所有活动 UE 的每个 PRG、每层后均衡器 SINR 数组。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

将 layerIdx = 0, 1, …, nUeAnt-1 表示为层索引。

post EqSinr[uIdx*nPrbGrp*nUeAnt + prgIdx*nUeAnt + layerIdx] 是第 uIdx 个活动 UE 在第 prgIdx 个 PRG 和第 layerIdx 层上的后均衡器 SINR。

wbSinr

float[nActiveUe*nUeAnt]

小区中所有活动 UE 的宽带每层后均衡器 SINR 数组。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

将 layerIdx = 0, 1, …, nUeAnt-1 表示为层索引。

wbSinr[uIdx*nUeAnt + layerIdx] 是第 uIdx 个活动 UE 在第 layerIdx 层上的宽带后均衡器 SINR。

对于 FP32

estH_fr

对于 FP16

estH_fr_half

对于 FP32

cuComplex[nSrsUe*nPrbGrp* nBsAnt*nUeAnt]

对于 FP16

__nv_bfloat162[nSrsUe* nPrbGrp*nBsAnt*nUeAnt]

小区中刷新的子带(每 PRG)SRS 信道估计数组。

每个元素的值

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

将 uIdx = 0, 1, …, nSrsUe-1 表示为小区中具有刷新 SRS 的 UE 的索引。

将 bsAntIdx = 0, 1, …, nBsAnt-1 表示为 BS 天线端口索引

将 ueAntIdx = 0, 1, …, nUeAnt 表示为 UE 天线端口索引

estH_fr[p rgIdx*nSrsUe*nBsAnt*nUeAnt + uIdx*nBsAnt*nUeAnt + bsAntIdx*nUeAnt + ueAntIdx] 是第 uIdx 个 UE 在第 prgIdx 个 PRG、第 bsAntIdx 个 BS 天线端口和第 ueAntIdx 个 UE 天线端口上的复信道系数。

(以上也适用于 FP16 版本)

prdMat

对于 DL

cuComplex[nSrsUe*nPrbGrp* nBsAnt*nBsAnt]

对于 UL

cuComplex[nSrsUe*nPrbGrp* nUeAnt*nUeAnt]

小区中已刷新 SRS 信道估计的 UE 的预编码器/波束成形权重数组。

每个元素的值

(对于 DL)

将 uIdx = 0, 1, …, nSrsUe-1 表示为小区中具有刷新 SRS 的 UE 的索引。

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

将 inPortIdx = 0, 1, …, nBsAnt-1 表示为预编码器输入端口索引

将 outPortIdx = 0, 1, …, nBsAnt-1 表示为预编码器输出端口索引

prdMat[ uIdx*nPrbGrp*nBsAnt*nBsAnt + prgIdx* nBsAnt*nBsAnt + inPortIdx*nBsAnt + outPortIdx] 是第 uIdx 个 UE 在第 prgIdx 个 PRG 上且在第 inPortIdx 个输入端口和第 outPortIdx 个输出端口之间的预编码器/波束成形权重。

(对于 UL,在以上描述中将 nBsAnt 替换为 nUeAnt)

detMat

对于 DL

cuComplex[nSrsUe* nPrbGrp*nUeAnt*nUeAnt]

对于 UL

cuComplex[nSrsUe* nPrbGrp*nBsAnt*nBsAnt]

小区中已刷新 SRS 信道估计的 UE 的检测器/波束成形权重数组。

每个元素的值

(对于 DL)

将 uIdx = 0, 1, …, nSrsUe-1 表示为小区中具有刷新 SRS 的 UE 的索引。

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

将 inPortIdx = 0, 1, …, nUeAnt-1 表示为检测器输入端口索引。

将 outPortIdx = 0, 1, …, nUeAnt-1 表示为检测器输出端口索引。

detMat[ uIdx*nPrbGrp*nUeAnt*nUeAnt + prgIdx*nUeAnt*nUeAnt + inPortIdx*nUeAnt + outPortIdx] 是第 uIdx 个 UE 在第 prgIdx 个 PRG 上且在第 inPortIdx 个输入端口和第 outPortIdx 个输出端口之间的检测器权重。

(对于 UL,在以上描述中将 nUeAnt 替换为 nBsAnt)

sinVal

float[nSrsUe*nPrbGrp*nUeAnt]

从刷新的 SRS 信道矩阵的 SVD 获得的每个 UE、每个 PRG、每层奇异值数组。

每个元素的值

将 uIdx = 0, 1, …, nSrsUe-1 表示为小区中具有刷新 SRS 的 UE 的索引。

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

将 layerIdx = 0, 1, …, nUeAnt-1 表示为层索引。

sinVal[uIdx*nPrbGrp*nUeAnt + prgIdx*nUeAnt + layerIdx] 是第 uIdx 个 UE 在第 prgIdx 个 PRG 上的第 layerIdx 个最大奇异值。

对于每个 UE 和每个 PRG,奇异值按降序存储。

avgRatesActUe

float[nActiveUe]

小区中所有活动 UE 的长期平均数据速率数组。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

avgRatesActUe[uIdx] 是第 uIdx 个活动 UE 在小区中的长期平均吞吐量。

prioWeightActUe

uint16_t[nActiveUe]

用于基于优先级的 UE 选择。小区中所有活动 UE 的优先级权重。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

prioWeightActUe[uIdx] 是第 uIdx 个活动 UE 的优先级权重。

0xFFFF 表示无效元素。

tbErrLastActUe

int8_t[nActiveUe]

小区中所有活动 UE 的 TB 解码错误指示符。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

tbErrLastActUe[uIdx] 是第 uIdx 个活动 UE 的 TB 解码错误指示符

-1 - 上次传输不是新传输(是重传)

0 - 正确解码

1 - 解码错误

** 注意,如果 UE 的上次传输不是新传输,则该 UE 的 tbErrLastActUe 应设置为 -1。

newDataActUe

int8_t[nActiveUe]

小区中所有活动 UE 的初始传输/重传指示符。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

newDataActUe[uIdx] 是第 uIdx 个活动 UE 在小区中的初始传输/重传指示符。

0 – 重传

1 - 新数据/初始传输

-1 表示无效元素

allocSolLastTxActUe

对于类型 0 PRG 分配

int16_t[nPrbGrp]

对于类型 1 PRG 分配

int16_t[2*nActiveUe]

小区中所有活动 UE 的上次传输的 PRG 分配解决方案。

每个元素的值

对于类型 0 PRG 分配

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

allocSolLastTxActUe[prgIdx] 指示分配了第 prgIdx 个 PRG 的活动 UE 索引(0、1、…、nActiveUe-1)。

-1 表示给定的 PRG 未分配给任何 UE。

对于类型 1 PRG 分配

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

allocSolLastTxActUe[2*uIdx] 是第 uIdx 个活动 UE 的起始 PRG 索引。

allocSolLastTxActUe[2*uIdx + 1] 是第 uIdx 个活动 UE 的结束 PRG 索引。

-1 表示给定的 UE 未分配给任何 PRG。

mcsSelSolLastTxActUe

int16_t[nActiveUe]

小区中所有活动 UE 的上次传输的 MCS 选择解决方案。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

mcsSelSolLastTxActUe[uIdx] 指示第 uIdx 个活动 UE 在小区中的 MCS 级别。

每个元素的范围

0、1、…、27(目前仅支持表 5.1.3.1-2:MCS 索引表 2,3GPP TS 38.214)。

-1 表示元素无效。

layerSelSolLastTxActUe

uint8_t[nActiveUe]

小区中所有活动 UE 的上次传输的层选择解决方案。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

layerSelSolLastTxActUe[uIdx] 指示为第 uIdx 个活动 UE 在小区中选择的层数。

每个元素的范围:0、1、…、nUeAnt-1

所选层具有从最大值开始降序排列的奇异值。

以下是每种 cuMAC 任务类型所需的数据缓冲区,由 taskBitMask 定义。

任务类型

cuMAC 模块名称

L2 传递到 cuMAC-CP 的所需数据

0x01

multiCellUeSelection

prgMsk、wbSinr、avgRatesActUe。

0x02

multiCellScheduler

所有 TaskType=0x01 缓冲区以及 postEqSinr、sinVal、estH_fr、detMat、prdMat。

0x04

multiCellLayerSel

所有 TaskType=0x02 缓冲区。

0x08

mcsSelectionLUT

所有 TaskType=0x04 缓冲区以及 tbErrLastActUe。

TTI_END#

名称

类型

描述

end_param

uint8_t

保留,尚未使用。

SCH_TTI.response#

此消息用于将调度结果返回到 L2。结果填充在 NVIPC DATA 缓冲区中,

名称

类型

描述

offsets

struct

每个数据的缓冲区偏移量

0xFFFFFFFF:未使用缓冲区(无效)。

其他:基于 nvipc data_buf 的缓冲区偏移量

数据缓冲区填充在 NVIPC DATA 缓冲区中。“offsets”结构定义了所有缓冲区的缓冲区偏移量。

注意:并非所有缓冲区都使用。未使用的缓冲区的偏移量应设置为 0xFFFFFFFF。

偏移量名称

偏移量类型

缓冲区描述

setSchdUePerCellTTI

uint32_t

小区中选定 UE 的 ID 集

allocSol

uint32_t

小区中所有活动 UE 的 PRB 组分配解决方案

layerSelSol

uint32_t

小区中所有活动 UE 的层选择解决方案

mcsSelSol

uint32_t

小区中所有活动 UE 的 MCS 选择解决方案

数据缓冲区详细信息如下所示。

字段

类型

描述

setSchdUePerCellTTI

uint16_t [nMaxSchUePerCell]

小区中选定 UE 的 ID 集。

每个元素的值

将 i = 0、1、…、nMaxSchUePerCell-1 表示为小区中第 i 个选定 UE。

setSchdUePerCellTTI[i] 在 {0、1、…、nActiveUe-1} 范围内,表示第 i 个选定 UE 的活动 UE 索引。

allocSol

对于类型 0 PRG 分配

int16_t[nPrbGrp]

对于类型 1 PRG 分配

int16_t[2*nActiveUe]

小区中所有活动 UE 的 PRB 组分配解决方案。

每个元素的值

对于类型 0 PRG 分配

将 prgIdx = 0, 1, …, nPrbGrp-1 表示为 PRG 索引。

allocSol[prgIdx] 指示分配了第 prgIdx 个 PRG 的活动 UE 索引(0、1、…、nActiveUe-1)。

-1 表示给定的 PRG 未分配给任何 UE。

对于类型 1 PRG 分配

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

allocSol[2*uIdx] 是第 uIdx 个活动 UE 的起始 PRG 索引。

allocSol[2*uIdx + 1] 是第 uIdx 个活动 UE 的结束 PRG 索引。

-1 表示给定的 UE 未分配给任何 PRG。

mcsSelSol

int16_t[nActiveUe]

小区中所有活动 UE 的 MCS 选择解决方案。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

mcsSelSol[uIdx] 指示第 uIdx 个活动 UE 在小区中的 MCS 级别。

每个元素的范围

0、1、…、27(目前仅支持表 5.1.3.1-2:MCS 索引表 2,3GPP TS 38.214)。

-1 表示元素无效。

layerSelSol

uint8_t[nActiveUe]

小区中所有活动 UE 的层选择解决方案。

每个元素的值

将 uIdx = 0, 1, …, nActiveUe-1 表示为小区中的活动 UE 索引。

layerSelSol[uIdx] 指示为第 uIdx 个活动 UE 在小区中选择的层数。

每个元素的范围:0、1、…、nUeAnt-1

所选层具有从最大值开始降序排列的奇异值。

TTI_ERR.indication#

名称

类型

描述

msg_id

in t32_t

SFN 编号

error_code

in t32_t

0:无错误。其他:待定

reason_code

in t32_t

0:无错误。其他:待定