SSブログ

CycloneIII/IVでHDMIを映したい [FPGA]

けにろさんがCycloneIIIでHDMIをやってるので、うちでもやりたいと思っていろいろ調べ中。
Altera Cyclone III FPGA HDMI 720p Output Test

さて。
HDMIとDVIと同じく物理層にT.M.D.S.リンク(電気層にPCML、ビットエンコードにT.M.D.S.エンコード)を使っている。
なので、DVI→HDMIは解像度をあわせてやればそのまま映すことができる。

DDWG
DVIの仕様書

ただし、DVIがPC規格(VESA)なのに対して、HDMIはビデオ規格(CEC)である。
PC規格の基本は最低ラインの取り決めで、それ以上は対応機器が頑張れという自己責任型なのに対して、ビデオ規格の場合は相互接続性を保証しなければならい為、必ず守らなければならない枠組みという思想の違いがある。
DVIの場合はけっこういい加減でも映るのだけども、HDMIの場合は規格通りでないと映らない。この辺は使う側に優しく、作る側に厳しい。
以下、HDMIの仕様について書いてみる。


・電気層

T.M.D.S.の電気層はケーブルインピーダンス100ΩのPCML(Pseudo Current Mode Logic)を使っている。
レシーバー側で3.3Vを供給し、トランスミッタ側でD+/D-の差動電流で駆動する。検出できる信号の下限は差動150mV、上限は差動1.5V。
差動の範囲はLVDSの350mVを含んでいるが、コモン電圧がLVDSの1.25Vに対してPCMLでは3.05Vになるので、直結はできない。簡易的には抵抗ネットワークとACカップリングコンデンサを使う。


・T.M.D.S.エンコード

T.M.D.S.エンコードは広義では8b10bに分類される。目的はDC成分を抑止して安定した通信を行うことにある。
通信レートはドットクロックの10倍。8bitのデータを10bitにエンコードし、最下位ビットから送信するLSBファーストの高速シリアル通信。

エンコードアルゴリズムはDVIでは1種類だったが、、HDMIではDVIのエンコードが2種類に分けられ、新しく1種類が追加、エンコードとは別にガードパターンが2種追加され、都合5種類が規定された。

(1)コントロールコード(Control Period Cording)

HSYNC、VSYNC、およびデータピリオドの開始を示すプリアンブル(CTL0~3)の6ビットを送信する。1チャネルあたり2bitのパターンを10bitにコードする。
with (D1 & D0) select q_out <=
"1101010100" when "00",
"0010101011" when "01",
"0101010100" when "10",
"1010101011" when "11"

ここはDVIのDE='H'時と同じ。またチャネル0のD0にHSYNC、D1にVSYNCを割り当てているのもDVIと同様。
CTL[3:0] = "0001" でビデオデータの開始プリアンブル、CTL[3:0] = "0101"でデータアイランドの開始プリアンブルを示す。

(2)データアイランドコード(TERC4)

オーディオデータなどのデータパケット部のエンコード。1チャネルあたり4bitのパターンを10bitにコードする。
with (D3& D2 & D1 & D0) select q_out <=
"1010011100" when "0000",
"1001100011" when "0001",
"1011100100" when "0010",
"1011100010" when "0011",
"0101110001" when "0100",
"0100011110" when "0101",
"0110001110" when "0110",
"0100111100" when "0111",
"1011001100" when "1000",
"0100111001" when "1001",
"0110011100" when "1010",
"1011000110" when "1011",
"1010001110" when "1100",
"1001110001" when "1101",
"0101100011" when "1110",
"1011000011" when "1111"

データアイランドパケットはチャネル0にパケットヘッダ、チャネル1,2にパケットデータを格納する。
パケットは同期期間内に挿入されるパケットで、1ブロック32ピクセルの固定長。任意のブロック数を続けることができる。
DVIには存在しない。

(3)ビデオデータコード(Video Data Coding)

ビデオピクセルデータのエンコード。DVIと同じのため省略。
入力ピクセルデータ8bitの1、0シンボルを数えたうえ、先行ピクセルのシンボル数を計算してコードの極性を入れ替えてDC成分が偏らないようバランスしている。
ただ、デコードは1ピクセル分だけあればデコードできるようコードされてるので、横着してDCバランスアルゴリズムを省略してもDVIでは問題なく映ったりする。

(4)データアイランドガードバンド

データパケット部の先頭と終端に2ピクセル分ずつ挿入される。TERC4エンコードに切り替えるための認識パターン。
チャネル0= "11" & VSYNC & HSYNC の4bitをTERC4エンコードで送信
チャネル1= "0100110011"
チャネル2= "0100110011"

DVIには存在しない。

(5)ビデオデータガードバンド

ビデオデータの先頭に2ピクセル分挿入される。
チャネル0= "1011001100"
チャネル1= "0100110011"
チャネル2= "1011001100"

DVIには存在しない。


・データパケット部

データアイランドで送信されるパケット。
オーディオデータが主だが、諸々のプロテクトデータも一緒に送られる。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。