modify readme dir structure
本项目旨在为开发者提供基于DSP平台的网络模型部署参考方案,通过在 FT-6678NE 多核处理器上实现 RT-Thread 操作系统的深度适配,构建了从底层硬件驱动到上层AI推理的全栈式开发框架。
git clone https://gitlink.org.cn/nudt_dsp/emulation_drivers.git
其中,仿真器的RUN灯亮表示正常工作,ERROR灯亮表示连接异常,如果出现这种现象,需要重新插拔仿真器,如果重新插拔仿真器后还是有问题,需要重启目标板和仿真器。
下载示例工程
git clone --recurse-submodules https://gitlink.org.cn/nudt_dsp/rt-thread.git
打开CCS7.4
打开file -> import -> C/C++ -> CCS Projects -> Next
选择 Select search-directory -> Browse… -> 选择 rt-thread 文件夹
勾选 Copy projects into workspace
Finish
工程目录结构如下所示:
RT-Thread-405 ├── bsp │ ├── applications /* 应用示例程序 */ │ │ ├── examples │ │ └── yolov4_tiny_demo.c │ ├── board /* Pnna 板卡初始化函数 */ │ │ ├── board.c │ │ └── board.h │ ├── drivers /* 78ne板卡板级支持包 */ │ │ ├── drv_timer.c │ │ ├── drv_timer.h │ │ ├── m6678e │ │ │ ├── include │ │ │ └── src │ │ └── pnna /* pnna 驱动接口 */ │ │ ├── include │ │ ├── lib │ │ └── README.md │ └── rtconfig.h /* 配置与硬件平台相关的选项 */ ├── ddr_init /* DDR 初始化可执行程序 */ ├── include /* 存放 RT-Thread 内核的头文件 */ ├── libcpu /* 包含 DSP 移植代码,用于将 RT-Thread 移植到 DSP 架构上 */ ├── src /* 存放 RT-Thread 内核的源文件,是 RT-Thread 内核的核心实现部分 */ └── 78E.cmd /* 链接器命令文件 */
鼠标右键单击 RT-Thread-405 工程文件 -> Build Project 即可。
或者单击 RT-Thread-405 工程选中后,单击 CCS 界面上编译图标按钮即可。
编译完成后,在 Debug 目录下会生成可执行程序:RT-Thread-405.out
CCS界面选择View->Target Configurations,显示 Target Configurations 小窗口,选择 Projects 下 RT-Thread-405 中的 m6678ne.ccxml文件,即 RT-Thread-405 工程下的 m6678ne.ccxml 文件。
右键 Target Configurations 小窗口下的 m6678ne.ccxml,选择Launch Selected Configuration,会跳转至调试界面,将出现8个DSP核和1个arm核连接的Debug界面
选择第一个C66xx_0核,Connect Target。连接成功会在核0下方出现如下字样:
0x20B00000 (no symbols are defined)
至此,已成功连接至目标板,可下载程序至DSP核并运行,但在运行程序前,需要先初始化DDR。
将 ddr_init 文件夹中的 m6678ne_ddr_init.out 可执行程序添加至 CCS 工作目录。
成功连接至目标板后,选择Run -> Load -> Load program… 或单击下载程序图标按钮。
在Program file一栏选择 m6678ne_ddr_init.out 文件,点击OK。
运行程序。Run -> Resume 或单击运行程序图标按钮。
程序最后几行打印如下,即可表示初始化DDR成功。如果目标板重新断电或者CCS重新启动,都需要重新运行初始化DDR程序。
slice 0, PHY_PAD_VREF_CT = 0x4ab slice 1, PHY_PAD_VREF_CT = 0x4a9 slice 2, PHY_PAD_VREF_CT = 0x4ad slice 3, PHY_PAD_VREF_CT = 0x4a9 slice 4, PHY_PAD_VREF_CT = 0x4ab slice 5, PHY_PAD_VREF_CT = 0x4af slice 6, PHY_PAD_VREF_CT = 0x4a6 slice 7, PHY_PAD_VREF_CT = 0x4a8 slice 8, PHY_PAD_VREF_CT = 0x4a8 Start CTL address bist CTL Address bist passed Start CTL data bist CTL Data bist passed Start PI addr bist DDR4 addr bist pass! Start PI data bist DDR data bist pass! DDR zero memory start... zero memory done
程序运行结果如下所示:
heap: 0xa0000000 - 0xa4000000 \ | / - RT - Thread Operating System / | \ 4.0.5 build Apr 11 2025 16:15:28 2006 - 2021 Copyright by rt-thread team npu[a0000010] gck pnna_drv_init, video memory heap base: 0xc0000000, size: 0x04000000 npu[a0000010] HASHMAP 0x804a953c(process-ID) INIT SUCCESS npu[a0000010] DATABASE 0x804aa228(task-desc) INIT SUCCESS npu[a0000010] DATABASE 0x804aa1ec(memory-mgt) INIT SUCCESS init pnna lite, driver version=0x00010f00... cid=0xb1, device_count=1 device[0] core_count=1 input 0 dim 416 416 3 1, data_format=2, quant_format=2, name=input[0], scale=0.003922, zero_point=0 ouput 0 dim 13 13 255 1, data_format=2, name=uid_64_out_0, scale=0.112487, zero_point=190 ouput 1 dim 26 26 255 1, data_format=2, name=uid_75_out_0, scale=0.096643, zero_point=207 memory pool size=2796800byte network core count=1 start to run network=network_binary.nb, times=0, input_address=0xe1000000 run network done... profile inference time=0.001000ms, cycle=9485424 boxes number: 10 2 0.460957 0.775011 0.223272 0.305353 0.176144 16 0.902439 0.289818 0.642779 0.259141 0.637094 1 0.732628 0.423077 0.504524 0.660328 0.612339 7 0.745452 0.759695 0.218838 0.341707 0.176144 Destroy resource network items.
网络推理结果:
2 0.460957 0.775011 0.223272 0.305353 0.176144 16 0.902439 0.289818 0.642779 0.259141 0.637094 1 0.732628 0.423077 0.504524 0.660328 0.612339 7 0.745452 0.759695 0.218838 0.341707 0.176144
每列分别表示:目标类别、置信度、中心点坐标x、中心点坐标y、框的宽、框的高
基于FT-M6678NE DSP端,RT-Thread系统下,pnna推理示例工程
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
DSP 端 RT-Thread 模型部署
概述
本项目旨在为开发者提供基于DSP平台的网络模型部署参考方案,通过在 FT-6678NE 多核处理器上实现 RT-Thread 操作系统的深度适配,构建了从底层硬件驱动到上层AI推理的全栈式开发框架。
版本说明
环境搭建
环境要求
仿真器驱动安装
连接仿真器
导入工程
下载示例工程
打开CCS7.4
打开file -> import -> C/C++ -> CCS Projects -> Next
选择 Select search-directory -> Browse… -> 选择 rt-thread 文件夹
勾选 Copy projects into workspace
Finish
工程目录结构
工程目录结构如下所示:
编译工程
鼠标右键单击 RT-Thread-405 工程文件 -> Build Project 即可。
或者单击 RT-Thread-405 工程选中后,单击 CCS 界面上编译图标按钮即可。
编译完成后,在 Debug 目录下会生成可执行程序:RT-Thread-405.out
连接至目标板
CCS界面选择View->Target Configurations,显示 Target Configurations 小窗口,选择 Projects 下 RT-Thread-405 中的 m6678ne.ccxml文件,即 RT-Thread-405 工程下的 m6678ne.ccxml 文件。
右键 Target Configurations 小窗口下的 m6678ne.ccxml,选择Launch Selected Configuration,会跳转至调试界面,将出现8个DSP核和1个arm核连接的Debug界面
选择第一个C66xx_0核,Connect Target。连接成功会在核0下方出现如下字样:
初始化DDR
将 ddr_init 文件夹中的 m6678ne_ddr_init.out 可执行程序添加至 CCS 工作目录。
成功连接至目标板后,选择Run -> Load -> Load program… 或单击下载程序图标按钮。
在Program file一栏选择 m6678ne_ddr_init.out 文件,点击OK。
运行程序。Run -> Resume 或单击运行程序图标按钮。
程序最后几行打印如下,即可表示初始化DDR成功。如果目标板重新断电或者CCS重新启动,都需要重新运行初始化DDR程序。
程序运行
加载NBG
加载待推理数据
运行程序
输出结果
程序运行结果如下所示:
网络推理结果:
每列分别表示:目标类别、置信度、中心点坐标x、中心点坐标y、框的宽、框的高