FPGAとADCデジタル・データ出力のインターフェーシング

FPGAとADCデジタル・データ出力のインターフェーシング

著者の連絡先情報

概要

フィールド・プログラマブル・ゲート・アレイ(FPGA)とA/Dコンバータ(ADC)出力のインターフェーシングは、エンジニアリングにおける一般的な課題です。本稿では、様々なインターフェース・プロトコルと標準の他、高速データ・コンバータ実装にLVDS(定電圧差動伝送)を利用するためのアプリケーションのヒントと手法について概要を説明します。

インターフェースのスタイルと標準

FPGAとADCデジタル・データ出力のインターフェーシングはエンジニアリングにおける一般的な課題ですが、ADCには様々なデジタル・データ・スタイルと標準が使われているという事実がこのタスクを複雑なものにしています。シングル・データ・レート(SDR)CMOSは低速データ・インターフェースに広く使われており、通常、その周波数は200MHz未満です。この場合、データはクロックの一方のエッジでトランスミッタによって遷移され、クロックの他方のエッジでレシーバーにより受信されます。これにより、レシーバーがデータのサンプリングを行う前に、データがセトリングするための十分な時間が確保されます。ダブル・データ・レート(DDR)CMOSでは、トランスミッタがクロック・エッジごとにデータを遷移させます。このためSDRと同じ時間で2倍のデータを伝送できますが、レシーバーが正しくサンプリングを行うためのタイミングは、より複雑です。

パラレルLVDSは、高速データ・コンバータ用に広く使われている標準です。この方式は各ビットにPワイヤとNワイヤによる差動伝送方式を使用し、最新のFPGAを使用した場合、DDRで最大1.6Gbps、すなわち800MHzの速度を実現します。パラレルLVDSはCMOSより少ない消費電力で動作しますが、ワイヤの本数が2倍必要なので配線が難しくなります。これはLVDS標準に含まれていませんが、LVDSはソース同期クロック・システムを採用したデータ・コンバータにも広く使われています。このセットアップでは、データと同一位相のクロックがデータと共に送信されます。レシーバーは、これによりデータの遷移を認識できるので、このクロックを使って容易にデータをキャプチャできます。

FPGAロジックは高速コンバータのバス速度に追随できるほどの速度でないことが多いので、ほとんどのFPGAは、コンバータ側の高速で狭帯域のシリアル・インターフェースをFPGA側の低速で広帯域のパラレル・インターフェースに変換するために、シリアライザ/デシリアライザ(SERDES)ブロックを備えています。バス内の各データ・ビットに対し、このブロックは2、4、または8ビットを出力しますが、速度はクロック・レートの1/2、1/4、または1/8で、データを実質的にデシリアライズします。データはFPGA内の広帯域バスによって処理されますが、このバスの動作は、コンバータ側の狭帯域バスよりはるかに低速です。

LVDSの伝送標準はシリアル・リンクにも使われますが、そのほとんどは高速ADCに関するものです。通常、シリアルLVDSは、インターフェースの速度よりもピン数の方が重要な場合に使われます。また、多くの場合は2つのクロックが使われます(データ・レート・クロックとフレーム・クロック)。パラレルLVDSのセクションで述べた考慮事項は、すべてシリアルLVDSにも適用されます。パラレルLVDSは、単純に複数のシリアルLVDSラインで構成されます。

図1. ADCとFPGAの接続には様々なインターフェースを使用できます。
図1. ADCとFPGAの接続には様々なインターフェースを使用できます。

I2Cはクロックとデータで2本のワイヤを使用し、ピンを追加することなくバス上に多数のデバイスを接続することができます。I2Cは比較的低速のプロトコルで、400kHz~1MHzの範囲で動作します。このプロトコルは、部品サイズの方が関心事となるような低速のデバイスに広く使われます。I2Cは、制御インターフェースまたはデータ・インターフェースとしても多用されます。

SPIは、以下のように4本または3本のワイヤを使用します。

  • クロック
  • データ・インとデータ・アウト(4 線)または双方向データ・イン/データ・アウト(3 線)
  • チップ・セレクト(マスター以外のデバイスごとに 1 つ)

