NACC

1. 简介

神经网络加速器(NACC)提高了神经网络的推理性能。NACC 的数据类型是 INT8,并支持 im2col、卷积、深度可分离卷积、平均池化、最大池化、全连接、激活函数和矩阵乘法的加速。

例如可以加速 ResNet、MobileNet、Alexnet、VGG16、YOLO 等结构的网络。

此 IP 可用作 NMSIS 中函数的加速器,以及开源的 TensorFlow Lite。

2. 主要特性

NACC 的主要特性如下:

  • 支持 8 位定点数据格式。

  • 支持总线传输数据宽度 128 位。

  • 支持本地单端口 SRAM 缓存,总线可以独立访问 SRAM 功能。

  • 支持加速 NMSIS 中的卷积、RGB 卷积、深度可分离卷积、池化、全连接、逐元素操作、激活函数。

  • 支持加速 NMSIS 中的矩阵乘法函数。

  • 支持加速 NMSIS 中的 im2col 函数。

  • 支持 IFM 宽度或高度分割,核分割。

  • 支持多核模式。

  • 拥有共享 SRAM 来存储 IFM、临时数据和 OFM。

3. 功能描述

NACC 框图

NACC 由寄存器控制单元、DMA 控制器、MAC 单元、本地存储器和互连结构组成。

以下是 NACC 各单元的说明:

  • 寄存器控制单元接收任务并调度 DMA 引擎。

  • DMA 控制器使用其 ICB 主接口在外部存储器和内部共享存储器之间移动数据。

  • MAC 单元包含各种内部单元,用于读取 IFM、执行点积和累加。

NACC 的框图如下图所示:

NACC 模块框图

图 3.1: NACC 模块框图

外部接口

NACC 使用 ICB 主接口、一个 ICB 从接口、一个中断接口、时钟和复位信号来启用与外部组件的访问。

  • ICB 主接口

这些接口使 DMA 控制器能够对外部存储器进行读访问和写访问。NACC 有一个读/写主接口,M0

  • ICB 从接口

使运行在外部主机应用处理器上的设备驱动程序能够访问 NACC 的控制寄存器。

  • 中断接口

向外部主机应用处理器发送中断请求,通常用于发出作业完成或系统总线访问读/写错误的信号。

  • 时钟和复位

NACC 有一个时钟和一个复位信号。

DMA 控制器

NACC 包含一个可以直接读写外部存储器的直接存储器访问(DMA)控制器。当 NACC 执行推理时,DMA 控制器读取神经网络描述。

此描述包含:

  • 命令流

  • 网络权重

  • 量化信息

  • 偏置信息

DMA 控制器还传输输入特征图(IFM)、输出特征图(OFM)以及同样存储在系统内存中的 NACC 私有的中间数据。

DMA 控制器使用的通道有:

  • 读通道

NACC 使用读通道读取输入特征图并将其存储在其共享 RAM 中。此外,权重数据、偏置数据、量化数据也使用读通道传输到共享 RAM。DMA 控制器数据以 NHWC 格式存储。

DMA 控制器考虑核步长,因为这会影响 DMA 控制器存储激活所需的存储体或地址。

  • 写通道

NACC 使用写通道将输出特征图从共享 SRAM 写入外部 SRAM。

多核

NACC 支持多核模式,该模式具有高扩展性、高传输性、高性能的优点。此模式适用于大型网络、大尺寸图像和高性能要求。

有两种类型的多核模式策略。计算能力的模式选择如下:

模式1:卷积、全连接卷积。

模式2:卷积、深度可分离卷积、池化、逐元素操作、RGB 卷积、矩阵运算。

支持配置的多核数量:[1,2,4,8,16,32],最大计算能力:2Tops(500MHz),4Tops(1GHz)。

TOPS 是每秒的 MAC 操作次数,计算公式为:TOPS = 64MAC * 2 * 频率 * NACC_数量;

数据格式

NACC 支持行业标准的 NHWC 格式的特征图数据。

NHWC 被 NACC 用作与 TensorFlow Lite 通信的输入和输出格式。

NHWC 格式具有以下属性:

  • 数据维度:N(数量)、H(高度)、W(宽度)和 C(通道)。

  • 每个元素的大小(ElemSize)为 1 字节。

  • 仅支持单批次(N=1)。

  • NHWC 在访问中具有更好的局部性。

MAC 单元

MAC 单元执行卷积、深度可分离卷积、平均池化、最大池化、向量点积、im2col、全连接等所需的乘累加操作。

本地存储器

本地存储器包括 SRAM 和寄存器阵列,SRAM 用于存储 IFM 和 OFM,实际上使用共享 SRAM。

用户应使用 DMA 将 IFM 从外部存储器传输到 SRAM,计算完成后,应将 OFM 从 SRAM 传输到外部存储器。

