banner
ホームページ / ブログ / ハッカーのための PCIe: Diffpair の前奏曲
ブログ

ハッカーのための PCIe: Diffpair の前奏曲

Sep 10, 2023Sep 10, 2023

PCI-Express としても知られる PCIe は、非常に強力なインターフェイスです。 それでは、これほど強力なものをハッキングするには何が必要かを見てみましょう。 PCIe は最初は少し怖いかもしれませんが、PCIe の構築を始めるのはかなり簡単で、インターフェースは愛好家レベルのテクノロジにとって非常に回復力があります。 設計で PCIe チップを使用したり、特定のコンピューティング モジュールで利用可能な PCIe 接続を利用したりするときが来るでしょう。そのための準備が整っていることを確認するのは良いことです。

PCIe は今やどこにでもあります。 最新のコンピューターには、重要な機能を実行する多数の PCIe デバイスが搭載されており、iPhone でさえ内部で PCIe を使用して CPU をフラッシュおよび WiFi チップに接続します。 イーサネット コントローラー、高スループット WiFi カード、グラフィックス、および PCIe 経由で接続すると大量のストレージを喜んで提供する安価な NVMe ドライブなど、あらゆる種類の PCIe デバイスを入手できます。 ラップトップまたはシングルボード コンピュータをハッキングしていて、PCIe デバイスを追加したい場合は、PCIe 搭載ソケットの 1 つから PCIe を取得するか、既存の PCIe リンクがない場合は、そこに接続するだけです。接続するソケット。 PCIe デバイスを入手し始めてから 20 年が経過しました。現在、PCIe は 5.0 リビジョンにあり、それが定着することは明らかです。

PCIe は、メインボード上の一連のデバイスを接続できる古いバスである PCI とは対照的に、2 つのデバイスを接続するポイントツーポイント バスです。 PCIe リンクの一方はデバイスであり、もう一方はホストです。 たとえば、ラップトップの場合、CPU には複数の PCIe ポートがあり、その一部は GPU の接続に使用され、一部は WiFi カードの接続に使用され、一部はイーサネットに使用され、一部は NVMe ドライブに使用されます。

各 PCIe リンクは、少なくとも 3 つの差動ペアで構成されます。1 つはリンクに(ほぼ)常に必要な 100 MHz クロック REFCLK で、PCIe レーンを形成する 2 つのペアは送信用と受信用です。 これは x リンクです。また、それぞれ 4、8、16、32 の差動ペアと、やはり REFCLK を備えた 2x、4x、8x、および 16x リンクを持つこともできます。 リンクが広いほど、スループットが高くなります。

さて、PCIe のリンク幅は、多くの優れた側面を備えた楽しいトピックです。しかし、その前に、PCIe の文脈における「差動ペア」が何を意味するかについて、同じ認識を持っていることを確認しておきたいと思います。 ここ Hackaday では、差動ペアの核心について以前に説明しました。差動ペアについて詳しく知りたい場合は、必ずその記事をもう一度読んでください。 ここでは、基本について簡単に復習してから、特に PCIe の差動ペアを扱うときに知っておくべきことについて説明します。

簡単に言うと、差動ペアは 2 つの信号であり、一方は常に他方の反対であり、通常、一方は正、もう一方は負と呼ばれます。 通常のように各信号の論理レベルをグランドと比較するのではなく、2 つの信号を相互に比較することで、送信されているビットの論理レベルを取得します。これは「シングルエンド」と呼ばれます。 差動ペアでは、信号は互いに近くにあり、ケーブルに関してはさらに絡み合っています。その結果、干渉は信号に均等に影響します。情報を受信するために信号が相互に比較されるため、受信した情報は両方の信号に重畳されたノイズの影響を受けません。 また、差動ペアは両方の信号の磁界を互いに打ち消し合うため、リンクのノイズが少なくなります。

その結果、差動ペアを使用すると、ノイズを発生させたり、ノイズの影響を受けたりすることなく、伝送速度を上げることができます。 その結果、圧倒的多数の高速インターフェイスでは、イーサネット、PCIe、HDMI、DisplayPort、LVDS、さらには USB などの差動ペアが使用されます。USB 2 は擬似差動にすぎませんが、USB 3 は真の差動です。 RS485 や CAN などの回復力のあるインターフェイスでも差動ペアが使用されます。 愛好家にとって、CAN などのインターフェースを備えた差動ペアから始めるのは簡単です。また、USB 2 も問題ありません。短距離では、差動信号で理論的には特別な処理が必要であるにもかかわらず、これらは何があっても機能します。

