HDL LOGO
UTL-016 シリアル信号取り込み ご参考 (XILINX)
2012/05/25-
 当社のUTL-016はアナログ・デバイセズ(リニアテクノロジー)のLTC2274を搭載しており、高速にA/D変換したデータを8B/10B変換されたシリアル信号で出力します。
XilinxのSpartan-6 LXTを使って、データを受信するまでの要所をご説明します。
皆様のご参考になりますと幸いです。

下記環境で行った実験をもとに作成しています。
ISEのバージョンによって違いなどあるかもしれませんのであらかじめご了承ください。
XCM-020
・ISE バージョン12.2
・GTP Wizard バージョン1.6


2012/05/28 : 公開しました
2015/02/25 : 加筆、修正を行いました

 ◆GTP Wizardの設定

 GTP Wizardの設定を解説します。ポイントは下記になります。
  • アライメントに使用するKキャラクタの設定
  • 受信状態の観察に使えるポートの引き出し
以下に主要な設定画面を示します。


クリックして全体表示
 -Page 1

使用するGTP Tile, リファレンスクロックを指定します。

クリックして全体表示
-Page 2 

リファレンスクロックに、オンボードの125MHzを使用しています。

クリックして全体表示
 -Page 3

・RXCHARISCOMMA:受信データがGTPに設定されたカンマであればアサート
・RXCHARISK:受信データがKキャラクタであればアサート
を引き出します。

クリックして全体表示
- Page 4

GTPがユーザ回路用に出力するクロック「GTPOUTCLOCK = TXOUTCLK」を使います

クリックして全体表示
- Page 5
カンマアライメントのトリガとなるKキャラクタを設定します
LTC2274からはK28.5またはK28.7の2種類のKキャラクタが送られてきます(動作モードに依ります)
K28.7はプリセットにありませんので手入力します。参考画像はK28.7設定です。

アライメントを有効/無効とするために、以下のポートを引き出しておきます。
・ENPCOMMAALIGN : 正のカンマでアライメントを行う
・ENMCOMMAALIGN : 負のカンマでアライメントを行う

アライメントの状態を知るために、以下のポートを引き出しておきます。
・RXBYTEISALIGNED : アライメントが取れている場合にアサートされます
・RXCOMMADET : カンマを受信でアサートされます

上記以外、特に設定することはないと考えています。

 ◆GTPモジュールのクロック設定

 GTPに供給するクロックの設定は、GTP内部バス幅の設定により異なります。
LTC2274を扱う場合2Byteモードですので、FPGA内のクロックは下図のように接続します。



 PLLはユーザが設置する必要があります。
 GTPCLKOU[0]とはTXOUTCLKのことです。通信レート/内部bit幅のクロックが出てきますので 1.5625G/10 = 156.25MHz が出力されます。



 PLLからは1倍(CLKOUT0)と1/2倍(CLKOUT1)のクロックを生成させ、それぞれGTPのTXUSRCLK, TXUSRCLK2に戻します。
TXUSRCLK2 (= 78.125MHz)はユーザロジックに使用できます。

 ◆UTL-016に与えるエンコードクロック

 LTC2274のエンコードクロックには、PLLでユーザロジック用に生成したTXUSRCLKを供給します。
今回78.125MHzとしている理由は

・LTC2274の最大サンプリング周波数「105MHz」
・GTPで設定可能なレート(1.2288 〜 1.62Gbps)
の両方を満足し、かつできるだけ高速に動作する周波数であるからです。

 LTC2274から送られてくるシリアルデータレートはエンコードクロックの20倍ですので、1.5625Gbpsとなります。

 ◆まずKキャラクタを受信

 高速シリアル通信で、まず始めに手がかりに出来るのはKキャラクタの受信です。
意図したタイミングで、Kキャラクタの受信フラグが立つかを確認してみてください。

 UTL-016のSYNCピンをアサートして、フレーム同期モードに出来ます。このとき、LTC2274からはK28.5のみが出力されます