NACC 拥有 16 ∗ 1024 ∗ 32 位,总计 64KB 的 SRAM。

激活单元

激活单元读取已完成的累加器,将偏置值加到结果中,并对每个点应用激活函数。

激活单元支持的激活函数有:

  • ReLU

  • ReLU6

  • Tanh

  • Sigmoid

  • LUT

  • 无或旁路

ReLU 和 ReLU6

修正线性单元(ReLU)操作通常在偏置加法之后执行。将所有负值设为 0,其余值保持不变。

ReLU6 与普通 ReLU 的区别在于最大输出限制为 6,主要是为了在移动端 int8 低精度时保持良好的数值分辨率。

Tanh 和 Sigmoid

激活单元通过结合查表法和双线性插值来支持 tanh 和 sigmoid 函数。两种函数使用相同的表,因为它们在数学上是相关的。

激活单元每个周期可以执行一次 tanh 或 sigmoid 函数。

还有一个可配置的查找表(LUT),可用于任何逐点的激活或函数。对于 8 位激活,LUT 最多可容纳 256 个 8 位值,这些值直接从 IFM 映射到 OFM。

当激活单元计算完成后,将其写回共享 RAM。输出激活缓存在共享 RAM 中,等待 DMA 控制器将其发送到外部存储器。

逐元素操作

输出单元支持的逐元素操作有:

  • 逐元素加法

  • 逐元素乘法

卷积

本节提供有关支持的数据类型、运算符和操作的信息,并详细介绍 NACC 的卷积和逐元素操作性能。

下表显示了 NACC 支持的卷积参数:

表 3.1:卷积参数

参数

范围

核

1*1 < 核_x * 核_y <= 15*15

精度

IFM:8 位;权重:8 位

步长

步长_x <= 3;步长_y <= 3

核扩张

扩张_x = 1;扩张_y = 1

输入填充

填充 <= 5

NACC 可以支持卷积加速,

  • 它支持编程的核大小范围 [1:15] * [1:15]。

  • x 和 y 方向的最大步长为 3。

  • 最大填充大小为 5。

  • x 和 y 方向的最大扩张为 1。

  • 它可以支持加速 NMSIS-NN 中的卷积函数。

步骤如下:

  • 步骤 1,将 IFM 传输到行缓冲器:您应将第一个 IFM 和核传输到行缓冲器。

  • 步骤 2,计算第一个:NACC 等待开始计算,您可以配置 NACC_CTRL 寄存器中的 START 位来决定是否在写入后立即开始计算。

  • 步骤 3,DMA 从行缓冲器读取 OFM:如果计算完成,DMA 可以从本地 SRAM 读取 OFM。

  • 步骤 4,计算第二个:您可以将第二个 IFM 和核传输到行缓冲器,传输完成后,NACC 再次开始计算。

  • 步骤 5,与步骤 3 相同。后续步骤是上述步骤的循环。

示例

有两个示例展示了如何使用 NACC 加速卷积。

示例 1

以下示例展示了一个基础卷积的详细配置,该函数在 MNSIS-NN 中为 risc_convolve_s8。

下表显示了卷积参数。

表 3.2:卷积参数(示例 1)

参数

值

IFM

16*16*3 (HWC)

OFM

14*14*8 (HWC)

精度

IFM:8 位;权重:8 位

批次

1

核

8*3*33 (NHWC)

步长

步长_x = 1;步长_y = 1

核扩张

扩张_x = 1;扩张_y = 1

输入填充

填充_x = 0;填充_y = 0

示例 2

此示例展示了当 IFM 尺寸大于 NACC 提供的尺寸限制时的情况。下表显示了卷积参数(示例 2)。

表 3.3:卷积参数(示例 2)

参数

值

IFM

80*80*3 (HWC)

OFM

78*78*8 (HWC)

精度

IFM:8 位;权重:8 位

批次

1

核

8*3*33 (NHWC)

步长

步长_x = 1;步长_y = 1

核扩张

扩张_x = 1;扩张_y = 1

输入填充

填充_x = 1;填充_y = 1

在这种情况下,IFM 的尺寸超过了尺寸限制,您应首先将 IFM 分成小块,如下图所示,按宽度分割 IFM。

NACC IFM 尺寸超限分割

图 3.2: NACC IFM 尺寸超限分割

首先,如上图所示,您应将每个通道分成 2 部分。您应将部分 1 和部分 2 视为四个新的 IFM。您应控制 DMA 分别传输这四个新的 IFM。如果填充数不为 0,您应注意这两个新 IFM 的填充参数:IFM1 仅右侧无填充,IFM2 仅左侧无填充。

