LVDS DDRでP/Nを逆に配線したら何が起きるのか

FPGA

差動信号を扱っていると、一度はやらかすのがこれです。

P/Nを逆に配線してしまう。

ぱっと見は「終わった…」と思いがちですが、実際にはもう少し整理して考えることができます。
特にDDR受信では、データとクロックで影響が異なるのがポイントです。

基板設計の際に注意してほしいものですよね~


結論(先に)

ここでは,立上り側・立下り側の値を2 bitずつ組にして読む場合を考えます.受信モードと後段でのデータの並べ方によって,見える順序は変わります.

  • データだけP/N逆
    → ビット反転のみ(順序は変わらない)
  • クロックだけP/N逆(DDR)
    → 偶奇エッジが入れ替わる(データ順序が崩れる)

前提

本記事では以下の条件を前提とします。

  • インタフェース:LVDS
  • 受信方式:DDR(立上り・立下りでサンプリング)
  • データ列:D1 → D2 → D3 → D4(時間順)
  • デバイス:Efinix Titaniumでの動作確認ベース

※一般的なLVDS DDRでも同様の挙動になると考えられますが、最終的にはデバイス依存です。


データだけP/N逆の場合

まずはシンプルなケース。

起きること

差動受信は

Vdiff = Vp - Vn

で判定されます。

P/Nを逆にすると、

Vdiff → -Vdiff

となるため、

👉 論理レベルが反転します。

結果

D1 D2 D3 D4 → ~D1 ~D2 ~D3 ~D4

ここで重要なのは、

  • サンプリングタイミングには影響しない
  • データの並び順は変わらない

という点です。

つまり、

  • 順序:そのまま
  • 値:反転

という非常に素直な挙動になります。


クロックだけP/N逆の場合(DDR)

こちらが本題です。

起きること

クロックのP/Nを逆にすると、

👉 クロックが180°位相反転します。

DDRでの影響

DDRでは、

  • 立上りエッジで1ビット
  • 立下りエッジで1ビット

を取得します。

クロックが反転すると、

👉 どのエッジでどのデータを取得するかが入れ替わる

ことになります。


具体例

元の想定:

立上り → D1  
立下り → D2
立上り → D3
立下り → D4

クロック反転後:

立上り → D2  
立下り → D1
立上り → D4
立下り → D3

結果

D2 D1 D4 D3

完全にランダムになるわけではなく、

👉 偶数・奇数のペア単位で入れ替わる

という挙動になります。

この「それっぽく見えるけど微妙におかしい」感じが、デバッグをややこしくします。
ここで私もハマりました orz


対処方法

FPGAであれば、一般的には次の対応になります。

  • データ逆接
    → NOTで補正
  • クロック逆接
    → PLLなどで位相補正、または受信設定で調整

ただし、

  • グローバルクロックに載せられるピンか
  • PLLに接続可能か

などの制約はあるため、ピン配置の時点で回避できるのがベストです。


まとめ

整理すると次の通りです。

  • データP/N逆
    → ビット反転のみ(順序は維持)
  • クロックP/N逆(DDR)
    → 偶奇エッジ入れ替わり(順序が崩れる)

最後に

この手の問題は、

  • テストパターンを流す
  • ILAやロジアナで確認する

のが最も確実です。

理屈通りに見えることもあれば、
実装(配線遅延・スキュー・IO設定)依存でズレることも普通にあります。

「なんかそれっぽく動いてるけどおかしい」状態にハマったら、
まずはP/N逆接を疑うのがおすすめです。


良きハッピーハードウェア開発を。

受信モードとデータの並べ方も確認する

上のD2 D1 D4 D3は,立上り側・立下り側の値を2 bitずつ組にして読む説明例です.クロックの極性を変えると,物理的な立上り・立下りと,受信回路が認識するエッジの対応が逆になります.ただし,そこから後段へ出てくるワードの並びは,受信モードと再同期の方法にも依存します.すべてのLVDS受信回路で,この4 bitの並びになると決めつけることはできません.

EfinixのQuantum Titanium Primitives User Guide v4.2のEFX_IDDIOでは,O_HIが立上り側,O_LOが立下り側の取り込みに対応しています.また,IS_CLK_INVERTEDと,DDIO・DDIO_RESYNC・DDIO_PIPEのモードが定義されています.これはプリミティブの仕様であり,この記事の実機で使った設定を示すものではありません.

自分の設計と照合するときは,まず生成された受信回路と設定を確認し,その出力を後段でどの順に並べているか追います.デシリアライザーを使う構成なら,シリアライズ比とワード境界も確認します.0101のような繰り返しだけで判断せず,反転と位置ずれを区別できる既知のテストパターンと照合します.

クロックの補正を入れた場合も,データの並びが戻ったことと,取り込みタイミングが満たされていることは別に確認します.クロックとデータの位相調整については,Efinix AN 044「Aligning LVDS Clock and Data Signals」が参考になります.この追記では,新しい実機波形や測定結果は追加していません.