フラッシュメモリの待機状態とは何ですか?


10

フリースケールのPowerPCマイクロコントローラーを使用しています。データシートのフラッシュメモリモジュールでは、「フラッシュメモリアクセスの待機状態」の数を設定できます。

以下は、私の質問で提起されたデータシートの一部です。これは、PFlashモジュールレジスタのレジスタの説明から取られたものです。

このフィールドは、PFlashの動作周波数とPFlashの実際の読み取りアクセス時間に対応する値に設定する必要があります。より高い動作周波数では、適切なフラッシュ動作のためにこのフィールドにゼロ以外の設定が必要です。
0 MHz、<23 MHz、必要な待機状態= 0 ---
23 MHz、<45 MHz、必要な待機状態= 1 ---
45 MHz、<68 MHz、必要な待機状態= 2 ---
68 MHz、<90 MHz、必要な待機状態= 3 ---

(PFlashはPlatform Flashコントローラモジュールです)

プロセッサがフラッシュよりも高速であることを理解しています。そのため、待機状態が導入されています。私が理解していないことは、プロセッサがフラッシュよりも速い場合、プロセッサはフラッシュではなくスローダウンする必要があるプロセッサですが、上記の段落は反対を述べています(または私はこれを理解していませんでしたか?) Pflashが高周波数で動作する場合、追加の待機状態を追加して速度を落とす必要があると述べています!!

私の理解の何が問題になっていますか?

ありがとう


1
私が正しく理解した場合、コントローラーはさまざまな速度に設定できます。そのため、実際のフラッシュメモリにデータが利用可能になるまで待機する必要があります。
クラバッキオ

回答:


8

stevenvhの答えを増幅するために、入力信号が与えられた場合、どのタイプのロジックも出力信号を生成するのにしばらく時間がかかります。多くの場合、メモリは他のロジックと比較して非常に低速です。多くの場合、出力信号が特定の時間内に有効になることが保証されますが、それだけです。特に、信号がその間隔内で数回変化する可能性があり、その間隔が終了する前に、信号がその最終的な「正しい」値を達成したことを示すものはありません。

典型的なマイクロコントローラまたはマイクロプロセッサがメモリのバイト(またはワード、またはその他の単位)を読み取ると、アドレスが生成され、しばらくしてから、メモリによって出力された値が確認され、それに作用します。コントローラがアドレスを生成してからメモリからの値を確認するまでの間に、メモリからの出力信号がいつ変化するか、または変化するかどうかは関係ありません。一方、メモリからの信号が、コントローラがそれを見るまでに最終値に安定しない場合、コントローラは、見たときに出力されていた値を保持しているとメモリを誤って読み取ります。通常、コントローラーは、何かを実行する準備ができるとすぐにメモリーから値を調べますが、メモリーの値が準備されていないと、機能しない可能性があります。したがって、多くのコントローラには、メモリからのデータを実際に有効にするために、メモリからのデータを処理する準備ができてからもう少し待つオプションがあります。このような遅延を追加すると、速度が遅くなりますが(コントローラーはメモリからのデータをより早く操作できます)、操作の正確さに影響を与えません(速度が遅くなりすぎて、他のタイミングの義務が満たされない場合を除く)。


いいね!あなたが説明した有用な詳細をありがとう!
MohamedEzz

1
@MemoryLeaks:どういたしまして。注意すべき重要な点は、待機状態を指定された制限よりも低くするとシステムの実行が速くなることですが、メモリからの読み取りにより、不正確なデータが勝手に生成される可能性があります。さらに、「誤って不正確なデータを生成する」とは、「設計したデバイスが顧客の手に渡るまで正しいデータを生成し、その後、顧客を怒らせるほど頻繁に不正確なデータを生成し始める」ことを意味します。
スーパーキャット2012

1
これは非常に密接に並行したオーバークロックのようですが、その構成可能なオプションの多く。MCUをオーバークロックする興味深い方法。
sherrellbc 14

1
@supercat、コントローラの意味する1つの質問は、それがプロセッサまたはメモリコントローラですか?
Mouin

1
@Mouin:存在する場合はメモリコントローラ、存在しない場合はプロセッサ。
スーパーキャット2018