之后,您应像示例 1 一样计算这两个 IFM,并分别将四个 OFM 传输到外部存储器。完成 IFM2 的计算后,您将获得完整的 OFM。

池化

下表显示了 NACC 支持的池化参数:

表 3.4:池化参数

参数

范围

核

2*2 < 核_x * 核_y <= 15*15

精度

IFM:8 位整数

步长

步长_x <= 3;步长_y <= 3

核扩张

扩张_x = 1;扩张_y = 1

输入填充

填充 <= 5

NACC 可以支持池化加速,

  • 最大池化的最大核尺寸为 15 ∗ 15。平均池化仅支持 2 ∗ 2。

  • 最大池化的 x 和 y 方向最大步长为 3。平均池化仅支持 2。

  • 最大填充大小为 5。

  • NACC 支持最大池化和平均池化。

步骤如下:

  • 步骤 1:使用 DMA 将 IFM 传输到行缓冲器。

  • 步骤 2:NACC 开始计算并将 OFM 传输到行缓冲器。

  • 步骤 3:使用 DMA 将 OFM 读取到外部存储器。

在上面的描述中,它是一个 NACC 系统,有些 NACC 系统由多核组成,DMA 可以将不同的 IFM 传输到每个 NACC。性能取决于系统中 NACC 的数量。

4. 中断

NACC 有两组中断信号,一组是总线传输的读中断错误和写中断错误;另一组是 NACC 计算结果传输完成中断。

5. 寄存器

ACRYP_RF 寄存器

寄存器及其在 NACC_REG 中的相应偏移量见下表。

表 5.1:NACC_REG 中寄存器的偏移地址

偏移量

寄存器名称

功能描述

0x0

NACC_CTRL

NACC 计算模式配置

0x4

NACC_KERNEL

NACC 卷积核尺寸

0x8

NACC_IN_FM

NACC 输入特征图尺寸

0xC

NACC_OUT_FM

NACC 输出特征图尺寸

0x10

NACC_PADDING

NACC 填充尺寸

0x14

NACC_INT_EN

NACC ICB 总线中断配置

0x18

NACC_INT_STATUS

NACC ICB 总线中断状态

0x1C

NACC_ELEMENTWISE

NACC 逐元素操作配置

0x20

NACC_QUANT_MUL_DMA_ADDR

NACC 量化_乘数据 ICB 总线源地址

0x24

NACC_QUANT_SHIFT_DMA_ADDR

NACC 量化_移位数据 ICB 总线源地址

0x28

NACC_ACT_MAX

NACC 激活最大值参数

0x2C

NACC_ACT_MIN

NACC 激活最小值参数

0x30

NACC_MATRIX_A

NACC 矩阵 A 尺寸

0x34

NACC_MATRIX_B

NACC 矩阵 B 尺寸

0x38

NACC_ACT_PARA

NACC 激活参数

0x3C

NACC_IN_ACT_DMA_ADDR

NACC 激活数据 ICB 总线源地址

0x40

NACC_BIAS_DMA_ADDR

NACC 偏置数据 ICB 总线源地址

0x44

NACC_IN_K_DMA_ADDR

NACC 核数据 ICB 总线源地址

0x48

NACC_IN_FM_DMA_ADDR

NACC 输入特征图数据 ICB 总线源地址

0x4C

NACC_OUT_DMA_ADDR

NACC 输出特征图数据 ICB 总线源地址

0x64

NACC_FM_OFFSET

NACC 特征图数据偏移量

0x68

NACC_DMA_OFFSET

NACC 每个批次输入 DMA 地址偏移量

0x6C

NACC_IM2COL_TRANS_LEN

NACC IM2COL DMA 传输长度

0x70

NACC_CONV_TRANS_LEN

NACC 卷积 DMA 传输长度

0x74

NACC_DMA_OUT_TRANS_LEN

NACC 输出 DMA 传输长度

0x78

NACC_FULL_CONV_PARA

NACC 全连接参数

0x7C

NACC_DMA_PARA1

NACC DMA 传输批次大小

0x80

NACC_DMA_PARA2

NACC 输入特征图数据偏移量(非连续地址)

0x84

NACC_DMA_PARA3

NACC DMA 传输参数

0x88

NACC_DMA_PARAA

NACC 核数据偏移量

0x8C

NACC_BATCH_SIZE

NACC 批次参数

0x90

NACC_MEM_RANGE

NACC SRAM 参数

0x94

NACC_DMA_OFFSET1

NACC 输入特征图单行数据偏移量

0x98

NACC_DMA_OFFSET2

NACC 输出特征图数据偏移量

0xA4

NACC_IM2COL_DMA_ADDR

NACC IM2COL 数据 ICB 总线源地址

0xAC

NACC_FM_CH

NACC 特征图通道尺寸

0xB0

