AR# 69751

ザイリンクス PCI Express - FAQ およびデバッグ チェックリスト

説明

このアンサーは、ザイリンクス PCI Express IP の一般的な問題を対象にした、FAQ およびデバッグ チェックリストです。

特定 IP の操作に特化した FAQ およびデバッグ チェックリストについては、次のリンクをクリックしてください。

(Xilinx Answer 70477)7 Series Integrated Block for PCI Express - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70478)AXI Bridge for PCI Express - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70479)AXI Bridge for PCI Express Gen3 - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70480)Virtex-7 FPGA Gen3 Integrated Block for PCI Express - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70481)DMA Subsystem for PCI Express - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70482)UltraScale FPGA Gen3 Integrated Block for PCI Express - FAQ およびデバッグ チェックリスト
(Xilinx Answer 70483)UltraScale+ PCI Express Integrated Block - FAQ およびデバッグ チェックリスト


一般的な PCIe およびソフトウェア/ドライバーに関する FAQ およびデバッグ チェックリストについては、このアンサーのソリューションのセクションを参照してください。


このアンサーは、PCI Express ソリューション センターの一部です。

(Xilinx Answer 34536)ザイリンクス PCI Express ソリューション センター

ソリューション

FAQ:

シミュレーション

Q) TXOUTCLK にはシミュレーションでランダムな位相シフトが起きます。これは正しい動作ですか。

A) これは TXOUTCLK の予期動作です。TX レーン間のスキューを最小にするため、PCIe 使用モードの場合は TX 側でバッファー バイパスをイネーブルにします。  

そうすると、遅延アライン (UG578 の図 3-30 の TXOUTCLK パスにある) がイネーブルになります。

スタートアップ時またはレート変更があった後の TX リセット中に、GT が内部パラレル クロックの位相と入ってくる TX/RXUSRCLK (TXOUTCLK から) の位相とを揃えようとするときに、この状態になります。 

ハードウェアでは、GT 内で内部パラレル クロックと揃える目的で、TXOUTCLK、つまり GT TX/RXUSRCLK が VT を補正するため遅延アライナーにより継続的に調整されます。

デバッグ チェックリスト:

リンク トレーニング デバッグ