とはいえ、実際には、差動ペアは、PCB を配線したり、ケーブルに接続したりするときに、もう少し注意が必要です。 注意しないと、謎の不具合が発生したり、インターフェイスが完全に機能しなくなる危険があります。 これらの要件を見てみましょう。

まず、ペアの両方の信号をその長さ全体にわたって互いに近くに保つ必要があります。 2 つの信号が近ければ近いほど、外部干渉のキャンセルがより効果的に機能し、信号が放射するノイズが少なくなります。多くの場合、複数の差動ペアが隣り合って動作することを考えると、これは他のペアの信号の整合性にも役立ちます。 別々のデフペアを隣り合わせて実行する場合、同じレイヤー上のグランドフィルや高周波信号など、他のものから遠ざける必要があります。 優れた経験則は 5W ルールです。これは、デフペアのトレース中心と他の信号の間に少なくとも 5 トレース幅に相当するクリアランスが必要であることを示しています。 常にこれだけのスペースがあるとは限りませんが、可能な限りこれを守ることをお勧めします。

また、ペア全体と並んで、これらの信号の直下に中断のないグランド パスがあることを確認することも必要です。グランド フィルがあることが理想的です。 2 つの信号は受信機によって相互に比較されますが、各信号はリターン電流に関してシングルエンド信号として動作します。 さらに、シールドを少し追加しても問題はありません。 カスタム コネクタに PCIe を配置する場合は、各ペアの間に少なくとも 1 つの GND ピンがあることを確認してください。 最後に重要なことですが、ペア内の両方のトラックが同じ長さであることを確認してください。 ペアの角度が変わると、2 つのトラックのうち 1 つがわずかに短くなり、PCB エディタの差分ペア ツールでそのトラックに「小刻み」を追加して、両方のトラックの長さが同じになるようにする必要があります。

次に、ほとんど話題になっていない問題、つまりインピーダンスマッチングがあります。 A 点から B 点までの差動ペアを取得する場合は、インピーダンスを正しく取得する必要がありますが、その基本は思っているよりも簡単です。 インピーダンスは抵抗に似ていますが、変化する信号に対して使用されます。 差動ペアの移動経路の各部分には、独自のインピーダンスがあります。使用される IC 内のレシーバーとトランスミッター、IC ピン、PCB 配線、および差動ペアを接続する場合はその間にあるコネクタまたはケーブルです。 信号のインピーダンスが変化する任意の点で、信号の一部が不整合点から反射され、インピーダンスの変化が十分に大きい場合、受信中の信号が台無しになります。

これは、PCIe リンクのインピーダンスがパス全体に沿って良好であることを確認する必要があることを意味します。これは、実際には、適切なコネクタを選択し、PCB トレースの幅と間隔を調整することを意味します。 PCIe ハードウェアは、ほとんどが 85 Ω インピーダンスを念頭に置いて構築されています。 レシーバー、トランスミッター、PCIe 向けコネクタなどは制御不能であり、経路全体のインピーダンスを適度に均一にするためには、制御下の部品を同じ値に調整する必要があります。 まず、PCIe リンクにコネクタを使用する必要がある場合は、インピーダンスの不整合がそれほど大きくないコネクタを選択します。 高速コネクタ、または PCIe のような信号を念頭に置いて構築されたコネクタ (フルサイズの PCIe、M.2、mPCIe、USB3、USB-C、およびさまざまなメーカーの多数の高速コネクタ ファミリ) を使用することをお勧めします。

次に、デフペアの PCB 配線のインピーダンスを調整します。 差動ペアのインピーダンスは実際には多くの変数に依存しますが、初心者のハッカーであれば、ほとんどの目的を達成できる簡素化された計算ツールがあります。これが私のお気に入りです。 「Edge-Coupled Surface Microstrip」まで下にスクロールし、1 オンスの銅層上にデフペアを配線する場合はトラックの高さを 35 のままにし、PCB ファブから別の値が指定されない限り、誘電率を 4.3 のままにします。 次に、分離の高さを差分ペアからの距離に設定します。これを取得するには、PCB メーカーの情報にアクセスして、PCB スタックアップ情報を探します。 たとえば、diffpair が最上層にあり、地面がそのすぐ下の層にあるとします。 そのためには、上部の銅層とその下の層の間の「プリプレグ」の厚さを探します。その値が絶縁高になります。 次に、85 オームの差動インピーダンスを目指して、トラックの幅と間隔を調整します。 仕様では、70 ~ 100 オームの範囲が得られます。

