記事 ID: 000083942 コンテンツタイプ: トラブルシューティング 最終改訂日: 2020/07/26

ポーリング (割り込み) タイムアウト

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    インテル® FPGA プログラマブル・アクセラレーション・カード N3000 の工場出荷時のイメージで複数の DMA ハンドルが同時に開かれると、Poll (interrupt) タイムアウトエラーが発生する場合があります。

    タイムアウト・エラーは、1 つの割り込みを共有する 4 つの DMA ブロックを持つファクトリー・イメージ・デザインが原因です。

    解決方法

    アプリケーションで複数のオープン DMA ハンドルが必要な場合は、以下のように AFU RTL デザインとソフトウェア・コードをカスタマイズします。

    1. RTL デザイン:

    デフォルトの afu.sv ファイルの 257 行目dma_irqは、avmm_ccip_host_wrモジュールの irq[0] に送信されます。

    .irq ({3'b000、dma_irq})

    デザインをカスタマイズして、DMA ブロックから各 irq を異なるビットにマッピングします。

    2. ソフトウェアコード:

    fpga_dma.c ファイルの 701 ~702 行目では、FPGARegisterEvent 関数は 0 を固定ベクトル ID として使用します。

    res = fpgaRegisterEvent (dma_h->fpga_h、FPGA_EVENT_INTERRUPT、dma_h->eh、0 /*ベクトル id */);

    RTL デザイン内の irq ビットにマップされる dma ハンドルに、異なる ID を登録します。

    例えば、2 つの DMA ハンドルを組み合わせて DDRA と DDRB にアクセスするには、RTL コードをカスタマイズして、DDRA のafu_dma_0_instで dma_irqを irq[0] にマッピングし、DDRB のafu_dma_1_instで dma_irqを irq[1] にマッピングします。ソフトウェア コードでは、DMA ハンドル 0 のベクトル ID 0 を使用して DDRA にアクセスし、DMA ハンドル 1 のベクトル ID 1 を使用して、FPGARegisterEvent 関数で DDRB にアクセスします。

    関連製品

    本記事の適用対象: 2 製品

    インテル® Arria® 10 FPGA & SoC FPGA
    インテル® FPGA PAC N3000

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。