SPIは、使用可能なチップ・セレクト・ラインと同じ数のデバイスをサポートします。提供可能な最大速度は約100MHzで、制御インターフェースとデータ・インターフェースの両方に広く使われています。

CMOSベースの双方向インターフェースであるシリアル・ポート(SPORT)は、1方向あたり1つまたは2つのデータ・ピンを使用します。そのワード長は調整可能で、8ビット・システム以外の分解能での効率が向上します。SPORTは時間領域マルチプレクシング(TDM)をサポートしており、オーディオ/メディア・コンバータやチャンネル数の多いコンバータに広く使われています。1ピンあたりの性能は約100MHzです。SPORTはBlackfin®プロセッサでサポートされており、FPGA上で簡単に実装することができます。SPORTには制御特性も付加できますが、一般的にはデータだけに使われます。

JESD204は、FPGAやASICなどの単一ホストと1つまたは複数のデータ・コンバータとの間で使用する高速シリアル・リンクのJEDEC標準です。最新の仕様には、レーンまたは差動ペアあたり最大3.125Gbpsの速度が規定されています。将来的なリビジョンでは6.25Gbps以上の仕様が規定される見込みです。各レーンは8b/10bエンコーディングを使用するので、レーンの有効帯域幅は理論値の80%に低下します。クロックはデータ・ストリームに組み込まれているので、特別なクロック信号はありません。複数のレーンをまとめてボンディングしてスループットを向上させることが可能で、この場合もデータ・リンク層プロトコルがデータの完全性を確保します。JESD204は、データをフレーム化するために、単純なLVDSやCMOSよりもかなり多くのリソースをFPGA/ASIC内で必要とします。必要な配線数は劇的に減少しますが、反面、より高価なFPGAやより高度なPCBルーティングが必要になります。

図2. FPGAインターフェースのSERDESブロックとコンバータの高速シリアル・インターフェース。

図2. FPGAインターフェースのSERDESブロックとコンバータの高速シリアル・インターフェース。

一般的な推奨事項

ADCとFPGAのインターフェーシングについては、有効な一般的推奨事項がいくつかあります。

  • ミスマッチによる反射はタイミング・バジェットを損なう可能性があるので、これを避けるために、FPGA 内部の終端を使用するのではなくレシーバー(FPGA または ASIC)側で外付け抵抗による終端を行う。
  • システム内で複数の ADC を使う場合は、1 つの ADC の 1 つのデジタル制御発振器(DCO)を使わない。
  • レシーバーへのデジタル・パターンをレイアウトする際に、すべてのパターン長を等しくするためにトロンボーン配線を多用しない。
  • エッジ・レートを下げてスイッチング・ノイズを制限するために CMOS 出力には直列終端を使用し、正しいデータ・フォーマット(2 の補数、オフセット・バイナリ)が使われていることを確認する。

シングルエンドのCMOSデジタル信号は約1V/nsのロジック・レベルで動作し、最大出力負荷は10pF(代表値)、充電電流は10mA/bit(代表値)です。充電電流は、できるだけ小さい容量性負荷を使用することによって、最小限に抑える必要があります。通常、これは、できるだけ短いパターンで1つのゲートだけを駆動することによって実現できます。ビアはできるだけ使わないでください。充電電流は、デジタル入出力にダンピング抵抗を使用することによって最小限に抑えることもできます。

ダンピング抵抗と容量性負荷の時定数は、サンプル・レートの周期の約10%としてください。クロック・レートが100MHzで負荷が10pFの場合、時定数は10nsの10%、つまり1nsとします。この場合はRを100Ωとする必要があります。最適なS/N比(SNR)性能を得るには、DRVDDを3.3Vではなく1.8Vとすることが望まれます。ただし、大きい容量性負荷を駆動する場合はSNRが低下します。CMOS出力は約200MHzのサンプリング・クロックまで使用できます。2つの出力負荷を駆動する場合やパターン長が1~2インチの範囲を超える場合は、バッファの使用を推奨します。