クリックして拡大


 これを受信すると、GTP側では「RXCHARISK」がアサートされます。ChipScopeでの波形を下記に示します。
K28.5は0xBCです。


クリックして拡大

 ◆受信データをアライメントする

 UTL-016の出荷時スイッチ設定では、データ中にK28.7が混ざって送られてきます。
GTPのアライメント設定で、K28.7を指定しておけば受信データがアライメントされ正常なA/Dデータが受信できます。

 下図はデータを受けている時の波形です。
・RXCOMMADET
・RXCHARISCOMMA
・RXCHARISK
が頻繁に反応していることがわかります。

クリックして拡大


 拡大した図です。
「RXCOMMADET」は8B/10Bデコーダよりも手前のブロックなので、
「RXCHARISCOMMA」「RXCHARISK」よりも早めに反応が出ているようです。

クリックして拡大



クリックして拡大


 アライメントが出来ている場合は「RXBYTEISALIGNED」がアサートされます。
ある程度の期間「RXBYTEISALIGNED」がHighとなっていることを確認して
・ENPCOMMAALIGN
・ENMCOMMAALIGN
をネゲートした方がよいようです。再アライメントが行われ、正常受信の妨げとなりました。

 ◆受信データの順番をそろえる

 アライメントはデータの区切りとなるBit位置の検出でした。出力される
アライメントが整うタイミングで2Byte転送のByteが入れ替わる場合があります。
LTC2274は下位(2nd)ByteをKキャラクタとして送信してきますので、それを手がかりにByte並びを揃えます

 ◆フレームアライメントモニタ機能

 UTL-016(LTC2274)のフレームアライメントモニタ(FAM)機能を有効にする事により、Kキャラクタがデータに混ぜられ定期的に送出されます。


クリックして拡大


 FAM Mode 1では、ADしたデータのLowByteが前回のLowByteと一致していればK28.7(=0xFC)に置き換えます。

◆受信データの順番をそろえる

 アライメントはデータの区切りとなるBit位置の検出でした。つぎは区切りとなるByte位置を検出します。
出力データされる2Byteデータがずれている事があります。
  • ずれ有り:ひとつ前のLowByte & 処理するデータのHighByte
  • ずれ無し:処理するデータのHighByte & 処理するデータのLowByte
 LTC2274のFAM機能による「K28.7の置き換えは常にLowByteである」ということを利用して並べ替えを行います

 GTP受信データはLTC2274の送出データが逆転しています。
ですので、GTP受信データのLowByteがK28.7である場合に、下記の組み合わせで並べ替えを行います

「今回受信したLowByte」&「前回受信したデータのHighByte」


クリックして拡大


※お示ししている並べ替え、置き換え処理は一例です

◆K28.7を置き換える

 K28.7は「前回ADのLowByteと同じ値である場合に置き換えられたもの」ですので、これを元に戻します。
並び替え後のデータはK28.7が存在するとすれば、常にHighByteとなっているはずです。これを前回受信したHighByteで置き換えます。
 最後に上位と下位を入れ替えてLTC2274の出力と揃えます。


クリックして拡大


※お示ししている並べ替え、置き換え処理は一例です

 ◆入力アナログ波形の振幅について

 UTL-016の出荷時スイッチ設定では1.5Vpp入力レンジとなっています。
範囲外の振幅となる正弦波信号を入力した場合、以下のようにデータがクリップします。

クリックして拡大


 PGA設定をLowとしますと2.25Vppとなり、クリップが解消されます。

クリックして拡大




 UTL-016の差動アンプ(LTC6403-1)出力と、A/D変換IC(LTC2274)の入力は逆極性で接続されています。(パターン配線を考慮しています)
 シングルエンド入力の際はアンプのマイナス側から信号を入力します。

 

◆回路データについて

 当社では、通常、サンプル回路などのご提供は行っておりません。
みなさまの参考になれば幸いです。
間違いなど見つけられましたらぜひご指摘下さい。
ひとことコメント 
メールでのご質問はこちらへどうぞ
UTLシリーズトップへ