NACC_IN_FM_SPLIT

NACC 输入特征图分割尺寸

0xB4

NACC_OUT_FM_SPLIT

NACC 输出特征图分割尺寸

0xB8

NACC_OUT_FM_SPLIT_LEN

NACC 输出特征图分割长度

0xBC

NACC_IN_FM_SPLIT_W_OFFSET

NACC 输入特征图分割宽度偏移量

0xC0

NACC_IN_FM_SPLIT_W_OFFSET1

NACC 输入特征图分割宽度偏移量1

0xC4

NACC_IN_FM_SPLIT_H_OFFSET

NACC 输入特征图分割高度偏移量

0xC8

NACC_IN_FM_SPLIT_H_OFFSET1

NACC 输入特征图分割高度溢出偏移量1

0xCC

NACC_IN_FM_SPLIT_H_OFFSET2

NACC 输入特征图分割高度平均偏移量2

0xD0

NACC_OUT_FM_SPLIT_H_OFFSET

NACC 输出特征图分割高度偏移量

0xD4

NACC_OUT_FM_SPLIT_H_OFFSET1

NACC 输出特征图分割高度偏移量1

0xD8

NACC_BROADCAST_CTRL

NACC 广播模式配置

0xDC

NACC_BROADCAST_CTRL1

NACC 广播模式配置1

0xE0

NACC_BROADCAST_DMA

NACC 广播 DMA 偏移量

0xE4

NACC_BROADCAST_SPLIT

NACC 广播分割高度偏移量

0xE8

NACC_ELEMENT_QUANT1_MULT

NACC 逐元素操作输入1乘法参数

0xEC

NACC_ELEMENT_QUANT1_SHIFT

NACC 逐元素操作输入1移位参数

0xF0

NACC_ELEMENT_QUANT2_MULT

NACC 逐元素操作输入2乘法参数

0xF4

NACC_ELEMENT_QUANT2_SHIFT

NACC 逐元素操作输入2移位参数

0xFC

NACC_VERSION

NACC IP 版本寄存器

NACC_CTRL

地址偏移:0x0

表 5.2:NACC_CTRL 的寄存器格式

字段

位

访问

复位值

描述

CONV_MODE

3:0

RW

0x0

NACC 卷积模式选择:
  • 4’b0000: 卷积

  • 4’b0001: 矩阵乘法

  • 4’b0010: RGB 卷积

  • 4’b0011: 深度可分离卷积

  • 4’b0100: 全连接

  • 4’b0101: 无

POOL_MODE

7:4

RW

0x0

NACC 池化模式选择:
  • 4’b0000: 最大池化

  • 4’b0001: 平均池化

  • 4’b0010: 无

ACT_MODE

11:8

RW

0x0

NACC 激活模式选择:
  • 4’b0000: ReLU

  • 4’b0001: ReLU6

  • 4’b0010: Tanh

  • 4’b0011: Sigmoid

  • 4’b0100: 无

START

12

RW

0x0

NACC 启动工作使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

QUANT_EN

13

RW

0x0

NACC 量化使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

BIAS_EN

14

RW

0x0

NACC 偏置使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

FM_UPD

15

RW

0x0

NACC 特征图更新控制:
  • 1’b0: 禁用

  • 1’b1: 使能

K_UPD

16

RW

0x0

NACC 卷积核更新控制:
  • 1’b0: 禁用

  • 1’b1: 使能

IM2COL_EN

17

RW

0x0

NACC im2col 模式使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

ELEMENT_EN

18

RW

0x0

NACC 逐元素模式使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

ELEMENT_INPUT_QUANT_EN

19

RW

0x0

NACC 逐元素模式输入量化使能控制:
  • 1’b0: 禁用

  • 1’b1: 使能

DATA_FORM

21:20

RW

0x0

NACC 数据格式选择:
  • 2’b00: 8 位数据计算

  • 2’b01: 16 位数据计算

  • 2’b10: 4 位数据计算

CLK_BYPASS

27:22

RW

0x0

NACC 时钟门控旁路控制:
  • 6’b0001: 量化时钟门控旁路

  • 6’b0010: 累加加法时钟门控旁路

  • 6’b0100: 池化时钟门控旁路

  • 6’b1000: 深度可分离卷积时钟门控旁路

  • 6’b10000: 顶层时钟门控旁路

保留

31:28

/

0x0

/

NACC_KERNEL

地址偏移:0x4

表 5.3:NACC_KERNEL 的寄存器格式

字段

位

访问

复位值

描述

K_SIZE_X

3:0

RW

0x0

核大小 x,范围 [1:15] 内

K_SIZE_Y

7:4

RW

0x0

核大小 y,范围 [1:15] 内

K_SIZE_XY

15:8

RW

0x0

