電源投入時にSRAMは空白ではありませんが、これは正常ですか?


19

私はついにZ80メモリボードを完成させましたが、カウンターが正常にインクリメントするのではなく、制御不能になったため、正しく動作していなかったこと(いくつかのLEDに接続されたアドレスラインを使用した単純なNOPテスト)に失望しました。しかし、私はあきらめる人ではなく、短絡およびすべての適切な接続を明らかにするための約30分間の連続テストの後、すべての0が保存された状態でSRAMチップの電源が入っているかどうかを最終的に確認することを考えました。SRAM(私の特定のチップではない不揮発性でない限り)が電力を失うとその内容をすべて失うことをよく知っていますが、それが回復すると0で満たされる(つまり「空」)といつも思っていました。パワー。私が使用しているSRAMは、電源がリセットされるたびに1と0でランダムに満たされているようです。データを一切覚えていません。しかし、空の読み込みではありません。これは、SRAMがどのように機能するべきかを知りたいのですが、電源投入時にすべての0をRAMにロードするために、ROMに小さなプログラムを書き込むだけでよいので、実際には問題ではありません。ありがとう!

編集:ROMを使用してSRAMに0をロードした後、システムが正常に動作したことを言及するのを忘れていたので、これは実際に問題でした。


7
SRAMのパワーアップを使用して、乱数を生成できます。これは、通常、ランダムシードが1つだけ必要な場合の方法です。
bデグナン16

6
@bdegnan一度、多分。SRAMのパワーアップ状態は、特定のデバイスである程度予測可能です。
夕暮れの

回答:


36

プログラムされた初期状態がない限り、それは多かれ少なかれランダムになります。ただし、これはSRAMの実装によって異なります。「空白」とも言います。ランダムはすべて0よりも「ブランカー」であると考える人もいるかもしれません。

SRAMメモリは、メモリをバックツーバックインバータに保存します。

シンプルなスラム

これにより、双安定システムが形成されます(準安定状態の2つの非常に安定した状態)。そのため、電源を入れると、バックツーバックインバーターは一時的に準安定状態になります。

これは、電圧が(オンから)ランプアップすると、バックツーバックインバーターのNMOSとPMOSの両方が「等しく」オンになり、両方のビットノードを電源電圧の半分に保持するためです(これは準安定状態です)。最終的に、いくらかの熱ノイズ(または変動を引き起こすプロセス)が、この値を少しだけ上下させます。この時点で、ビットノードは双安定状態の1つにスナップします。

  • 例として、Q=Q=Vsあなたはpply2
  • 次に、Qの熱ノイズにより、電圧がV s u p p l yまで増加しますVsあなたはpply2+δ
  • ここで、Q 'を供給するNMOSがもう少しオンになります。そして、Q 'を供給するPMOSがもう少しオフになります。したがって、Q 'はからプルダウンしますVsあなたはpply2Vsあなたはpply2δ
  • 次に、FETの駆動Qノードのゲートの電圧が低下するため、PMOSが少しオンになります(そして、NMOSはさらにオフになります)。これにより、Qは供給に対してさらに増加し​​ます。これにより、Q 'が0に、Qが1にすばやくスナップされます。

実際、「指紋と真の乱数のソースを特定するパワーアップSRAM状態」という論文あります。

論文に含まれる非常に役立つプロットを以下に示します。点線はランプアップする電源電圧を表します。

電源投入時の準安定性

  • 左側では、すべてが同じです。この場合、温度または別の数の要因によるランダムな変動により、ビットノードが1つの状態または他の状態になります。
  • 右側には、特定の状態で初期化される可能性がはるかに高くなるように(意図的またはその他の理由で)スキューされたビットノードがあります。

現在使用しているSRAMの各ビットノードがどのように製造されたかによって、上記の2つの状況のいずれかが多かれ少なかれ発生します。どちらの場合も、SRAMを意図的に歪めない限り、初期出力は多少ランダムに見えます。左側の状況では、その後の各電源投入により、よりランダムなパターンが生成されます。右側の状況では、最初の起動は一見ランダムになります。しかし、さらに電源を入れると、SRAMは特定の状態をさらに進める傾向があります。


私は実際にそれがランダムにロードされている理由だと実際に思っていたことを知っています。回路の一部としてNORラッチを使用しましたが、電源投入時にランダムにリセットされます。ありがとう!
キートンB

SRAMチップが既知の状態で起動するように設計できると思いました。あなたはできる?
ジョンドヴォルザーク

2
@JanDvorak:はい、できます。しかし、それはそれが一般的に行われることを意味するものではなく、特にSRAMではアプリケーション固有ではありません。私はそれがより多くの目的のために費用がかかると思いますか?消費者間で同じ初期状態が必要になることはめったにありません。
jbord39

@ jbord39これは、ブートローダーをメモリに焼き付け、OSをロードするための余分なROMチップを避けるのに役立ちますか?コスト削減に役立ちますか?
ジョンドヴォルザーク

2
@JanDvorak:特定のアプリケーションでは、指定された状態で起動するようにビットセルを歪めたりバイアスをかけたりできます。しかし、実際にはコストはそれだけの価値はありません。顧客ごとに異なる初期状態が必要になるからです。外部回路(ROMなど)で初期化する方がはるかに簡単で費用効率が高くなります。それらは、プログラム可能な回路を組み込んで、希望する初期状態または他の方式で書き込むことができると思います。しかし、これは明らかにRAMに書き込み/読み取りする回路が既にある場合は高価に聞こえます。したがって、目的の状態を記述するだけです。
jbord39

5

SRAMを長年使用してきましたが、ランダムに見えるコンテンツでパワーアップすることがわかりますが、毎回ほぼ同じランダムなコンテンツでパワーアップするデバイスを見てきました。電源オフサイクルが(電源の特性とバイパスコンデンサの数と値に応じて)十分に短い場合、以前に書き込まれたデータの大きな断片が電源サイクルを通じてSRAMに残る可能性があります-コンテンツは破損します。


2

単一ビットは、6個以上のトランジスタの回路内のSRAMに格納されます。SRAMのパワーオンリセット動作を定義したい場合、各RAMセルに必要なトランジスタは6個以上です。必要なチップ面積はかなり大きくなり、SRAMチップはより高価になります。これは、すべてのビットを同時にリセットする並列パワーオンです。シリアルリセットには、オシレーター、アドレスカウンター、およびすべてのRAMビットまたはバイトを順番にリセットするための電源投入時の十分な時間が必要です。シリアルパワーオンリセットが終了する前にプロセッサがSRAMにアクセスすると、エラーが発生し、データが失われたり変更されたりする場合があります。

複数のRAM領域の詳細なメモリマッピングを備えたマイクロプロセッサ用のプログラミング環境があります。アプリケーションの必要に応じて、パワーオンリセットの有無にかかわらずエリアを定義できます。同じSRAM内のいくつかの異なる領域が可能です。プログラムの開始時に、SRAM全体をリセットする必要は必ずしもありません。


3
一部のトランジスタを他のトランジスタよりわずかに大きくすると、1の確率と0の確率がゆがみます。多くの部分で、トランジスタは製造公差内でバランスが取られます。つまり、一部のビットはゼロにバイアスされ、他のビットは1にバイアスされます。起動動作を一方向に圧倒的に偏らせるには、サイズの違いを非常に大きくする必要があるとは思いません。RAMメーカーは、そうする理由があれば簡単に一貫してバイアスをかけることができますが、不均衡なRAMは、セルを好ましくない方向に切り替えるために余分な電流を消費します。
supercat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.