先楫半导体

本视频由先楫资深嵌入式系统专家费振东(人称费教授)为大家介绍如何快速上手HPM6700/6400系列。

产品信息可访问以下链接了解详情: 

官网:www.hpmicro.com 

产品页:http://www.hpmicro.com/product/series.html?id=e1869a4a-6f70-49d1-b4de-5d52e0824d79

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 8

不管是工业自动化领域,还是汽车领域,抑或是生活家电领域,各个终端市场对电机性能都提出了更高的要求。它们不仅需要电机能够做到高效率和多功能控制,还需要电机在追求高转速的同时实现低噪音低振动的控制效果。在与日俱增的高标准性能要求下,高性能成了电机芯片竞争的关键。

纵观整个电机控制芯片市场,从低成本通用伺服驱控到中高性能通用伺服驱控,长于控制的MCU单芯片方案都是最常见且最受欢迎的,而且现在VC/FOC功能几乎已成为电机MCU的标配,是体现控制能力的核心竞争力。虽然严格来说,VC和FOC二者概念上是有差异的,但在大多数场景里,二者指的是同一种控制方法。VC矢量控制(Vector Control)将异步电动机的定子电流矢量分解为产生磁场的电流分量(励磁电流)和产生转矩的电流分量(转矩电流)分别加以控制,并同时控制两分量间的幅值和相位,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。VC矢量控制不仅解决了自然坐标系上实现电机速度、电流闭环负反馈控制难的问题,而且保证了优良的速度、转矩输出性能,在工控、汽车、家用、3D打印等行业得到了迅速的发展,成为主流电机控制的基本架构,其控制原理如下图所示:

1.png

图1 VC原理

如上图所示,VC矢量控制的核心源自于闭环负反馈,因此其带宽是电机控制产品最重要的衡量指标之一。具体来说,高带宽能够带来更快的指令响应时间和更优异的高频扰动抑制能力,这种能力最终体现在电机层面上的是更高的控制精度、更高的控制效率、更低的噪音和电机抖动。

而代码执行时间决定了带宽,是电机控制产品不可逾越的指标之一,这也造成了目前市场上电机控制产品性能输出有差异的现象。归根结底,电机控制的差异取决于芯片性能。其限制因素特别体现在以下三个方面:

  • 主控芯片主频限制:芯片主频不够高,无法做到高速运算,以及提升带宽;

  • 外环代码执行限制:内环代码通过原厂提供的硬件化方法可以执行很快,但是外环代码执行依旧不够快;

  • 代码硬件化限制:芯片所有代码硬件化,却产生了开发难以及无法做一些常见电机控制算法等问题。

因此想要实现更优秀的控制性能,电机控制MCU的选择非常关键。上海先楫半导体已经量产的RISC-V内核HPM6700/6400系列芯片抓住了上述主要矛盾,通过提升主频来解决电机控制行业的痛点,得益于RISC-V本身的简洁性和模块化设计,CPU能运行在更高的频率,带来更高的性能。以HPM6700/6400系列芯片为例,参数如下图所示:

2.png

图2 先楫HPM6700/6400系列芯片

HPM6700/6400系列高性能MCU展示了先楫半导体高性能芯片的研发实力,HPM6700/6400系列主频高达816MHz,不仅能够解决上文提到的电机控制性能的三大限制,而且契合现在电机多核驱控一体的发展趋势。HPM6700/6400系列还为电机系统提供了精度达2.5ns的4组共32路PWM输出以及4个正交编码器接口和4个霍尔传感器接口,完美适配高性能电机控制和数字电源运动控制系统。

< 解决方案分享>

先楫HPM6000系列芯片的1us电流环 3.png

图3 案例时序

案例使用先楫HPM6000系列芯片—HPM6400系列与HPM6300系列,采用图3所示的电流环时序,分别使用HPM6400系列与HPM6300系列芯片实测VC矢量控制中的电流环执行时间。具体而言:从提升电流内环带宽的角度出发,将图1中的VC结构划分为外环(位置速度环)、内环(电流环),如图4所示:

4.png

图4 等效VC结构

在VC矢量控制中,由于采用了坐标变换,dq轴电流在稳态情况下都是直流给定,而只在加减速或者突加减负载的时候,速度环会等效输出一个阶跃指令,电流环的带宽就是电流环能够以多快的速度去响应这个指令,带宽越大响应越快。所以说电流环执行时间直接决定了电流环的带宽,是电机控制产品必须考量的指标。

结果,先楫半导体已量产系列芯片实测的电流环执行时间如下图所示: 5.png

图5 HPM6400、6300系列芯片电流环执行时间实测数据

如图5所示,HPM6300系列芯片的电流环执行时间接近1us,HPM6400系列电流环执行时间更是控制在1us以内,该优势不仅能够提升带宽,更是说明了先楫高性能芯片能够带来高速运算能力,实现复杂电机控制算法(如多电机同步、参数辨识、SVC(Senseless Vector Control)、谐波注入等)与电流环的同步,甚至是以更高的频率执行。在高性能先楫HPM6000系列芯片的加持下,电机产品能够不失精度地展现出更优异的控制性能。

高性能电机控制 

HPM6000系列芯片介绍

