打印
[ZLG-ARM]

ARM7的速度有多快?

[复制链接]
5097|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eyuge2|  楼主 | 2008-5-23 13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
arm的资料上讲,ARM7的速度可以达到0.9MIPS/MHz。
以前在《单片机与嵌入式系统》上看到过一篇《8051、ARM和DSP指令周期的测试与分析》的**,作者在文中指出如果按0.9MIPS/MHz的速度计算,ARM存储器访问指令需要花费14个指令周期。
我现在准备使用LPC2478做液晶屏驱动,要对速度进行一下估计。所以特意做了一下试验。
我用的是LPC2138,程序在flash中运行。晶振是11.0592的,cclk为11.0592×5=55.296MHz.
按0.9MIPS/MHz的速度计算指令周期应该是1/(0.9*55.296)=20ns
对P0.23进行不断的置1和清0,

    12:                 IOCLR1=1<<23; 
0x000001C8  E581001C  STR       R0,[R1,#0x001C]
    13:                 IOSET1=1<<23; 
0x000001CC  E5810014  STR       R0,[R1,#0x0014]
用示波器看P0.23脚的变化。
测得的每条指令的执行时间在285ns左右,大概14个指令周期左右。
不知道这是何故?
另外对《arm嵌入式系统基础教程》中介绍指令集时讲的一句话不太明白。“ARM处理器式加载/存储体系结构的典型的RISC处理器,对存储器的访问只能使用加载何存储指令实现”的言外之意是什么?

相关帖子

沙发
eyuge2|  楼主 | 2008-5-23 13:24 | 只看该作者

补充说明

《8051、ARM和DSP指令周期的测试与分析》这篇**中,通过while死循环不断对引脚进行置1和清0,提到跳转指令会导致流水线清空。我为了避免这种情况的影响速度,特意在while死循环中,写了很多条重复的指令,类似如
while(1)
{
IOCLR1=1<<23; 
IOSET1=1<<23;
IOCLR1=1<<23; 
IOSET1=1<<23;
IOCLR1=1<<23; 
……
……
IOCLR1=1<<23; 
IOSET1=1<<23;
}
但测得的结果还是每条指令的执行时间在285ns左右。

使用特权

评论回复
板凳
btiger2000| | 2008-5-23 18:50 | 只看该作者

2138的I/O速度并不快!

使用特权

评论回复
地板
mr.king| | 2008-5-23 20:18 | 只看该作者

是的,2148的快速IO是四个指令周期,比2138快

AT91SAM7S的IO用最优化方式写是三个指令周期,非最优化是7个指令周期

使用特权

评论回复
5
djyos| | 2008-5-24 17:18 | 只看该作者

0.9MIPS/MHz不是指令数

是一个标准向量,通俗地说就是能干多少活。如果51每和ARM都是每微秒执行一条指令的话,并不能得出他们的MIPS数相等的结论,而是由于ARM指令干的活不51多,ARM的MIPS数也就比51的高。

使用特权

评论回复
6
xwj| | 2008-5-24 17:38 | 只看该作者

LZ,MIPS/MHz 和 指令周期不是这么算的,指令周期是确定的!

不能*0.9或/0.9

MIPS只是一个指令效率评估参数,因为不同核心是不同的,效率也有明显不同,有的一条指令就能完成一堆操作,而换个CPU就可能需要用几条指令才能完成同样的操作,很明显,后者的效率就要低一些
但指令周期还是不变的。

只能说速度受指令周期数、核心效率影响,而不能说指令周期数是受速度影响的
不要把因果关系搞反了哦

使用特权

评论回复
7
xwj| | 2008-5-24 17:42 | 只看该作者

就好比:

我和你赛跑,我跑得比你快,近分析原因是我比你高,腿长占优势,所以同样频率同样体力的话我就能跑得更快些

但不能说因为我跑得快,所以我得腿长些,
这样的话要是我哪天散步时走路走得比你慢了,难道我的腿就短了吗???

使用特权

评论回复
8
王紫豪| | 2008-5-24 21:24 | 只看该作者

re 老徐

哈哈,你腿就是长啊

使用特权

评论回复
9
EYUGE2| | 2008-5-27 21:05 | 只看该作者

或许这样计算指令周期是不对

或许这样计算指令周期是不对,但请注意我提这个问题的主要意思。0.9MIPS/MHz是指在内核的时钟为1MHz的时候,ARM7一秒钟能执行0.9M条指令。那么在内核的时钟为55.296MHz时,ARM7一秒钟能执行指令数为 55.296×0.9M=49.7664M。既然一秒钟执行49.7664M条指令,是不是可以认为ARM7在内核时钟为55.296MHz的时候,指令周期是1/49.7664M=20ns。请问错在哪里?
arm7采用RISC指令集,应该说它的大部分指令都是单周期指令。
STR       R0,[R1,#0x001C]是单周期指令,执行的时间为什么那么长呢?

使用特权

评论回复
10
EYUGE2| | 2008-5-27 21:12 | 只看该作者

to xwj

MIPS/MHz 和 指令周期不是这么算的,指令周期是确定的。
你说的指令周期是确定,以51为例,应该是指某条指令对应的机器周期数是确定。
我这样计算指令周期,是在特定的频率下,以时间来衡量的,应该也没错吧。

使用特权

评论回复
11
djyos| | 2008-5-28 09:44 | 只看该作者

唉,又一个

第一要会提问题。
第二要认真看别人回复。
第三要努力思考,不要指望别人手把手教你,没义务也没时间,一般是点到为止。
第四要谦虚点,如果你**你对MIPS的理解是对的,神仙也帮不了你。

使用特权

评论回复
12
eyuge2|  楼主 | 2008-5-28 18:47 | 只看该作者

感谢上面所有回复的人!

哈哈,语言激烈了一些,没有攻击谁的意思。
我在网上搜索了很多资料,都讲MIPS(Million Instructions Per Second)是每秒钟执行的指令数。
djyos讲0.9MIPS/MHz不是指令数,如果可以的话,能不能给个网址,让我看看相关的资料。先谢谢你了!

使用特权

评论回复
13
zkking| | 2008-5-28 21:08 | 只看该作者

2138的IO翻转速度只能到几MHz,你这么测测不出来

使用特权

评论回复
14
djyos| | 2008-5-28 21:53 | 只看该作者

楼主搜索一下“dhry stone”就知道了

ARM7达到0.9MIPS/Mhz的条件是:用ads1.2编译,配置0等待内存的条件下达到的,如果用realview编译,可能超过0.9MIPS。
ARM9可以达到1.1MIPS/Mhz,但ARM9没有一条指令的执行时间小于1个时钟周期。

使用特权

评论回复
15
uuchy000| | 2008-6-2 15:01 | 只看该作者

re

你这样测试指令速度是不对的,213x没有高速io,io的翻转速度不是很快,建议你用214x的fio试试看

使用特权

评论回复
16
swill_333| | 2008-6-3 18:54 | 只看该作者

我也被同样的问题困惑过,现在明白了,谢谢上面各位!

使用特权

评论回复
17
xwj| | 2008-6-3 18:59 | 只看该作者

唉,只能叹息...

使用特权

评论回复
18
sz_kd| | 2008-6-3 20:11 | 只看该作者

路过

使用特权

评论回复
19
平常人| | 2008-6-4 21:51 | 只看该作者

LZ犯了一个很大的错误,ARM7的速度可以达到0.9DMIPS/MHz

不是0.9MIPS/MHz。

MIPS和DMIPS不是一个概念。

使用特权

评论回复
20
eyuge2|  楼主 | 2008-6-5 19:02 | 只看该作者

我的看法

在《MicroControllers LPC214x Family》的PDF中有关于IO翻转的介绍。arm普通IO翻转就是比较慢,需要多个时钟周期(cclk),如果是fast IO口就比较快。
btiger2000、mr.king、zkking、uuchy000等的说法是比较合理的。

使用特权

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

本版积分规则

105

主题

1366

帖子

9

粉丝