上电时SRAM不是空白,这正常吗?


19

我终于完成了Z80内存板的工作,但令我失望的是,它无法正常工作(将地址线连接到某些LED上的简单NOP测试),因为计数器迅速呈螺旋形失控,而不是按需增加。但是,我不是一个愿意放弃的人,经过大约三十分钟的连续性测试,发现没有短路和所有正确的连接之后,我终于想到要检查SRAM芯片是否在所有0都接通的情况下通电。我很清楚,SRAM(除非是非易失性的,除非我的特定芯片不​​是非易失性的)会在断电时丢失其所有内容,但是我一直认为,当它重新获得时将充满0(即“空”)。功率。每次复位电源时,我正在使用的SRAM似乎随机填充有1和0。它永远不会记住任何数据,但它不会空载。这并不是真正的问题,因为我可以简单地在ROM中编写一个小程序,以在加电时将全0加载到RAM中,尽管我仍然想知道这是否是SRAM的工作方式。谢谢!

编辑:我忘了提到使用ROM将0加载到SRAM之后,系统工作正常,所以这确实是问题。


7
您可以使用SRAM加电生成随机数。如果我们只需要一个随机种子,通常这就是我们的方法。
b degnan '16

6
@bdegnan也许一次。对于任何给定的部件,SRAM的上电状态趋于可预测。
2013年

Answers:


36

除非您已编程了初始状态,否则它将或多或少是随机的。尽管这可能因不同的SRAM实现而异。您还说“空白”。有人可能会认为随机数比所有0都“空白”。

SRAM存储器将存储器存储在背对背的逆变器中。

简单的sram

这形成了一个双稳态系统(两个非常稳定的状态,亚稳态将它们分开)。因此,加电后,背靠背的逆变器将短暂地处于亚稳态。

发生这种情况的原因是,随着电压的升高(从接通),背对背反相器的NMOS和PMOS都将“相等”地接通,将两个位节点保持在电源电压的一半(这是亚稳态)。最终,一些热噪声(或任何引入变化的过程)会将此值推低或拉高一点。此时,位节点会陷入其双稳态状态之一。

  • 作为一个例子,考虑Q=Q=Vsupply2
  • 接着,Q上一些热噪声增加电压至Vsupply2+δ
  • 现在,馈送Q'的NMOS仅打开了一点。馈送Q'的PMOS关闭了一点点。所以Q”从拉下V小号û p p ÿVsupply2Vsupply2δ
  • 接下来,由于FET的驱动Q节点的栅极电压降低,因此PMOS导通更多(NMOS关断更多)。这导致Q进一步增加到电源。这样可以快速将Q'捕捉为0,将Q捕捉为1。

实际上,甚至有一篇论文“上电SRAM状态作为识别指纹和真实随机数的来源”

本文中包含的一个非常有用的情节如下。虚线表示电源电压上升:

加电时的亚稳

  • 在左边,一切都是平等的。在这种情况下,由于温度或其他多种因素导致的随机变化会使位节点进入一种状态或另一种状态。
  • 在右侧,有一个位节点,它有偏斜(故意或其他方式倾斜),以更有可能在特定状态下初始化。

根据当前使用的SRAM中每个位节点的制造方式,您最终会或多或少地遇到上述两种情况之一。在这两种情况下,除非您有意使SRAM倾斜,否则初始输出看起来或多或少是随机的。在左侧情况下,每次后续加电将生成更多随机模式。在正确的情况下,初始启动似乎是随机的。但是进一步的加电将导致SRAM趋向于处于某些特定状态。


您知道我实际上以为这就是为什么它随机加载的原因。我已将NOR锁存器用作电路的一部分,并且在上电时会随机重置。谢谢!
KeatonB '16

我以为您可以设计SRAM芯片,使其在已知状态下上电。你是否可以?
John Dvorak

2
@JanDvorak:是的,可以。但这并不意味着通常会完成,特别是在SRAM中,它不是特定于应用程序的。我认为这会花费更多,目的是什么?它很少会与整个消费者所需的初始状态相同。
jbord39 '16

@ jbord39能否帮助我将引导加载程序烘烤到内存中,并避免使用额外的ROM芯片来加载OS?这会有助于降低成本吗?
约翰·德沃夏克

2
@JanDvorak:对于特定的应用,位单元可能会倾斜或偏置以在指定状态下启动。但是,实际上成本并不值得,因为每个客户都需要不同的初始状态。仅使用外部电路(例如ROM)对其进行初始化要容易得多,并且具有成本效益。我想它们可以内置一些可编程电路,以使您能够以所需的初始状态或其他方案进行刻录。但是,当您显然已经具有写入/读取RAM的电路时,这听起来很昂贵。因此,只需写下您想要的状态。
jbord39 '16

5

与SRAM一起工作了很多年,我可以告诉您它会以看似随机的内容加电,尽管我看到器件每次都以几乎相同的随机外观加电。如果断电周期足够短(取决于电源特性以及旁路电容器的数量和值),则先前写入的数据的较大片段可能会在断电周期中残留在SRAM中-尽管内容会损坏。


2

一位存储在由6个或更多晶体管组成的电路的SRAM中。如果要为SRAM定义上电复位行为,则每个RAM单元仅需要6个以上的晶体管。所需的芯片面积将大得多,而SRAM芯片将更昂贵。这是同时对所有位进行并行上电复位。串行复位将需要一个振荡器,一个地址计数器和上电期间足够的时间来依次复位所有RAM位或字节。如果处理器在串行加电复位完成之前访问SRAM,则可能会发生错误,并且数据可能会丢失或更改。

微处理器具有一些编程环境,具有多个RAM区域的详细存储器映射。您可以根据应用程序的需要定义一个带或不带上电复位的区域。同一SRAM中可能有几个不同的区域。并非总是需要在程序启动时复位整个SRAM。


3
使某些晶体管比其他晶体管稍大一些会歪曲1与0的概率。在许多部件上,晶体管将达到制造公差范围内的平衡,这意味着某些位将偏向零,而另一些位将偏向1。我怀疑大小差异是否会很大,以使启动行为在一个方向上过于压制。如果有任何理由,RAM制造商可以很容易地使事情保持一致,但是不平衡的RAM会消耗额外的电流以将单元切换到不利的方向。
超级猫
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.