双方向データパス

Versal アダプティブ SoC SelectIO リソース アーキテクチャ マニュアル (AM010)

Document ID
AM010
Release Date
2024-03-18
Revision
1.5 日本語

各 XPHY NIBBLESLICE 内の TX および RX データパスを組み合わせて使用して、双方向データパスを形成できます。図 3 に示すように、各 TX データパスはパッドと RX データパスの両方に駆動されます。このため、データを損うことなくバッファーからの出力をトライステートにしたり、データパスをゲーティングするには双方向データパスの使用に十分注意する必要があります。

XPHY は、双方向データパスを制御するために、送信ゲーティング、受信ゲーティング、およびトライステート制御を提供します。次の表では、XPHY の属性によってこれらの制御がどのように有効になるのかを説明しています。

表 1. 双方向データパスの制御
制御メカニズム 関連する属性
ゲーティング
RX データパスのゲーティング
RX_GATING 属性が PHY_RDEN ポートに基づいて RX データパスのゲーティングを有効にします。ゲーティングが有効の場合、ユーザーは CONTINUOUS_DQS 属性で PLL_CLK またはストローブ クロック ドメインで動作する PHY_RDEN を選択できます。
TX データパスのゲーティング
TX_GATING 属性が、PHY_WREN ポート (ゲーティングに使用される場合、PHY_WREN はシリアライズされるが反転されない) に基づいて TX データパスのゲーティングを有効にします。PHY_WREN は PLL_CLK ドメインで動作します。NIBBESLICE[1] はゲート管理できません。
トライステート制御
トライステート制御
TBYTE_CTL_# 属性によって、トライステートが組み合わせの T 入力ポートで制御されるか、または反転およびシリアライズされた PHY_WREN ポート (PLL_CLK ドメイン内) で制御されるかが決定されます。

T_OUT[5:0] は、XPHY からのトライステート制御出力です。T_OUT の各ビットは NIBBLESLICE に関連付けられており、TBYTE_CTL_# によって、各 NIBBLESLICE は T または PHY_WREN で制御される関連付けられた T_OUT ビットを選択できます。つまり NIBBLESLICE[x] の場合、T_OUT[x] は TBYTE_CTL_x で選択されたトライステート制御入力を示します。TBYTE_CTL_x = T の場合、T_OUT[x] (NIBBLESLICE[x] に関連付けられている) は T[x] 入力で制御されます。これは組み合わせ配線であるため、T_OUT[x] はデータに同期しません。TBYTE_CTL_x = PHY_WREN の場合、T_OUT[x] (NIBBLESLICE[x] に関連付けられている) は PHY_WREN ポートで制御されます。この入力は、トライステートに使用される場合に反転およびシリアライズされ、TX データと同期して (T_OUT [x] を介して) 出力されます。詳細は、トライステート制御 を参照してください。

重要: 2:1 シリアライズ (TX_DATA_WIDTH = 2) を使用する場合、各 NIBBLESLICE トライステート バッファーは組み合わせ T 入力 (TBYTE_CTL_<0-5> = T) でのみ制御されます。PHY_WREN 入力によるトライステート制御 (TBYTE_CTL_x = PHY_WREN) が可能なのは、8:1 および 4:1 のシリアライズ (それぞれ TX_DATA_WIDTH = 8 および 4) の場合のみです。