核大小 x * 核大小 y - 1

K_STRIDE_X

19:16

RW

0x1

x 方向的步长大小,只能是 1, 2, 3

K_STRIDE_Y

23:20

RW

0x1

y 方向的步长大小,只能是 1, 2, 3

K_DILATION_X

27:24

RW

0x1

x 方向的扩张大小,只能是 1

K_DILATION_Y

31:28

RW

0x1

y 方向的扩张大小,只能是 1

NACC_IN_FM

地址偏移:0x8

表 5.4:NACC_IN_FM 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_WIDTH

15:0

RW

0x0

输入特征图的宽度

IN_FM_HEIGHT

31:16

RW

0x0

输入特征图的高度

NACC_OUT_FM

地址偏移:0xC

表 5.5:NACC_OUT_FM 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_WIDTH

15:0

RW

0x0

输出特征图的宽度

OUT_FM_HEIGHT

31:16

RW

0x0

输出特征图的高度

NACC_PADDING

地址偏移:0x10

表 5.6:NACC_PADDING 的寄存器格式

字段

位

访问

复位值

描述

PAD_X

3:0

RW

0x0

x 方向的填充,只能是 0, 1, 2, 3, 4, 5

PAD_Y

7:4

RW

0x0

y 方向的填充,只能是 0, 1, 2, 3, 4, 5

保留

31:8

/

0x0

/

NACC_INT_EN

地址偏移:0x14

表 5.7:NACC_INT_EN 的寄存器格式

字段

位

访问

复位值

描述

BUS_WR_ERR_INTR_EN

0

RW

0x0

ICB 总线写错误中断使能

BUS_RD_ERR_INTR_EN

1

RW

0x0

ICB 总线读错误中断使能

FULL_TRANS_DONE_INTR_EN

2

RW

0x0

NACC 传输完成中断使能

保留

31:3

/

0x0

/

NACC_INT_STATUS

地址偏移:0x18

表 5.8:NACC_INT_STATUS 的寄存器格式

字段

位

访问

复位值

描述

BUS_WR_ERR_INTR

0

WOC

0x0

ICB 总线写错误中断

BUS_RD_ERR_INTR

1

WOC

0x0

ICB 总线读错误中断

FULL_TRANS_DONE_INTR

2

WOC

0x0

NACC 传输完成中断

保留

31:3

/

0x0

/

NACC_ELEMENTWISE

地址偏移:0x1C

表 5.9:NACC_ELEMENTWISE 的寄存器格式

字段

位

访问

复位值

描述

ELEMENTWISE_MODE

3:0

RW

0x0

NACC 逐元素操作模式选择:
  • 4’b0001: 逐元素减法

  • 4’b0010: 逐元素加法

  • 4’b0100: 逐元素乘法_S16_S8

  • 4’b1000: 逐元素乘法

IN_ELEMENT_OFFSET1

12:4

RW

0x0

输入1 数据偏移值

IN_ELEMENT_OFFSET2

21:13

RW

0x0

输入2 数据偏移值

LEFT_SHIFT

29:22

RW

0x0

输入1、输入2 数据左移值

保留

31:30

/

0x0

/

NACC_QUANT_MUL_DMA_ADDR

地址偏移:0x20

表 5.10:NACC_QUANT_MUL_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

QUANT_MUL_DMA_ADDR

31:0

RW

0x0

量化参数乘法数据 ICB 总线源地址

NACC_QUANT_SHIFT_DMA_ADDR

地址偏移:0x24

表 5.11:NACC_QUANT_SHIFT_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

QUANT_SHIFT_DMA_ADDR

31:0

RW

0x0

量化参数移位数据 ICB 总线源地址

NACC_ACT_MAX

地址偏移:0x28

表 5.12:NACC_ACT_MAX 的寄存器格式

字段

位

访问

复位值

描述

ACT_MAX

31:0

RW

0x0

激活参数:最大值

NACC_ACT_MIN

地址偏移:0x2C

表 5.13:NACC_ACT_MIN 的寄存器格式

字段

位

访问

复位值

描述

ACT_MIN

31:0

RW

0x0

激活参数:最小值

NACC_MATRIX_A

地址偏移:0x30

表 5.14:NACC_MATRIX_A 的寄存器格式

字段

位

访问

复位值

描述

MATRIX_A_XSIZE

15:0

RW

0x0

矩阵 A:x 方向尺寸值

MATRIX_A_YSIZE

31:16

RW

0x0

矩阵 A:y 方向尺寸值

NACC_MATRIX_B

地址偏移:0x34

表 5.15:NACC_MATRIX_B 的寄存器格式

字段

位

访问

复位值

描述

MATRIX_B_XSIZE

15:0

RW

0x0

矩阵 B:x 方向尺寸值