HPM6700/6400系列为HPM6000系列的旗舰产品,采用RISC-V内核(*67为双核,64为单核),主频达816MHz,凭借先楫半导体的创新总线架构、高效的L1缓存和本地存储器,创下了高达9220CoreMark和高达4651 DMIPS 的MCU性能新纪录。

除了高算力RISC-V CPU,HPM6700/6400系列产品还创造性地整合了一系列高性能外设,包括支持2D图形加速的显示系统、高速USB、千兆以太网、CAN FD等通讯接口,高速12位和高精度16位模数转换器,面向高性能电机控制和数字电源的运动控制系统。

HPM6300系列是HPM6000系列的另一款力作,采用单核32位RISC-V处理器,主频超过600 MHz,性能超过3390CoreMark和1710 DMIPS。同时,HPM6300系列支持双精度浮点运算,模拟模块包括16位模数转换器,12位数模转换器和模拟比较器,配以多组纳秒级高分辨率PWM,为电机控制和数字电源应用提供强大硬件支持。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 30

中国上海(2022年12月28日) ——国产高性能MCU厂商先楫半导体(下文称 “先楫”)宣布正式推出主频高达1GHz的MCU产品 HPM64G0 。这是继去年11月先楫发布超高性能RISC – V微控制器HPM6700/6400系列以来,该系列新增的一款硬核新力量。相比早前发布的HPM6700/6400系列其它MCU产品,HPM64G0运算性能提升至少20%,主频成功迈入GHz领域。这使得HPM64G0兼具MPU的高算力及MCU的高实时性,刷新先楫自己保持的通用MCU性能纪录,持续推动国产MCU的高速发展。

“ 先楫半导体CEO曾劲涛先生表示:先楫的HPM6700/6400系列自量产以来,得到了许多来自市场的积极反馈,用户皆惊艳于其可媲美国际品牌的超高性能。如今,整个系列也走过近一年时间,先楫团队持续开疆拓土,重磅推出1GHz 主频HPM64G0,为客户和开发者带来更多全新性能体验。未来,先楫也会继续努力,希望接下来能带给行业应用更多实打实的国产化创新。”

1.png


▲一张图了解HPM64G0

▲首款采用40nm工艺 GHz 高性能MCU

先楫半导体通过自主创新设计成功研发出HPM64G0, 开创了国产MCU前所未有的超高性能纪录。HPM64G0是一款基于RISC-V内核的高性能、低功耗、高集成度微控制器芯片,是行业内首个采用 40nm工艺突破1GHz 主频的MCU产品。该产品的创新设计,结合其RISC-V内核,进一步打破国外技术垄断,真正实现高性能MCU产品的自主可控。HPM64G0的问世为需要实时控制又兼具终端算力的应用提供了极大便利,可广泛应用于AI运算、高速运动控制,机器视觉及各种频域运算应用。HPM64G0支持RV32-IMPAFDC扩展,动态分支预测等,配备32KB指令/32KB数据高速一级缓存,256KB指令/256KB数据本地存储器,支持零周期等待访问。根据实测结果,HPM64G0 MCU单核主频算力可超1Ghz,主频运算可高达5650 Coremark 和2850 DMIPS,是目前市场上高性能MCU的理想之选。此外,HPM64G0还配置强大的FPU和DSP,32KB 高速缓存 (I/D Cache) 和高达 512KB 的零等待指令和数据本地存储器 (ILM/DLM),加上1.5 MB内置通用SRAM,极大避免了低速外部存储器引发的性能损失。

功耗方面,HPM64G0集成高效率DCDC 转换器和 LDO, 无需外挂PMIC,支持系统单电源供电,可动态调节输出电压实现性能-功耗平衡,兼顾了电源的灵活性,易用性和效率,可灵活支持各种功耗模式,优化电源使用效率。HPM64G0以1GHz满频运行时,芯片整体功耗可低至700mW,无需外加散热片。

HPM64G0还拥有强大的多媒体支持能力和丰富外设接口,其适配的LCD显示控制器可支持高达1366x768 60fps的八图层RGB显示支持,带2D图形加速。HPM64G0还可支持双千兆以太网,IEEE1588,双目摄像头等。其强大的外设接口也是用户们给予高度肯定的地方,具有4 组共32 路精度达2.5ns 的PWM、3 个12 位高速 ADC 5MSPS、1个16 位高精度 ADC 2MSPS、4 个模拟比较器和多达 29 个模拟输入通道。

▲持续推动RISC-V高性能应用落地

HPM64G0属于真正意义上填补了RISC-V在1GHz高性能MCU的空白,助力RISC-V高性能应用持续落地。HPM64G0通过了严格的可靠性测试,可被广泛应用于消费类及物联网等不同领域。先楫半导体以行动力来创造更多有价值有市场竞争力的MCU产品,让全球更多的RISC-V关注者和商业客户可体验高性能MCU的魅力。

样片申请已启动 >>>

HPM64G0系列产品现已开放接受订单,样片将于2023年2月底开始供货。如需订购可邮件至 info@hpmicro.com 或拨打021-5899-3108。欲了解更多详情,敬请关注公众号“先楫芯上人”、“先楫半导体”或访问官网www.hpmicro.com

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 165

