更新nn_api.c后同步更新仓库
DSP 做主控时,通过 pnna_driver 驱动,在 Pnna 上部署应用程序。
git clone https://gitlink.org.cn/nudt_dsp/emulation_drivers.git
其中,仿真器的RUN灯亮表示正常工作,ERROR灯亮表示连接异常,如果出现这种现象,需要重新插拔仿真器,如果重新插拔仿真器后还是有问题,需要重启目标板和仿真器。
下载示例工程
git clone --recursive https://gitlink.org.cn/nudt_dsp/app_baremetal_dsp.git
打开CCS7.4
打开file -> import -> C/C++ -> CCS Projects -> Next
选择 Select search-directory -> Browse… -> 选择 app_baremetal_dsp 文件夹
勾选 Copy projects into workspace
Finish
整个目录文件夹如下所示:
project ├── m6678ne /* 板级支持包 */ │ ├── include │ └── src ├── examples /* 完整的示例工程 */ │ ├── postprocess │ ├── resource │ ... | └── yolov4_tiny_demo.c ├── pnna /* lite 驱动头文件和库文件 */ │ ├── include │ └── lib ├── m6678ne.ccxml /* 描述和配置调试器连接信息 */ └── m6678ne.cmd /* 内存布局和程序段在内存中的放置情况 */
鼠标右键单击 project 工程文件 -> Build Project 即可。
或者单击 project 工程选中后,单击 CCS 界面上编译图标按钮即可。
编译完成后,在 Debug 目录下会生成可执行程序:project.out
CCS界面选择View->Target Configurations,显示 Target Configurations 小窗口,选择 Projects 下project中的 m6678ne.ccxml文件,即 project 工程下的 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
程序运行结果如下所示,结果分别表示:目标类别、置信度、中心点坐标x、中心点坐标y、框的宽、框的高
start to run network=network_binary.nb, times=1 run network done... profile inference time=0.000000ms, cycle=9392210 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
NBG和input在 nn_api.h 文件中的定义:
extern uint32_t *network_address; //NBG extern uint32_t *input_dat0_address; //input_0.dat extern uint32_t *input_dat1_address; //input_1.dat extern uint32_t my_network_size; //yolov4-tiny NBG extern uint32_t my_input_size; //yolov4-tiny input_0.dat
其中:
在 main() 函数中赋值
network_address = (uint32_t *)0xE0000000; input_dat0_address = (uint32_t *)0xE1000000; input_dat1_address = (uint32_t *)0xE2000000; my_network_size = 3816092; my_input_size = 519168;
根据NBG文件和图片的二进制文件大小,分别修改 my_input_size 和 my_network_size 中的值。
示例中不需要修改。如果更改了参数,则需要重新编译工程。
如果需要更换其他数据类型的网络模型,需要替换文件中 MY_INPUT_SIZE 和 MY_NETWORK_SIZE,同时重新下载 input_0.dat 和 network_binary.nb 即可。
程序只能推理二进制文件,并且 NBG 文件和输入文件都是在程序开始运行前,通过仿真器,先加载至 DDR 的固定位置。
DSP端pnna推理示例程序
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
裸机模型部署
概述
DSP 做主控时,通过 pnna_driver 驱动,在 Pnna 上部署应用程序。
环境搭建
环境要求
仿真器驱动安装
连接仿真器
导入工程
下载示例工程
打开CCS7.4
打开file -> import -> C/C++ -> CCS Projects -> Next
选择 Select search-directory -> Browse… -> 选择 app_baremetal_dsp 文件夹
勾选 Copy projects into workspace
Finish
整个目录文件夹如下所示:
编译工程
鼠标右键单击 project 工程文件 -> Build Project 即可。
或者单击 project 工程选中后,单击 CCS 界面上编译图标按钮即可。
编译完成后,在 Debug 目录下会生成可执行程序:project.out
连接至目标板
CCS界面选择View->Target Configurations,显示 Target Configurations 小窗口,选择 Projects 下project中的 m6678ne.ccxml文件,即 project 工程下的 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、框的宽、框的高
流程解释
NBG和input
NBG和input在 nn_api.h 文件中的定义:
其中:
在 main() 函数中赋值
根据NBG文件和图片的二进制文件大小,分别修改 my_input_size 和 my_network_size 中的值。
示例中不需要修改。如果更改了参数,则需要重新编译工程。
如果需要更换其他数据类型的网络模型,需要替换文件中 MY_INPUT_SIZE 和 MY_NETWORK_SIZE,同时重新下载 input_0.dat 和 network_binary.nb 即可。
程序只能推理二进制文件,并且 NBG 文件和输入文件都是在程序开始运行前,通过仿真器,先加载至 DDR 的固定位置。
应用程序推理流程
整体流程