PHY_RDEN は次のように設定されて、RX データパス ゲーティングに使用されます。

  • PHY_RDEN は、CONTINUOUS_DQS、RX_GATING、および RX_DATA_WIDTH の設定に応じて、NIBBLESLICE[0] に入力されるストローブ、またはバイト間クロッキングから入力されるストローブをゲーティングします。PHY_RDEN をアサートする前に、必ずストローブが安定し、BISC が完了していることを確認する必要があります。BISC が完了したと見なされる条件は、ビルトイン自動キャリブレーションの制御 を参照してください。
  • RX_GATING = ENABLE、CONTINUOUS_DQS = TRUE、および RX_DATA_WIDTH = don't care の場合、PHY_RDEN の 4 ビットは OR 回路を介し、その出力によってゲートが制御されます。OR 回路を介した出力が 1 の場合、キャプチャ クロックは受信されます。0 の場合は、キャプチャ クロックは拒否されます。この属性の組み合わせで、PHY_RDEN はキャプチャ クロックに同期されます。CONTINUOUS_DQS = TRUE の場合、キャプチャ クロックが 2 サイクル経過してからデータを送信する必要があります。
  • RX_GATING = ENABLE、CONTINUOUS_DQS = FALSE、および RX_DATA_WIDTH = 4 または 8 の場合、PHY_RDEN の次のビットを 1 に設定するとストローブが受信され、0 にするとストローブは拒否されます。この属性の組み合わせで、PHY_RDEN は PLL_CLK に同期されます。PHY_WREN の各ビットは、2UI 分のデータを制御します。
    • RX_DATA_WIDTH = 8 の場合: [3:0]
    • RX_DATA_WIDTH = 4 の場合: [2][0]
    • RX_DATA_WIDTH = 2 の場合: サポートされない
  • RX_GATING = DISABLE の場合、RX_DATA_WIDTH、CONTINUOUS_DQS、または PHY_RDEN の値に関係なくゲートは常にオープンです。この場合 (RX_GATING = DISABLE)、ストローブ信号によって RX データパスでデシリアライズが開始されます。したがって、XPHY のアライメントを維持するためにはストローブ信号が安定している必要があります。
  • SERIAL_MODE = TRUE の場合、PHY_RDEN の 4 ビットすべてを High に接続します。

