KR260 と 10G/25G Ethernet Subsystem IP

KR260 にはSFP+が実装されていて,10G通信ができる.
いままでなんとなくで使っていたIPについて調べてみる.

このIPには,PMA・PCS・MACが含まれているが,MACの機能を使うと有償のライセンスが必要になる.そのため,個人で利用する多くの場合はMAC IPを自作するか適当なものを拾ってくる必要がある.
このような,10G/25G Ethernet Subsystem IP でMACを利用しない場合に関しての情報をまとめる.

このような使い方をしている例としてFixstersさんの記事がありました.
https://proc-cpuinfo.fixstars.com/2020/05/alveo-u50-10g-ethernet

以下の様に設定した場合について調査したメモ.(Configurations以外のタブは全てデフォルトのまま.)

クロック

gt_ref_clk:GTYトランシーバの差動クロック

  • gt_ref_clk_n : 差動クロック,KR260ではY5へ接続されているクロック(156.25MHz)を利用
  • gt_ref_clk_p : 差動クロック,KR260ではY6へ接続されているクロック(156.25MHz)を利用
  • tx_mii_clk:TX側のMIIバスで用いるクロックは,tx_mii_clkに同期させる必要あり.
    以下PG210の一部の日本語訳
    ”tx_mii_clk は出力信号であり,tx_serdes_refclk と同じクロックです.TX パス全体はこのクロックで駆動されます.このクロック出力に TX パスの MII バスを同期させる必要があります.すべての TX 制御およびステータス信号はこのクロックを基準にします.”
  • dclk:GT DRP (Dynamic Reconfiguration Port)用のクロック.DRPはAXI4-Liteで駆動する為,AXI4-Liteのマスタ側のクロックソースと接続.
  • gt_refclk_out:差動入力された gt_ref_clk を バッファ越しに出力.
  • rx_serdes_clk:CDR(Clock Data Recovery)によるクロック生成から復元されたクロック.子のクロックは受信データと同期している.
  • rx_clk_out:rx_serdes_clkに等しい.
  • rxrecclkout:GTレシーバの受信側で再生されたクロック出力
rx_core_clk

rx_core_clk:以下の通り.
以下PG210の一部の日本語訳
rx_core_clk 信号は RX の AXI4-Streamインターフェースのクロックに使用される.FIFO が含まれない場合,rx_clk_out で駆動する必要があります.FIFO が含まれる場合,rx_core_clk は tx_clk_out,rx_clk_out,または同じ周波数の非同期クロックで駆動できる.”

具体的な例を以下に記載する.

RX パス
  • 簡易的なデータフロー:
    • mii_rx_0 → 外部ロジック
      サブシステムの mii_rx_0 ポートからデータが外部ロジックや上位層に直接渡される。
  • FIFO を使用する場合:
    • mii_rx_0 → FIFO → 外部ロジックまたは上位層
      mii_rx_0 と外部ロジックの間に FIFO を挿入し、クロックドメインの非同期性を吸収します。
    • この場合、rx_clk_out_0 が FIFO の書き込みクロック、外部ロジックのクロック が FIFO の読み出しクロックになります。
TX パス
  • 簡易的なデータフロー:
    • 外部ロジック → mii_tx_0
      外部ロジックや上位層からのデータが直接 mii_tx_0 に入力される。
  • FIFO を使用する場合:
    • 外部ロジック → FIFO → mii_tx_0
      外部ロジックmii_tx_0 の間に FIFO を挿入し、クロックドメインの非同期性を吸収します。
    • この場合、外部ロジックのクロック が FIFO の書き込みクロック、tx_clk_out_0 が FIFO の読み出しクロックになります。
TXOUTCLKSEL_IN_0* と RXOUTCLKSEL_IN_0* に関して

これらに関しては,”7 シリーズ FPGA GTX/GTH トランシーバー ユーザー ガイド (UG476)” に説明がある.ここでは省略.

リセット

  • sys_reset:GT,TX,RXコアを一括リセットする.
  • gtwiz_reset_tx_datapath:TX側データパス(PMA+PCS)の行う.
  • gtwiz_reset_rx_datapath:RX側データパス(PMA+PCS)の行う.
  • tx_reset:TX回路用のリセット.アクティブHighでクロックが安定するまでHighにしておく必要あり.
  • rx_reset:RX回路用のリセット.アクティブHighでクロックが安定するまでHighにしておく必要あり.
  • user_tx_reset:GTのTX側のリセットが完了するとアサートされる.
    PG210には”GT resetdone が Low または,クロックが不安定になったときにアサートされる”と記載されている.ここで,”GT resetdone” は 7 Series FPGAs GTX/GTH Transceivers User Guide (ug476) の Reset and Initialization を読むと,詳細がある.
    ug476 中では,TXRESETDONE と記載されている.
    (参考)TXRESETDONEがHighになると,GT トランシーバのリセットが完了し使用可能であることを表す.
  • user_rx_reset:GTのRX側のリセットが完了するとアサートされる.

詳細はこちら
https://docs.amd.com/r/en-US/pg210-25g-ethernet/Detailed-Diagram-of-Single-Core-Asynchronous-Clock-Mode-UltraScale/UltraScale

このあたりの話を正確に理解しようとした場合には,GTトランシーバへの理解が必要になるので,GTX/GTHトランシーバやGTYトランシーバのユーザガイドも確認する必要があります.

統計カウンタ,その他

以下のポートは統計情報にアクセスするために利用される.pm_tickをアサートするとトリガーすることができるらしい.今回は省略する.

  • pm_tick_*
  • stat_tx_*
  • stat_rx_*
  • stat_rx_status:現在のリンク状況を出力
  • user_reg0_*:User-defined signal from the AXI4-Lite Reg map user_reg0 register.

コメント