cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Zynq MPSoC デバイスの GEM を使用する場合のデバッグに関するヒント

katsuki
Xilinx Employee
Xilinx Employee
7 0 1,189

概要

Zynq MPSoC デバイスのイーサネット アプリケーションを実行する際に、PL ロジックを使用するのではなく PS の Ethernet MAC (GEM) コアを使用することを考慮している場合は、このブログに示されるガイダンスおよびデバッグに関するヒントを参考にしてください。 

尚、本ブログは、Debugging Tips when using GEM on Zynq MPSoC devicesを翻訳したものです。

 

基本

GEM モジュールは、IEEE 802.3 規格と互換性のある 10/100/1000 Mb/s イーサネット MAC をインプリメントしています。

半二重または全二重モードでの動作が可能です。速度、二重モード、およびインターフェイスのタイプ (MII、GMII、RGMII、TBI、または SGMII) は、ネットワーク コンフィギュレーション レジスタを使用して選択します。

GEM は通常、専用のハードワイヤ接続された DMA ブロックと共に使用されます。DMA の動作が不要なシステム アプリケーションでは、外部 FIFO インターフェイスを使用して GEM を SoC 環境に組み込むことができます。

GEM ブロックには、次の信号インターフェイスが含まれます。

  • 外部 PHY への GMII、MII、および TBI インターフェイス
  • 外部 PHY 管理用の MDIO インターフェイス
  • GEM レジスタ アクセス用の APB (AMBA Advanced Peripheral Bus) スレーブ インターフェイス
  • メモリ アクセス用の AHB (AMBA Advanced High Speed Bus) または AXI4 マスター インターフェイス
  • DMA の機能が不要なアプリケーションでのオプションの FIFO インターフェイス
  • オプションのタイムスタンプ インターフェイス

 

AMBA インターフェイスは、Arm AMBA リビジョン 2.0 仕様に完全に準拠しています。

 

f01.png

図1:GEM信号インターフェース

 

次に、スタンドアロンおよび Linux ドライバーでサポートされるものを示します。

 

表1:ZynqMP GEM ベアメタルおよび Linux ドライバー サポート

 EMACPSlwIPMACB
RGMII (MIO)
PS-GTR SGMII×
PS-GTR 1000BASE-X×
PL SGMII
PL 1000BASE-X
PL GMII2RGMIIN/A×
PL MII2RMII×××

 

サンプル デザイン

ザイリンクスでは、ZCU102 評価ボードで実行するためのリファレンス デザインを提供しています。

『PS および PL ベースの 1G/10G イーサネット ソリューション』 (XAPP1305) には、Linux の例が含まれています。DTS の例および Linux でのビルド手順は、次のページを参照してください。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841830/PS+and+PL+based+Ethernet+in+Zynq+MPSoC

また、次の Wiki ページに固定リンクの例が示されています。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842230/Zynq+Ultrascale+Fixed+Link+PS+Ethernet+Demo

上記のリファレンス デザインを開始点として使用することを強くお勧めします。

 

デバッグに関するヒント

次のセクションに、GEM コンフィギュレーションの異なるイーサネット モード別にデバッグに関するヒントを示します。

 

RGMII (MIO) および GMII (EMIO)

ZCU102 GEM3 は、オンボード TI PHY とハードワイヤ接続されています。SDK lwIP echo アプリケーションをそのまま使用して、このインターフェイスをテストできます。Linux では、ご使用のツール バージョンで提供されている BSP を使用して、PetaLinux でデザインをビルドすることをお勧めします。

 

  • RGMII の電圧サポート

Zynq-7000 デバイスとは異なり、1.8V、2.5V、および 3.3V の電圧がすべてサポートされます。

『Zynq UltraScale+ MPSoC データシート: DC 特性および AC スイッチ特性』 (DS925) の表 44 に、2.5V テスト条件でのスイッチング特性が示されています。

 

f02.png

図2:RGMII インターフェイス

 

この表はワースト ケースの状況のみを示しているので、これより高速の 3.3V を使用する場合でも参考にできます。

 

  • デバイス ツリー

PHY のバインドについては、次を参照してください。

https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/macb.txt

 

compatible 文字列 cdns,zynqmp-gem は、ZynqMP 用です。

この文字列は、ジャンボ フレーム サイズ 1588 の使用、ハードウェア タイムスタンプ サポート、および ZynqMP 特定の機能をイネーブルにします。

 

phy-mode 文字列については、次のページを参照してください。

https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/ethernet-controller.yaml

次に DTS の例を示します。

 

 

 

 

 

 

gem0: ethernet@e000b000 { 
 compatible = "cdns,gem";
 reg = <0xe000b000 0x1000>;
 status = "disabled";
 interrupt-parent = <&gic>;
 interrupts = <0 22 4>;
 clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;
 clock-names = "pclk", "hclk", "tx_clk";
 #address-cells = <1>;
 #size-cells = <0>;
 phy-handle = <&ethernet_phy>;
 phy-mode = "rgmii-id";
 ethernet_phy: ethernet-phy@7{
  reg = <7>;
 };
}

 

 

 

 

 

 

 

  • 共有 MDIO

