原创 【兆易创新GD32H759I-EVAL开发板】国产首款Cortex-M7芯片CoreMark跑分测试!

2024-3-9 20:21 716 4 4 分类: MCU/ 嵌入式 文集: 试用帖及读书帖

IMG_256

    兆易创新作为中国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

下载代码并加到工程里面

IMG_258


IMG_259IMG_260

IMG_261

IMG_262

IMG_263

IMG_264

IMG_265

IMG_266

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的一些型号。

IMG_267

02

配置相关代码设置跑分


IMG_268IMG_269IMG_270

IMG_271

IMG_272

IMG_273

IMG_274

    首先,我们要有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差不多,官方肯定是经过了严格优化后的跑分结果,所以这个差距是可以接受的,实际性能确实杠杠的,牛!

IMG_275

IMG_276

作者: Jack陈, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1468086.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条