実践的な演習 – OSHPark の 4 層のスタックアップを見てみましょう。 その誘電率 (dk) は 3.6 で、最小トレース幅と間隔は両方とも 5 ミル、つまり 0.127 mm、または計算上の目的では 127 μm です。 プリプレグの厚さは202μmです。 誘電率とプリプレグの厚さを計算機に入力し、値を調整します。

トラック幅を増やすとインピーダンスが減少し、トラック間隔も減少することがわかります。その間隔を可能な限り最小に設定します。 ご覧のとおり、85 オームにこだわる場合は、0.3/0.127 (幅/間隔) のペアを選択すると、84.8 オームが得られます。これは十分に近い値です。 このような幅の広いトラックを用意できない場合は、0.2/0.127 を使用して 106 Ω にします。これは推奨範囲から少し外れていますが、必要な場合はそれでも問題ありません。

最後に、ルーティングをクリーンな状態に保ちます。 できることなら、差動ペアをビアを介して異なる層に配置しないでください。ビアの各ペアは信号にインダクタンスを追加し、高速信号に干渉する可能性があります。 通常、PCIe リンクの終点と始点は両方とも最上層にあります。できる限りこのままにしておきます。 レイヤーを切り替える必要がある場合は、差分ペアの近くにグランド接続されたビアをいくつか追加します。 また、他の高速信号や急速に変化する信号、またはノイズの多い信号を差動ペアからできるだけ遠ざけてください。 プロジェクトに高出力の差動ペアおよびシングルエンド接続がある場合は、最初に差動ペアをレイアウトします。

したがって、5 つの重要な点があります。信号が互いに近いデフペアを配線すること、その下にグランドを配置すること、適切なコネクタを使用すること、PCIe インピーダンスに合わせて差動トラック幅と間隔を調整すること、配線をクリーンに保つことです。 これらは基本です。差動ペアを有効に活用したい場合は、これを実行する必要があります。

PCIe をいじったことがある方は、禁じられた知識に遭遇したことがあるかもしれません。実際には、上記のすべてを実行する必要はありません。

PCIe が濡れたストリング上で動作するということを聞いたことがあるかもしれません。これに関する最初の既知の言及は、33C3 でのコンソール ハッキングに関する 2016 年のプレゼンテーションです。 これは、PCIe について語るハッカーの強がりの言い方です。PCIe デバイスを相互に接続する際に、前述のガイドラインの多くによって間違った行為をする可能性はありますが、それでも問題なく動作します。 そして、当然のことながら、大きな真実があります。PCIe は最適ではない状況でも動作し、ハッカーや消費者の世界ではその例が後を絶ちません。 おそらく、PCIe 悪用の最も広く見られる例は、USB3 ケーブルを使用して 1x PCIe リンクを渡すことです。これは、「マイニング」PCIe ライザーが行うことです。つまり、コンピュータ アクセサリ ストアに行って製品を購入できるのは、一部の PCIe の悪用。

あなたが悪夢のように見ただけで忘れていたかもしれないもう 1 つのことは、[TobleMiner] が x8 PCIe リンクを通し、震えながらプロトタイピング ワイヤーを設置することです。これは、HP サーバーからの安価な高速ネットワーク カード用のアダプターのアイデアをテストするためです。 、ピン配列的にも機械的にも通常の PCIe スロットとは互換性がありません。 このプロトタイピング設定により、彼はアダプターの適切なバージョンを設計できるようになりました。これについては、後でここ Hackaday で取り上げます。 FPC を介して PCIe リンクを配置すると、基板間接続を迅速かつ簡単に行うことができます。eGPU エクステンダーもこのために HDMI ケーブルを使用しており、おそらくマグネット ワイヤを使用して動作させることができます。 これは Linus Tech Tips による実験で、PCIe エクステンダーを積み重ね続け、接続が不安定になり始める前に長さ 5 メートルのチェーンに達しました。

