跳到主要内容

示例项目

ZStudio 中内置了部分示例项目。用户可以跟随示例项目熟悉 ZStudio 基本使用流程及各项功能。

Hello_with_dsp_and_nn_sdk_0.4.0

Hello_with_dsp_and_nn 是在芯来科技的 NucleiStudio 中编译后导出的项目。本节将用此示例项目演示如何在开发板上运行和调试项目。

导入示例项目

用户可以遵循以下步骤将示例项目导入 ZStudio:

  1. 在菜单栏中选择"文件" > "导入 Makefile 项目"。
  2. 导入 Makefile 项目弹窗中,指定 hello_with_dsp_and_nn_sdk_0.4.0 项目的根目录。
  3. 指定 入口 Makefile 文件,点击 browse-button 图标,在 hello_with_dsp_and_nn_sdk_0.4.0\Debug 目录下找到 Makefile 文件。
  4. 点击"导入"并选择在当前窗口或在新窗口打开,等到解决方案管理器中导入示例文件。

更新 Makefile 项目配置

在 ZStudio 中构建示例项目前,需要修正项目路径和不兼容的编译选项。

  1. 点击右下角弹窗中的"修复 Makefile 项目"更新项目配置。

    修复 Makefile 项目
  2. 修正项目路径:

    为了确保 ZStudio 能正确找到示例项目,需要将项目路径由 /home/tptuser/NucleiStudio_workspace/hello_with_dsp_and_nn_sdk_0.4.0 路径替换为 .

  3. 修正 ZCC 与 GCC 不兼容的编译选项:

    • 移除项目配置中所有的 -mtune=nuclei-300-series
    • 移除项目配置文件中所有的 stdc++ 库;需要移除所有完整的 JSON,即 ,{"value":"stdc++"}
    • 给编译器和链接器传 --target=riscv32-unknown-elf 参数,即指定目标平台
    • --specs=nano.specs --specs=nosys.specs 参数替换为 --config nano.cfg 参数

此项目中所有需要修复的内容如下图所示,点击"应用"即可完成修复。

更新 Makefile 项目配置
提示

在命令面板(Ctrl+Shift+P)中搜索并点击"修复 Makefile 项目"可重新调出弹窗。

构建示例项目

  1. 项目快捷控制中选择调试配置,点击开始构建。

  2. 构建控制台中检查项目构建输出;用户可通过构建控制台的下拉框过滤不同的输出信息。

  3. 构建完成后,在项目导航 output 节点或文件导航 hello_with_dsp_and_nn_sdk_0.4.0\output\debug 目录下检查是否生成了项目可执行文件或目标文件。

    Build the demo project

连接开发板运行和调试示例项目

  1. 将开发板通过 USB 连接计算机,确认电脑可以正确识别开发板设备。

    检查是否需要安装驱动,请访问 Nuclei Board Labs 遵循指导安装适用于 N300 的 Linux 和 Windows 驱动。

  2. 新建一个串行端口连接

    在"视图"下拉菜单中选择"串口监控工具",点击 + 按钮配置串行端口连接参数,在串行端口下拉框中选择自动检测到的串行通讯端口,点击"确定"创建串口连接。

    创建串行端口连接

    状态灯变为绿色代表当前串行端口连接成功。 开发板与当前 PC 断开连接将会导致串行端口连接失败,状态灯变为红色。

    串行端口连接成功
  3. 添加并启动 OpenOCD 配置

    在"视图"下拉菜单中选择"OpenOCD 资源管理器",点击 + 按钮创建 OpenOCD 配置,用户需要指定 OpenOCD 可执行文件和配置文件的位置。连接芯来科技 N300 开发板可遵循以下指引:

    配置OpenOCD
    • 前往芯来科技官网下载 OpenOCD 可执行文件,推荐 2022.12 版本。

    • OpenOCD 配置文件存放在示例项目文件夹下 ${projectPath}/nuclei_sdk/SoC/demosoc/Board/nuclei_fpga_eval/openocd_demosoc.cfg

    右键已添加的 OpenOCD 选择开启或关闭当前 OpenOCD 的进程,状态灯变为绿色代表当前 OpenOCD 进程正在进行。

    成功启动OpenOCD
    提示

    开发板电源关闭或与 PC 断开连接均可能导致 OpenOCD 与开发板的连接断开,此时状态灯为绿色仅代表当前 OpenOCD 进程正在进行,需检查后重启 OpenOCD。

  4. 指定运行和调试配置

    项目快捷控制点击 gear-button(运行/调试配置)打开配置窗口。指定开发板为运行和调试的连接目标,选择与开发板匹配的 OpenOCD 配置。

    指定运行和调试配置
  5. 回到解决方案资源管理器,点击 debug-start-button 开始运行项目,在串口监控工具中检查项目输出。

    检查项目输出
  6. 添加断点,开启调试会话。调试器运行到它遇到第一个断点停止。点击 "Step Over" 并在串口监控工具中检查项目输出。

    连接开发板开启调试会话