デザインで共有 MDIO バスを使用する必要がある場合は、(ザイリンクス アンサー 69132) に説明されているように、パッチが必要です。

共有 MDIO のサポートは、2019.1 リリースから追加されています。

 

GEM PS-GTR SGMII

PS-GTR を SGMII と共に使用する場合のよく寄せられる質問 (FAQ) は、(ザイリンクス アンサー 66592) を参照してください。

 

  • PS-GTR SGMII のデバッグ

PS-GTR SGMII が機能しない場合のデバッグ手順では、通常まず関連のレジスタ ダンプを確認し、その後ループバックを実行します。

次のレジスタ ダンプを確認すると、問題を特定するのに役立ちます。

 

0xFD401994 GT 内部レジスタ

0xFD405994 GT 内部レジスタ

0xFD409994 GT 内部レジスタ

0xFD40D994 GT 内部レジスタ (注記: これら 4 つのレジスタは、0x7 に設定する必要あり)

0xFF0B0000 network_control

0xFF0B0004 network_config

0xFF0B0008 network_status

0xFF0B0200 pcs_control

0xFF0B0204 pcs_status

0xFF180360 GEM_CTRL

0xFF180308 GEM_CLK_CTRL (IOU_SLCR)

0xFF0B0198 rx_symbol_error

0xFF0B0158 frames_rxed_ok

0xFF0B0190 fcs_errors

0xFD410000 PLL_REF_SEL0

0xFD402860 L0_L0_REF_CLK_SEL

0xFD410010 ICM_CFG0

0xFD410040 TX_PROT_BUS_WIDTH

0xFD410044 RX_PROT_BUS_WIDTH

0xFD40106C L0_TM_DIG_6

0xFD4023E4 L0_PLL_STATUS_READ_1

 

レジスタの詳細は、『Zynq UltraScale+ MPSoC レジスタ リファレンス』 (UG1087) を参照してください。

https://japan.xilinx.com/html_docs/registers/ug1087/ug1087-zynq-ultrascale-registers.html

レジスタに問題がないことが確認されたら、次に PCS ループバックおよび PS-GTR ループバックを実行し、ループバックが機能するかを確認します。

PCS ループバックをイネーブルにするには、pcs_control レジスタの pcs_control[loopback_mode] ビット [14] をセットします。

PCS ループバックは、クロックが存在する間のみ実行します。依存性はありません。

PCS ループバックが機能する場合は、問題はオート ネゴシエーションに関連している可能性があります。

PCS ループバックの実行では、それ自体とオート ネゴシエーションします。オート ネゴシエーションをディスエーブルにするには、pcs_control[enable_auto_neg] ビット [12] を 0 にします。

上記の PCS ループバックが機能する場合は、SGMII PHY の前に PS-GTR ループバックを実行します。

これは、PS_GTR トランシーバー内で実行します。

PS-GTR ループバック レジスタは内部レジスタです。

このレジスタの詳細は次のとおりです。PS-GTR ループバックをイネーブルにする前に、PCS ループバックをディスエーブルにする必要があります。

 

f03.png

図3:LPBK_CTRL0 レジスタ (内部)

 

f04.png

図4:LPBK_CTRL1 レジスタ (内部)

 

たとえば、lane3 ループバックをイネーブルにするには、0xFD41003C を 0x00000010 に書き込みます。

これが機能しない場合は、問題は GTR 自体に関連している可能性があります。ザイリンクス サービス ポータルからサポートを受けることができます。GT 担当者がトランシーバーのオープン アイの計測方法を指導し、GT 側の問題を調べます。

これが機能する場合は、GEM および PS-GTR に問題はなく、PHY 側の問題である可能性があります。PHY/SFP が正しく機能しており、ケーブルに問題がないことを確認する必要があります。

PS-GTR を GEM と共に使用する場合は、GT レーンの極性も確認する必要があります。TX と RX が反転している場合、レシーバー側で RX パケットが受信されない可能性があります。

極性を反転する TX および RX レジスタは、次のとおりです。

 

f05.png

図5:PS-GTR TX 極性の制御

 

f06.png

図6:PS-GTR RX 極性の制御

 

  • デバイス ツリー

DTS の例は、(ザイリンクス アンサー 66592) に示されています。

 

  • 固定リンク

PHY を使用せずに SGMII を SGMII に直接接続する場合 (固定リンク) は、(ザイリンクス アンサー 69769) のパッチが必要です。

 

GEM PS-GTR 1000BASE-X

1000BASE-SX/LX で PS-GTR を使用する場合、レジスタの設定、1000BaseX または SGMII の MAC のデザインには変更はありません。

設定は同じです。

外部 PHY は、必要なモード用に設定する必要があります。1000BaseX モードでは、1G の固定速度のみを使用可能です。

 

その他の問題

次に、発生する可能性のあるさまざまな問題をリストします。

 

U-Boot サポート

次の Wiki ページに、イーサネットに関連する U-Boot のサポートについて説明されています。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842124/U-Boot+Ethernet+Driver

U-Boot では、ethact コマンドを使用して必要なイーサネット インターフェイスを選択できます。

