Cortex-M7

来源:STM32单片机微信公众号

前言:
在客户使用基于Cortex-M7内核的STM32F7xx实际测试中,发现同等主频下基于Cortex-M4内核的STM32F4xx芯片执行同样一段简单程序在时间上还要快于STM32F7xx。这个会影响到客户切换到STM32F7xx的信心,也对ST以及ARM宣传上Cortex-M7内核执行时间远快于Cortex-M4内核的说法提出质疑,本文将针对具体案例分析这一情况的产生以及解决办法。

问题描述:
客户测试复杂程序运行时间,比如同样180MHz主频下,STM32F7xx执行Coremark测试程序时间远小于STM32F4xx的执行时间;也就是STM32F7xx的性能更佳,运算执行效率更好。但当客户顺序执行程序,尤其是简单程序时发现STM32F7xx执行时间大于STM32F4xx的执行时间,比如运行下面的同样的测试代码,就有明显差距:

volatile uint16_t i;
static volatile uint16_t j = 0;
i = 0;
while(i<300)
{
i++;
}
if(j < 100)
{
j ++;
}
else
{
j = 0;
}

为方便量化时间,使用Timer2计数方式对这段时间进行计数,Timer2运行在90MHz,向上计数,Test_Counter数据用于输出计数数值,增加后代码如下:

volatile uint16_t i;
static volatile uint16_t j = 0;
TIM2->CNT = 0;
__HAL_TIM_ENABLE(&htim2);
i = 0;
while(i<300)
{
i++;
}
if(j < 100)
{
j ++;
}
else
{
j = 0;
}
__HAL_TIM_DISABLE(&htim2);
Test_Counter = __HAL_TIM_GET_COUNTER(&htim2);

通过上面的修改后测试下来,Test_Counter数据分别为:
STM32F446 数据为 1543
STM32F746 数据为 1836
如果使用Keil自带的States cycles计算方法得到如下数据,后面会按照这个来计算执行时间数据。
STM32F446 数据为 3009
STM32F746 数据为 3635

RMW对 STM32F7xx内核运行速度影响的分析

