CNA 寄存器块(Convolution Neural-network Accelerator)
基址:CORE_BASE + 0x1000 | 地址范围:0x1000 ~ 0x1FFF
来源:RK3588 TRM §36.4.3 Detail Registers Description
CNA 是卷积加速单元,包含特征数据加载、权重加载、384KB 内部缓冲(CBUF)、序列扫描控制器(CSC)。
RKNN_cna_s_status(0x1000)
执行器状态寄存器(只读)。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:18 | RO | 0x0 | — | 保留 |
| 17:16 | RO | 0x0 | status_1 | 执行器 1 状态。0:空闲;1:正在执行;2:正在执行且执行器 1 等待执行;3:保留 |
| 15:2 | RO | 0x0 | — | 保留 |
| 1:0 | RO | 0x0 | status_0 | 执行器 0 状态。0:空闲;1:正在执行;2:正在执行且执行器 1 等待执行;3:保留 |
RKNN_cna_s_pointer(0x1004)
寄存器组指针与 ping-pong 控制。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:17 | RO | 0x0 | — | 保留 |
| 16 | RO | 0x0 | executer | 当前使用的寄存器组。0:执行器组 0;1:执行器组 1 |
| 15:6 | RO | 0x0 | — | 保留 |
| 5 | W1C | 0x0 | executer_pp_clear | 清除执行器组指针,写 1 清零 |
| 4 | W1C | 0x0 | pointer_pp_clear | 清除寄存器组指针,写 1 清零 |
| 3 | RW | 0x0 | pointer_pp_mode | Ping-pong 模式。0:按执行器切换(executer 0 完成后切到 1);1:按指针切换(pointer 0 完成后切到 1) |
| 2 | RW | 0x0 | executer_pp_en | 执行器组 ping-pong 使能。0:禁用;1:使能 |
| 1 | RW | 0x0 | pointer_pp_en | 寄存器组 ping-pong 使能。0:禁用;1:使能 |
| 0 | RW | 0x0 | pointer | 当前待设置的寄存器组。0:组 0;1:组 1 |
RKNN_cna_operation_enable(0x1008)
操作使能寄存器。写入此寄存器将触发 CNA 模块开始执行。此寄存器及之后的寄存器均为 ping-pong 影子寄存器。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:1 | RO | 0x0 | — | 保留 |
| 0 | RW | 0x0 | op_en | CNA 操作使能。0:禁用;1:使能 |
RKNN_cna_conv_con1(0x100C)
卷积控制寄存器 1:精度、模式、反卷积等。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31 | RO | 0x0 | — | 保留 |
| 30 | RW | 0x0 | nonalign_dma | CNA DMA 非对齐模式。0:禁用;1:使能(ARGB 模式下请开启,使 DMA 连续取特征数据) |
| 29 | RW | 0x0 | group_line_off | 组行取数关闭。0:使能组行取数;1:禁用(仅影响取数效率) |
| 28:17 | RO | 0x0 | — | 保留 |
| 16 | RW | 0x0 | deconv | 反卷积使能。0:禁用;1:使能 |
| 15:12 | RW | 0x0 | argb_in | 非对齐通道层控制。8:1 通道输入;9:2 通道;10:3 通道;11:4 通道 |
| 11:10 | RO | 0x0 | — | 保留 |
| 9:7 | RW | 0x0 | proc_precision | 处理精度。0:int8;1:int16;2:fp16;3:bf16;6:int4;7:tf32 |
| 6:4 | RW | 0x0 | in_precision | 输入精度。编码同 proc_precision |
| 3:0 | RW | 0x0 | conv_mode | 卷积模式。0:直接卷积;3:深度可分离卷积(Depthwise) |
RKNN_cna_conv_con2(0x1010)
卷积控制寄存器 2:kernel 分组、feature grain、CSC 控制。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:24 | RO | 0x0 | — | 保留 |
| 23:16 | RW | 0x0 | kernel_group | Kernel 分组数。int8 下 32 个 kernel 为 1 组,int16/fp16 下 16 个为 1 组。例:256 个 kernel,int8 下设为 256/32−1=7 |
| 15:14 | RO | 0x0 | — | 保留 |
| 13:4 | RW | 0x0 | feature_grains | 卷积开始前需缓冲的特征数据行数。建议设为 y_stride + weight_height + 1 |
| 3 | RO | 0x0 | — | 保留 |
| 2 | RW | 0x0 | csc_wo_en | 权重扫描控制。0:使能 CSC 输出权重到 CORE;1:禁用 |
| 1 | RW | 0x0 | csc_do_en | 数据扫描控制。0:使能 CSC 输出特征数据到 CORE;1:禁用 |
| 0 | RW | 0x0 | cmd_fifo_srst | 命令 FIFO 软复位(调试用) |
RKNN_cna_conv_con3(0x1014)
卷积控制寄存器 3:多核模式、空洞卷积、反卷积步长、卷积步长。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31 | RO | 0x0 | — | 保留 |
| 30:28 | RW | 0x0 | nn_mode | 多核协作模式。0:32×32(单核);1:64×32;2:96×32;4:32×64;5:32×96。单核模式保持 0 |
| 27:26 | RO | 0x0 | — | 保留 |
| 25:21 | RW | 0x0 | atrous_y_dilation | 空洞卷积 Y 方向膨胀值(列方向两像素间插入的 pad 数) |
| 20:16 | RW | 0x0 | atrous_x_dilation | 空洞卷积 X 方向膨胀值(行方向两像素间插入的 pad 数)。>0 时启用空洞卷积 |
| 15:14 | RO | 0x0 | — | 保留 |
| 13:11 | RW | 0x0 | deconv_y_stride | 反卷积 Y 步长 |
| 10:8 | RW | 0x0 | deconv_x_stride | 反卷积 X 步长 |
| 7:6 | RO | 0x0 | — | 保留 |
| 5:3 | RW | 0x0 | conv_y_stride | 卷积 Y 步长 |
| 2:0 | RW | 0x0 | conv_x_stride | 卷积 X 步长 |
RKNN_cna_data_size0(0x1020)
输入特征数据宽高。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:27 | RO | 0x0 | — | 保留 |
| 26:16 | RW | 0x0 | datain_width | 输入特征数据宽度 |
| 15:11 | RO | 0x0 | — | 保留 |
| 10:0 | RW | 0x0 | datain_height | 输入特征数据高度 |
RKNN_cna_data_size1(0x1024)
输入特征数据通道数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:30 | RO | 0x0 | — | 保留 |
| 29:16 | RW | 0x0 | datain_channel_real | 真实通道数。当输入通道不是 8(int8)或 4(int16/fp16)的整数倍时,设置此字段 |
| 15:0 | RW | 0x0 | datain_channel | 输入通道数。int8 须为 8 的整数倍;int16/fp16 须为 4 的整数倍 |
RKNN_cna_data_size2(0x1028)
卷积后输出数据宽度。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:11 | RO | 0x0 | — | 保留 |
| 10:0 | RW | 0x0 | dataout_width | 卷积后数据宽度 |
RKNN_cna_data_size3(0x102C)
卷积后输出数据 surface 模式与总像素数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:24 | RO | 0x0 | — | 保留 |
| 23:22 | RW | 0x0 | surf_mode | Surface 串行模式。0/1:1 surf;2:2 surf;3:4 surf |
| 21:0 | RW | 0x0 | dataout_atomics | 卷积后输出总像素数 |
RKNN_cna_weight_size0(0x1030)
权重总字节数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | weight_bytes | 本次卷积的权重总字节数 |
RKNN_cna_weight_size1(0x1034)
单个 kernel 的权重字节数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:19 | RO | 0x0 | — | 保留 |
| 18:0 | RW | 0x0 | weight_bytes_per_kernel | 单个 kernel 的权重字节数 |
RKNN_cna_weight_size2(0x1038)
Kernel 宽高与数量。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:29 | RO | 0x0 | — | 保留 |
| 28:24 | RW | 0x0 | weight_width | Kernel 宽度 |
| 23:21 | RO | 0x0 | — | 保留 |
| 20:16 | RW | 0x0 | weight_height | Kernel 高度 |
| 15:14 | RO | 0x0 | — | 保留 |
| 13:0 | RW | 0x0 | weight_kernels | Kernel 数量 |
RKNN_cna_cbuf_con0(0x1040)
CBUF(内部缓冲)控制寄存器 0:数据/权重复用、Bank 分配。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:14 | RO | 0x0 | — | 保留 |
| 13 | RW | 0x0 | weight_reuse | 权重数据复用使能。0:禁用;1:使能,直接从内部缓冲取权重 |
| 12 | RW | 0x0 | data_reuse | 特征数据复用使能。0:禁用;1:使能,直接从内部缓冲取数据 |
| 11 | RO | 0x0 | — | 保留 |
| 10:8 | RW | 0x0 | fc_data_bank | FC 零跳过模式的特征数据 Bank 数。FC 零跳过模式设为 1,否则必须为 0 |
| 7:4 | RW | 0x0 | weight_bank | 权重数据占用的 Bank 数。1:Bank 7;2:Bank 6-7;…;7:Bank 1-7 |
| 3:0 | RW | 0x0 | data_bank | 特征数据占用的 Bank 数。0:Bank 0;1:Bank 0-1;…;6:Bank 0-6 |
RKNN_cna_cbuf_con1(0x1044)
CBUF 控制寄存器 1。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:13 | RO | 0x0 | — | 保留 |
| 12:0 | RW | 0x0 | data_entries | 存储一行特征图所需的 Bank 空间 |
RKNN_cna_cvt_con0(0x104C)
输入转换控制寄存器 0:CVT 截断值、符号、舍入、旁路。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:28 | RO | 0x0 | — | 保留 |
| 27:22 | RW | 0x0 | cvt_truncate_3 | CVT 截断值 3 |
| 21:16 | RW | 0x0 | cvt_truncate_2 | CVT 截断值 2 |
| 15:10 | RW | 0x0 | cvt_truncate_1 | CVT 截断值 1 |
| 9:4 | RW | 0x0 | cvt_truncate_0 | CVT 截断值 0 |
| 3 | RW | 0x0 | data_sign | 特征数据符号。0:无符号;1:有符号 |
| 2 | RW | 0x0 | round_type | 舍入类型。0:奇入偶不入;1:0.5 向上进 1 |
| 1 | RW | 0x0 | cvt_type | 转换运算顺序。0:先乘后加;1:先加后乘 |
| 0 | RW | 0x0 | cvt_bypass | 旁路输入转换。0:使能 CVT;1:禁用 CVT |
RKNN_cna_cvt_con1(0x1050)
输入转换控制 1:第 1 通道的 scale 和 offset。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RW | 0x0 | cvt_scale0 | CVT 缩放 0(第 1 通道乘法操作数) |
| 15:0 | RW | 0x0 | cvt_offset0 | CVT 偏移 0(第 1 通道加法操作数) |
RKNN_cna_cvt_con2(0x1054)
输入转换控制 2:第 2 通道。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RW | 0x0 | cvt_scale1 | CVT 缩放 1(第 2 通道乘法操作数) |
| 15:0 | RW | 0x0 | cvt_offset1 | CVT 偏移 1(第 2 通道加法操作数) |
RKNN_cna_cvt_con3(0x1058)
输入转换控制 3:第 3 通道。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RW | 0x0 | cvt_scale2 | CVT 缩放 2(第 3 通道乘法操作数) |
| 15:0 | RW | 0x0 | cvt_offset2 | CVT 偏移 2(第 3 通道加法操作数) |
RKNN_cna_cvt_con4(0x105C)
输入转换控制 4:第 4 通道。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RW | 0x0 | cvt_scale3 | CVT 缩放 3(第 4 通道乘法操作数) |
| 15:0 | RW | 0x0 | cvt_offset3 | CVT 偏移 3(第 4 通道加法操作数) |
RKNN_cna_fc_con0(0x1060)
全连接零跳过控制 0。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RW | 0x0 | fc_skip_data | FC 零跳过数据值(通常设为 0) |
| 15:1 | RO | 0x0 | — | 保留 |
| 0 | RW | 0x0 | fc_skip_en | FC 零跳过使能。0:禁用;1:使能。当某像素特征数据为 0 时,跳过对应权重的取数 |
RKNN_cna_fc_con1(0x1064)
全连接零跳过控制 1。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:17 | RO | 0x0 | — | 保留 |
| 16:0 | RW | 0x0 | data_offset | FC 零跳过模式下的特征数据偏移 |
RKNN_cna_pad_con0(0x1068)
Pad 控制寄存器 0。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:8 | RO | 0x0 | — | 保留 |
| 7:4 | RW | 0x0 | pad_left | 特征图左侧 pad 数 |
| 3:0 | RW | 0x0 | pad_top | 特征图顶部 pad 数 |
RKNN_cna_feature_data_addr(0x1070)
输入特征数据基址。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | feature_base_addr | 特征数据地址 |
RKNN_cna_fc_con2(0x1074)
权重数据地址偏移。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:17 | RO | 0x0 | — | 保留 |
| 16:0 | RW | 0x0 | weight_offset | 权重数据地址偏移 |
RKNN_cna_dma_con0(0x1078)
AXI DMA 控制寄存器 0:burst 长度。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31 | RW | 0x0 | ov4k_bypass | 超 4K burst 拆分。0:使能(将超 4K 的 burst 拆为 2 个);1:旁路 |
| 30:20 | RO | 0x0 | — | 保留 |
| 19:16 | RW | 0x0 | weight_burst_len | 权重 DMA AXI burst 长度。3:burst=4;7:burst=8;15:burst=16 |
| 15:4 | RO | 0x0 | — | 保留 |
| 3:0 | RW | 0x0 | data_burst_len | 特征 DMA AXI burst 长度。编码同上 |
RKNN_cna_dma_con1(0x107C)
行步长(Line stride)。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:28 | RO | 0x0 | — | 保留 |
| 27:0 | RW | 0x0 | line_stride | 行步长。含虚拟框(Virtual box)的特征宽度 |
RKNN_cna_dma_con2(0x1080)
Surface 步长。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:28 | RO | 0x0 | — | 保留 |
| 27:0 | RW | 0x0 | surf_stride | Surface 步长。特征图实际 surface 面积 |
RKNN_cna_fc_data_size0(0x1084)
FC 模式下 AXI DMA 的特征输入宽高。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:30 | RO | 0x0 | — | 保留 |
| 29:16 | RW | 0x0 | dma_width | AXI DMA 特征输入宽度 |
| 15:11 | RO | 0x0 | — | 保留 |
| 10:0 | RW | 0x0 | dma_height | AXI DMA 特征输入高度 |
RKNN_cna_fc_data_size1(0x1088)
FC 模式下 AXI DMA 的特征输入通道数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:16 | RO | 0x0 | — | 保留 |
| 15:0 | RW | 0x0 | dma_channel | AXI DMA 特征输入通道数 |
RKNN_cna_clk_gate(0x1090)
时钟门控控制寄存器。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:5 | RO | 0x0 | — | 保留 |
| 4 | RW | 0x0 | cbuf_cs_disable_clkgate | CBUF 自动时钟门控。0:使能自动门控;1:禁用 CBUF 时钟门控 |
| 3 | RO | 0x0 | — | 保留 |
| 2 | RW | 0x0 | csc_disable_clkgate | CSC 自动时钟门控。0:使能;1:禁用 CSC 时钟门控 |
| 1 | RW | 0x0 | cna_weight_disable_clkgate | 权重取数自动时钟门控。0:使能;1:禁用 |
| 0 | RW | 0x0 | cna_feature_disable_clkgate | 特征取数自动时钟门控。0:使能;1:禁用 |
RKNN_cna_dcomp_ctrl(0x1100)
权重解压控制寄存器。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:4 | RO | 0x0 | — | 保留 |
| 3 | RW | 0x0 | wt_dec_bypass | 旁路权重解压 |
| 2:0 | RW | 0x0 | decomp_control | 权重解压控制 |
RKNN_cna_dcomp_regnum(0x1104)
权重解压寄存器数。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | dcomp_regnum | 权重解压寄存器数量 |
RKNN_cna_dcomp_addr0(0x1110)
权重基址。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:4 | RW | 0x0 | decompress_addr0 | 权重基址 |
| 3:0 | RO | 0x0 | — | 保留 |
RKNN_cna_dcomp_amount0~15(0x1140 ~ 0x117C)
权重解压量寄存器,共 16 个,偏移 0x1140 + N×4(N = 0~15)。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | dcomp_amountN | 第 N 次解压的权重数据量 |
RKNN_cna_cvt_con5(0x1180)
按通道 CVT 使能。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | per_channel_cvt_en | 按通道使能 CVT 功能。int4 共 32 通道(128 bit),int8 共 16 通道 |
RKNN_cna_pad_con1(0x1184)
Pad 值寄存器。
| Bit | 属性 | 复位值 | 字段名 | 描述 |
|---|---|---|---|---|
| 31:0 | RW | 0x0 | pad_value | Pad 填充值 |