本文内容来自先楫开发者 @Xusiwei1236,介绍了如何在HPM6750上运行边缘AI框架,感兴趣的小伙伴快点来看看。

---------------  以下为测评内容 ---------------

TFLM是什么?

你或许都听说过TensorFlow——由谷歌开发并开源的一个机器学习库,它支持模型训练和模型推理。

今天介绍的TFLM,全称是TensorFlow Lite for Microcontrollers,翻译过来就是“针对微控制器的TensorFlow Lite”。那TensorFlow Lite又是什么呢?

TensorFlow Lite(通常简称TFLite)其实是TensorFlow团队为了将模型部署到移动设备而开发的一套解决方案,通俗的说就是手机版的TensorFlow。下面是TensorFlow官网上关于TFLite的一段介绍:

“TensorFlow Lite 是一组工具,可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型,以便实现设备端机器学习。”

而我们今天要介绍的TensorFlow Lite for Microcontrollers(TFLM)则是 TensorFlow Lite的微控制器版本。这里是官网上的一段介绍:

“ TensorFlow Lite for Microcontrollers (以下简称TFLM)是 TensorFlow Lite 的一个实验性移植版本,它适用于微控制器和其他一些仅有数千字节内存的设备。它可以直接在“裸机”上运行,不需要操作系统支持、任何标准 C/C++ 库和动态内存分配。核心运行时(core runtime)在 Cortex M3 上运行时仅需 16KB,加上足以用来运行语音关键字检测模型的操作,也只需 22KB 的空间。”

这三者一脉相承,都出自谷歌,区别是TensorFlow同时支持训练和推理,而后两者只支持推理。TFLite主要用于支持手机、平板等移动设备,TFLM则可以支持单片机。从发展历程上来说,后两者都是TensorFlow项目的“支线项目”。或者说这三者是一个树形的发展过程,具体来说,TFLite是从TensorFlow项目分裂出来的,TFLite-Micro是从TFLite分裂出来的,目前是三个并行发展的。在很长一段时间内,这三个项目的源码都在一个代码仓中维护,从源码目录的包含关系上来说,TensorFlow包含后两者,TFLite包含tflite-micro。

HPM SDK中的TFLM

  • TFLM中间件

HPM SDK中集成了TFLM中间件(类似库,但是没有单独编译为库),位于hpm_sdk\middleware子目录:

1.png

这个子目录的代码是由TFLM开源项目裁剪而来,删除了很多不需要的文件。

  • TFLM示例

HPM SDK中也提供了TFLM示例,位于hpm_sdk\samples\tflm子目录:

2.png

示例代码是从官方的persion_detection示例修改而来,添加了摄像头采集图像和LCD显示结果。

由于我手里没有配套的摄像头和显示屏,所以本篇没有以这个示例作为实验。

在HPM6750上运行TFLM基准测试

接下来以person detection benchmark为例,讲解如何在HPM6750上运行TFLM基准测试。

  • 将person detection benchmark源代码添加到HPM SDK环境

按照如下步骤,在HPM SDK环境中添加person detection benchmark源代码文件:

1、在HPM SDK的samples子目录创建tflm_person_detect_benchmark目录,并在其中创建src目录;

2、从上文描述的已经运行过person detection benchmark的tflite-micro目录中拷贝如下文件到src目录:

  • tensorflow\lite\micro\benchmarks\person_detection_benchmark.cc

  • tensorflow\lite\micro\benchmarks\micro_benchmark.h

  • tensorflow\lite\micro\examples\person_detection\model_settings.h

  • tensorflow\lite\micro\examples\person_detection\model_settings.cc

3、在src目录创建testdata子目录,并将tflite-micro目录下如下目录中的文件拷贝全部到testdata中:

  1. tensorflow\lite\micro\tools\make\gen\linux_x86_64_default\genfiles\tensorflow\lite\micro\examples\person_detection\testdata

4、修改person_detection_benchmark.cc、model_settings.cc、no_person_image_data.cc、person_image_data.cc 文件中部分#include预处理指令的文件路径(根据拷贝后的相对路径修改);

5、person_detection_benchmark.cc文件中,main函数的一开始添加一行board_init();、顶部添加一行#include "board.h”

  • 添加CMakeLists.txt和app.yaml文件

在src平级创建CMakeLists.txt文件,内容如下:

cmake_minimum_required(VERSION 3.13)

set(CONFIG_TFLM 1)

find_package(hpm-sdk REQUIRED HINTS $ENV{HPM_SDK_BASE})
project(tflm_person_detect_benchmark)
set(CMAKE_CXX_STANDARD 11)

sdk_app_src(src/model_settings.cc)
sdk_app_src(src/person_detection_benchmark.cc)
sdk_app_src(src/testdata/no_person_image_data.cc)
sdk_app_src(src/testdata/person_image_data.cc)
sdk_app_inc(src)sdk_ld_options("-lm")
sdk_ld_options("--std=c++11")
sdk_compile_definitions(__HPMICRO__)
sdk_compile_definitions(-DINIT_EXT_RAM_FOR_DATA=1)
# sdk_compile_options("-mabi=ilp32f")
# sdk_compile_options("-march=rv32imafc")
sdk_compile_options("-O2")
# sdk_compile_options("-O3")
set(SEGGER_LEVEL_O3 1)
generate_ses_project()

