RISC-V MCU中文社区

TinyMaix上手之第1讲在Nuclei平台运行TinyMaix

发表于 2023-07-26 12:45:52
0
2587
0

TinyMaix上手之第1讲在Nuclei平台运行TinyMaix

这一讲描述在Nuclei qemu平台上运行TinyMaix的步骤,如果手中有Nuclei的开发板,也可以上板测试,步骤相差不大,详细可以参考《TinyMaix ported to Nuclei》。

Nuclei提供两种方式来使用npk-tinymaix仓:

  1. 通过Nuclei Studio IDE 导入npk-tinymaix包,建立工程(上手比较简单)

  2. 命令行方式,vscode 建立nuclei SDK工程,然后导入npk-tinymaix包(Makefile方式,略复杂)

以下分别进行介绍。

1 使用Nuclei Studio IDE

step1:下载Nuclei Studio IDE

官网地址:Nuclei Studio IDE

可以下载windows版本最新版本(当前是:2022.12)

step2:下载TinyMaix zip包

访问链接:

# 注意选择nuclei-main分支
https://github.com/Nuclei-Software/npk-tinymaix/tree/nuclei-main

下载zip包即可,如下:

如果因为网络中断原因,无法完整的下载zip包,也可以通过git方式下载(需要能访问github),然后手动压缩获得zip包。

# 在windows环境使用git-bash,或者在Ubuntu环境执行,使用nuclei-main分支
$ git clone -b nuclei-main https://github.com/Nuclei-Software/npk-tinymaix.git
$ zip -r npk-tinymaix.zip npk-tinymaix/

step3:打开Nuclei Studio IDE,下载Nuclei SDK包,并加载TinyMaix zip包

注意:Nuclei SDK版本需>=0.4.1,最终处于installed状态。

然后,导入TinyMaix zip包:

step4:建立tinyMaix工程

详细可参考《Nuclei StudioIDE使用说明

  1. 选择正确的SDK

File->New->Project->New Nuclei RISC-V C/C++ Project->Next

  1. 建立工程

    点击下拉菜单可以查看到,TinyMaix包提供了6个用例,这里选择cifar10为例。

这样,工程就建立完毕了。

step5:编译工程及调试

编译工程:

注意:

建立工程时,我们选择的下载方式是DDR模式, 是因为TinyMaix需要较大的内存,如果选取ilm的下载模式,编译时会遇到 section .text will not fit in region ilm的报错(内存不足), 需要手动将 ilm/dlm 的大小 从64K/64K 改到512K/512K,如下:

# IDE: nuclei_sdk/SoC/evalsoc/Board/nuclei_fpga_eval/Source/GCC/gcc_evalsoc_ilm.ld
OUTPUT_ARCH( "riscv" )

ENTRY( _start )

MEMORY
{
ilm (rxa!w) : ORIGIN = 0x80000000, LENGTH = 512K # change 64K to 512K
ram (wxa!r) : ORIGIN = 0x90000000, LENGTH = 512K # change 64K to 512K
}

在qemu上运行:

2 使用vscode(命令行方式)

需要先用vscode 建立nuclei SDK工程,然后导入npk-tinymaix包

step1:下载Nuclei SDK

Nuclei SDK版本需>=0.4.1,在windows系统,使用git-bash或powershell界面用git下载master上最新的版本即可

$ git clone https://github.com/Nuclei-Software/nuclei-sdk

step2:下载Nuclei工具链

工具链包括gcc编译工具链与qemu运行环境,这些都集成到IDE里了,下载Nuclei studio IDE即可使用(免安装)。

官网地址:Nuclei Studio IDE

可以下载windows版本最新版本(当前是:2022.12)

step3:使用VScode建立SDK工程

  1. 导入nuclei-sdk工程:

  1. 设置工具链路径:

  1. 编译helloworld用例:

进入helloworld用例目录:

$ cd application\baremetal\helloworld

# SOC 选择evalsoc CORE可选择n300 n900 nx900等,默认ilm模式
$ make SOC=evalsoc CORE=nx900 clean run_qemu

在qemu中运行,执行结果如下,log表明执行成功:

step4:将npk-tinymaix包导入SDK工程

下载npk-tinymaix包,

# 在windows环境使用git-bash,或者在Ubuntu环境执行,使用nuclei-main分支
$ git clone -b nuclei-main https://github.com/Nuclei-Software/npk-tinymaix.git

将npk-tinymaix放在nuclei-sdk/Componets目录下:

注意:包名要改为tinymaix(因为build.mk文件写的这个名字)

nuclei-sdk
├─application
├─Build
├─Components
│ └─tinymaix  # 将npk-tinymaix放在nuclei-sdk/Componets文件夹下,名字改为tinymaix
├─doc
├─NMSIS
├─OS
├─SoC
├─test
└─tools

step5:编译并运行tinyMaix用例

修改Makefile,(当前版本需要这样修改,后续可能会改掉)

打开 nuclei-sdk/Components/tinymaix/examples/Makefile.common
设置 NUCLEI_SDK_ROOT,它表示nuclei-sdk的位置

编译并在qemu上运行tinyMaix用例:

$ cd Components\tinymaix\examples\cifar10
# SOC 选择evalsoc CORE可选择n300 n900 nx900等,下载模式选择ddr
$ make SOC=evalsoc CORE=nx900fd DOWNLOAD=ddr clean run_qemu

执行log如下,预测到是bird,预测正确:

Nuclei SDK Build Time: Jul 26 2023, 10:21:47
Download Mode: DDR
CPU Frequency 999999406 Hz
CPU HartID: 0
cifar10 demo
================================ model stat ================================
mdl_type=0 (int8))
out_deq=1
input_cnt=1, output_cnt=1, layer_cnt=6
input 3dims: (32, 32, 3)
output 1dims: (1, 1, 10)
main buf size 11264; sub buf size 0
//Note: PARAM is layer param size, include align padding

Idx     Layer           outshape       inoft   outoft PARAM   MEMOUT OPS
---     Input           32, 32, 3     -       0       0       3072   0
000     Conv2D           16, 16, 32     0       3072   2656   8192   614400
001     Conv2D           8, 8, 32     3072   0       25856   2048   1638400
002     Conv2D           4, 4, 64     0       10240   51712   1024   819200
003     Reshape           1, 1,1024   10240   10240   0       1024   0
004     FC               1, 1, 10     10240   0       10320   10     10240
005     Softmax           1, 1, 10     0       11208   0       10     60

Total param ~88.4 KB, OPS ~3.08 MOPS, buffer 11.0 KB

===tm_run start 106 us, finish 12847 us
===tm_run use 12.741 ms
0: 0.004
1: 0.000
2: 0.973
3: 0.004
4: 0.023
5: 0.004
6: 0.004
7: 0.004
8: 0.004
9: 0.004
### Predict output is: Class 2, bird, prob 0.973

注意: 如果编译运行时,DOWNLOAD=ilm时,可能会遇到section .text will not fit in region ilm的报错(内存不足), 需要手动将 ilm/dlm 的大小 从64K/64K 改到512K/512K,处理方法与上一节的注意事项一致。

参考:

  1. TinyMaix ported to Nuclei


喜欢0
用户评论
sureZ-ok

sureZ-ok 实名认证

懒的都不写签名

积分
问答
粉丝
关注
专栏作者
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板