这一讲描述在Nuclei qemu平台上运行TinyMaix的步骤,如果手中有Nuclei的开发板,也可以上板测试,步骤相差不大,详细可以参考《》。
Nuclei提供两种方式来使用npk-tinymaix仓:
通过Nuclei Studio IDE 导入npk-tinymaix包,建立工程(上手比较简单)
命令行方式,vscode 建立nuclei SDK工程,然后导入npk-tinymaix包(Makefile方式,略复杂)
以下分别进行介绍。
step1:下载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工程
详细可参考《》
选择正确的SDK
File->New->Project->New Nuclei RISC-V C/C++ Project->Next
建立工程
点击下拉菜单可以查看到,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上运行:
需要先用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即可使用(免安装)。
官网地址:
可以下载windows版本最新版本(当前是:2022.12)
step3:使用VScode建立SDK工程
导入nuclei-sdk工程:
设置工具链路径:
编译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用例
打开 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,处理方法与上一节的注意事项一致。
参考:
《》