MATRIX_B_YSIZE

31:16

RW

0x0

矩阵 B:y 方向尺寸值

NACC_ACT_PARA

地址偏移:0x38

表 5.16:NACC_ACT_PARA 的寄存器格式

字段

位

访问

复位值

描述

ACT_INT_W

1:0

RW

0x0

激活参数:整数宽度

保留

31:2

/

0x0

/

NACC_IN_ACT_DMA_ADDR

地址偏移:0x3C

表 5.17:NACC_IN_ACT_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

IN_ACT_DMA_ADDR

31:0

RW

0x0

激活数据 ICB 总线源地址

NACC_BIAS_DMA_ADDR

地址偏移:0x40

表 5.18:NACC_BIAS_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

BIAS_DMA_ADDR

31:0

RW

0x0

偏置数据 ICB 总线源地址

NACC_IN_K_DMA_ADDR

地址偏移:0x44

表 5.19:NACC_IN_K_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

IN_K_DMA_ADDR

31:0

RW

0x0

核数据 ICB 总线源地址

NACC_IN_FM_DMA_ADDR

地址偏移:0x48

表 5.20:NACC_IN_FM_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_DMA_ADDR

31:0

RW

0x0

输入特征图数据 ICB 总线源地址

NACC_OUT_DMA_ADDR

地址偏移:0x4C

表 5.21: NACC_OUT_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

OUT_DMA_ADDR

31:0

RW

0x0

输出特征图数据 ICB 总线源地址

NACC_FM_OFFSET

地址偏移:0x64

表 5.22: NACC_FM_OFFSET 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_OFFSET

8:0

RW

0x0

输入特征图数据偏移值

OUT_FM_OFFSET

17:9

RW

0x0

输出特征图数据偏移值

保留

31:18

/

0x0

/

NACC_DMA_OFFSET

地址偏移:0x68

表 5.23: NACC_DMA_OFFSET 的寄存器格式

字段

位

访问

复位值

描述

IN_DMA_OFFSET

31:0

RW

0x0

输入 DMA 地址偏移量

NACC_IM2COL_TRANS_LEN

地址偏移:0x6C

表 5.24: NACC_IM2COL_TRANS_LEN 的寄存器格式

字段

位

访问

复位值

描述

IM2COL_IN_TRANS_LEN

15:0

RW

0x0

输入 DMA 传输长度

IM2COL_OUT_TRANS_LEN

31:16

RW

0x0

输出 DMA 传输长度

NACC_CONV_TRANS_LEN

地址偏移:0x70

表 5.25: NACC_CONV_TRANS_LEN 的寄存器格式

字段

位

访问

复位值

描述

K_TRANS_LEN

15:0

RW

0x0

核 DMA 传输长度

FM_TRANS_LEN

31:16

RW

0x0

输入特征图 DMA 传输长度

NACC_DMA_OUT_TRANS_LEN

地址偏移:0x74

表 5.26: NACC_DMA_OUT_TRANS_LEN 的寄存器格式

字段

位

访问

复位值

描述

DMA_OUT_TRANS_LEN

15:0

RW

0x0

输出特征图 DMA 传输长度

保留

31:16

/

0x0

/

NACC_FULL_CONV_PARA

地址偏移:0x78

表 5.27: NACC_FULL_CONV_PARA 的寄存器格式

字段

位

访问

复位值

描述

FULL_KER_SIZE

7:0

RW

0x0

全连接核大小:in_fm_width * (in_fm_ch + 63) / 64 - 1

BIAS_SHIFT

15:8

RW

0x0

RGB 卷积参数:偏置移位

OUT_SHIFT

23:16

RW

0x0

RGB 卷积参数:输出移位

保留

31:24

/

0x0

/

NACC_DMA_PARA1

地址偏移:0x7C

表 5.28: NACC_DMA_PARA1 的寄存器格式

字段

位

访问

复位值

描述

IFM_TRANS_END_SIZE

15:0

RW

0x0

输入特征图传输批次大小

K_TRANS_END_SIZE

31:16

RW

0x0

核传输批次大小

NACC_DMA_PARA2

地址偏移:0x80

表 5.29: NACC_DMA_PARA2 的寄存器格式

字段

位

访问

复位值

描述

FM_TRANS_OFFSET

31:0

RW

0x0

输入特征图数据偏移值(非连续地址)

NACC_DMA_PARA3

地址偏移:0x84

表 5.30: NACC_DMA_PARA3 的寄存器格式

字段

位

访问

复位值

描述

OFM_TRANS_END_SIZE

15:0

RW

0x0

输出特征图传输批次大小

DW_CH_MULT

19:16

RW

0x0

深度可分离卷积通道倍数:Out_fm_ch / 2 * (dw_ch_mult) = In_fm_ch,只能是 0, 1, 2, 3