原因分析:
上面的测试都是在使用了Cache以及ART加速方法测得,如果针对STM32F7xx的性能优化可以参考AN4667 "STM32F7 Series systemarchitecture and performance"这篇应用文档的描述,本例已经对文档描述部分做过优化,但问题依然是STM32F7xx速度慢于STM32F4xx。两颗芯片运行同样代码,比较两颗芯片汇编代码也是相同的:
LDRH r2,[sp,#0x00]
ADDS r2,r2,#1
STRH r2,[sp,#0x00]
LDRH r2,[sp,#0x00]
CMP r2,r3
BCC 0x00000128
通过查看ARM Cortex-M7内核文档发现下面描述:

RMW对 STM32F7xx内核运行速度影响的分析

反映到本例中发现定义的i数据为16-bit数据,同样也在汇编代码上发现了STRB这个汇编代码;这样在RMW(read-modify-write)机制下,当定义为byte以及half-word数据时将有一个先读取数据,修改后再写入数据的过程,这个读取-修改-写入的过程正是能够影响到内核执行效率的问题点,如果定义为32-bit就避免了这个问题的发生。

问题解决:
按照文档说明,我们将16-bit定义数据,改为32-bit的定义数据,即:
volatile uint32_t i;
static volatile uint16_t j = 0;
生成的汇编代码如下:
LDR r0,[sp,#0x00]
ADDS r0,r0,#1
STR r0,[sp,#0x00]
CMP r0,r1
BCC 0x08001F28

测试下来结果如下:
STM32F446 数据为 2102
STM32F746 数据为 1807
可以看到不管是STM32F4xx还是STM32F7xx,当数据定义为32-bit时都有显著的速度提升,当然STM32F7xx的提升更加明显,同样测试条件下STM32F7xx执行时间小于STM32F4xx的执行时间。

因为32-bit数据定义会增加内存,并且有时候定义为byte或halfword更方便,还需要提升速度的话我们看到同样是内核文件给出的说明,可以将RMW机制屏蔽掉:

RMW对 STM32F7xx内核运行速度影响的分析

实际上就是对CM7_DTCMCR寄存器的第1位写0,即可以在程序中有下面的操作:
__IO uint32_t * DTCM_CR =(uint32_t*)(0xE000EF94);
* DTCM_CR &= 0xFFFFFFFD; /* Disable read-modify-write */
禁止RMW后测试下来数据如下:
16-bit定义数据STM32F746 测试cycles数据为 3022
32-bit定义数据STM32F746 测试cycles数据为 1808
可以对比上面的测试数据也可以看到当禁止RMW后STM32F7xx性能也是优于STM32F4xx的。具体测试数据如下:

RMW对 STM32F7xx内核运行速度影响的分析

结论:
需要提升STM32F7xx执行时间,发挥出最大效能时,请参考AN4667,同时需要注意RMW对内核性能发挥的影响。

围观 468

ARM Cortex-M7处理器具备高性能及更佳的数字信号处理效率,能为工业应用、基础设施及家用产品提供优越的嵌入式智能功能 。 

ARM宣布推出的32位Cortex-M处理器Cortex-M7,这款处理器相较于目前性能最高的ARM架构微控制器(MCU),可大幅提升两倍的运算及数字信号处理(DSP)性能。ARM Cortex-M7处理器针对高端嵌入式应用,适用于新一代汽车电子、连网设备以及智能家居与工业应用。

ARM处理器部门总经理Noel Hurley表示:“ARM Cortex-M处理器系列新增Cortex-M7之后,ARM与合作伙伴将可为互联世界提供最具可扩展性与拥有最高软件兼容性的解决方案。通过Cortex-M7的多样性与全新的内存功能,开发者可以为各类型的嵌入式应用设计出功能更为强大、更智能且更为可靠的微控制器。”  

Cortex-M7性能测试结果高达5 CoreMark/MHz1,此性能表现使Cortex-M7能同时提供高性能与数字信号控制功能,帮助微控制器制造商在提供性能要求极高的嵌入式应用时,仍能将研发成本控制在最低。Cortex-M7将可用于智能控制系统,其适用范围包括马达控制、工业自动化、先进语音功能、图像处理、各类连网交通工具应用及物联网(IoT)相关应用。  

Cortex-M7能更快速地处理音频、影像数据及语音识别,用户可以立即感受到这款处理器的优势。与现有Cortex-M系列产品相同,Cortex-M7也提供适用于C语言的程序模型,且与现有Cortex-M系列产品二进制兼容。凭借完整的生态系统与软件兼容性,现有的Cortex-M核心能轻松迁移至Cortex-M7。因此,系统设计人员可以重复利用各种程序代码,降低研发及维护相关成本。  

2013年,ARM合作伙伴共出货30亿颗基于ARM架构的微控制器,成为行业的佼佼者。  

ARM Cortex-M7产品特色:   

 6级超标量流水线,在40LP工艺制程与频率400MHz的条件下,性能测试可达2,000 Coremarks。 

 支持64位AXI互连,可选配经过优化的指令及数据Cache,以更有效率地存取大型外存和连接高性能外设。 

 紧密耦合内存接口,提供快速实时响应。 

 丰富的可配置选项,可锁定各种不同的成本与性能点。 

 通过嵌入式追踪宏单元(Embedded Trace Macrocell, ETM),可选配完整的指令及数据轨迹,提高系统能见度。 

 可选安全套件及内建错误侦测功能,有助达到汽车安全级别的ASIL D及SIL 3标准,这意味着Cortex-M7是企业针对汽车电子、工业应用、运输及医疗应用等对安全敏感市场的最佳选择。 

 ARM Connected Community上的合作伙伴提供最广泛的第三方工具、实时操作系统(RTOS)
和支持所有架构的中间件。  

相关的ARM支持技术:   

 Cortex-M7处理器最理想的实现是采用ARM Artisan 7-track SC7超高密度标准单元数据库(Ultra High Density Standard Cell Library)与电源管理工具套件(Power Management kit, PMK)。 

 Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard, CMSIS)含内核支持、优化的DSP算法库、以及为Cortex-M7处理器上运行的的实时操作系统RTOS内核的实现参考。CMSIS-Pack可通过整合软件组件、设备参数及评估开发板的完整交付机制,确保各种设备能迅速地获得各类工具的支持。 

 新推出的Cortex-M7处理器全面支持ARM Keil微控制器开发工具包(MDK),套件中整合ARM编译工具、以及Keil µVision集成开发环境(IDE)与调试器。MDK被公认为全球最受欢迎的微控制器开发环境,搭配ULINK系列调试适配器便能支持Cortex-M7处理器各项新功能。 

 搭配CMSIS与MDK,Versatile Express Cortex-M原型系统(Prototyping System)为基于Cortex-M7处理器的设计提供最佳的评估平台。 

 通过上述的工具,ARM的合作伙伴可利用紧密结合的应用开发环境,快速实现Cortex-M7处理器的高性能与低功耗特色。 

 Cortex-M7还获得众多第三方工具、软件与实时操作系统厂商的支持,包括Express Logic、
FreeRTOS、IAR Systems、Atollic、DSP Concepts、Mentor Graphics、Micrium 和SEGGER。

围观 401
订阅 RSS - Cortex-M7