在src平级创建app.yaml文件,内容如下:

dependency:  
   - tflm
  • 编译和运行TFLM基准测试

接下来就是大家熟悉的——编译运行了。首先,使用generate_project生产项目:

3.png

接着,将HPM6750开发板连接到PC,在Embedded Studio中打卡刚刚生产的项目:

4.png

这个项目因为引入了TFLM的源码,文件较多,所以右边的源码导航窗里面的Indexing要执行很久才能结束。

然后,就可以使用F7编译、F5调试项目了:

5.png

编译完成后,先打卡串口终端连接到设备串口,波特率115200。启动调试后,直接继续运行,就可以在串口终端中看到基准测试的输出了:

============================== 
hpm6750evkmini clock summary
==============================
cpu0:            816000000Hz
cpu1:            816000000H
zaxi0:            200000000Hz
axi1:            200000000Hz
axi2:            200000000Hz
ahb:             200000000Hz
mchtmr0:         24000000Hz
mchtmr1:         1000000Hz
xpi0:            133333333Hz
xpi1:            400000000Hz
dram:            166666666Hz
display:         74250000Hz
cam0:            59400000Hz
cam1:            59400000Hz
jpeg:            200000000Hz
pdma:            200000000Hz
=============================

----------------------------------------------------------------------
$$\   $$\ $$$$$$$\  $$\      $$\ $$\
$$ |  $$ |$$  __$$\ $$$\    $$$ |\__|
$$ |  $$ |$$ |  $$ |$$$$\  $$$$ |$$\  $$$$$$$\  $$$$$$\   $$$$$$\
$$$$$$$$ |$$$$$$$  |$$\$$\$$ $$ |$$ |$$  _____|$$  __$$\ $$  __$$\
$$  __$$ |$$  ____/ $$ \$$$  $$ |$$ |$$ /      $$ |  \__|$$ /  $$ |
$$ |  $$ |$$ |      $$ |\$  /$$ |$$ |$$ |      $$ |      $$ |  $$ |
$$ |  $$ |$$ |      $$ | \_/ $$ |$$ |\$$$$$$$\ $$ |      \$$$$$$  |
\__|  \__|\__|      \__|     \__|\__| \_______|\__|       \______/
----------------------------------------------------------------------

InitializeBenchmarkRunner took 114969 ticks (4 ms).
WithPersonDataIterations(1) took 10694521 ticks (445 ms)
DEPTHWISE_CONV_2D took 275798 ticks (11 ms).
DEPTHWISE_CONV_2D took 280579 ticks (11 ms).
CONV_2D took 516051 ticks (21 ms).
DEPTHWISE_CONV_2D took 139000 ticks (5 ms).
CONV_2D took 459646 ticks (19 ms).
DEPTHWISE_CONV_2D took 274903 ticks (11 ms).
CONV_2D took 868518 ticks (36 ms).
DEPTHWISE_CONV_2D took 68180 ticks (2 ms).
CONV_2D took 434392 ticks (18 ms).
DEPTHWISE_CONV_2D took 132918 ticks (5 ms).
CONV_2D took 843014 ticks (35 ms).
DEPTHWISE_CONV_2D took 33228 ticks (1 ms).
CONV_2D took 423288 ticks (17 ms).
DEPTHWISE_CONV_2D took 62040 ticks (2 ms).
CONV_2D took 833033 ticks (34 ms).
DEPTHWISE_CONV_2D took 62198 ticks (2 ms).
CONV_2D took 834644 ticks (34 ms).
DEPTHWISE_CONV_2D took 62176 ticks (2 ms).
CONV_2D took 838212 ticks (34 ms).
DEPTHWISE_CONV_2D took 62206 ticks (2 ms).
CONV_2D took 832857 ticks (34 ms).
DEPTHWISE_CONV_2D took 62194 ticks (2 ms).
CONV_2D took 832882 ticks (34 ms).
DEPTHWISE_CONV_2D took 16050 ticks (0 ms).
CONV_2D took 438774 ticks (18 ms).
DEPTHWISE_CONV_2D took 27494 ticks (1 ms).
CONV_2D took 974362 ticks (40 ms).
AVERAGE_POOL_2D took 2323 ticks (0 ms).
CONV_2D took 1128 ticks (0 ms).
RESHAPE took 184 ticks (0 ms).
SOFTMAX took 2249 ticks (0 ms).