過渡電流がアナログ入力に戻って結合するとADCのノイズと歪みが増大するおそれがあるので、ADCのデジタル出力は慎重に扱う必要があります。

図3に示す代表的なCMOSドライバは、より大きな過渡電流を発生させる可能性があり、容量性負荷を駆動するときは特にその傾向が顕著になります。CMOSデータ出力のADCの場合は、これらの電流を最小限に抑えて、ADCに余分なノイズや歪みを発生させないよう、特に注意を払う必要があります。

図3. 代表的なCMOSデジタル出力ドライバ。

図3. 代表的なCMOSデジタル出力ドライバ。

代表的な例

16ビット・パラレルCMOS出力ADCの例を図4に示します。各出力に10pFの負荷を接続して1つのゲート負荷とPCBの寄生容量をシミュレートすると、各ドライバは10pF負荷の駆動時に10mAの充電電流を生成します。

図4. 直列抵抗を使用してCMOSデジタル出力の充電電流を最小限に抑制。

図4. 直列抵抗を使用してCMOSデジタル出力の充電電流を最小限に抑制。

したがって、16ビットADCの合計過渡電流は16 × 10mA =160mAにも及びます。これらの過渡電流は、小さい抵抗Rを各データ出力に直列で追加することによって抑制できます。この抵抗の値は、RC時定数が合計サンプリング周期の10%未満となるように選ぶ必要があります。fS = 100MSPSであれば、RC時定数を1ns未満としてください。 C = 10pFの場合、R = 約100Ωが最適値です。Rの値がこれより大きいと出力データのセトリング時間が長くなり、正しいデータ・キャプチャの妨げとなります。CMOS ADC出力の容量性負荷は、シングル・ゲート負荷(通常は外部データ・キャプチャ・レジスタ)に制限する必要があります。いかなる場合でも、データ出力をノイズの多いデータ・バスに直接接続することはしないでください。また、ADC出力への直接負荷を最小限に抑えるために、必ず中間バッファ・レジスタを使用してください。

CMOSの標準LVDSドライバを図5に示します。公称電流は3.5mA、コモンモード電圧は1.2Vです。したがって、100Ωの差動終端抵抗駆動時の各レシーバー入力の振幅は350mVp-pです。これは700mVp-pの差動振幅に相当します。これらの数値はLVDS仕様から導かれます。

図5. 代表的なLVDS駆動設計。

図5. 代表的なLVDS駆動設計。

LVDS標準は2つ存在します。1つはANSIが策定したもので、もう1つはIEEEが策定したものです。これら2つの標準は似通っており、ほとんどの部分は互いに互換性がありますが、まったく同じではありません。図6は、これら2つの標準のアイ・ダイアグラムとジッタ・ヒストグラムを比較したものです。IEEE標準のLVDSの振幅は200mVp-pで、ANSI標準の320mVp-pより小さい値となっています。これは、デジタル出力の省電力に役立ちます。このため、レシーバーに必要なアプリケーションや接続を扱う場合はIEEE標準を使用します。

図6. ANSIとIEEEのLVDS標準
図6. ANSIとIEEEのLVDS標準

図6. ANSIとIEEEのLVDS標準

パターン長が12インチ(30cm)を超える場合のANSIとIEEEのLVDS標準の比較を図7に示します。どちらのグラフも、ANSI標準で駆動した場合のものです。右のグラフでは出力電流が2倍になっています。出力電流を2倍にするとアイの形状が明確になり、ジッタ・ヒストグラムも改善されます。

図7. ANSIとIEEEのLVDS標準(パターン長が12インチを超える場合)
図7. ANSIとIEEEのLVDS標準(パターン長が12インチを超える場合)

図7. ANSIとIEEEのLVDS標準(パターン長が12インチを超える場合)

図8には、FR4材料上でのパターン長の影響が示されています。左のプロットは理想的なアイ・ダイアグラムで、トランスミッタ直近のものです。レシーバーは40インチ離れた位置にあり、アイはほとんど閉じていてデータの復元が難しい状態です。

図8. FR-4チャンネル損失の影響