AccInst

本节将用 AccInst 示例项目演示如何利用程序性能分析工具定位函数层级性能瓶颈并进行针对性的代码优化。

打开 AccInst 解决方案

用户可以遵循以下步骤在 ZSolution 中打开示例项目:

  1. 在菜单栏选择"文件" > "从示例解决方案开始",在下拉框中选择 AccInst 并打开。

  2. 查看 AccInst 解决方案中的 Normal 项目和 Accelerated 项目。和 Normal 项目相比, Accelerated 项目在源码中添加了特殊加速指令。

    添加加速指令

构建

用户可以遵循以下步骤构建 Normal 项目和 Accelerated 项目:

  1. Normal 项目设置为当前活动项目,选择 Debug 配置和 RISC-V 架构,点击"构建",并在构建控制台中确认构建输出。

    构建 <em>Normal</em> 项目
  2. Accelerated 项目设置为当前活动项目,其他配置保持不变,点击"构建",并在构建控制台中确认构建输出。

    构建 <em>Accelerated</em> 项目

执行性能分析

用户可以遵循以下步骤为 Normal 项目和 Accelerated 项目执行性能分析:

  1. 成功构建后,将 Normal 项目设置为当前活动项目,点击菜单栏 "运行" >"性能分析"生成该项目的性能分析数据,性能分析完成之前不要重新执行该行为,以免生成错误数据。完成后右下角会生成提示信息。

    为 *Normal* 项目执行性能分析
  2. Accelerated 项目设置为当前活动项目,点击菜单栏 "运行" > "性能分析"生成该项目的性能分析数据,性能分析完成之前不要重新执行该行为,以免生成错误数据。完成后右下角会生成提示信息。

    为 *Accelerated* 项目执行性能分析

对比性能分析结果

根据函数执行统计(Function Summary)中的 self cycleself instructiontpt_mat_cmplx_mult_q15 为瓶颈函数。函数 tpt_mat_cmplx_mult_q15 包含了一个三层嵌套的循环。最内层的循环执行矩阵乘法运算。由于最内层循环是 CPU 花费最多时间的地方,因此优化 tpt_mat_cmplx_mult_q15 函数的性能会对整个代码的性能产生改进。

用户可以遵循以下步骤利用对比工具直观比较性能分析结果:

  1. 在主菜单中,点击"视图" > "性能分析对比" 调出对比工具。

  2. 在"性能分析对比"视图的左侧栏中,右键 Normal 项目的性能分析结果,并点击"选为对比基准"。

    将 *Normal* 项目设置为对比基准
  3. 点击comparison-configuration-button 按钮打开设置窗口,调整完设置后,点击 "确定" 关闭窗口。

    • 选择"程序性能指标对比"的数据可视化形式:至少选择图或表格中的一种形式。

    • 选择对比项:默认对比项为"指令总数","周期总数"以及"单位周期执行的指令数",用户可自行选择对比项。

  4. 用户可以按住 ShiftCtrl 键选择两个结果,右击其中一个,然后选择"对比"。

    选择 *Normal* 和 *Accelerated* 性能分析结果进行对比
  5. 性能分析对比视图将在编辑器中打开。

    性能分析对比

Accelerated 项目中 tpt_mat_cmplx_mult_q15 函数 selfcycleself instruction 指标的降低以及项目总周期数和总指令数的降低证明了优化瓶颈函数会提升整个程序的性能。