PCIe は、USB3 などの他のインターフェイスよりもかなり寛容です。 リンク トレーニング メカニズムがあります。PCIe 接続が確立されると、受信機と送信機は内部パラメーターを調整し、エラー率を低く抑えながら可能な限り最速の速度に達するまで調整し、その後の接続全体でこれらのパラメーターを使用します。 受信に失敗したパケットの再送信もあります。 PCIe は実際に優れた安定性を持っています。

PCIe リンク トレーニングにはいくつかの独自の部分があることは明らかです。たとえば、レイアウトを改善するために、PCIe では負信号と正信号を交換することで、REFCLK を除く差動ペアを反転することもできます。これは検出され、リンクトレーニング中に完璧に補正されます。 USB3、HDMI、DisplayPort などの他のテクノロジーは、このようなエンジニアの生活の質を高める機能をサポートしていません。 他のインターフェイスでは、多くの場合、複数のレーンが同じ長さである必要があり、一方のペアのデータが他方のペアよりも早く到着しないようにする必要があります。 ただし、PCIe はペア間の不一致も問題なく、リンク トレーニング中に検出して補償します。 これら 2 つは、回復力を高める機能ではなく、PCB をより速く、より適切に設計できるようにするためのレイアウト容易機能ですが、これらが存在することは確かに役立ちます。

この回復力はハッカーに役立つでしょうか? はい、そのとおりです。これら 2 つのレイアウトの容易な機能は、基本的にあらゆるプロフェッショナルな PCIe 設計で使用されており、あまり無菌状態でない場合は、自己の責任で PCIe をさらに推し進めることができます。 一方で、誰かがそうしているのを見たからといって、すべてのルールを無視するのではなく、たとえ 2 層 PCB に限定されており、決して許可を得られない可能性があるとしても、これら 5 つのガイドラインに従うよう誠実に努力してください。完璧なインピーダンス値。 これらのルールに従うことで、後のプロジェクトで diffpair の規律を学ぶだけでなく、PCIe 信号の回復力が高まり、エラーがなくなり、PCIe デバイスの満足度が高まります。 うまくいく場合もあるので、これらのガイドラインのすべてまたは一部を無視するのは良いことかもしれませんが、基板上の適切なインピーダンスを計算する追加の 30 分は、PCB が 2 回目のリビジョンを必要とせず、忠実なままであることを確認するのに役立ちます。生涯を通じてあなたの興味を維持します。

したがって、ここにガイドラインがあります: PCIe 差動ペアを敬意を持って扱います。 2 層 PCB を使用していて、プロトタイプを安価に作成し、迅速な納期が必要な場合は、85 オームに達するには配線幅が広すぎるからといって、インピーダンスをあきらめないでください。計算機を開いて、とにかくどれだけインピーダンスを下げることができるかを確認してください。 絶縁高さを下げるとインピーダンスが低下するため、プロジェクトの機械的側面で許容できる場合は、0.8 mm PCB の使用を検討してください。 コンポーネントを移動すると、PCIe トラックがより適切なパスをたどることができ、途中でノイズが少なくなります。 おそらく、リンク トレーニングによって不完全なリンクが 1 ~ 2 世代ダウンする可能性がありますが、安定したリンクにまったく到達しないよりはマシです。 与えられたものを使ってこれらのガイドラインに従って最善の努力をすれば、差動ペアはあなたの意図を尊重します。

たとえば、KiCad を使用している場合、インピーダンス、クリアランス、ビア ステッチを考慮しながら差動ペアをルーティングして、あるポイントから別のポイントに PCIe 1x リンクを取得する方法についての簡単なデモンストレーションをここに示します。

これで、ボード上で PCIe 差動ペアを配線するために何が必要かがわかりました。これらのガイドラインは、他のあらゆる種類の差動ペアベースのインターフェイスに適用されます。 次回は、PCIe 信号の意味、リンク幅、スループットなどの基本事項と、PCIe が提供するすべての楽しい驚きについて詳しく説明します。 また、PCIe の仕組みをさらに詳しく知りたい場合は、この以前の記事をチェックしてください。FPGA を使用して独自の PCIe デバイスを作成したい場合には、これがぴったりです。