AR# 34894

PCI Express のデザイン アシスタント - リンク トレーニング問題をデバッグするための trn_reset_n の使用

説明

このアンサーでは、trn_reset_n を使用してリンク トレーニング問題をデバッグする方法について説明します。

注記 : このアンサーは、ザイリンクス PCI Express ソリューション センター (Xilinx Answer 34536) の一部です。

ザイリンクス PCI Express ソリューション センターには、PCIe に関する質問が集められています。

PCIe を使用したデザインを新しく作成する場合や、問題をトラブルシュートする場合には、この PCIe のソリューション センターから情報を入手してください。

ソリューション

trn_reset_n 信号は、次が発生するとアサートされます。

  • sys_reset_n のアサートで示される基礎リセット
  • トランシーバー PLL ロックの損失
  • ファブリック PLL ロックの損失

高レベルで trn_reset_n がディアサートされない原因をデバッグするには、次の手順に従います。

ChipScope またはプローブを使用して、次をチェックします。

  1. sys_reset_n がリリースされているか、High にアサートされている。
  2. トランシーバーの PLLLKDET 出力がアサートされている。
    各レーンに出力が 1 つずつあります。
  3. ファブリック PLL (PLL または MMCM) がロックされている。
    PLL へのリセットがトランシーバーの PLLLKDET 出力に接続されていることを確認します。この信号がアサートされていない場合、PLL はロックしません。

PLLLKDET を損失すると、ファブリック PLL または MMCM がリセットされ、ロックが失われます。
このため、PLL ロックが失われた場合は原因をチェックし、トランシーバーの PLLKDET がディアサートされているためではないことを確認してください。

次の 2 つのセクションでは、trn_reset_n を制御する要素を説明しています。

詳しい解析については、信号を参照してください。

Virtex-6
 
Virtex-6 には、trn_reset_n 制御に入力されるさまざまな信号があります。

Virtex-6 の PCI Express 用の統合ブロックには、SYSRSTN という入力があります。

この入力は、統合ブロックへの基礎リセットとして動作します。

この入力は phy_rdy_n で駆動され、GTX ラッパー ファイル pcie_gtx_v6.v[hd] から出力されます。

trn_reset_n がアサートされない理由を詳細にデバッグする際に、上記の高レベルの原因を除外した場合は、pcie_gtx_v6.v[hd] の信号を確認することをお勧めします。

trn_reset_n が最終的にディアサートされたら、phy_rdy_n は 0 にアサートする必要があります。

これは、次のようなロジックで制御されます。
 

always @(posedge pipe_clk or negedge clock_locked) begin

if (!clock_locked) begin

phy_rdy_n <= #TCQ 1'b1;

end else begin

if (~&plllkdet[NO_OF_LANES-1:0])
phy_rdy_n <= #TCQ 1'b1;
else if (local_pcs_reset_done && RxResetDone && phy_rdy_n && SyncDone)
phy_rdy_n <= #TCQ 1'b0;

end

end


Verilog バージョンで表示されるこれの重要部分は、次のとおりです。
 
  1. clock_lock 信号をまず High にアサートする必要があります。
    clock_lock 信号は MMCM から送信されます。
    この信号がアサートしていない場合は、pcie_clocking.v ファイルの MMCM がロックしていない理由に注目してください。
     
  2. MMCM がロックしている場合は、各トランシーバーの RXPLLLKDET 出力も High または 1 にする必要があります。
    次に、これらの信号 (plllkdet) すべてが High であるかどうかを判断します。
    RXPLLLKDET は、トランシーバーの PLL 周波数が未決定のトレランスの範囲内にあることを示します。
    RXPLLLKDET の意味については、『Virtex-6 FPGA GTX トランシーバー ユーザー ガイド』 (UG366) を参照してください。
     
  3. 次に、local_pcs_reset_done、RXResetDone、および SyncDone 信号に注目します。
    これらの信号の意味は、次のとおりです。
    • local_pcs_reset_done - トランシーバーのロック信号と MMCM のロック信号を切り替える際の誤差 (ばらつき) を削除するためのカウンターの出力
    • RXResetDone - トランシーバーの RX 部分のリセットが終了して使用準備が整った場合に High になる信号
    • SyncDone - TX 同期プロセスが終了すると High になる信号
      tx_sync_gtp.v ファイルの TX 同期モジュールは、トランシーバー レーン間の最小スキューを保証します。

これらの信号のうち、どれが正しく動作していないかが判明したら、trn_reset_n がディアサートしていない原因を突き止めることに集中できます。

上記の信号のいずれかが正しく動作する前に、sys_reset_n を最初にディアサートする必要があります。また、この信号は監視して、トグルしていないか、問題の原因となっていないかを確認する必要もあります。

Spartan-6

Spartan-6 FPGA Integrated Block for PCI Express の場合、trn_reset_n がアサートしない理由は、Virtex-6 の場合よりも単純です。

trn_reset_n をディアサートするには、次の条件が必要です。
 
  1. sys_reset_n 信号はディアサートする必要があります。
  2. トランシーバーの PLLLKDET は High になり、PLL 周波数が未決定のトレランス内にあることを示す必要があります。
     
  3. ファブリック PLL からの clock_lock 信号が High になる必要があります。
    PLLLKDET はファブリック PLL のリセットに入力されるため、clock_lock がアサートしていない場合は、PLLLKDET が High かどうかも確認してください。
  4. トランシーバーからの RESETDONE 信号は High で、トランシーバーの RX 部分のリセットが終了して使用準備ができたことを示す必要があります。

trn_reset_n がアサートしていない場合は、これらの 4 つの信号を確認して原因を突き止めます。

これらの信号はそれぞれ、生成されたコアの source ディレクトリの最上位レベル ファイルに含まれます。
 
このファイルの名前は、生成されたコアと同じ名前になります。
 
gt_pllkdet_out、sys_reset_n、clock_lock、および gt_reset_done を探してください。

改訂履歴
2010/08/13 - 初版

アンサー レコード リファレンス

関連アンサー レコード

AR# 34894
日付 06/10/2015
ステータス アクティブ
種類 一般
デバイス 詳細 概略
IP