この付録では、フェッチ インターフェイスについて説明します。フェッチ インターフェイスは、エラー分類に使用するエッセンシャル ビット データを SEM Controller に供給するために使用します。このインターフェイスが必要なのは、SEM Controller の分類機能を有効にした場合のみです。また、SPI フラッシュ マスター ヘルパー ブロックをパラレル フラッシュ メモリ コントローラーなど別の機能で置き換える場合も、この付録の内容を参照してください。
UltraScale™ SSI デバイスの場合、サンプル デザインの SPI フラッシュ マスターは複数の SLR のフェッチ インターフェイスを使用して 1 つの SPI フラッシュを管理します。その他のデバイスでは、サンプル デザインの SPI フラッシュ マスターは 1 つのフェッチ インターフェイスで 1 つの SPI フラッシュを管理します。
この図 に、フェッチ インターフェイスの送信プロトコルを示します。 1 バイトのデータを送信する場合、コントローラーはまず fetch_txfull 信号をサンプリングして送信バッファーに 1 バイトのデータを格納できる空きがあるかを調べます。 fetch_txfull が Low の場合、コントローラーは fetch_txdata[7:0] にデータを与え、 fetch_txwrite を 1 クロック サイクルだけアサートして 1 バイトのデータを送信します。
コントローラーは、 fetch_txdata[7:0] に一連のデータを与え、 fetch_txwrite を複数サイクル続けてアサートすることでバースト書き込みを実行できます。ただしコントローラーは fetch_txfull を監視することにより、送信バッファー オーバーランを防いでいます。
データ受信側のペリフェラルは、バッファーの空きを正しく追跡して fetch_txfull で報告します。 ペリフェラルは、 fetch_txwrite = High をサンプリングした次のサイクルで、データの書き込みによってバッファーが完全にフルである場合は fetch_txfull をアサートする必要があります。
また、ペリフェラルはコントローラーからの
fetch_txwrite
への応答としてのみ
fetch_txfull
をアサートする必要があります。ペリフェラル内部のイベントに基づいて
fetch_txfull
をアサートすることはできません。
これは、コントローラーが書き込みを実行する何サイクルか前に
fetch_txfull
をサンプリングすることがあるためです。
ペリフェラルが fetch_txfull をアサートしている間、コントローラーは送信待ちのデータがある場合でも動作を停止します。これにより、コントローラーのエラー軽減パフォーマンスが低下します。
この図 に、フェッチ インターフェイスの受信プロトコルを示します。 1 バイトのデータを受信する場合、コントローラーはまず fetch_rxempty 信号をサンプリングして受信バッファーに 1 バイトのデータが格納されているかを調べます。 fetch_rxempty が Low の場合、コントローラーは fetch_rxdata[7:0] から 1 バイトのデータを受信し、 fetch_rxread を 1 クロック サイクルだけアサートして受信完了を通知します。
コントローラーは、 fetch_rxdata[7:0] からデータ シーケンスを取得し、 fetch_rxread を複数サイクル続けてアサートすることでバースト読み出しを実行できます。ただしコントローラーは fetch_rxempty を監視することにより、受信バッファー アンダーランを防いでいます。
データ送信側のペリフェラルは、バッファーのステータスを正しく追跡して fetch_rxempty で報告します。ペリフェラルは、 fetch_rxread = High をサンプリングした次のサイクルで、バッファーが空の場合は fetch_rxempty をアサートする必要があります。
また、ペリフェラルはコントローラーからの fetch_rxread への応答としてのみ fetch_rxempty をアサートする必要があります。ペリフェラル内部のイベントに基づいて fetch_rxempty をアサートすることはできません。これは、コントローラーが読み出しを実行する何サイクルか前に fetch_rxempty をサンプリングすることがあるためです。
データは 2 進数で交換され、コマンド/応答ペアを表します。 データ フォーマットはリトル エンディアンです。 data[7:0] の場合、0 が LSB で 7 が MSB です。32 ビット ワードの場合、バイト 0 が LSB でバイト 3 が MSB です。分類ステート ( status_classification = 1) では、コントローラーはフェッチ インターフェイスを使用してコマンドを送信し、外部メモリから分類データを読み出します。アドレスはすべてバイト アドレスで、トランザクションはすべて 1 バイトずつ実行されます。
コントローラーが fetch_tx インターフェイスを使用して 6 バイトのコマンド シーケンスを送信すると、データ フェッチが開始します。 このコマンド シーケンスは次のとおりです。
• バイト 1: ADD[31:24]
• バイト 2: ADD[23:16]
• バイト 3: ADD[15:8]
• バイト 4: ADD[7:0]
• バイト 5: LEN[15:8]
• バイト 6: LEN[7:0]
ADD フィールドはアドレスで、LEN フィールドはコントローラーがペリフェラルから受信するデータ バイト数を表します。通常、コマンド タイプは「開始アドレス ADD から長さ LEN バイトを読み出す」です。コントローラーが送信する ADD フィールドの値は、ユーザーが定義した分類ベース ポインターによって異なります。 フェッチ インターフェイス を参照してください。
この図 に、このコマンド シーケンスを示します。
これに応答して、ペリフェラルは ADD[31:0] で指定されたアドレスを先頭に LEN[15:0] で指定されたバイト数のデータをフェッチして、このデータをコントローラーに返す必要があります。コントローラーがコマンドを発行した後、ペリフェラルは fetch_rx インターフェイスに要求された正確なバイト数を返してコマンドを完了する必要があります。 この図 に、LEN = 4 の場合のトランザクションを示します。
注記: ブートまたは初期化ステートでは、SEM Controller は fetch_rxread ポートに対して 2 つの特殊な読み出しシーケンスを実行して、このインターフェイスをリセットします。この読み出しシーケンスはデータの取得が目的ではないため、データは無視できます。