保留

31:20

/

0x0

/

NACC_DMA_PARAA

地址偏移:0x88

表 5.31: NACC_DMA_PARAA 的寄存器格式

字段

位

访问

复位值

描述

K_TRANS_OFFSET

31:0

RW

0x0

核数据偏移值(适用于全连接、逐元素操作、矩阵模式)

NACC_BATCH_SIZE

地址偏移:0x8C

表 5.32: NACC_BATCH_SIZE 的寄存器格式

字段

位

访问

复位值

描述

IN_CH_BATCH_SIZE

7:0

RW

0x0

输入特征图通道批次大小

K_BATCH_SIZE

15:8

RW

0x0

核批次大小

K_ONE_BATCH_SIZE

23:16

RW

0x0

单个批次传输的核大小

TEMP_RES_BATCH_SIZE

27:24

RW

0x0

临时结果批次大小

保留

31:28

/

0x0

/

NACC_MEM_RANGE

地址偏移:0x90

表 5.33: NACC_MEM_RANGE 的寄存器格式

字段

位

访问

复位值

描述

IFM_MEM_BASE

1:0

RW

0x0

输入特征图通道批次大小

K_BATCH_SIZE

11:2

RW

0x0

核基地址

OFM_MEM_BASE

21:12

RW

0x0

输出特征图基地址

TEMP_MEM_BASE

31:22

RW

0x0

临时结果基地址

NACC_DMA_OFFSET1

地址偏移:0x94

表 5.34: NACC_DMA_OFFSET1 的寄存器格式

字段

位

访问

复位值

描述

IN_DMA_ROW_OFFSET

31:0

RW

0x0

输入特征图单行数据偏移值

NACC_DMA_OFFSET2

地址偏移:0x98

表 5.35: NACC_DMA_OFFSET2 的寄存器格式

字段

位

访问

复位值

描述

OUT_DMA_OFFSET

31:0

RW

0x0

输出特征图数据偏移值

NACC_IM2COL_DMA_ADDR

地址偏移:0xA4

表 5.36: NACC_IM2COL_DMA_ADDR 的寄存器格式

字段

位

访问

复位值

描述

IM2COL_DMA_ADDR

31:0

RW

0x0

IM2COL 数据 ICB 总线源地址

NACC_FM_CH

地址偏移:0xAC

表 5.37: NACC_FM_CH 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_CH

15:0

RW

0x0

输入特征图的通道数

OUT_FM_CH

31:16

RW

0x0

输出特征图的通道数

NACC_IN_FM_SPLIT

地址偏移:0xB0

表 5.38: NACC_IN_FM_SPLIT 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_SPLIT_WIDTH

7:0

RW

0x0

输入特征图分割宽度

IN_FM_SPLIT_LEFT_WIDTH

15:8

RW

0x0

输入特征图分割左侧宽度

IN_FM_SPLIT_LEFT_LEN

31:16

RW

0x0

输入特征图分割左侧长度

NACC_OUT_FM_SPLIT

地址偏移:0xB4

表 5.39: NACC_OUT_FM_SPLIT 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_SPLIT_SIZE

7:0

RW

0x0

输出特征图分割尺寸

OUT_FM_SPLIT_WIDTH

15:8

RW

0x0

输出特征图分割宽度

OUT_FM_SPLIT_LEFT_WIDTH

23:16

RW

0x0

输出特征图分割左侧宽度

保留

31:24

/

0x0

/

NACC_OUT_FM_SPLIT_LEN

地址偏移:0xB8

表 5.40: NACC_OUT_FM_SPLIT_LEN 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_SPLIT_LEN

15:0

RW

0x0

输出特征图分割长度

OUT_FM_SPLIT_LEFT_LEN

31:16

RW

0x0

输出特征图分割左侧长度

NACC_IN_FM_SPLIT_W_OFFSET

地址偏移:0xBC

表 5.41: NACC_IN_FM_SPLIT_W_OFFSET 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_START_SPLIT_W_OFFSET

31:0

RW

0x0

输入特征图起始分割宽度偏移量

NACC_IN_FM_SPLIT_W_OFFSET1

地址偏移:0xC0

表 5.42: NACC_IN_FM_SPLIT_W_OFFSET1 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_MID_SPLIT_W_OFFSET

31:0

RW

0x0

输入特征图中间分割宽度偏移量

NACC_IN_FM_SPLIT_H_OFFSET

地址偏移:0xC4

表 5.43: NACC_IN_FM_SPLIT_H_OFFSET 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_START_SPLIT_H_OFFSET

31:0

RW

0x0

输入特征图起始分割高度偏移量

NACC_IN_FM_SPLIT_H_OFFSET1