図8. FR-4チャンネル損失の影響

トラブルシューティングのヒント

図9のVisual Analog®によるデータ・ビットのデジタル・ディスプレイは、ビット14が切り替わっていないことを示しています。これは、デバイス、PCB、またはレシーバーに問題があること、あるいは単純に、符号なしデータの大きさが最上位ビットを切り替えるのに十分でないことを示していると考えられます。

図9. ビット14が欠落したAD9268 ADC。

図9. ビット14が欠落したAD9268 ADC。

図10は、上に示したデジタル・データを周波数領域で表示したものです。ビット14は切り替わっていません。このプロットは、ビットが有意であること、およびシステム内のどこかにエラーがあることを示しています。

図10. ビット14が欠落したAD9268 ADCの周波数領域プロット。

図10. ビット14が欠落したAD9268 ADCの周波数領域プロット。

図11は同じデータの時間領域プロットです。データはスムーズなサイン波ではなく、オフセットされている上に、波形全体を通じて複数のポイントに著しいピークが認められます。

図11. ビット14が欠落したAD9268 ADCの時間領域プロット。
図11. ビット14が欠落したAD9268 ADCの時間領域プロット。

図12では、ビットの欠落がない代わりに2つのビットが互いに短絡されていて、レシーバーから見ると、2つのピンのデータは常に同じになります。

図12. ビット9とビット10を互いに短絡させた場合のAD9268 ADC。
図12. ビット9とビット10を互いに短絡させた場合のAD9268 ADC。

図13は同じケースの周波数領域表示で、2つのビットが互いに短絡されています。基本トーンが明確に現れていますが、ノイズ・フロアは本来あるべき値より大幅に悪化しています。フロアの歪みの程度は、どのビットを短絡するかによって異なります。

図13. ビット9とビット10を互いに短絡させた場合のAD9268 ADCの周波数領域プロット。

図13. ビット9とビット10を互いに短絡させた場合のAD9268 ADCの周波数領域プロット。

図14に示す時間領域表示では問題が目立たなくなっています。波形のピーク部分と谷部分で少しスムーズさが失われていますが、これはサンプル・レートと波形の周波数が近い場合の一般的な現象でもあります。

図14. ビット9とビット10を互いに短絡させた場合のAD9268 ADCの時間領域プロット。

図14. ビット9とビット10を互いに短絡させた場合のAD9268 ADCの時間領域プロット。

図15はタイミングが不適切な場合のコンバータを示しており、この場合はセットアップ/ホールドに関する問題が原因になっています。前述のエラーは全体的にデータの各サイクル中に現れていましたが、このタイミング・エラーはそれと異なり、一貫性があまり見られません。あまり深刻でないタイミング・エラーは、間欠的に現れることがあります。これらのプロットは、タイミング条件を満たしていないデータ・キャプチャの時間領域と周波数領域を示したものです。時間領域のエラーはサイクル間で一貫していません。また、FFT/周波数領域ではノイズ・フロアが上がっています。通常、これは欠落したビットがあることを示しており、時間のアライメントが正しく行われていないことが原因となっている可能性があります。

図15. データとクロック・タイミングが不適切な場合のAD9268の時間領域プロット。

図16は、図15に示した時間領域タイミング・エラーを拡大表示したものです。この場合もサイクル間での一貫性はありませんが、一定のエラーが繰り返されています。その一例が、このプロットのいくつかのサイクルの谷部分にある負のスパイクです。

図16. データとクロック・タイミングが不適切な場合のAD9268の時間領域プロットの拡大。

図16. データとクロック・タイミングが不適切な場合のAD9268の時間領域プロットの拡大。

まとめ

本稿では、FPGAとADCの接続に使用する標準インターフェース(SPI、I2C、SPORT、LVDS、およびJESD204A)について検討しました。FPGAとADCのインターフェーシングは、データ・レートが更に増加していく中で、今後も一般的な課題であり続けるでしょう。JESD204Bは12.5Gbpsをサポートしており、JESD204Cでは32Gbpsとなる予定です。このような高いデータ・レートを実現するには、慎重な設計が求められます。