エニュメレーションで PCIe デバイス (lspci) が表示されない


  1. cfg_ltssm_state 信号が L0 ステート ('h10) の場合は ILA の使用を確認してください。
    • L0 ステートにある場合、一貫して L0 ステートにとどまっているか、またはリカバリ ステートに継続的になるかどうかをチェックしてください。継続的にリカバリス テートになる場合は、リンク インテグリティの問題があることを示しています。
    • L0 ステートで安定している場合は、PCIe コンフィギュレーション リクエストの TLP が交換されているかどうか、各完了 TLP が返されていることをチェックします。
      これは PCI のエニュメレーション プロセスの一部で、電力良好であることが示された 100 ms 以内にこの作業を行う必要があります。
      ウォーム リブートを試します。デバイスがウォーム リブートの後に検出されるなら、この要件に違反していたことになります。
    • PCIe スロット/デバイス エラーの後は、別の PCIe を検出しないサーバー システムもある可能性があり、リカバリにはコールド ブート (電源サイクル) が必要になります。

  2. cfg_ltssm_state 信号がずっとステート 00 になっている場合:
    • cfg_link_training_enable 入力ピンが 1'b1 に駆動されていることを確認します。
    • GT リセットの FSM が完了していて、00 ステートに戻っている場合は、AXI JTAG の使用をチェックします。そうなっている場合は、phy_status_rst ピンが PCIe の reset_done ピンに接続されているかどうか確認します。

システム ブートの後、クロックがない

    • GT リセット FSM がどこで止まってしまっているかを確認するには、AXI JTAG デバッガーを使用します (1 つ以上の GT チャネル プリミティブからの PLL ロックが設定されていない可能性が高い)。
    • アイスキャンがデザインに含まれている場合は、IP カスタマイズ GUI から正しい free_run_clk 周波数を選択し、使用可能なオンボードのフリーランニング クロックをそれに接続します。
    • DRP クロックが正しい周波数で実行されていることを確認します。

ハング/カーネル パニック/ランタイムでの予期しないリブート


  • この場合のデバッグ フローは、ブルースクリーンまたはブートで動かなくなった場合のフローに似ているので、これらをチェックします。さらに、dmesg 出力をチェックします。
  • ドライバーが読み込まれていて、問題が起きる前にアクティブに使用されている場合は、ドライバーのアクセスに何か問題があって動作が停止しているはずです。
    ドライバーで Lecroy または printk 関数を使用して、どのトラフィック パターンまたは TLP がハングを引き起こしているのか的を絞っていきます。
  • 通常この問題は、正しく応答を得ていないリクエストがあったり、リクエストが失われていたり、一部のフロー制御クレジットがホストで足りなくなってしまったために起き、ドライバーからリクエストされたタスクを CPU が完了できず、カーネルがロックしてしまいます。

ブルースクリーンまたはブートで動かなくなった場合

  • GUI の拡張コンフィギュレーション空間オプション: このオプションがイネーブルの場合、コンフィギュレーション空間のリンク リストが正しく終わっていて、すべての拡張コンフィギュレーションリクエストに応答が返されるように、適切なロジックが cfg_ext_* インターフェイスに接続されていることを確認します。
    • ハングは Lecroy で見られ、コンフィギュレーション空間アクセスがユーザー定義のコンフィギュレーション空間アドレスの 0x400 または 0x300 (デバイスによる) にあるとハングします。
  • 一部の BIOS は、エニュメレーション プロセス中にメモリ読み出しリクエストをし、AXI インターフェイスに十分なノンポステッド クレジットがない場合は、パケットが PCIe IP バッファーに留まり、コンフィギュレーション空間アクセス (これもノンポステッド) がそれ以上通過しなくなります。
    • 最終のいくつかの TLP が承認応答を受信していても、PCIe IP からのノンポステッドまたはポステッドのクレジットがインクリメントしていない場合は、Lecroy で動作が停止します。
  • PCIe ハード ブロックへの AXIS_RX_* インターフェイス (新しいデバイスでは AXIS_CQ_* という名前) のレディ信号: 
    • rx_np_ok/req の場合と同様の理由ですが、システムによっては、ブート時にベンダー定義のメッセージが出力され、これがユーザー デザインには関係のない場合は、IP バッファーから消去する必要があります。
      メッセージが cfg_msg_* インターフェイス (レディ信号がない) または AXIS_RX/CQ インターフェイス (レディ信号がない) に出力される可能性があります。これらのインターフェイスはスロットルさせてはいけません。
    • 最終のいくつかの TLP が承認応答を受信していても、PCIe IP からのノンポステッドまたはポステッドのクレジットがインクリメントしていない場合は、Lecroy で動作が停止します。
    • Lecroy で動作停止になる前に、パケット エラーまたは NAK になります。
  • AXIS_TX_* インターフェイス (新しいデバイスでは AXIS_RQ_* および AXIS_CC_* と呼ばれる) および割り込み (cfg_interrupt_*) およびメッセージ (cfg_msg_*) の側帯波インターフェイス:
    • PCIe IP への「有効な」入力信号をすべてチェックします。「有効な」信号が High になったままの場合は、IP が PCIe リンクにランダムな TLP を送信するので、ホスト側でエラーが発生します。
      このエラーは滅多に発生しませんが、PR/Tandem が使用されていて、IP インターフェイスに間違った終端ロジックが使用されていると起きる可能性があります。
    • Lecroy が動作停止する前に、多くの認識できない TLP パケットがアップストリームになります。
  • ドライバー lspci 出力: あるボードまたはデザインで問題が起きなかった場合に、これは便利です。コンピューターに以前インストールされていたドライバーがあって、それがブート中に自動読み込みしています。
    これはまず、機能しているデザインを読み込み、lspci vvv d 10ee: コマンドを実行し、それから、使用行のカーネル モジュールの下にドライバーがないか確認して、チェックできます。
    ドライバーがリストされていれば、ドライバーが特定のベンダー/デバイス ID のザイリンクス デバイスに対して読み込まれています。
    エラーが出ているデザインをもう一度試す前に、KO ファイルを削除して (rmmod を実行するだけだと次にブートしたときに戻ってくるので)、カーネルからドライバーを削除します。
    これで、今読み込んでいるデザイン用ではないドライバー アクセスを防ぐことができます。

リセット中の PCIe リンクの問題

  • FLR をイネーブルにしている場合、flr_done がリファレンス デザインで提供されていることを確認します。
  • BME および BAR をホット リセット、ディスエーブル、および FLR リセットにします。これらをイネーブルにするには、正しい PCI ユーティリティを使用します。そうでないと、トラフィックが送信/受信できません。
  • システムによっては、リセットの後に MPS がリセットされるので、リンク リセットが出力された後、MPS をドライバーが復元するようにしてください。

Gen3 リンクの問題

  • リンク イコライゼーション フェーズが実行されたかどうかを確認するため、PCIe コンフィギュレーション空間でリンク ステータス 2 レジスタをチェックします。
  • どのステートに達した化を確認するため AXI JTAG を使用して LTSSM ステートをチェックします。
  • フェーズ 2/3 をバイパスしてみます。
  • リンク パートナーおよびザイリンクス レシーバーによってどのイコライゼーション プリセット値がリクエストされているかを確認するため、PCIe アナライザ トレースを取得します。
  • リンクの質を改善するには、イコライゼーション プリセット 5、LPM/DFE、または RX オート アダプテーションモジュールを試してみます。
  • レーン間のスキューを Gen3 の速度でチェックするには、ザイリンクス PCIe MAC で PCIe PIPE デスクランブラーを使用します。
  • サードパーティの MAC が使用されている場合は、ボードまたはセットアップの問題を排除するため、ザイリンクスのサンプル デザインをまず使用してみてください。
    もっとも一般的な問題は、MAC-GT 統合の問題です。必須ポートの接続がすべて (PG239) のようになっていることを確認してください。 

リンク トレーニング問題がないかを確認する一般的なチェック

  • ホストの TX ドライバー パラメーターを変更できるかどうかを確認します。
  • PERSIST がビットストリーム設定でイネーブルになっているかどうかを確認します。SPI/BPS フラッシュを使用している場合、Tandem ではないデザインにはこのオプションはサポートされていませんし、その場合はリンク トレーニング問題を引き起こすことがわかっています。
  • In-System IBERT を使用する場合は、フリーランニング クロックが使用されていることを確認します。
  • ボード上でレーン間にスキューがないことを確認します。
  • GT またはファブリックへの電圧入力信号の質を常にチェックします。
  • スロット クロックの質を確認します。
  • UltraScale PCIe コア コンフィギュレーション GUI でザイリンクス デバイスを検出するリンク パートナーで問題が発生している場合: 最初のタブで [Advanced Mode] をクリックし、[GT Settings] タブの [Receiver Detect] で [Falling Edge] を選択します。

プロトコル違反:

レシーバー オーバーフロー

  • lspci AER RxOF+ が設定されているかどうかを確認します。
  • PCIe コンフィギュレーション空間で緩いビット順序が設定されていることを確認します。設定されていない場合は、オーバーフローが発生する可能性があります。
  • 十分なクレジットが割り当てられていることを確認します。

サポートされていないリクエスト/完了タイムアウト

  • lspci -vvv -d [Vendor ID]:[Device ID] を実行し、BAR が存在することを確認します。

    • リストには次のようになっているはずです (複数の BAR がある場合は複数リストされます)。
      Region 0: Memory at <address>.
      この行に disabled や virtual などの単語が含まれていないことを確認します。
      Virtual というのは、エンドポイント カードで BAR 情報を失ったということで、以前は確認できていたものです。
      これは、予期しないリンク ダウンがあると発生します。
      Disabled というのは、PCIe コマンド レジスタでメモリ イネーブル ビットが設定されていないことを意味します。ドライバーを介して、または setpci ユーティリティを使用してこのビットを設定します。

    • BAR がまったく現れないのに、lspci で使用デバイスが検出されている場合は、メモリ割り当て中にシステムのメモリが不足している可能性があります。
      これは、デザインに大きな PCIe BAR があると発生します。MMIO を再マップするためカーネルで pci=realloc 指示子を使用するか、32 ビット BAR ではなく、64 ビット BAR を使用します。

    • 通常、この状態は、BAR 情報がなかったり、またはコマンド レジスタ (メモリ イネーブル ビット) が設定されていないことが原因で発生します。

割り込みがない

  • PCIe コンフィギュレーション空間の割り込みイネーブル ビットをチェックします。MSI を使用している場合は、MSI 制御レジスタにこのイネーブル ビットがあります。

  • MSI-X を使用している場合は、MSI-X 制御レジスタにこのイネーブル ビットがあります。
    レガシ割り込みを使用している場合は、イネーブルはありませんが、PCI コンフィギュレーション空間内のコマンド レジスタの割り込みディスエーブル ビット、PCI コンフィギュレーション空間の割り込みピンおよび割り込みライン レジスタをチェックしてください。cfg_interrupt_done/fail が受信されるまで、cfg_interrupt_int が保持されているようにします。
    IP によっては、1 クロック サイクル間この信号をアサートするだけでよいものもあれば、IP が Done またはエラーで応答するまで安定した状態で保持しておく必要のものがあります。
    また、ワンホット エンコードされている IP もあるので、その場合は、製品ガイドを参照してください。


シミュレーション デバッグ

  • PL_EQ_BYPASS_PHASE23 を使用して EQ フェーズ 2 および 3 をバイパスしてチェックします。
    • Gen3 デザインのシミュレーションのみに問題がある場合
  • PCIe DMA シミュレーションの問題の場合は、ターゲット言語を Verilog に設定して、Vivado で IP が生成されていることを常に確認します。 
    • ターゲット言語が VHDL に設定されている場合は、タイムアウト エラーが発生する可能性があります。
  • サードパーティ シミュレータを使用している場合は、使用している Vivado のバージョンでサポートされているバージョンのシミュレータを必ず使用してください。
    • ModelSim のバージョンを 10.3a から 10.5c (Vivado リリースで推奨されているバージョン) に変更すると、場合によっては問題を解決できます。
  • すべてのリセットおよびクロック信号をチェックします。これらは予期どおりに動作していますか。周波数や極性は合っていますか。
  • 最上位の接続を確認します。TX および RX は予期どおりに接続されていますか。
  • Unisim_ver モデルが最初に呼び出されていますか。そうでない場合は、これをシミュレーション起動時のライブラリの呼び出しリストのいちばん最初に配置します。  
  • スクリプトは FAST ライブラリを呼び出していますか。
  • 両サイドで PIPE またはシリアルが予期されていますか (一方が txp/txn を介して送信していて、もう一方が pipe_txdata を送信しているなど)。
  • ユーザー インターフェイスのトランザクションはユーザークロックと同期していますか。
  • すべての最上位の入力は駆動されていますか。

一般的なチェック

  • 機能しているケースと問題のケースの lspci ログを比較します。
  • ホスト コンピューターでコンフィギュレーション レジスタが正しくスキャンされていない可能性があるので、エンドポイントのコンフィギュレーション空間の最大ペイロード サイズ レジスタを読み出し/書き込みリクエスト サイズと比較します。
    • [問題: リクエストが 256 または 512 バイトの場合、DMA 読み出しデータがありません。ところが、128 バイトでは機能していました。
      この問題は、ボードのデバイスを先にプログラムし、それから PCIe スロットにボードを差し込んで、ホストの PCIe バスで再スキャンするときに見られます。
      ホスト ブリッジは、EP コンフィギュレーション レジスタを正しくエニュメレートしませんでした。]
  • first_be および last_be 信号がユーザー アプリケーションから正しく駆動されていることを確認します。
    • [問題: DW が 1 より大きい場合、TLP のペイロードがありません。]
  • FPGA に新しい BIT ファイルを読み込むたびに、PC をリブートするか、または現在読み込まれている BIT ファイルの新しいパラメーターを使用してもう一度エニュメレートするために削除して再スキャンします。 
    メモリおよびバス マスターをイネーブルにするには、setpci コマンドを使用します。(Xilinx Answer 37406) を参照。
  • BAR が正しくコンフィギュレーションされていることを確認し、メモリ読み出しおよびメモリ書き込みアドレスが正しいことも確認します。
    • [問題: BAR コンフィギュレーションが間違っているせいで、RP が EP に書き込もうとすると、PCIe シミュレーションがエラーになります。]
  • パケットのフォーマットが製品ガイドに沿っていて正しいことを確認します。
    • [問題: メモリ読み出しリクエストの完了パケットにデータがありません。]
  • UltraScale/UltraScale+ デバイスの Tandem PCIE デザインで、リンク トレーニングおよびエニュメレーションがエラーもなく実行されたにもかかわらず、BAR アクセス トランザクションにエラーが発生する場合は、MACP 制御レジスタのビット 12 が 1 (MCAP 拡張コンフィギュレーション空間のオフセット 14h) に設定されていることを確認してください。

改訂履歴


2018/04/19 - 初版

 

AR# 69751
日付 09/24/2018
ステータス アクティブ
種類 一般
IP