PHY_WREN は次のように設定されて、TX データパス ゲーティングに使用されます。

  • TX_GATING = ENABLE の場合、PHY_WREN は NIBBLESLICE[0]、NIBBLESLICE[2]、NIBBLESLICE[3]、NIBBLESLICE[4]、および NIBBLESLICE[5] の TX データパスをゲート管理します。NIBBLESLICE[1] はゲート管理できません。PHY_WREN の次のビットを 0 に設定して送信データをゲート管理する、または 1 にしてゲート管理しないようにします。
    • TX_DATA_WIDTH = 8 の場合: [3:0]
    • TX_DATA_WIDTH = 4 の場合: [2][0]
    • TX_DATA_WIDTH = 2 の場合: サポートされない
  • PHY_WREN は、TX データパスのゲーティング (TX_GATING = ENABLE の場合) とトライステート (TBYTE_CTL_# = PHY_WREN の場合) の両方を制御するのに使用できます。ただし、トライステートに使用される場合にのみ、PHY_WREN は反転およびシリアライズされて使用されます。ゲーティングに使用される場合、PHY_WREN はシリアライズされますが反転されません。したがって、PHY_WREN をゲーティングに使用する場合は、ゲートを開くときに 1、閉じるときに 0 に設定する必要があります。トライステートに使用する場合は、PHY_WREN を 0 に設定する必要があります。その後、1 に反転されてバッファーをトライステートにします。つまり、このときトライステートに使用するために PHY_WREN を 1 に設定すると、バッファーはトライステートになりません。トライステートの詳細は、トライステート制御 を参照してください。

その他の重要事項:

  • バスの方向を切り替える場合は、BS_RESET_CTRL.clr_gate ビットをトグルし、その後 BS_RESET_CTRL.bs_reset ビットをトグルします。BS_RESET_CTRL.clr_gate をトグルすると、ストローブ パスのゲーティング ロジックがクリアされ、BS_RESET_CTRL.bs_reset のトグルで実行される NIBBLESLICE リセットと組み合わせたときに確実なアライメントが可能になります。これらのリセットの実行後、FIFO はリセットされ、FIFO_EMPTY は High にアサートされます。bs_reset/clr_gate シーケンスの詳細は、このセクションで後述します。BS_RESET_CTRL の詳細は、レジスタ インターフェイス ユニット を参照してください。bs_reset への書き込みが完了すると、データはすぐに送信できますが、レシーバーは、最初の FIFO_EMPTY がディアサートされることで、有効なデータを受信できると判断します。
  • bs_reset を実行する前に、TX_GATING と RX_GATING の設定にかかわらず PHY_WREN と PHY_RDEN を 0 に設定し、アライメントが確実にリセットされるようにする必要があります。
  • CONTINUOUS_DQS = TRUE の場合は、データ ロスを防ぐために、キャプチャ クロックが 2 サイクル経過してからデータを受信する必要があります。
  • TX 専用インターフェイスのデータとクロックおよび双方向インターフェイスのデータが同じニブル内に混在する場合は、属しているインターフェイスに関係なく、すべてのピンに対して TBYTE_CTL_x = T を設定し、また TX_GATING = DISABLE を設定する必要があります。
  • TX 専用インターフェイスのクロックが NIBBLESLICE[1] に配置されている場合、NIBBLESLICE[1] はゲート管理できないため、TX_GATING = ENABLE を設定できます。この場合、ニブル内の双方向ピンには TBYTE_CTL_# = PHY_WRE を設定し、ニブル内の TX 専用ピンには TBYTE_CTL_# = T を設定する必要があります。TX 専用インターフェイスのクロックが NIBBLESLICE[1] に配置されていない場合は、属しているインターフェイスに関係なく、すべてのピンに対して TX_GATING = DISABLE を設定し、TBYTE_CTL_# = T を設定する必要があります。
  • TX_DATA_WIDTH = 2 または RX_DATA_WIDTH = 2 の場合、双方向サポートが次のように制限されます。
    • TX_GATING は必ず TRUE に設定します。
    • RX_GATING を ENABLE に設定できますが、この場合 CONTINUOUS_DQS が TRUE に設定されている必要があります。
    • トライステートは、T ポートを介してのみサポートされます (TBYTE_CTL_# = T)。

clr_gate および bs_reset シーケンスを実行してバスの方向を切り替える場合は、次の手順を実行します。

  1. RIU を介して BS_RESET_CTRL.clr_gate をアサートします。
  2. RIU を介して BS_RESET_CTRL.clr_gate をディアサートします。これで、ストローブ パスのゲーティング ロジックがクリアされます。
  3. PHY_WREN と PHY_RDEN が 0 に設定されていない場合は、0 にしてからこの手順を続けてください。BS_RESET_CTRL.bs_reset をアサートします。これにより、BS_RST_MASK.bs_reset_mask でマスクされていない NIBBLESLICE がリセットされます。bs_reset がアサートされると、BS_RST_MASK.bs_reset_mask でマスクされていない NIBBLESLICE の TX IOB が、関連する TX_INIT_#属性の値に設定されます。BS_RESET_CTRL.bs_reset は、TX_DATA_WIDTH 属性と RX_DATA_WIDTH 属性で定義される最小クロック サイクル間アサートされる必要があります。
    • データ幅が 8 の場合: 1 CTRL_CLK サイクル + 72 PLL_CLK サイクル
    • データ幅が 4 の場合: 1 CTRL_CLK サイクル + 40 PLL_CLK サイクル
    • データ幅が 2 の場合: 1 CTRL_CLK サイクル + 24 PLL_CLK サイクル
  4. BS_RESET_CTRL.bs_reset をディアサートします。bs_reset への書き込みが完了すると、データはすぐに送信できますが、レシーバーは、最初の FIFO_EMPTY がディアサートされることで、有効なデータを受信できると判断します。これで、PHY_RDEN と PHY_WREN を 0 から変更できます。
重要: ストローブを受信しており (CONTINUOUS_DQS = FALSE)、RX_GATING = ENABLE の場合、ビットスリップは不要です。その他の場合は、ワード アライメントのためにビットスリップが必要です。