U-Boot でのデュアル イーサネットの使用には制限はありません。たとえば、eth0 をアクティブにするには、setenv ethact eth0 を使用します。

次に、Marvell PHY で PS-GTR SGMI モードを使用する場合のデバイス ツリーの例を示します。

 

 

 

 

 

 

ethernet@ff0c0000 {
 phy-handle = <&phy0>;
 is-internal-pcspma;
 phy0: phy@1 {
  compatible = "marvell, 88E1518";
  device-type = "ethernet-phy";
  reg = <1>;
 };
};

 

 

 

 

 

 

 

  • 固定リンク

次のページに、U-Boot で固定リンクをテストおよび使用する例が示されています。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841998/Testing+Fixed+Link+support+in+U-Boot

2017.2 以前のバージョンでは、U-Boot で固定リンクを使用するにはパッチが必要です。(ザイリンクス アンサー 69768) を参照してください。

 

GEM 外部 FIFO インターフェイス

DMA の動作が不要なシステム アプリケーションでは、送信および受信データパスの両方に外部 FIFO インターフェイスを使用できます。

このインターフェイスをイネーブルにするには、external_fifo_interface レジスタのビット [0] を 1 に設定します。

外部 FIFO インターフェイスの使用に関してよく寄せられる質問 (FAQ) は、(ザイリンクス アンサー 69490) を参照してください。

PCW コンフィギュレーション GUI で次の図に示すオプションを選択すると、GEM 外部 FIFO インターフェイスをイネーブルにできます。

 

f07.png

図7:PCW の外部 FIFO インターフェイスのイネーブル

 

f08.png

図8:使用可能な FIFO インターフェイス

 

『Zynq UltraScale+ MPSoC テクニカル リファレンス マニュアル』 (UG1085) に、このインターフェイスの機能が詳細に説明されています。

注記: 外部 FIFO インターフェイスを使用する場合、ドライバー サポートはありません。

 

GEM TSU および IEEE 1588 サポート

(ザイリンクス アンサー 67239) に添付されている資料『GEM TSU インターフェイスおよび IEEE 1588 サポート』を参照してください。

 

GEM のパフォーマンス制限

GEM には TX/RX FIFO のオーバーフローを検出するフロー制御ハードウェア ロジックがないので、大量の双方向トラフィックがあると、FIFO がオーバーフローする確率が高くなり、パケットが欠落することがあります。

 

詳細は、(ザイリンクス アンサー 71168) を参照してください。

次に、パフォーマンスをテストする手順を示します。

前提条件: Linux ホストおよび PetaLinux イメージの両方に iperf3 バイナリがあることを確認してください。

また、ホストおよびターゲットの両方で基本的な ping 機能が動作することを確認してください。

Zynq MP ボードと Linux PC の間で次の双方向 iperf3 コマンドを実行し、パフォーマンスを計測します。

 

  • ボード側

iperf3 -A1 –s

iperf3 -c <host_ip> -t 999

 

  • PC 側

iperf3 –s &

iperf3 -c <board_ip> -t 999

 

追加情報

(ザイリンクス アンサー 71349) に、Zynq UltraScale+ GEM の既知の問題がリストされています。

次のザイリンクス Wiki にパフォーマンス値が示されています。

 

  • XAPP1306

2017.1 – https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842391/Ethernet+performance+for+LVIP+on+zynqmp+with+2016.4

  • XAPP1305

2017.3 – https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841752/ZynqMP+Ethernet+Performance+2017.3

2017.1 – https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842533/Zynq+mp+Ethernet+Performance+2017.1

 

Zynq-7000 の GEM

次の表に、Zynq-7000 デバイス上の GEM のスタンドアロンおよび Linux ドライバーでサポートされるものを示します。

 

表 2: Zynq GEM ベアメタルおよび Linux ドライバー サポート

 EMACPSlwIPMACB
RGMII (MIO)
PL SGMII
PL 1000BASE-X
PL GMII2RGMII
PL MII2RMII×××

 

Zynq の GEM に関する質問の多くは、エラッタに関連しています。エラッタの内容は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585) の既知の問題として、および (ザイリンクス アンサー 52028) に記載されています。


Zynq の GEM には、ハードウェアの制限により、PTP サポートはありません。

Zynq GEM には TSU が含まれており、これを使用して入力および出力 PTP イベントを検出し、内部 PTP タイマーでタイムスタンプを付けることができます。

タイマー レジスタとタイムスタンプにはレジスタを介してアクセスでき、PL へのパスはありません。

タイムスタンプの FIFO キューは 1 つのみで、深さは 1 です。値が失われないように、各フレームとタイムスタンプをすばやく一致させる必要があります。

PPS 信号はありません。

 

また、2 つの GEM には個別に PTP タイマーがあり、同じ参照タイマーを使用することはできません。

サードパーティ ソリューションを使用したり、独自のタイマーを設計して精度を上げることはできますが、ザイリンクスがサポートするソリューションはありません。

(ザイリンクス アンサー 71352) に、Zynq-7000 デバイスの GEM の既知の問題およびリリース ノートが記載されています。