NoPersonDataIterations(1) took 10694160 ticks (445 ms)
DEPTHWISE_CONV_2D took 274922 ticks (11 ms).
DEPTHWISE_CONV_2D took 281095 ticks (11 ms).
CONV_2D took 515380 ticks (21 ms).
DEPTHWISE_CONV_2D took 139428 ticks (5 ms).
CONV_2D took 460039 ticks (19 ms).
DEPTHWISE_CONV_2D took 275255 ticks (11 ms).
CONV_2D took 868787 ticks (36 ms).
DEPTHWISE_CONV_2D took 68384 ticks (2 ms).
CONV_2D took 434537 ticks (18 ms).
DEPTHWISE_CONV_2D took 133071 ticks (5 ms).
CONV_2D took 843202 ticks (35 ms).
DEPTHWISE_CONV_2D took 33291 ticks (1 ms).
CONV_2D took 423388 ticks (17 ms).
DEPTHWISE_CONV_2D took 62190 ticks (2 ms).
CONV_2D took 832978 ticks (34 ms).
DEPTHWISE_CONV_2D took 62205 ticks (2 ms).
CONV_2D took 834636 ticks (34 ms).
DEPTHWISE_CONV_2D took 62213 ticks (2 ms).
CONV_2D took 838212 ticks (34 ms).
DEPTHWISE_CONV_2D took 62239 ticks (2 ms).
CONV_2D took 832850 ticks (34 ms).
DEPTHWISE_CONV_2D took 62217 ticks (2 ms).
CONV_2D took 832856 ticks (34 ms).
DEPTHWISE_CONV_2D took 16040 ticks (0 ms).
CONV_2D took 438779 ticks (18 ms).
DEPTHWISE_CONV_2D took 27481 ticks (1 ms).
CONV_2D took 974354 ticks (40 ms).
AVERAGE_POOL_2D took 1812 ticks (0 ms).
CONV_2D took 1077 ticks (0 ms).
RESHAPE took 341 ticks (0 ms).
SOFTMAX took 901 ticks (0 ms).

WithPersonDataIterations(10) took 106960312 ticks (4456 ms)

NoPersonDataIterations(10) took 106964554 ticks (4456 ms)

可以看到,在HPM6750EVKMINI开发板上,连续运行10次人像检测模型,总体耗时4456毫秒,每次平均耗时445.6毫秒。

在树莓派3B+上运行TFLM基准测试

  • 在树莓派上运行TFLM基准测试

树莓派3B+上可以和PC上类似,直接运行PC端的测试命令,得到基准测试结果:

6.png

可以看到,在树莓派3B+上的,对于有人脸的图片,连续运行10次人脸检测模型,总体耗时4186毫秒,每次平均耗时418.6毫秒;对于无人脸的图片,连续运行10次人脸检测模型,耗时4190毫秒,每次平均耗时419毫秒。

  • HPM6750和树莓派3B+、AMD R7 4800H上的基准测试结果对比

这里将HPM6750EVKMINI开发板、树莓派3B+和AMD R7 4800H上运行人脸检测模型的平均耗时结果汇总如下:

7.png

可以看到,在TFLM人脸检测模型计算场景下,HPM6750EVKMINI和树莓派3B+成绩相当。虽然HPM6750的816MHz CPU频率比树莓派3B+搭载的BCM2837 Cortex-A53 1.4GHz的主频低,但是在单核心计算能力上没有相差太多。

这里树莓派3B+上的TFLM基准测试程序是运行在64位Debian Linux发行版上的,而HPM6750上的测试程序是直接运行在裸机上的。由于操作系统内核中任务调度器的存在,会对CPU的计算能力带来一定损耗。所以,这里进行的并不是一个严格意义上的对比测试,测试结果仅供参考。

