インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

17.6.2.6. 受信

受信機能では、受信記述子を使用します。次のステップは、受信DMAエンジンの受信シーケンスです。
  1. ホストは受信記述子 (RDES0からRDES3) を設定し、Ownビット (RDES0[31]) を設定します。
  2. レジスター6 (Operation Mode Register) のビット1 (SR) が設定されると、DMAはRun状態に入ります。Run状態の間、DMAは受信記述子リストをポーリングし、空いている記述子の取得を試みます。フェッチされた記述子が解放されていない (ホストに所有されている) 場合、DMAはSuspend状態に入り、9 に進みます。
  3. DMAは、取得した記述子から受信データ・バッファー・アドレスをデコードします。
  4. 着信フレームが処理され、取得した記述子のデータバッファーに配置されます。
  5. バッファーがフルになる、もしくはフレームの転送が完了すると、受信エンジンは次の記述子をフェッチします。
  6. 現在のフレーム転送が完了すると、DMAは7 に進みます。DMAが次にフェッチされる記述子を所有しておらず、フレーム転送が完了していない (EOFがまだ転送されていない) 場合、DMAはRDES0のDescriptor Errorビットを設定します (Operation Mode Registerであるレジスター6のビット24でフラッシュが無効になっていない限り)。DMAは現在の記述子を閉じ (Ownビットをクリアする)、RDES0のLast Segment (LS) ビットの値をクリアして中間としてマーク (フラッシュが無効になっていない場合はLast Descriptorとしてマーク) 後、8 に進みます。DMAが次の記述子を所有しており、現在のフレーム転送が完了していない場合、DMAは現在の記述子を中間として閉じ、4 に戻ります。
  7. IEEE 1588のタイムスタンプが有効になっている場合、DMAはタイムスタンプ (利用可能な場合) を現在の記述子のRDES2およびRDES3に書き込みます。次に、MTLから受信フレームのステータスを取得し、ステータスワードを現在の記述子のRDES0に書き込みます。この際、Ownビットはクリアされ、Last Segmentビットが設定されます。
  8. 受信エンジンは、最新の記述子のOwnビットを確認します。ホストが記述子を所有している (Ownビットが0である) 場合、レジスター5 (Status Register) のビット7 (Receive Buffer Unavailable) が設定され、DMA受信エンジンがSuspended状態に入ります (ステップ9)。DMAが記述子を所有している場合、受信エンジンは4 に戻り、次のフレームを待機します。
  9. 受信エンジンがSuspend状態に入る前に、部分的なフレームが受信FIFOバッファーからフラッシュされます。フラッシュは、レジスター6 (Operation Mode Register) のビット24を使用して制御することができます。
  10. 受信DMAは、Receive Poll要求が提供される、もしくは次のフレームの開始がMTLの受信FIFOバッファーから利用可能になると、Suspend状態を終了します。エンジンは2 に進み、次の記述子を再フェッチします。
図 70. 受信DMAの動作

ソフトウェアで、レジスター448 (Timestamp Control Register) のtsenaビットを介してタイムスタンプを有効にしている場合に、有効なタイムスタンプ値がフレームで利用できない (例えば、タイムスタンプが書き込まれる前に受信FIFOバッファーがフルになった) 場合、DMAは、RDES2記述子とRDES3記述子にすべて1を書き込みます。それ以外の場合 (つまり、タイムスタンプが有効になっていない場合) は、RDES2記述子とRDES3記述子は変更されません。