兆易创新作为中国32位通用微控制器领域的领跑者,最新推出的GD32H7系列MCU补全了中国超高性能MCU拼图上的空缺。
GD32H7系列MCU采用基于Armv7E-M架构的600MHz Arm® Cortex®-M7内核,凭借双发射6级流水线架构,以及支持高带宽的AXI和AHB总线接口,可以获得更高的主频及处理性能,达到1552 DMIPS和2888 CoreMarks的优异结果。对比其他内核产品,GD32H7性能大幅提升,能够支持高级DSP、边缘AI等高算力应用。
GD32H7配备了高达4MB的片上Flash和1MB的SRAM,支持大容量代码存储。独有的TCM存储器和L1高速缓存也大大提高了内外部存储器的访问效率。其中,512KB超大紧耦合内存TCM,可自由配置为I-TCM或D-TCM。用来放置想要加速的程序和数据,实现零等待运行,提高系统的性能。还集成了64KB的L1-Cache(I-Cache,D-Cache)高速缓存,其存储速度接近CPU核的工作速度,解决了CPU和内存速度差距过大的问题,为运行复杂操作系统及高级算法提供了充足支持。
GD32H7提供了多种安全加密功能,包括DES、三重DES、AES算法及哈希算法,集成的RTDEC模块,还可以保护连接到AXI或AHB总线的外部存储器的数据安全,防止在工厂和现场的通信过程中受到的威胁,确保物联网硬件数据安全。
相较现有的高性能产品,GD32H7的外设资源大幅扩容,模拟性能也得到空前提升。片上集成了2个14位ADC采样速率高达4MSPS,1个12位ADC采样速率高达5.3MSPS,在电机控制、光伏储能等应用中可提供高精度采样率和快速响应。3个CAN-FD接口和2个以太网控制器也为工业网卡、变频器、伺服器提供了很好的优势。
小编这期不看别的,什么片上存贮啊,多少个ADC啊,就看CPU核心能力。官方号称用Coremark测试分数能达到2888分,那么小编我就通过移植开源代码Coremark来跑一下分。小编手上的芯片型号为:GD32H759I
下载代码并加到工程里面
Coremark主页:http://www.eembc.org/coremark/index.php
github代码地址:https://github.com/eembc/coremark
先到hub上面把Coremark代码下载下载,其主页地址如上所示。
我们使用一个已经有串口的代码,就选用官方demo里面的04_USART_Printf例程,这个例程用的是UART0通过CH340向PC打印数据。我们把Coremark相关.C和.H放到工程文件夹下。此时我们新建一个文件夹Coremark用来存饭这些代码文件。当然也要把代码文件加入到MDK的工程里面去,并把头文件路径包含进去。OK此时Coremark的代码已经加入到工程中去了,但是只是这样简单加入是不能跑分的,还需要根据实际芯片把代码做一些调整。
顺便也把官方收录的一些芯片的测试数据展示一下,这里主要搜索了STM32的一些型号。
02
配置相关代码设置跑分
首先,我们要有USART0的配置函数,115200波特率,并且需要串口重定向,这样我们就可以用printf函数了,同时还需要使能I,D的高速缓冲器。我们把这些代码加到了Coremark的core_portme.c中去。并在相关函数中调用:
portable_init(core_portable *p, int *argc, char *argv[]){ usart_config(); //调用串口配置函数 printf("Start testing....");//开始测试提示}
此外我们还要初始systick,使能高速缓冲器,此功能在start_time(),stop_time(),get_time()三个函数中实现。于此同时,我们还需要声明一个计数器,并在systick的中断函数中自加。
start_time(void){ cache_enable(); systick_config(); }
uint32_t gTick = 0; //申明计数器
void SysTick_Handler(void){ gTick++; delay_decrement();}
接下来还要对一些宏做些配置,先是堆栈要调大一些,还要把迭代次数调大一些,至少让程序运行10S以上,我这边设置的是50000大一点没事,给个参考,这里给个参考值,一般72MHz的主频可以使用2000,120MHz可以使用3500。这里GD32H759I是600MHZ可以自己算一下。还要把每秒迭代次数设为1000这个要和systick相匹配。
volatile ee_s32 seed4_volatile = 50000;//ITERATIONS;#define EE_TICKS_PER_SEC 1000 //(NSECS_PER_SEC / TIMER_RES_DIVIDER)
看了广大网友的经验,还要保证我们几个宏的正确性,我们用到的是printf函数所以要更改HAS_PRINTF,还要把优化等级设置成-O3,于此同时IDE的优化等级也要设置成相匹配哦。
#ifndef HAS_PRINTF#define HAS_PRINTF 1
#ifndef COMPILER_FLAGS#define COMPILER_FLAGS \ "-O3" /* "Please put compiler flags here (e.g. -o3)" */
OK我们连接好硬件,看下最终跑分结果2546分,和官方的2888差不多,官方肯定是经过了严格优化后的跑分结果,所以这个差距是可以接受的,实际性能确实杠杠的,牛!
作者: Jack陈, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1468086.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论