打印

STM32的 FLASH 可以跑到72MHZ吗???

[复制链接]
10882|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aaron238|  楼主 | 2007-7-22 02:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自 2楼
浪淘沙| | 2007-7-23 16:05 | 只看该作者

STM32从Flash中运行程序的时序分析

在Flash的速度比CPU慢的情况下,并不能简单地说程序的执行是否有等待周期;请看下面的分析:

首先,STM32的内部Flash是组织成64位宽度,即每次可以读出64位;在Flash与CPU的取指队列之间有两个缓冲器,用于暂存Flash中取出的指令,见下图。

其次,STM32的指令有16位的也有32位的,指令是从图中绿色的缓冲器取出;当绿色缓冲器变空时,黄色缓冲器中的内容会被复制到绿色缓冲器中;这样取指与读取Flash互不干扰。

正因为STM32的指令有不同长度,所以程序执行的等待周期与程序的内容有关。

图一是假定所有指令都是16位的指令:
1)时刻t0时黄色缓冲器和绿色缓冲器都为空,此时CPU等待3个周期后,到时刻t1时才能读到指令;
2)时刻t1时绿色缓冲器被填满,黄色缓冲器仍为空,Flash控制器继续读取后续指令;
3)时刻t2时绿色缓冲器还有两个字节,黄色缓冲器被填满;此时因为两个缓冲器都有数据,读取Flash的操作暂停(图一中的绿色虚线框所示);
4)当黄色缓冲器变空时,绿色缓冲器被复制到黄色缓冲器,同时恢复读取Flash的操作;
5)时刻t3时缓冲器的状态又变为上述第3)步的状态。

从以上分析可以看出,CPU的指令执行是没有等待周期的。但当执行跳转指令时,Flash缓冲器中的内容作废,系统回到了上述第1)步的状态。

图二是假定每三条指令中有两条16位的指令和一条32位的指令。这种情况下,如图所示,CPU的指令执行也是没有等待周期的。

图三是假定所有指令都是32位的指令,从图中可看出,CPU每执行两条指令,要插入一个等待周期。

上面的分析只是针对每个CPU周期都有取指操作的情况,而实际的操作中情况并没有这么简单,因为Cortex-M3的指令不都是单周期指令。

所以说,楼上各位的分析都对,但都不全面。实际的程序执行情况是受很多因素影响的,单纯静态的分析也是不现实的,因此才会出现这么多评测的标准和数据。我们应该以平均的性能指标作为参考的依据,而不是简单的有没有或有多少等待周期作为判断的依据。

使用特权

评论回复
板凳
浪淘沙| | 2007-7-22 09:06 | 只看该作者

STM32的FLASH可以跑到72MHZ?

请看下面在13楼的详细分析。

使用特权

评论回复
地板
aaron238|  楼主 | 2007-7-22 13:32 | 只看该作者

是全数执行吗???0等待????

使用特权

评论回复
5
hotpower| | 2007-7-22 14:07 | 只看该作者

比NXP的高了???

俺记得去年听课,FLASH最高也不超过60M.
而且NXP内部有128字的RAM缓存才能达到零等待.

使用特权

评论回复
6
skyler| | 2007-7-22 18:25 | 只看该作者

101和103差别不大?

如果要等待,则103的72MHz意义岂不大?

使用特权

评论回复
7
zhiwei| | 2007-7-22 20:33 | 只看该作者

不用缓冲不可能

跑那么高的。

使用特权

评论回复
8
mcu123ad| | 2007-7-22 22:48 | 只看该作者

NXP的基本上是零等待,在RAM及FLASH的运行速度一致

NXP的基本上是零等待,在RAM及FLASH的运行速度一致

ST的也一致?

使用特权

评论回复
9
ST_ARM| | 2007-7-23 09:28 | 只看该作者

ST的不是基本上是零等待

而是肯定的零等待,在RAM的速度可以比在FLASH中快。

NXP内部有128字的RAM缓存才能达到零等待,是因为NXP的FLASH速度比较慢,为了能够保证数据流能够跟上ARM内核的速度,而ST的FLASH速度快,每次只需要读64bit就可以实现0等待运行。

使用特权

评论回复
10
ijk| | 2007-7-23 10:17 | 只看该作者

STM32的FLASH可以跑到72MHZ吗?0等待周期?

  回答是否定的。如果仔细看STM32的Demo程序就可以看到,跑在高频率时,必须插入等待周期。虽然要插入等待周期,101和103相比还是有差别的,72M的运行速度当然比36M要快。
  至于跟NXP的 Arm7比较,72M的STM32当然比NXP 60M的Arm7快,60M的STM32也比NXP 60M的Arm7快。

使用特权

评论回复
11
zheng79| | 2007-7-23 10:26 | 只看该作者

60M的STM32也比NXP 60M的Arm7快???

不可能吧,在flash中运行NXP是0等待的啊,STM32要插入等待周期,假如插入1个等待周期,STM实际上是30MHz,可能比60MHz的快吗?

感觉这个问题搞的有点乱了,其实我们关心的是在flash中运行是不是0等待,而不是flash是不是0等待.

使用特权

评论回复
12
mcu123ad| | 2007-7-23 11:13 | 只看该作者

re

在RAM的速度可以比在FLASH中快。
如果是在RAM中快,那么FLASH就不是零等待了.

使用特权

评论回复
13
ijk| | 2007-7-23 15:06 | 只看该作者

60M的STM32也比NXP 60M的Arm7快?

  回答是肯定的。这句话虽然不是100%成立,但应该在90%的情况下都成立。那10%不成立的情况是:代码全部使用汇编语言。
  60M的STM32也比NXP 60M的Arm7快,这主要得益于内核的优势,STM32使用的是
最新的CortexM3内核,与Arm7相比优势明显。CortexM3使用的是16位和32位混合的Thumb2指令集,架构是哈佛结构,而Arm7的架构是冯诺伊曼结构。所以即使Flash的接口只有64位,那么60M的STM32也能轻松地快过NXP 60M的Arm7。

使用特权

评论回复
14
浪淘沙| | 2007-7-23 16:21 | 只看该作者

STM32从Flash中运行程序的时序分析图

总算把图整上来了。

使用特权

评论回复
15
lshlin| | 2007-7-24 23:59 | 只看该作者

连斑竹都不知道

我们平民就更不知道了

使用特权

评论回复
16
浪淘沙| | 2007-12-24 12:33 | 只看该作者

顶上来!很好的讨论!

使用特权

评论回复
17
kingpoo| | 2007-12-27 09:30 | 只看该作者

拿这个和ARM7比较没啥意思

最好能拿群星的cortex-M3比较,群星的好像50MHz

使用特权

评论回复
18
香水城| | 2007-12-27 10:50 | 只看该作者

没有研究过群星的产品,17楼的如有兴趣可以比较一下

但有一点是可以肯定的,目前的工艺水平下,内置Flash的速度最多能跑到30MHz多一些,不超过40MHz。

使用特权

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

本版积分规则

56

主题

487

帖子

1

粉丝