地址偏移:0xC8

表 5.44: NACC_IN_FM_SPLIT_H_OFFSET1 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_MID_SPLIT_H_OV_OFFSET

31:0

RW

0x0

输入特征图中间分割高度溢出偏移量

NACC_IN_FM_SPLIT_H_OFFSET2

地址偏移:0xCC

表 5.45: NACC_IN_FM_SPLIT_H_OFFSET2 的寄存器格式

字段

位

访问

复位值

描述

IN_FM_MID_SPLIT_H_AVG_OFFSET

31:0

RW

0x0

输入特征图中间分割高度平均偏移量

NACC_OUT_FM_SPLIT_H_OFFSET

地址偏移:0xD0

表 5.46: NACC_OUT_FM_SPLIT_H_OFFSET 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_START_SPLIT_H_OFFSET

31:0

RW

0x0

输出特征图起始分割高度偏移量

NACC_OUT_FM_SPLIT_H_OFFSET1

地址偏移:0xD4

表 5.47: NACC_OUT_FM_SPLIT_H_OFFSET1 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_MID_SPLIT_H_OFFSET

31:0

RW

0x0

输出特征图中间分割高度偏移量

NACC_BROADCAST_CTRL

地址偏移:0xD8

表 5.48: NACC_BROADCAST_CTRL 的寄存器格式

字段

位

访问

复位值

描述

BROADCAST_MODE

1:0

RW

0x0

NACC 广播模式选择:
  • 2’b00: 无

  • 2’b01: 模式1,分割核,例如:卷积、全连接卷积

  • 2’b10: 模式2,分割高度,例如:卷积、深度可分离卷积、RGB卷积、池化、逐元素操作

BROADCAST_NUM

7:2

RW

0x0

广播数量配置:0, 1, 3, 7, 15, 31(实际数量 -1

保留

31:8

/

0x0

/

NACC_BROADCAST_CTRL1

地址偏移:0xDC

表 5.49: NACC_BROADCAST_CTRL1 的寄存器格式

字段

位

访问

复位值

描述

BROADCAST_OVER_EN

31:0

RW

0x0

广播分割溢出使能标志

NACC_BROADCAST_DMA

地址偏移:0xE0

表 5.50: NACC_BROADCAST_DMA 的寄存器格式

字段

位

访问

复位值

描述

IN_DMA_UNICAST_OV_OFFSET

9:0

RW

0x0

输入 DMA 单播溢出偏移量

IN_DMA_UNICAST_AVG_OFFSET

19:10

RW

0x0

输入 DMA 单播平均偏移量

EU_BIAS_START_OFFSET

27:20

RW

0x0

MAC 单元偏置起始偏移量

保留

31:28

/

0x0

/

NACC_BROADCAST_SPLIT

地址偏移:0xE4

表 5.51: NACC_BROADCAST_SPLIT 的寄存器格式

字段

位

访问

复位值

描述

OUT_FM_SPLIT_OV_HEIGHT

9:0

RW

0x0

输出特征图分割高度溢出偏移量

OUT_FM_SPLIT_AVG_HEIGHT

19:10

RW

0x0

输出特征图分割高度平均偏移量

保留

31:20

/

0x0

/

NACC_ELEMENT_QUANT1_MULT

地址偏移:0xE8

表 5.52: NACC_ELEMENT_QUANT1_MULT 的寄存器格式

字段

位

访问

复位值

描述

IN_ELEMENT_MULT1

31:0

RW

0x0

输入元素1乘法参数

NACC_ELEMENT_QUANT1_SHIFT

地址偏移:0xEC

表 5.53: NACC_ELEMENT_QUANT1_SHIFT 的寄存器格式

字段

位

访问

复位值

描述

IN_ELEMENT_SHIFT1

31:0

RW

0x0

输入元素1移位参数

NACC_ELEMENT_QUANT2_MULT

地址偏移:0xF0

表 5.54: NACC_ELEMENT_QUANT2_MULT 的寄存器格式

字段

位

访问

复位值

描述

IN_ELEMENT_MULT2

31:0

RW

0x0

输入元素2乘法参数

NACC_ELEMENT_QUANT2_SHIFT

地址偏移:0xF4

表 5.55: NACC_ELEMENT_QUANT2_SHIFT 的寄存器格式

字段

位

访问

复位值

描述

IN_ELEMENT_SHIFT2

31:0

RW

0x0

输入元素2移位参数

NACC_VERSION

地址偏移:0xFC

表 5.56: NACC_VERSION 的寄存器格式

字段

位

访问

复位值

描述

VERSION

31:0

RO

0x0001_0102

32 位版本号:
  • [31:24] 保留

  • [23:16] 主版本号

  • [15:8] 次版本号

  • [7:0] 修订版本号