Arm Ethos-U65 介绍(2) Vela编译和命令流 📅 2026/7/17 4:22:45 编程模型软件栈网络模型到 NPU 实现的步骤如下总体划分为离线和运行两部分a离线工具链量化 → Vela编译离线过程需要将网络模型转换为 NPU 可以接受的二进制命令流具体流程为•训练模型流程起点是准备训练好的模型•量化IP 只支持 TensorFlow Lite 格式的定点模型需要将模型量化为tflite格式模型。•编译ARM 提供 Vela 编译工具将 tflite 模型编译成二进制命令流编译同时会进行权重压缩、内存分配等优化这个优化不会有精度损失。b运行Arm NN → 驱动 → NPU使用 CMSIS:NN 库可以简化运行流程也可以通过寄存器直接配置 NPU 工作具体流程如下• 将编译好的命令流、权重等数据放入内存• 通过写寄存器将命令流的内存地址等信息告知 NPU• 触发 NPU 开始执行• NPU 运算完毕后通过中断IRQ通知主机。寄存器寄存器按照功能层面分为BASE、BASE_POINT、ID、和PMU共4个区域下面说明一些可以配置IP基本运行的寄存器。aBASE 寄存器BASE 用于 IP 工作的基本配置流程是预先在存储中准备好命令流、原始数据、权重通过 QBASE0 指定命令流起始地址然后通过 CMD 触发 IP 运算等待中断清除中断最后读取结果。地址寄存器说明0x0008CMD触发IP工作、清除中断0x0010/14QBASE0/1命令流存放的起始地址40bit地址所以需要2个寄存器0x0018QREAD当前命令执行地址用于读取debug0x0020QSIZE命令流大小单位是Byte0x003CREGIONCFG配置每个区域使用的AXI接口0x0040/44/48/4CAXI_LIMIT0/1/2/3配置AXI接口burst长度、outstanding长度等bBASE_POINT 寄存器IP 包含8个区域BASE_POINT 寄存器指示了每个区域的偏移。例如 ip 示例程序用了区域 0、1、2、3分别存储权重、输入图像、中间缓存、输出图像。区域的划分本意是配合 REGIONCFG 指定不同存储设备哪个区域用来干什么实际上是命令流里的代码决定的即命令流也可以写成所有过程只用区域 0然后在区域 0 内再加上不同偏移。地址寄存器说明0x0080/84BASEP0/1区域0地址偏移40bit地址所以需要2个寄存器0x008C/88BASEP2/3区域1地址偏移0x0094/90BASEP4/5区域2地址偏移0x009C/98BASEP6/7区域3地址偏移cID、PMU寄存器ID 用于指示IP信息PMU 用于性能分析和优化。命令流命令包含 cmd0 和 cmd1 两类cmd0 为32it由 10bit指令6bit标识16bit参数构成cmd1 为 64bit在 6bit 标识不同的基础上又附带了 32bit 数据。Bit15Bit14Bit13Bit12Bit11Bit10Bits 9-0Data000000cmd0No data item010000cmd132-bit data item payload下图为指令流示例SET_PARALLEL_MODE 为 cmd0 指令32bit参数是1而后面 SET_IFM_BASE0 为 cmd1 指令64bit参数为0附带数据0指令地址偏移依次累加。命令大体可以分为如下几类通常命令流由很多段运算组成每段运算又由很多 SET OP_KERNEL 组成。只有存储到存储才需要 NPU_OP_DMA_START 命令对于 CONV、POOL 等运算 IP 内部会自动调用 DMA 读取 IFM 和写 OFM 地址数据。命令描述NPU_OP_KERNELKERNEL可以是CONV、DEPTHWSIECONV、POOL等运算NPU_SET_STATE配置运算参数NPU_OP_STOP指示命令执行完成NPU_OP_DMA_START发起DMA搬运NPU_OP_CONDITION_WAIT等待状态满足权重压缩IP使用的权重采用压缩编码压缩方式为无损压缩即IP运算结果应该和tflite模型是完全一致的。压缩方式包括对零值序列编码和非零的 Golomb-Rice 编码和查找表编码ip trm 3.7小节有算法具体描述。