LeiWang1999/ZYNQ-NVDLA

NVDLA (An Opensource DL Accelerator Framework) implementation on FPGA.

ZYNQ‑NVDLA – 在 Xilinx Zynq FPGA 上运行 NVDLA

简介

  • 这是一套硬件与软件组件,让您能在 Xilinx Zynq‑7000 或 Zynq MPSoC FPGA 开发板上执行 NVIDIA‑DLA (Deep Learning Accelerator) 神经网络推论。
  • 本项目整合了 small NVDLA 配置的 RTL、Vivado IP 套件、PetaLinux 内核模式驱动程序、预编译的 ARM64 库,以及一个能将 Tengine 模型转换为 OpenDLA 格式的 Tengine‑Lite 后端。

主要组件

文件夹 内容
IP/ NVDLA‑small 核心的 Vivado IP 套件(可直接用于 Zynq 设计)。
RTL/ NVDLA‑small RTL 的 Verilog 源代码及整合用的封装层。
kmd/ PetaLinux 的内核模式驱动程序,支持 Zynq‑7000 与 Zynq MPSoC 设备。
prebuilt/ 主机 CPU 用于与加速器通信的 AArch64 编译运行时库。
include/ Tengine 后端所需的头文件。
umd/ 将 Tengine 模型转换为 OpenDLA 二进制格式的编译器与运行时源代码。
sdk_sanity/ 用于验证加速器端到端运行的简易测试程序。
reports/ 综合运行后的时序、功耗、资源利用率与执行时间报告。
examples/ (通过 Tengine‑Lite 构建) 用于分类 (ResNet‑18 on CIFAR‑10) 与物体检测 (YOLOX‑nano) 的现成演示二进制文件。

运作原理

  1. 硬件 – NVDLA‑small IP 针对 Zynq FPGA 进行综合,产生位于可编程逻辑 (PL) 上的自定义加速器模块。
  2. 驱动程序 – Linux 内核驱动程序 (kmd) 将加速器公开为设备节点,供主机 CPU 控制。
  3. 软件堆栈 – Tengine‑Lite(开源推论引擎)以特殊的 OpenDLA 后端进行编译。模型首先转换为 .tmfile(Tengine 二进制格式),再转换为 NVDLA 硬件可执行的 OpenDLA 二进制文件。
  4. 运行时 – prebuilt/ 中的预编译 ARM64 库负责处理内存管理、指令提交与结果获取。

演示使用

  • 分类 – 在 32×32 CIFAR‑10 图像上执行 ResNet‑18:

    cd <tengine-lite-root>/build
    cmake --build . --target tm_classification_opendla
    ./examples/tm_classification_opendla -m models/resnet18-cifar10-nosoftmax-relu_int8.tmfile -i images/cat.jpg -g 32,32 -s 1,1,1
    

    输出显示前 5 名类别分数,并报告在 NVDLA 模块上的推论时间约为 12 ms。

  • 物体检测 – 在狗的图片上执行 YOLOX‑nano:

    cmake --build . --target tm_yolox_opendla
    ./examples/tm_yolox_opendla -m models/yolox_nano_relu_int8.tmfile -i images/dog.jpg -r 1
    

    演示程序会打印出三个检测结果(汽车、狗、自行车)及其置信度百分比与边界框坐标。

重要性

  • 边缘 AI – 将推论从 CPU 转移到专用的 FPGA 实现 DLA,可大幅降低延迟并保持低功耗,非常适合嵌入式或边缘设备。
  • 开源堆栈 – 所有硬件 (RTL, IP)、驱动程序与软件皆公开可用,让研究人员与开发者能实验自定义加速器配置,或将 NVDLA 整合至其基于 Zynq 的产品中。

入门指南

  1. 克隆仓库并确保已安装 Xilinx Vivado 与 PetaLinux。
  2. 构建 NVDLA IP (IP/) 并将其整合至您的 Zynq 开发板 Vivado 模块设计中。
  3. 编译内核驱动程序 (kmd/) 并加载至运行中的 PetaLinux 映像文件。
  4. 安装 Tengine‑Lite,启用 OpenDLA 后端,并如上所示构建示例二进制文件。
  5. 执行提供的分类或检测示例,或将您自己的 Tengine 模型转换为 OpenDLA 格式。

限制

  • 仅提供 small NVDLA 配置;不包含较大的配置(medium, large)。
  • 演示针对 8 位量化模型;全精度或混合精度支持需要额外开发。
  • 性能受限于您使用的特定 Zynq 设备资源;在低端 Zynq‑7000 开发板上,加速器可能会受到资源限制。

以上所有信息皆直接取自该仓库的 README。

相关

  • 项目
  • 项目
  • 项目
  • 项目