(本文参考链接:http://m.eeworld.com.cn/bbs_thread-1208270-1-1.html

直接转载来源:先楫芯上人

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 44

本期内容由先楫开发者社区大咖@xusiwei1236分享基于先楫HPM6750的轻量级AI推理框架,赶紧来瞧瞧~

一、TinyMaix是什么?

TinyMaix是国内sipeed团队开发一个轻量级AI推理框架,官方介绍如下:

TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意单片机上运行轻量级深度学习模型。

甚至在 Arduino ATmega328 (32KB Flash, 2KB RAM) 上都能基于 TinyMaix 进行手写数字识别。

TinyMaix官网提供了详细介绍,可以在本文末尾的参考链接中找到链接。

二、TinyMaix移植

本节介绍如何将TinyMaix移植到HPM6750,详细步骤如下:

2.1 开发环境搭建

先楫官方支持SDK开发环境和RT-Thread开发环境,两种开发环境的搭建方法均可在官方提供的开发板用户手册(HPM6750EVKMINI USER GUIDE.pdf 或 HPM6750EVK USER GUIDE.pdf 文件)中找到,也可以参考我此前发布的帖子,具体见本文最后的参考链接。

考虑到TinyMaix对于现已支持的MCU,基准测试都是基于裸机进行的,因此这里使用的是HPM SDK开发环境。另外,基于裸机的移植在RTOS环境下一般也可以运行。因此,对于MCU芯片的计算类开源项目的移植(例如这里的TinyMaix),最好是基于裸机进行。

使用的HPM SDK版本为0.14.0,使用的SEGGER Embedded Studio版本信息为:

SEGGER Embedded Studio for RISC-VRelease 6.40 Build 2022102501.51567Windows x64© 2014-2022 SEGGER Microcontroller GmbH© 1997-2022 Rowley Associates Ltd.segger-cc: version 15.0.0segger-ld: version 4.36.0segger-rtl: version 4.20.0GCC/BINUTILS: built using the GNU RISC-V Toolchain version GCC 12.20/Binutils 2.39 source distributionClang/LLVM: built using the version 15.0.0 source distribution

2.2 TinyMaix移植步骤

由于TinyMaix本身的源代码文件不多,整个移植过程相对还是比较简单的。

整体基本上分为三步:

  • 目录规划;
  • 修改源码;
  • 编译运行;

下面介绍具体操作步骤。

2.2.1 目录规划

考虑到TinyMaix和hpm_sdk都是使用CMake构建的,为了不对TinyMaix进行过多侵入性修改,这里采取的策略是——添加一个中间层。具体是将HPM6750平台的CMakeLists.txt文件放在TinyMaix源码目录的上一层,如下所示:
hpm_sdk/app/├── CMakeLists.txt     # HPM6750平台的CMakeLists.txt├── src│   └── benchmark.c└── TinyMaix/          # TinyMaix源码目录

2.2.2 修改源码

这里在src/benchmark.c文件内容如下:

#include <stdio.h>
#include "board.h"
#define MODEL_MNIST 1
#define MODEL_CIFAR10 2
#define MODEL_VWW 3
#define MODEL_MBNET 4
#define CONFIG_MODEL MODEL_CIFAR10 // 修改这一行切换 测试程序

#define main benchmark_main
#if (CONFIG_MODEL == MODEL_MNIST)
#include "mnist/main.c"
#elif (CONFIG_MODEL == MODEL_CIFAR10)
#include "cifar10/main.c"
#elif (CONFIG_MODEL == MODEL_VWW)
#include "vww/main.c"
#elif (CONFIG_MODEL == MODEL_MBNET)
#include "mbnet/label.c"#include "mbnet/main.c"
#endif
#undef main

int main(void)
{
    board_init();
 printf("benchmark start...\n");
     benchmark_main(0, NULL);    
     __asm__("wfi");
return 0;
}

为了不直接拷贝基准测试代码,简化代码结构,这里使用了不太常见的:

直接#include 某个.c文件;

在#include "xxx/main.c"前面,定义宏#define main benchmark_main,之后取消宏定义;

这样实现了将TinyMaix原有的测试代码作为benchmark.c一部分,而又不与这里的main函数相冲突的目的。

PS:这里为了简便,并没有把TinyMaix放到hpm_sdk的middleware目录,实际项目中使用的话最好将TinyMaix放到middleware目录。

另外,还需要修改`tm_port.h文件:

diff --git a/include/tm_port.h b/include/tm_port.h
index 357fc6b..5d1768c 100644
--- a/include/tm_port.h+++ b/include/tm_port.h
@@ -31,7 +31,7 @@ limitations under the License.
#define TM_OPT_LEVEL    TM_OPT0
#define TM_MDL_TYPE     TM_MDL_INT8
#define TM_FASTSCALE    (0)         //enable if your chip don't have FPU, may speed up 1/3, but decrease accuracy
-#define TM_LOCAL_MATH   (0)         //use local math func (like exp()) to avoid libm
+#define TM_LOCAL_MATH   (1)         //use local math func (like exp()) to avoid libm
#define TM_ENABLE_STAT  (1)         //enable mdl stat functions
#define TM_MAX_CSIZE    (1000)      //max channel num //used if INT8 mdl  //cost TM_MAX_CSIZE*4 Byte
#define TM_MAX_KSIZE    (5*5)       //max kernel_size   //cost TM_MAX_KSIZE*4 Byte
@@ -49,9 +49,10 @@ limitations under the License.
#define TM_DBGL()      TM_PRINTF("###L%d\n",__LINE__);

/******************************* DBG TIME CONFIG  ************************************/
-#include <sys/time.h>
-#include <time.h>
-#define  TM_GET_US()       ((uint32_t)((uint64_t)clock()*1000000/CLOCKS_PER_SEC))+
#include "board.h"
+#define  TM_GET_US()       (uint32_t)(HPM_MCHTMR->MTIME * 1000000uLL / clock_get_frequency(clock_mchtmr0))

#define TM_DBGT_INIT()     uint32_t _start,_finish;float _time;_start=TM_GET_US(); 
#define TM_DBGT_START()    _start=TM_GET_US();

2.2.3 编译运行

HPM6750项目的生成命令:

generate_project -b hpm6750evkmini -t flash_xip -f

HPM6750项目的编译、运行,具体可以开发环境搭建文章,链接见本文末尾。

手写数字识别(mnist模型),运行后,串口输出结果如下:

1.png

三、基准测试

下面是TinyMaix四种常用的基准测试模型的基准测试,四个模型分别为:

  • mnist——手写数字识别模型,输入28x28x1
  • cifar——10分类模型,输入32x32x3
  • vww——人体检测二分类模型,输入96x96x3,输出有无人
  • mbnet——1000分类模型,输入128x128x3

3.1 场景1: TM_MDL_INT8 + TM_OPT0

2.png

3.2 场景2: TM_MDL_INT8 + TM_OPT1
3.png
3.3 场景3: TM_MDL_FP32 + TM_OPT0

4.png

3.4 注意事项

  • 在SEGGER Embedded Studio中, 可以通过如下菜单Project 'xxx' Options -> Code -> Code Generation -> Optimization Level修改优化等级;
  • 在SEGGER Embedded Studio中, 默认的堆大小设置为16384 字节(16KB),不够运行vww96 和 mbnet128 模型,你可以通过菜单 Code -> Runtime Memory Area -> Heap Size修改具体配置大小,例如可以为524288(512KB);
  • 对于FP32模型,需要将RISC-V ISA设置从默认的rv32imac改为rv32gc(Code -> Code Generation -> RIS-V ISA),确保编译器可以生成浮点数操作指令。

四、代码仓

移植代码仓(包含全部修改):https://github.com/xusiwei/HPM6750_TinyMaix

benchmark代码仓(包含基准测试全部代码,包括CMakeLists.txt):https://github.com/xusiwei/HPM6750_TinyMaix_Benchmark

五、参考链接

  1. TinyMaix :超轻量级推理框架 - Sipeed Wiki

    https://wiki.sipeed.com/news/others/tinymaix_cnx/tinymaix_cnx.html

  2. 【先楫HPM6750系列】HPM SDK开发环境搭建和Hello World

    https://blog.csdn.net/xusiwei1236/article/details/124853859

  3. GCC floating-point options - SEGGER Wiki

    https://wiki.segger.com/GCC_floating-point_options

  4. Embedded Studio Library Heap - SEGGER Wiki

    https://wiki.segger.com/Embedded_Studio_Library_Heap

来源:先楫芯上人

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 28

2022年12月8日,由电子发烧友主办的2022第九届中国IoT大会在深圳圆满落幕,大会同步举行第七届中国IoT创新奖颁奖活动。在第七届中国IoT创新奖颁奖典礼上,先楫半导体凭借自主技术创新的开拓精神, 比肩国际先进的创新技术水平, 荣获 “技术创新奖”。本次的获奖产品为先楫高性能高实时 RISC-V 微控制器 HPM6700 系列,该系列填补了中国在高端MCU领域的空白,对于国内芯片市场乃至整个行业皆具有创新价值。

1.jpg

2022年,市场风云变幻。在产业驱动、需求驱动和价值驱动三个维度,中国IoT市场迎来了快速增长期,物联网芯片市场快速增长,物联网智能设备需求猛增。先楫HPM6700作为先楫半导体高性能高实时 RISC-V 微控制器HPM6000 家族的旗舰产品,主要应用于工业控制,矿业,汽车电子和AI边缘计算等领域, 物联网也是其发力的重要应用市场。 作为工业IoT的拳头产品, HPM6700系列的高算力、高集成度、高实时性、高安全性、高可靠性的性能特点可完美匹配工业IoT的各个应用场景。HPM6750单核运行频即可达到惊人的816MHz,加上2MB的超大片内SRAM,能完成IoT的各种复杂算法。在CoreMark跑分测试中,HPM6700获得了9220的高分,刷新了国际MCU领域的性能记录!

除了CPU的优异性能,HPM6700集成了非常丰富的片内外设。17个串口、4个CANFD、2个USB和双千兆以太网能满足工业、汽车网关的各种需求,是现场总线客户的首选!同时,HPM6700也是IoT网络的重要成员,其集成了2D图形加速、JPEG硬件解码、LCD控制器、I2S、数字音频输出等多媒体设备,加上完善的软件支持,能满足HMI、智能家居等客户的各种显示需求,轻松开发生动有趣的交互显示界面。

除此之外,HPM6700系列还具备以下优异性能特点:

  • 丰富外设,集成了性能优异的模拟器件、PWM等器件,能完成电机控制、数字电源等高实时性任务的挑战;

  • 拥有4个独立的PWM模块,共可输出32路灵活配置的PWM信号,能满足储能、太阳能等应用的要求;

  • 片上还集成了16bit ADC,2Msps的采样率能满足IOT领域的各种现场信号采集的需求;

  • HPM6700具备一个安全数据处理器 SDP,支持加解密运算 AES-128/256,也支持哈希运算 SHA-1/256和CRC32;并有安全调试、产品生命周期管理、安全启动等功能。     

先楫旨在提供完备和严密的芯片产品和配套技术支持为IOT客户的数据和代码的安全性保驾护航。值得一提的是,先楫的HPM6000家族MCU在设计和研发阶段就注重可靠性设计,HPM6750在2022年9月成功通过AEC - Q100 Grade 1的测试并已量产,能满足工业、汽车等各种复杂环境的应用。先楫半导体坚持中国定义、中国生产,面向中国客户,软件生态系统及开发工具也是完全自主研发,以开源开放的形式提供给每一位有需求的开发者使用,用积极的行动来实现MCU生态环境自主可控的发展。

关 于 先 楫 

先楫半导体是一家致力于高性能嵌入式解决方案的半导体公司,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。先楫半导体以产品质量为本,所有产品均通过严格的可靠性测试。目前已经量产的两个高性能通用MCU产品系列HPM6700/6400及HPM6300,性能领先国际同类产品,并完成AEC-Q100认证,出货超百万颗,全力服务中国工业、汽车和消费市场。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 23

随着近年来工业机器人、电子制造设备等产业的快速扩张,伺服系统在新兴产业中应用也越来越广。未来几年伺服市场(包括交流伺服、直流伺服、编码器、CNC控制器等产品)将实现30~40%左右的增速,预计2025年我国伺服系统市场规模将达到190亿元,同比增长12.4%。

在市场规模持续扩大的同时,伺服系统本身也呈现出新的特点:

  • 高精度、高性能:采用更高精度的编码器,具有更高的采样精度和数据位数;

  • 小型化:体积和重量不断变小,从而使机械设备的安装和使用更加便捷;

  • 集成化:伺服系统本身集成度更高,如集成各种编码器的接口、Ether CAT通讯等;此外还有多轴集成的趋势,如单芯片实现2轴、3轴等多轴伺服控制。

要实现更高性能、更高集成度的伺服系统设计,主控MCU的选择非常关键。在伺服系统主控MCU处理器内核的选择上,除传统的Arm外,现在还有RISC-V。得益于RISC-V本身的简洁性和模块化设计,CPU能运行在更高的频率,带来更高的性能。因此,基于RISC-V的MCU能让伺服系统实现更高性能及更高的集成度。

MCU的性能是从两个维度来衡量的:一个是CPU的性能,一个是外设的性能。CPU主频类似于速度,对于同一种架构的MCU,主频越高,MCU的速度就越快。处理器内核架构是影响处理器性能的关键因素,先进的架构具有更强大的指令集和更优秀的运算单元,因而拥有更为强大的算力。一般来说,越先进的内核架构,在单位时间内可以执行的指令数和处理数据的数量就越多。MCU的与伺服电机控制相关的外设包括用来采样电压和电流的模/数转换器(ADC)、能产生 PWM 信号的脉冲宽度调制器(PWM)等,这些外设的性能也决定了MCU的性能。

HPM6750就是上海先楫半导体公司开发的采用RISC-V 内核、具有高主频及创新总线架构的高性能MCU。HPM6750的CPU主频高达816MHz,模拟外设包括4组共32路精度达2.5ns的PWM、3个12位高速ADC以及1个16位高精度ADC,其性能在市场同类产品中居于领先水平。同时,上海先楫半导体公司还提供基于高性能MCU的各种解决方案,如伺服驱动、PLC、工业网关等,是工业4.0整体解决方案提供者!

1.png

▲HPM为工业4.0提供全面的解决方案


解决方案分享:先楫高性能MCU在多轴伺服控制的应用

案例一:三轴伺服运动控制,1分钟绘制世界地图

先楫的生态合作伙伴采用先楫半导体超高性能HPM6750开发的三轴伺服数控机床解决方案,以HPM6750作为主控,单芯片实现了三轴伺服电机的运动控制,可以1分钟绘制世界地图并延伸至各种三轴伺服结构应用。

在三轴伺服方案中,X轴、Y轴、Z轴协同工作,在伺服控制中接入插补算法,完成世界地图绘制。下面的视频演示了在三轴伺服运动控制下绘制世界地图的过程,不到1分钟就可绘制一个基本的世界地图。

三轴伺服方案适用于诸多场景,如枕式包装机、三轴机械手系统等应用。

案例二:单芯片四轴伺服运动控制,更稳、更快、更准

在当前的工业应用中,多轴伺服运动控制系统对响应时间、响应速度和稳定性等指标要求越来越高。传统的四轴伺服运动控制系统多采用模块化方式集成,以及HMI+Ether CAT/NVUC等控制器+伺服驱动器(由多个组成)的拓扑结构,所挂载的伺服驱动器越多,数据传输和处理就越复杂,从而使控制精度、实时性和同步性能受到限制。

2.png

▲市面工业应用多轴伺服运动控制系统

先楫合作伙伴采用先楫半导体超高性能HPM6750开发的四轴伺服解决方案以HPM6750作为主控,单芯片实现了HMI与四轴伺服电机的运动控制,稳定性好、响应速度快、控制精度高。

四轴伺服电机运动无需总线通信反馈与交互控制,片内完成所有数据的采集、处理和显示,对伺服控制和四电机的同步控制效率大大提高。下面的视频演示了通过UI交互的四轴伺服电机运动。

高性能驱动:HPM6750芯片介绍

HPM6750采用双RISC-V内核,主频达816MHz,凭借先楫半导体的创新总线架构、高效的L1缓存和本地存储器,创下了高达 9220CoreMark和高达 4651 DMIPS 的 MCU 性能新纪录。

除了高算力RISC-V CPU,HPM6700系列产品还创造性地整合了一系列高性能外设,包括支持2D图形加速的显示系统、高速USB、千兆以太网、CAN FD等通讯接口,高速12位和高精度16位模数转换器,面向高性能电机控制和数字电源的运动控制系统。

与ARM Cortex-M家族中性能领先的M7相比,HPM6750的 Coremark/MHz 跑分高出约10%。

3.png

▲HPM6750系统框图

欲了解更多HPM6750产品特点,请点击“阅读原文”即可获取!

(*本文部分行业数据来自网络行业报告,敬请留意。)

以上为本期分享内容,感谢立功科技·求远电子提供与先楫联合开发的应用解决方案。期待后续有更多的干货内容可以分享给大家,欢迎关注并推荐“先楫半导体HPMicro”及“先楫芯上人”。

直接转载来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 23

页面

订阅 RSS - 先楫半导体