打印

Cortex-M3与ARM7TDMI-S内核MCU运算性能比较

[复制链接]
5349|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不爱说话|  楼主 | 2008-7-28 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还是21IC人气旺,转一篇我在EDN的博文:http://blog.**/htjgdw/140162/message.aspx
自从STM32推出后,我对它很感兴趣,由于它采用了ARM的Cortex-M3内核,所以很想了解一下其性能和ARM7相比究竟如何?很巧的机会知道了EDNCHINA,参加了EDN这次的团购活动,我得到了一块STM32开发板,使得我有机会测试一下这2种内核CPU的性能。
在测试之前先简单测试的2个平台,编译环境和测试方法。
Cortex-M3:ARM公司为要求高性能(1.25 Dhrystone MIPS/MHz)、低成本、低功耗的嵌入式应用专门设计的内核。Cortex-M3内核主打存储器和处理器的尺寸对产品成本影响极大的各种应用市场,是针对这些市场的低成本需求,专门开发设计的微处理器内核。Cortex-M3内核增强了芯片上集成的各种功能,包括把中断之间延迟降到6个CPU周期的嵌套向量中断控制器、允许在每一个写操作中修改单个数据位的独立位操作、分支指令预测、单周期乘法、硬件除法和高效的Thumb 2指令集,这些改良技术使Cortex-M3内核具有优异的性能、代码密度、实时性和低功耗。
ARM7TDMI-S:也是ARM公司的高性能(0.95 Dhrystone MIPS/MHz),低功耗的嵌入式应用CPU内核。该CPU内核带有实时调试接口,包含JTAG和嵌入式跟踪。能够执行32位ARM和16位Thumb指令。可以针对性能或代码大小,优化应用。当内核在Thumb状态下执行指令时,它可将代码规模降低超过30%,性能的损失却很小;而在ARM状态下执行指令时,内核的性能达到最大化。
测试平台对比:
 平台1-STM3210FK(Cortex-M3)平台2-EasyARM2132(ARM7TDMI-S)
MCUSTM32F103VBLPC2132
Speed72MHz(8MHz*9)55.296MHz(11.0592MHz*5)
Flash128KB64KB
RAM20KB16KB
指令集Thumb-2(32位)ARMv4(32位)、Thumb(16位)
开发环境IAR for ARM v4.42Keil for ARM v3.05

测试方法:设置25ms定时(各自通过片内定时器实现),在这段时间内分别计算32位加/减/乘/除法,然后统计运算次数打印到串口输出。运算次数越多性能越高。编译时,去掉各种优化(平台1使用Thumb-2,平台2使用ARM v4)。编译后,程序下载到MCU的RAM中执行,避免Flash速度的不足对测试成绩造成的影响。
测试结果:
 32位整数运算性能(次/s)  
MCU TypeCPU clock(MHz)平均效能/MHz
STM32F103VB21818402181840218184020000407229672.08333
LPC2132149452014945201494520157992055.29627413.73698

[url=http://space.**/upload/2008/7/28/48cb8ca0-c2e4-403b-a798-61267154964e.jpg][/url]
可以看到,由于主频的优势,STM32在4项运算测试中性能始终领先于LPC2132(也是预料中的)。去掉频率的差异,比较每MHz的性能,在实际应用中Cortex-M3内核对于ARM7还是有提高的(~10%)。
这个测试不一定能够覆盖到CPU测试的各个方面,只是对运算速度的粗略评估,以便让大家对ARM内核性能有一个感性认识。有兴趣的话,同样的测试程序可以移植到其他平台的处理器上,看看不同架构CPU之间的性能高低。
沙发
ijk| | 2008-7-28 11:59 | 只看该作者

ARM的说法

  ARM有这方面的资料吧:记得有1篇white paper关于M3跟ARM7的比较。
  当然,实测一下对实际应用会跟有用些

使用特权

评论回复
板凳
lianshumou| | 2008-7-28 12:29 | 只看该作者

我的JPG解码里的差异是25%, 都使用优化

使用特权

评论回复
地板
shockwave| | 2008-7-28 12:38 | 只看该作者

stm32非单周期flash

stm32用的指令预缓冲技术来加快flash等待问题,这样不能保证100%指令无等待。
用stm32和单周期的2132比有点不公平,或者不能正确反应M3核心的优势。
应该用LM的单周期flash的mcu和2132评测,比较实际反应M3核心的速度优势。

使用特权

评论回复
5
不爱说话|  楼主 | 2008-7-28 13:04 | 只看该作者

LPC2132的flash也不是单周期的

STM32和LPC2132的Flash都不足以保证CPU在最高频率时,程序100%全速运行。它们都使用了一些技术来降低CPU高主频时,读取Flash的等待时间。
所以,单纯对这两种CPU的测试,我都是在RAM里运行的:)

刚开始的时候我确实在Flash里跑过,这两种CPU运行测试的速度都比表2中降了10%~20%

使用特权

评论回复
6
shockwave| | 2008-7-28 13:09 | 只看该作者

都在ram中跑也完全不能反应速度

arm7在ram中跑可以完全表现速度问题,M3核则不一定,M3和是哈佛结构,如果有个单周期的flash和ram分别存放程序和变量,才能完全发挥它的速度。

使用特权

评论回复
7
香水城| | 2008-7-28 13:21 | 只看该作者

如果希望测试单周期Flash访问下的状况,可以把CPU频率降下来

如当CPU时钟频率小于等于24MHz时,STM32可以实现对Flash的单周期访问。

使用特权

评论回复
8
shockwave| | 2008-7-28 13:50 | 只看该作者

哈哈,等netjob来pk了。

希望看看结果。

使用特权

评论回复
9
不爱说话|  楼主 | 2008-7-28 14:17 | 只看该作者

了解6楼的

LPC2132选的是Run In RAM,STM32则是BOOT_RAM,两者可能有区别的。
不过,现在跑出来的结果是能得到的最快速度了。
看来我的题目应该改一下:Cortex-M3与ARM7TDMI-S内核MCU运算性能比较,比较合适:)

使用特权

评论回复
10
lianshumou| | 2008-7-28 14:56 | 只看该作者

TI的28STM32是PK不了的! 用过!

使用特权

评论回复
11
shockwave| | 2008-7-28 15:33 | 只看该作者

lz测试环境也不一样,差别也可能很大。

我对比过iar5.11和mdk3.22编译一段代码,速度差别能达到30%~50%。

使用特权

评论回复
12
zheng79| | 2008-7-28 16:39 | 只看该作者

居然用不同的编译器

楼主的测试没有太大意义!
我的经验是:72MHz的STM32,50MHz的LM3S,60MHz的LPC2132在flash跑的速度基本上相差不大.

使用特权

评论回复
13
不爱说话|  楼主 | 2008-7-28 22:37 | 只看该作者

只是粗略的评估一下而已

起到抛砖引玉的效果就好了。希望研究技术的人多一些,讨论更热烈些。

使用特权

评论回复
14
yugen| | 2008-8-5 17:30 | 只看该作者

有没搞错?

乘除竟然比加减还快?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

886

帖子

34

粉丝