Multi Channel DMA Intel® FPGA IP for PCI Express* デザイン例のユーザーガイド

ID 683517
日付 10/06/2023
Public
ドキュメント目次

3.3.3. Avalon-ST Packet Generate/Checkデザイン例でのDMAテストのテストベンチ・フロー例

Avalon-ST Packet Generate/Checkデザイン例のDMAテストベンチでは、次の2つの主要なタスクを示します。
  • ホストからデバイス: ホストメモリーに格納されているパケットをデザイン例のユーザーロジックのパケットチェッカーに転送します。チェッカーモジュールはパケットの整合性を検証します。
  • デバイスからホスト: ジェネレーター・モジュールから生成されたパケットをホストメモリーに転送します。ホストはパケットの整合性をチェックします。
注: このテストベンチは、1パケット (4096バイト長) の転送を実装します。
デザイン例のDMAテストベンチは次のタスクを実行します。
  1. 4096バイトのインクリメントするデータパターンを設定し、ホストからデバイス、そしてホストに戻るデータの移動をテストします。
  2. 想定されているパケット長の値 (4096バイト) をPIOを介してデザイン例のユーザーロジックのパケット生成およびチェッカーに書き込みます。この値をパケット・チェッカー・モジュールで使用し、パケットの整合性をテストします。
  3. MSI-Xを有効にしてコンフィグレーションすることで、メモリー書き込みを開始し、各記述子のDMAトランザクションの終わりを通知します。ライトバック機能はシミュレーションでは無効の状態で保たれます。
  4. マルチチャネルDMAのH2D (ホストからデバイス) キューをセットアップします。
  5. ホストメモリーで3つのH2D記述子を設定します。ソースアドレスは、ホストメモリーのインクリメントするデータパターンの位置を指します。パケットの開始 (SOF) およびパケットの終了 (EOF) マーカーは、パケット長とともに記述子で示されます。
  6. キューのプログラミングの最後のステップでマルチチャネルDMA Tail pointerレジスターが書き込まれると、マルチチャネルDMAがトリガーされてH2D DMAトランザクションが開始します。
  7. 前のステップでは、H2Dデータムーバーにホストメモリーから記述子をフェッチするように指示しています。
  8. マルチチャネルDMA H2Dデータムーバーは、ホストメモリーからデータを読み出し、AVSTストリーミング・インターフェイスを介してパケット・ジェネレーターおよびチェッカーにパケットを転送します。
  9. チェッカーモジュールはパケットを受信し、整合性をチェックします。これには、データパターン、想定されている長さ、および「EOP」マーカーを適切に受信しているかをテストします。パケットが適切であると判断された場合は、合格パケットの数が1増加し、そうでない場合は不良パケットの数が増加します。
  10. テストベンチでは、Good Packet CountレジスターとBad Packet CountレジスターのPIO読み出しアクセスを実行し、テストの成功ステータスまたは失敗ステータスを表示します。
  11. MSI-X書き込みコマンドは、すべての記述または完了に対してトリガーされます。テストベンチではこれらを適切に受信しているかをチェックします。
  12. 次に、D2H (デバイスからホスト) キューを設定します。
  13. ホストメモリーで3つのD2H記述子を設定します。宛先アドレスは、ホストメモリーの新しいアドレス空間を指します。この空間は、すべて0で事前に満たされています。
  14. キューのプログラミングの最後のステップでマルチチャネルDMA Tail pointerレジスターが書き込まれると、マルチチャネルDMAがトリガーされてD2H DMAトランザクションが開始します。
  15. 前のステップでは、H2Dデータムーバーにホストメモリーから記述子をフェッチしてD2H DMAトランザクションを開始するように指示しています。
  16. マルチチャネルDMA D2Hデータムーバーは、パケット・ジェネレーターからの受信パケットを読み取り、前のステップでフェッチされた記述子に従いホストメモリーにデータを書き込みます。
  17. MSI-X書き込みコマンドは、記述が完了するたびにトリガーされます。テストベンチではこれらを適切に受信しているかをチェックします。
  18. D2Hタスクでシステムメモリーに書き戻されたデータを標準のインクリメント・パターンと比較し、テストの成功/失敗を宣言します。

エラーの発生がなければ、シミュレーションでは Simulation stopped due to successful completion (シミュレーションは正常に終了して停止しました) が報告されます。