附録K: TMDSリンク / 非公式訳

pp.559-562

1. TMDSリンク

TMDS (Transition Minimized Differential Signaling)は、ビデオ信号をシリアル伝送するためのラインコードのひとつです。1999年にSilicon Image社が発表しました。デスクトップコンピューターとLCDモニターとを相互接続するためのDVI (Digital Visual Interface、附録J)ビデオ規格の一部として使われているほか、高品位TV (HDTV)モニターやビデオプロジェクターに高品位ビデオゲームコンソールやセットトップボックスなどを接続するためのHDMI (high-definition multimedia interface)規格の一部としても使われています。

TMDSリンクの一般的なアーキテクチャーは附録Jの図J.2に示しました。チャンネルの1本だけを下の図K.1に示します。トランスミッターは、8B/10Bエンコーダー、シリアライザー、CML (current-mode logic)入出力端子ペアで構成されます。

8B/10Bエンコーダーは8ビットワードを10ビットワードに変換する働きをします。一般に内部遷移の回数(H、Lの切り換わる回数)が少ないため、高周波放射が減るという特徴があります。また通信線におけるDCバランスがほぼ完璧であり(すなわち1の数と0の数とがほぼ同じ)、ノイズマージンが改善されます。ただしこの8B/10Bコードは、1980年代にIBMの発表した8B/10Bコードとは違いますので気をつけてください。

附録Jの図J.2に示したように、ピクセルデータは8ビット幅であり、コントロールデータはわずか2ビット幅です。TMDSエンコーダーは8ビットワードから10ビットワードを生成しますので、通常のエンコーディング手順(あとで説明)はピクセルデータにしか適用されません。コントロールデータには固定10ビットワードが使われます。附録Jの図J.2を見るとわかりますが、クロック(ピクセル)周波数は場合によっては165 MHzもの高周波が使われます。そのためピクセル1個につき10ビットベクタをシリアル伝送しなければならず、伝送クロックは1.65 GHzでなければなりません。これほどの高周波は、PLL (セクション2.8)でピクセルクロック周波数を10逓倍して生成します。

2. TMDSエンコーディングアルゴリズム

TMDSの8B/10Bエンコーダーを図K.2に示します。初段がXOR/XNOR、2段目がインバーター/ノンインバーターという構成です。初段は、遷移の回数(H、Lの切り換わる回数)を極小化することで電磁干渉(EMI)を減らす働きをします。2段目は、ディスパリティ(一定期間に伝送される1の総数から0の総数を引いた数。ゼロに近いほどよい)を極小化する働きをします。

入力データdin(7:0)をXORゲート、XNORゲートのどちらかに通して内部ベクタx(7:0)を生成します(図K.2)。遷移回数の少ないx(7:0)の生成されるゲートが選択されます。さらに、どちらのゲートが選択されたのかを示す手段として9番目のビットであるdout(8)をdoutに追加します(XNORは0、XORは1)。次に、x(7:0)を反転するかそのまま通過させるかしてdout(7:0)を生成します。さらに、反転したのかそのまま通過させたのかを示す手段として10番目のビットであるdout(9)をdoutに追加します(1が反転、0はそれ以外)。どちらが選択されるのかは、蓄積されたディスパリティによって決まります。ディスパリティが最小になるよう選択されます。ピクセルデータとしてはわずか256値しか存在しませんが、入力によってはディスパリティしだいで2つのコードワードが生成されるため、全部で460個の10ビットワードが生成される可能性があります。

附録Jの図J.2に示したように、DVIまたはHDMIを利用してビデオシステム(その一部をTMDSが成す)では、dena (ディスプレイイネーブル)がアサートされたときにピクセルデータが伝送され、それ以外の場合はコントロールデータが伝送されます。

ハードウェアに適したTMDSエンコーディングアルゴリズムを図K.3に示します(入出力ポートについては左上の図を見てください)。図中の記号の意味は下のとおりです。

dena=1のときはdin(7:0)=ピクセルデータ(8ビット)
dena=0のときはコントロールデータ(2ビット)
x(7:0)=内部ベクタ
dout(9:0)=出力ワード(10ビット)
dena=ディスプレイイネーブル
onesD=din(7:0)に含まれる1の数
onesX=x(7:0)に含まれる1の数
zerosX=x(7:0)に含まれる0の数
disp=蓄積されたディスパリティ

zerosX+onesX=8であるため、onesX > zerosXの評価結果はonesX > 4と同じです。また問題を単純化するため、下のフローチャートではxに余分なビットがついています。これがあとでdout(8)xに渡されます。

エンコードの例をいくつか図K.4に示します。ほとんどの入力はディスパリティしだいで2つの出力を生成しますが、1つしか生成しない入力もあります(図には示していません)。蓄積されたディスパリティを計算するときに出力の10ビットが全部考慮されていることに注目してください。

3. CML端子

CMLトランスミッター/レシーバーペアを図K.5aに示します。TMDSの仕様では、Hiの電圧がVDD、Loの電圧がVDD-0.4 Vと決まっています。CMLトランスミッターとCMLレシーバーとをつなぐ差動ペア線の両端には50 Ω抵抗が接続されていて、その差動ペア線につながっているトランジスタは一度にどちらか1つしかオンにならないため、Loの電圧は(50||50) 16 mA=Vdd-0.4 Vです。

CMLのI/OはFPGAでは実装できません。しかし図K.5bの回路でエミュレートは可能です。通常の3.3 V LVCMOS端子ペアに270 Ωの抵抗(R2)を1つずつ外づけするだけで済みます。電圧降下は{(Vdd-VLOW)/(R1+R2)} R1≈0.4 Vとなって仕様を満たします。

サンプル17.8の実装例、および17.7の応用例を見てください。