打印

Flash的指令预取是干什么的?有什么作用呢?

[复制链接]
2125|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HKingS|  楼主 | 2017-9-20 21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Puremr| | 2017-9-22 19:46 | 只看该作者
指令预取,使得速度更快了吧

使用特权

评论回复
板凳
静听风易| | 2017-9-22 21:36 | 只看该作者
为了提高片上Flash在嵌入式应用中的读取速度,提出了一种基于预取和缓存原理的片上Flash加速控制器,不然取指令都是需要一定时间的

使用特权

评论回复
地板
萧洛毫| | 2017-9-23 21:00 | 只看该作者
这个是和三级流水取指令有关了,具体没有研究过

使用特权

评论回复
5
jerow| | 2017-9-23 21:03 | 只看该作者
指令流水是什么呢?在哪里有介绍了

使用特权

评论回复
6
jerow| | 2017-9-24 14:58 | 只看该作者
指令流水线是为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成的方式。Cortex 处理器采用三级流水线的哈佛结构,一条指令的执行分为取指阶段 (Fetch stage)、译码阶段 (Decode stage)、执行阶段 (Execute stage)三个阶段,所以称为三级流水线。把每个阶段所消耗的时间定义为一个机器周期(也有人把从内存读取一条指令字的最短时间定义为一个机器周期),把执行完一条指令需要花费的时间定义为一个指令周期。

使用特权

评论回复
7
余三水| | 2017-9-24 15:01 | 只看该作者
加上了预取指令后,减少了flash等待时间,使的运行速度更快了

使用特权

评论回复
8
16号哨兵| | 2017-9-24 21:52 | 只看该作者
每个 Flash 读操作可读取 128 位,可以是 4 行 32 位指令,也可以是 8 行 16 位指令,具体取决于烧写在 Flash 中的程序。因此对于顺序执行的代码,至少需要 4 个 CPU 周期来执行前一次读取的 128 位指令行。在 CPU 请求当前指令行时,可使用 I-Code 总线的预取操作读取 Flash 中的下一个连续存放的 128 位指令行。可将 FLASH_ACR 寄存器中的 PRFTEN 位置 1,来使能预取功能。当访问 Flash 至少需要一个等待周期时,此功能非常有用。

使用特权

评论回复
9
yyj8902| | 2017-9-24 21:55 | 只看该作者
我记得STM32的数据手册中,超过一定的主频,就有flash等待时间了,是这样吧

使用特权

评论回复
10
ylslib| | 2017-9-26 21:22 | 只看该作者
yyj8902 发表于 2017-9-24 21:55
我记得STM32的数据手册中,超过一定的主频,就有flash等待时间了,是这样吧

● 预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓冲区的存在,CPU可以工作在更高的主频。CPU每次取指最多为32位的字,取一条指令时,下一条指令已经在缓冲区中等待。

使用特权

评论回复
11
余三水| | 2017-9-26 21:26 | 只看该作者
网上有说的: CPU时钟高时,需要延时,以等待总线同步操作。是不是主频高了,预取指令也就没有用了

使用特权

评论回复
12
Boooooosh| | 2017-9-27 21:22 | 只看该作者
我记得GD32的片子,就是宣传flash零时间等待的,是不是加上了这个指令预取呢?

使用特权

评论回复
13
LM莫| | 2017-9-27 21:37 | 只看该作者
余三水 发表于 2017-9-26 21:26
网上有说的: CPU时钟高时,需要延时,以等待总线同步操作。是不是主频高了,预取指令也就没有用了
...

看flash的工艺水平了,不能一概而论。

使用特权

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

本版积分规则

41

主题

329

帖子

1

粉丝