什么是闪存等待状态?


10

我正在使用飞思卡尔PowerPC微控制器。在数据表的闪存模块中,“闪存访问的等待状态”的数量是可配置的。

以下是数据表中提出我问题的部分,它取自PFlash模块寄存器的寄存器描述:

该字段必须设置为与PFlash的工作频率和PFlash的实际读取访问时间相对应的值。较高的工作频率要求对此字段进行非零设置才能使Flash正常运行。
0 MHz,<23 MHz,所需等待状态= 0 ---
23 MHz,<45 MHz,所需等待状态= 1 ---
45 MHz,<68 MHz,所需等待状态= 2 ---
68 MHz,<90 MHz,需要的等待状态= 3-

(PFlash是平台Flash控制器模块)

我知道处理器比闪存快,这就是为什么引入等待状态的原因。我不明白的是:如果处理器比闪存快,那么处理器就是需要降速的处理器而不是闪存,但是上面的段落说的相反(或者我不明白吗?),说,如果Pflash以高频率运行,那么我们需要通过增加其他等待状态来降低它的速度!

我的理解有什么问题?

谢谢


1
如果我理解正确,可以将控制器设置为不同的速度吗?因此必须等待实际的闪存具有可用数据。
clabacchio

Answers:


8

为了扩大stevenvh的答案,任何类型的逻辑在给出输入信号后都会花费一些时间来产生输出信号。与其他逻辑相比,存储器通常非常慢。通常,可以保证输出信号在一定时间内变得有效,仅此而已。特别是,信号可能会在该时间间隔内改变几次,并且在该时间间隔结束之前将没有信号表明信号已达到其最终的“正确”值。

当典型的微控制器或微处理器读取存储器的字节(或字或任何单位)时,它会生成一个地址,一段时间后,它会查看存储器输出的值并对其进行操作。在控制器生成地址的时间与从内存中查看值的时间之间,它不在乎何时或是否更改内存的输出信号。另一方面,如果在控制器看时来自存储器的信号尚未稳定到其最终值,则控制器将误读存储器,因为它已保留了看时正在输出的任何值。通常,控制器一旦准备好对内存中的值进行处理,就会立即查看它的值,但是如果内存中的值还没有准备好,那可能就行不通了。所以,许多控制器可以选择在准备好处理来自内存的数据之后等待更长的时间,以确保来自内存的输出实际上是有效的。请注意,添加这样的延迟将使速度变慢(控制器本来希望更早地对内存中的数据进行操作),但不会影响操作的正确性(除非速度变慢到无法满足其他计时义务的程度)。


真好!感谢您提供的有用信息!
MohamedEzz

1
@MemoryLeaks:我很高兴。需要注意的重要一点是,将等待状态降低到指定的限制以下将导致系统运行更快,但是从内存中读取数据可能会任意产生不正确的数据。此外,“任意产生不正确的数据”可能意味着“产生正确的数据,直到您设计的设备交到客户手中,然后开始产生经常不正确的数据足以引起客户对您的生气。”
2012年

1
这似乎与并行超频非常接近,但更多是其可配置的选项。也许有趣的方式可以使MCU超频。
sherrellbc 2014年

1
@supercat,一个问题是控制器是什么意思,是处理器还是内存控制器?
Mouin '18

1
@Mouin:如果有内存控制器,则为内存控制器;如果没有处理器,则为处理器。
超级猫

9

等待状态将添加到CPU启动的内存访问周期中。因此,确实需要等待较慢的Flash的CPU。内存控制器会在多个周期(0到3)内向CPU发出“未就绪”信号,同时,CPU保持其当前状态,即已写入闪存地址,但尚未读取数据。仅当存储控制器发出“数据准备就绪”信号时,CPU才会从数据总线读取并继续其指令(将数据锁存到寄存器或RAM中)。


1
因此,通过配置该设置,我告诉内存控制器何时准确发出“数据就绪”信号。我不能只是告诉存储器在其实际准备就绪时发出“数据准备就绪”的信号吗?
MohamedEzz

1
@MemoryLeaks-这是可能的,并且它是由异步处理器完成的,这种情况很少见。使用时钟同步所有内容更常见,也更可预测。因此,它要么是时钟周期延迟(或2或3),要么什么都不是。
stevenvh 2012年

谢谢您的回答:)因此,总而言之:我上面的问题中的描述意味着它将延迟“ CPU”而不是闪存控制器
MohamedEzz 2012年

1
@stevenvh确实将处理器挂断了,它从内存接收数据,我的意思是它会完全停止执行,还是在流水线CPU的情况下执行其他指令。我猜这些中断在CPU等待内存准备就绪时会得到处理吗?
Miguel Sanchez

3

处理器可能需要停滞在内存中,但是不需要巧妙的设计。

我认为您不了解的关键技术是突发/页面模式访问。这样可以使内存访问的带宽非常接近处理器速度(但是可能闪存仍然是瓶颈,因为我从未见过运行频率> 200MhZ的基于Flash的MCU)

但是,延迟保持不变。例如,对于我正在使用的STM32F4 MCU,#wait状态= floor(clockSpeed / 30MhZ)。这意味着无论时钟速度如何,延迟始终为33ns。俗话说:“钱可以买带宽,但延迟是永远的……”

即使Flash带宽不足以保持CPU繁忙,您也可以轻松设计代码缓存来存储和预取预期要执行的指令。ST为其STM32F4 MCU(168 MhZ)对此提供了提示:

多亏了ART加速器和128位闪存,此处给出的等待状态数量不会影响闪存的执行速度,因为ART加速器允许实现等于0个等待状态程序执行的性能。

实际上,该声明还暗示,突发模式不是必需的,并且非常宽的内存接口也足够。但是想法是相同的(使用并行性隐藏延迟)。在芯片上,电线是免费的,因此128位内存是有意义的。


一般来说,导线远非芯片上的“空闲”,但是增加存储器阵列和一组锁存器之间的总线宽度不会增加导线。如果芯片具有一个组织为512x512网格的256kbit闪存阵列,则无论是否在“压缩”线和逻辑之前放置512位宽的锁存器,都必须进行将512列压缩为32位总线的布线和逻辑。或它们后面的32位宽的锁存器。
2014年

1
我的意思是,与外部引脚相比,它们是“免费的”。我知道,这些天来,线能量占主导地位,而且位置很重要,所以让我限定一下这一说法。它们可以自由制作,但不能自由打开!
Yale Zhang

1
我不确定您所说的“线能量”是什么意思,但是即使从空间角度来看,大型公交车也很昂贵,但是如果将公交车宽度加倍将其长度缩短一半,则总成本将保持不变。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.