デジタルIC設計研究ノート_FIFO深さ計算

デジタルIC設計研究ノート

FIFO深度の計算

1. 背景
2. 数据突发长度(burst length)
3. FIFO深度计算

1.背景

このシナリオは、デジタルIC設計でよく見られます。異なるクロックドメインで動作する2つのモジュールは、それらの間でデータを転送する必要があります。データ損失を回避するために、FIFOを使用します。データの読み取り速度がデータの書き込み速度よりも低い場合、読み取られていないデータをキャッシュする必要があります。次に、データをキャッシュするためにどのくらいのスペースが必要ですか。キャッシュが大きくなるとリソースが無駄になり、キャッシュが小さいとデータが失われます。最小FIFO深度の計算方法が議論の焦点です。

2.データバースト長(バースト長)

FIFO深度の計算方法を説明する前に、バースト長という用語を理解しましょう。すでに知っている場合は、スキップできます。データのバースト長を理解するために、最初にシナリオを考えてみましょう。モジュールAがFIFOにデータを継続的に書き込む場合、モジュールBもFIFOからデータを継続的に読み取ります。違いは、モジュールAがデータを書き込むクロック周波数です。モジュールBのクロック周波数よりもデータを読み取るため、一定期間に読み取られなかったデータが常に存在します。システムが動作している場合、読み取られなかったデータはますます蓄積されます。 、したがってFIFOの深さ必要性は無限であるため、バーストデータ送信中にのみFIFOの深さについて説明することは理にかなっています。つまり、一度に1パケットのデータを転送してから、次のパケットのデータを転送します。一定期間内に転送されたデータの数をバースト長と呼びます。ウィキペディアでは、バースト送信は次のように説明されています。電気通信では、バースト送信またはデータバーストは、短期間の比較的高帯域幅の送信のブロードキャストです。

バースト長がわかったら、上記の説明から、FIFOの最小深度がバーストレート、バーストサイズ、読み取りおよび書き込み頻度、その他の要因に関連していることがわかります。FIFOの深さを決定するために重要なのは、バーストの読み取りおよび書き込み期間中に読み取られなかったデータの数を計算することです。つまり、FIFOの最小深度は、読み取られていないデータの数と同じです。

実際、一部のASICフォーラムでは、多くの前任者がFIFOの深さの計算式を提供していますが、そのときの式を見たとき、それがどのように行われたのかわかりませんでした。FIFOサイズの計算プロセスをよりよく理解できるようにするためです。 、ここでは適用しません。計算式を前提に、さまざまなシナリオでFIFOの深さを段階的に計算します。もちろん、FIFOの深さの計算式は、この記事の最後に記載されています。式を適用したい場合は、この記事の最後に直接移動できます。

説明する前に、FIFOにデータを書き込むモジュールAのクロック周波数はfaであり、FIFOからデータを読み取るモジュールBのクロック周波数はfbであると仮定します。

3.FIFO深度の計算


场景1:fa> fb書き込みと読み取りの両方でアイドルサイクルがない


仮定:
書き込みデータクロック周波数fa = 80MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 120
バースト転送プロセスでは、データは継続的に読み取りおよび書き込みされます。

次に:

  • データの書き込みに必要な時間= 1 / 80MHz = 12.5ns
  • バースト送信では、すべてのデータの書き込みに必要な時間= 120 * 12.5ns = 1500ns
  • データの読み取りに必要な時間= 1 / 50MHz = 20ns
  • したがって、すべてのバーストデータを書き込むのに1500nsかかります
  • 1500nsで読み取れるデータ数= 1500ns / 20ns = 75
  • したがって、1500nsで読み取られなかったデータの数= 120-75 = 45
  • したがって、FIFOの最小深度は45です。

场景2:fa> fb、2つの連続する読み取りと書き込みの間に2クロックサイクルの遅延