9

CPUによって開始されるメモリアクセスサイクルに待機状態が追加されます。したがって、遅いフラッシュを待たなければならないのは、実際にはCPUです。メモリコントローラーは、いくつかのサイクル(0〜3)の間、CPUに「準備ができていません」の信号を送ります。その間、CPUは現在の状態のままです。メモリコントローラーが「データ準備完了」の信号を送ったときのみ、CPUはデータバスから読み取り、その命令を続行します(データをレジスターまたはRAMにラッチします)。


1
したがって、その設定を構成することで、「データ準備完了」を正確に通知するタイミングをメモリコントローラーに指示しています。実際に準備ができているときに「データ準備ができている」ことを通知するようメモリに指示することはできませんか?
MohamedEzz

1
@MemoryLeaks-それは可能であり、それは珍しい非同期プロセッサによって行われます。クロックを使用してすべてを同期させる方が一般的であり、予測可能です。つまり、クロックサイクルの遅延(または2または3)か、または何もありません。
stevenvh

答えてくれてありがとう:)つまり、要約すると、上記の私の質問の説明は、フラッシュコントローラではなく「CPU」を遅延させることを意味します
MohamedEzz

1
@stevenvhは、プロセッサが文字通りハングアップするか、メモリからデータを受け取るか、つまり、実行を完全に停止するか、パイプラインCPUの場合に他の命令を実行するかを意味します。割り込みは、CPUがメモリの準備ができるのを待っている間に処理されると思いますか?
ミゲルサンチェス

3

プロセッサはメモリで停止する必要があるかもしれませんが、賢い設計はそうする必要はありません。

あなたが気付いていない主要なテクノロジーは、バースト/ページモードアクセスです。これにより、メモリアクセスの帯域幅をプロセッサ速度に非常に近づけることができます(ただし、フラッシュベースのMCUが200MhZ以上で実行されるのを見たことがないので、フラッシュは依然としてボトルネックです)。

ただし、レイテンシ変わりません。たとえば、私が使用しているSTM32F4 MCUの場合、#wait状態= floor(clockSpeed / 30MhZ)です。つまり、クロック速度に関係なく、レイテンシは常に33nsです。「お金は帯域幅を買うことができますが、待ち時間は永遠です...」ということわざがあります。

フラッシュの帯域幅がCPUをビジー状態に保つのに十分でなかったとしても、実行が予想される命令を格納してプリフェッチするコードキャッシュを簡単に設計できます。STは、STM32F4 MCU(168 MhZ)についてこれに関するヒントを持っています。

ARTアクセラレータは0待機状態のプログラム実行と同等のパフォーマンスを実現できるため、ARTアクセラレータと128ビットフラッシュメモリのおかげで、ここで指定する待機状態の数はフラッシュメモリからの実行速度に影響しません。

実際、声明はまたバーストモードが必要ではなく、非常に広いメモリインターフェースで十分であることも示唆しています。しかし、考え方は同じです(待ち時間を隠すために並列処理を使用)。チップ上では、配線は無料です。そのため、128ビットメモリは理にかなっています。


一般的に言えば、ワイヤはチップ上で「フリー」とはほど遠いですが、メモリアレイと一連のラッチの間のバス幅を増やしてもワイヤは追加されません。チップに512x512グリッドとして構成された256kbitフラッシュアレイがある場合、512カラムを32ビットバスに凝縮する配線とロジックは、「凝縮」ワイヤとロジックの前に512ビット幅のラッチを配置するかどうかにかかわらず必要になります。またはそれらの後に32ビット幅のラッチ。
スーパーキャット2014

1
つまり、外部ピンと比較して「無料」です。最近はワイヤーエネルギーが支配的であり、その場所が重要であることは知っているので、その発言を限定させてください。彼らは作るのは自由ですが、オンにするのは自由ではありません!
Yale Zhang

1
「ワイヤーエネルギー」が何を意味するのかはわかりませんが、スペースの観点から見ても、大型バスは高価ですが、バスの幅を2倍にすると、バスの長さが約半分になり、全体のコストはほぼ同じままです。
スーパーキャット2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.