シーン2は、シーン1に基づいて仮定を追加します。つまり、読み取りは書き込みより2ビート遅くなります。この仮定は実際に存在します。非同期FIFO設計では、ロジックの正確性を確保するためにFIFOが満杯か空かを判断する必要があります。満杯または空のフラグを判断するには、読み取りポインターと書き込みポインター、および読み取りポインターを比較する必要があります。クロックドメインでは、グレーコードと2レベル同期レジスタを使用して、メタステーブル状態の可能性を減らす必要があります。2レベル同期では、必然的に空フラグまたはフルフラグの判断が行われます。少なくとも2サイクル遅延します。空のフラグビットの場合、書き込みポインタを読み取りクロックドメインに同期するのに少なくとも2クロックかかり、同期期間中に新しいデータが書き込まれる可能性があるため、同期された書き込みポインタは以下である必要があります(等しい同期時間に新しいデータが書き込まれない場合にのみ、現在の書き込みポインタに同期するため、この時点での判断は必ずしもバキュームではありません。同様に、フルフラグビットの場合、読み取りポインタを読み取りクロックに同期する必要があります。少なくとも2クロックを費やし、同期期間中に新しいデータを読み取ることができるため、同期後の読み取りポインタは現在の読み取りポインタ以下である必要があるため、この時点での判断は必ずしも正しいとは限りません。

  • 上記の説明により、シーン2の最小FIFO深度は、シーン1の最小FIFO深度45よりもわずかに大きくなければならないことがわかります。

场景3:fa> fb、書き込みと読み取りの両方でアイドルサイクル


仮定:
書き込みデータクロック周波数fa = 80MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 1201サイクルごとに1
回書き込み
3サイクルごとに1回読み取り

次に:
1サイクルごとに1回書き込み、つまり2サイクルだけが1つのデータを書き込みます
。3サイクルごとに1回読み取ります。つまり、4サイクルだけが1つのデータを読み取ります。

  • データの書き込みに必要な時間= 2 * 1 / 80MHz = 25ns
  • バースト送信では、すべてのデータの書き込みに必要な時間= 120 * 25ns = 3000ns
  • データの読み取りに必要な時間= 4 * 1 / 50MHz = 80nsなので、すべてのバーストデータを書き込むのに3000nsかかります
  • 3000ns以内に読み取れるデータ数= 3000ns / 80ns = 37.5
  • したがって、3000ns以内に読み取られなかったデータの数= 120-37.5 = 82.5
  • したがって、FIFOの最小深度は83です。

场景4:fa> fb、wr_enbとrd_enbにデューティサイクルが与えられています。


仮定:
書き込みデータクロック周波数fa = 80MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 120
バースト時間全体に対する書き込みイネーブル信号の比率は1/2
読み取りイネーブル信号の比率ですバースト時間全体に対して1/4です

次に:

  • シーン4とシーン3の説明は一貫していませんが、状況は同じであるため、FIFOの最小深度も83です。

场景5:fa <fb、書き込みと読み取りの両方でアイドルサイクルなし


仮定:
書き込みデータクロック周波数fa = 40MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 120
バースト転送プロセスでは、データは継続的に読み取りおよび書き込みされます。

次に:

  • データの読み取りはデータの書き込みよりも高速であるため、FIFOはクロックドメインでのみ役割を果たし、FIFOの最小深度は1です。

场景6:fa <fb、書き込みと読み取りの両方でアイドルサイクル


仮定:
書き込みデータクロック周波数fa = 40MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 1201サイクルごとに1
回書き込み
3サイクルごとに1回読み取り

次に:
1サイクルごとに1回書き込み、つまり2サイクルだけが1つのデータを書き込みます
。3サイクルごとに1回読み取ります。つまり、4サイクルだけが1つのデータを読み取ります。

  • データの書き込みに必要な時間= 2 * 1 / 40MHz = 50ns
  • バースト送信では、すべてのデータの書き込みに必要な時間= 120 * 50ns = 6000ns
  • データの読み取りに必要な時間= 4 * 1 / 50MHz = 80ns
  • したがって、すべてのバーストデータを書き込むのに6000nsかかります
  • 6000ns = 6000ns / 80ns = 75で読み取ることができるデータの数
  • したがって、6000nsで読み取られなかったデータの数= 120-75 = 45
  • したがって、FIFOの最小深度は45です。

场景7:fa = fb、書き込みと読み取りの両方でアイドルサイクルなし


仮定:
書き込みデータクロック周波数fa = 50MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータの数= 120

次に:

  • 読み取りクロックと書き込みクロックが同じ原点であり、位相差がない場合、FIFOは必要ありません。それ以外の場合、FIFOの最小深度は1です。

场景8:fa = fb、書き込みと読み取りの両方でアイドルサイクル


仮定:
書き込みデータクロック周波数fa = 50MHz
読み取りデータクロック周波数fb = 50MHz
バースト長=転送されるデータ数= 1201サイクルごとに1
回書き込み
3サイクルごとに1回読み取り

次に:
1サイクルごとに1回書き込み、つまり2サイクルだけが1つのデータを書き込みます
。3サイクルごとに1回読み取ります。つまり、4サイクルだけが1つのデータを読み取ります。

  • データの書き込みに必要な時間= 2 * 1 / 50MHz = 40ns
  • バースト送信では、すべてのデータの書き込みに必要な時間= 120 * 40ns = 4800ns
  • データの読み取りに必要な時間= 4 * 1 / 50MHz = 80ns
  • したがって、すべてのバーストデータを書き込むのに4800nsかかります
  • 4800ns = 4800ns / 80ns = 60で読み取ることができるデータの数
  • したがって、4800nsで読み取られなかったデータの数= 120-60 = 60
  • したがって、FIFOの最小深度は60です。

场景9:データレートが与えられ、ランダムに読み書き(重要!!!)


以前のシナリオでは、数クロックごとに1回の読み取りと書き込みを条件としていましたが、この種の定期的な読み取りと書き込みは実際には非常に一般的です。しかし、エンジニアリング設計では、一定期間内のデータの読み書き速度のみが与えられ、読み書きの仕方が完全にランダムになるという状況がまだあります。この場合、最悪のケースを考慮する必要があります。データの損失を避けるため。最悪の場合、読み取り速度と書き込み速度の差が最大になるはずです。つまり、最大書き込み速度と最小読み取り速度を見つける必要があります。

仮定:
書き込みデータクロック周波数fa = 80MHz
読み取りデータクロック周波数fb = 50MHz
書き込みクロックサイクルでは、100サイクルごとに40データがFIFOに書き込まれ
ます。読み取りクロックサイクルでは、10サイクルごとに8データを読み取ることができます。FIFO

つまり
、まず、データのバースト長はここでは示されていません。仮定から、100サイクルごとに40個のデータがFIFOに書き込まれると結論付けることができます。ここでは、バースト長が40データであると言う人もいます。しかし、これはそうではありません。、データがランダムにFIFOに書き込まれているので、我々は、最大書き込み速度を持つ状況で悪い状況を、検討する必要があります。唯一のバックツーバックの状況次の図は、あります書き込みレートが最も高く、バースト長が80の状況
ここに画像の説明を挿入

注:ここでは、解決策があるかどうかを確認する必要があります。つまり、バーストデータを書き込む時間は、バーストデータを読み取る時間以上である必要があります。そうでない場合、データはますます蓄積され、FIFOの深さが必要になります。無限になります。
まず、バーストデータが書き込まれるため、80データの書き込みに必要な時間= 1 / 80MHz *(80 100/40)= 2500ns、80データの読み取りに必要な時間= 1 / 50MHz(80 * 10/8)= 2000nsバーストデータの時間よりも時間が長いので、解決策があります。
FIFOの最小深度を計算してみましょう。

  • 80データを連続して書き込むのに必要な最速時間= 1 / 80MHz * 80 = 1000ns
  • 少なくともFIFOからデータを読み取るのに必要な時間=(1 / 50MHz)*(10/8)= 25ns
  • 次に、1000ns = 1000ns / 25ns = 40で読み取ることができるデータ
  • 1000ns以内に読み取られないデータ= 80-40 = 40したがって、FIFOの最小深度は40です。

総括する


上記の分析から、FIFOの最小深度には主に次の点があります。

  1. 解決する前に、許可された最大時間内に書き込まれたデータの量が読み取られたデータの量と等しいかどうかを確認して、解決策があることを確認する必要があります。
  2. FIFOの深さについては、最悪の場合を考慮する必要があります。読み取り速度と書き込み速度の差が最大である必要があります。つまり、最大書き込み速度と最小読み取り速度を見つける必要があります。
  3. シナリオに関係なく、FIFOの深さを決定するには、バーストの読み取りおよび書き込み期間中に読み取られなかったデータの数を計算することが重要です。
  4. FIFOが空またはフルフラグビットであるかどうかの判断が遅れるため、実際のアプリケーションではある程度のマージンを確保する必要があります。

以下のFIFO深度を解くための式を導き出しましょう。

  • 書き込みクロック周波数はfwrです
  • 読み取りクロック周波数はfrdです
  • 書き込みクロックサイクルでは、mサイクルごとにn個のデータがFIFOに書き込まれます。
  • 読み取りクロックサイクルでは、xサイクルごとにy個のデータ読み取りFIFOが存在する可能性があります。

次に:

  • 最初に(1 / fwr)(m / n)≥(1 / frd)(x / y)を満たす必要があります
  • 「連続」状況は、FIFOの読み取りと書き込みの最悪のケースです。バースト長B = 2 * nバースト長データの書き込みに必要な最速時間T =(1 / fwr)* B
  • FIFOからデータを読み取るには、少なくとも時間t =(1 / frd)*(x / y)が必要です。
  • T時間で両方から取得できるデータの数= T / t = B *(frd / fwr)*(y / x)
  • T時間内に読み取られなかったデータの数= B-B *(frd / fwr)*(y / x)
  • したがって、FIFOの最小深度はB-B *(frd / fwr)*(y / x)です(マージンが予約されていることに注意してください)

—転載されたコンテンツはXingyuYecheThanksからのものです^^
https://www.cnblogs.com/dxs959229640/p/8144656.html

【注意】:個人学習メモ、間違いがありましたら、お気軽に教えてください、丁寧です~~~


おすすめ

転載: blog.csdn.net/weixin_50722839/article/details/113951003