注意: 情報に間違いがあってもオレは知らん.
図表はクリックすると拡大できると思う.
接続関係・データレート
下図におけるSourceはHDMI出力機器、SinkはHDMI受信機器のこと.
channel0,1,2と3本あるのはそれぞれRGBの3本のこと.
Clock Channelは、channelのclock.
channelを流れるビデオデータは、8/10変換された、1キャラクタあたり10bitのシリアルデータ.
チャネルのシリアルデータはLSB firstである.
同時刻の3キャラクタで{R[7:0],G[7:0],B[7:0]}=24bitの1ピクセルを表わす.
ゆえに、clock周波数は、ピクセル周波数x10となる.(HDMIケーブルにはピクセル周波数が流れるので要注意)clock周波数は具体的にいくらなんだろう?
これはビデオ解像度毎にデフォルト値が決まっていると思ってよい.
この2例についてデフォルト値を探すにはどうしたらよいか?を示す.
640x480p @ 60Hz
720x480p @ 60Hz
まずはここを見る.
http://read.pudn.com/downloads74/ebook/269248/EIA-CEA-861-B.pdf
Table.4を見る.こんな数値のある行が見つかる.
Vact TtlLines Vblank VFreq HFreq PixeFreq Httl Hact Hblank
480 525 45 60.0 31.50 25.200 800 640 160
480 525 45 60.0 31.50 27.027 858 720 138
なんとなく意味はわかると思うが念のため解説すると、
480,640,720,60の意味は探したいビデオフォーマットの数値そのもの.
480=走査線数=垂直ピクセル数、640,720=水平ピクセル数、60=フレームレート
525とは何か?
走査線数480本とは画面表示数であって、画面の上下の見えない部分の走査線を含めると総数525本の走査線があるのだ、という意味.
45とは何か?
画面の見えない走査線数. 525-480=45本.ここに垂直同期信号が内挿される.
31.50とは何か?
水平周波数[kHz]. 525x60=31.50kHz
25.2,27.027とは何か?
ピクセル周波数[MHz]. 31.5x800=25.2MHz 31.5x858=27.027MHz
800,858とは何か?
水平解像度の画面非表示部分を含めたピクセル数.
160,138とは何か?
水平の画面非表示部分のピクセル数. 800-640=160 858-720=138
ここに水平同期信号が内挿される.
ここで知りたかったのはPixelFreqであった.なぜならその10倍がHDMI clock周波数だから.すなわちこういうこと.
640x480p @ 60Hz 252MHz
720x480p @ 60Hz 270.27MHz
つまり、HDMIケーブルには1GBYTE/S以上の同期データが流れている.(RGB3本で)
アナログビデオ信号をだたデジタルにしただけの、あまりファンタスティックでない規格である.
この連載の最後の方で動かしてみて判ったのだが、HDMIケーブルを流れるクロック周波数は、PixelFreqであった.つまり上の例でいえば、25.2MHzおよび27.027MHzだということだ.
データ構造
AVデータを次の3つに分類する.
・pixel component[7:0] RGBデータ
・Auxiliary data[3:0] audioなど
・HSYNC,VSYNC[1:0],CTL[3:0] 同期信号など
その答えは時分割である.
下図は、720x480ビデオの1フレームが描かれている.
上から45本の走査線がVBLANK期間なので画面に表示されないので、ビデオデータは送信されず、audioやSYNCが送信される.
また、各走査線の先頭の138pixel期間はHBLANK期間なので画面に表示されないので、ビデオデータは送信されず、audioやSYNCが送信される.
時分割が登場したので、時分割3分類が新しく登場する.
・Video data期間 RGBデータ
・Data Island期間 audioなど
・Control期間 同期信号など
下図は時分割3分類の登場時刻を表わしている.NTSCを知っている人なら理解は容易だろう.
実はこれを知っても、HSYNCとVSYNCの幅や位置に関する詳細仕様はわからない.アバウトすぎるんだな.HDMI規格書を読んでも、その詳細は書かれていない.(Appendixまでは読んでないが)
オーディオを転送しない場合はData Island期間は存在しないことになる.
変調方式
何から先に説明するかは重要だが、わたしはチャネル屋なので、ここで変調方式について解説することにしたい.
上でビデオデータは8/10変換だと書いたが、実は半分ぐらいウソである.
・Video data期間 →RGB用
・Data Island期間 →audio用
・Control期間 →HSYNC/VSYNC
のそれぞれで変調方式が違うのである.
Video Data期間は8-10変換.1キャラクタあたりで、24bit(3チャネルなので).
Data Island期間は4/10変換(TERC4変換).1キャラクタあたりで12bit(3チャネルなので).
Control期間は2/10変換(transition maximized変換).1キャラクタあたりで6bit(3チャネルなので).これらの6bitはHSYNC,VSYNC,CTL[3:0]である.
変調方式の具体的仕様を簡単な方から説明する.
まずはControl期間の2/10変換から.D1=VSYNC,D0=HSYNCに紐付けされる.
case (D1, D0):
0, 0: q_out[9:0] = 0b1101010100;
0, 1: q_out[9:0] = 0b0010101011;
1, 0: q_out[9:0] = 0b0101010100;
1, 1: q_out[9:0] = 0b1010101011;
endcase;
case (D3, D2, D1, D0):
0000: q_out[9:0] = 0b1010011100;
0001: q_out[9:0] = 0b1001100011;
0010: q_out[9:0] = 0b1011100100;
0011: q_out[9:0] = 0b1011100010;
0100: q_out[9:0] = 0b0101110001;
0101: q_out[9:0] = 0b0100011110;
0110: q_out[9:0] = 0b0110001110;
0111: q_out[9:0] = 0b0100111100;
1000: q_out[9:0] = 0b1011001100;
1001: q_out[9:0] = 0b0100111001;
1010: q_out[9:0] = 0b0110011100;
1011: q_out[9:0] = 0b1011000110;
1100: q_out[9:0] = 0b1010001110;
1101: q_out[9:0] = 0b1001110001;
1110: q_out[9:0] = 0b0101100011;
1111: q_out[9:0] = 0b1011000011;
endcase;
エンコード手順は、8/9変換のステージ1と、DC free性に鑑み9/10変換するステージ2から成る.
以下の定義表およびフローで完全に定義される.この表をverilog codingするのはかったるいが、先人の功績を引用できる.
SYNCはどうなっている?
変調方式が片付いたならば、次はSYNCがどうなっているのか?
ここで言うSYNCとはキャラクタ境界(BYTE境界)をどうやって決めるかであって、ビデオ信号のVSYNC,HSYNCのことではない.
通信の世界によくある変調方式では、特定の、ユニークなSYNCパターンが定義されるケースが通常である.だがHDMIにはユニークなSYNCパターンは定義されていないらしい.ではどうやってるのだろうか? HDMI規格書から引用した次の部分がHDMIのSYNC方式について記述しているようだ.
5.2.1.2 Character Synchronization
Video Data期間とData Island期間のキャラクタ(10bit)の遷移は5以下である.しかし、Control期間のキャラクタの遷移は7以上である.Control期間における遷移数が7以上のキャラクタこそが、デコーダのSYNCに用いられる.
これが言ってることをひら的に解釈すると次であろう.
1) 特定のSYNCパターンは存在しない
2) Control期間のキャラクタの全てはSYNCパターンである
3) エンコーダは、特定のSYNCを挿入する必要がない (通常のHSYNCを送信してりゃOK)
4) デコーダーは、Control期間の4パターンをSYNCとしてサーチすればよい.
1101010100、0010101011、0101010100、1010101011
5) 後述するガードバンドもSYNCとして利用できるのかもしれないプリアンブル・ガードバンド
電波通信じゃあるまいし、ご丁寧にclockも伝送されるHDMIにはプリアンブルやガードバンドは不要なんじゃね?と思うのだが、HDMI規格書には必要っぽいことが書かれている.
この連載の続きでは、プリアンブルなんか事実上不要なんじゃね?と思わせる部分が出てくるが、いまはさておく.
Video data期間とData Island期間の直前にはpreambleがある.つまり、ビデオとオーディオの前にpreambleがあるということ.
preambleパターンは具体的にどうなのか?
ひら理解では以下のようになる.
1) control期間の2/10変換の特定のキャラクタがpreambleであり、8キャラクタ連続させること
2) video data期間とData island期間でpreambleパターンが異なる
3) video data期間
a) channel0にはpreambleはなし =HSYNC,VSYNCの送信を滞らせないため
b) channel1のpreambleは、0101010100 ={1,0}={CTL0,CTL1}に該当
c) channel2のpreambleは、1101010100 ={0,0}={CTL2,CTL3}に該当
4) Data Island期間
a) channel0にはpreambleはなし =HSYNC,VSYNCの送信を滞らせないため
b) channel1のpreambleは、0101010100 ={1,0}={CTL0,CTL1}に該当
c) channel2のpreambleは、0101010100 ={1,0}={CTL2,CTL3}に該当
a) channel0にはpreambleはなし =HSYNC,VSYNCの送信を滞らせないため
b) channel1のpreambleは、0101010100 ={1,0}={CTL0,CTL1}に該当
c) channel2のpreambleは、0101010100 ={1,0}={CTL2,CTL3}に該当
次はガードバンドについて.
この連載の続きでは、ガードバンドなんか事実上不要なんじゃね?と思わせる部分が出てくるが、いまはさておく.
ひら理解では以下のようになる.
1) video data期間とdata island期間とchannelで仕様が異なる、()内はキャラクタ個数
a) video → Preamble(8) + GB(2) + Video 末尾のGBなし
b) data island → Preamble(8) + GB(2) + data island + GB(2)
c) ただし、channel0には原則としてPreambleもGBも無い =HSYNC,VSYNCを妨げぬため
d) ただし、channel0のvideoにはGBがある
2) video data期間のGBパターンはchannelにより異なるchannel0 1011001100
channel1 0100110011
channel2 1011001100
3) data island期間のGBパターンはchannelにより異なる
channel0 存在しない
channel1 0100110011
channel2: 0100110011
オーディオを転送しない場合はData Island期間は存在しないことになる.
後日示す応用例ではオーディオなしである.
パケットフォーマット
3種類のデータが存在するうち、packet化されているのは、Data islandだけである.
・Data Island期間 →audio用
・Control期間 →HSYNC/VSYNC
data islandの主たる用途はオーディオであるが、この連載ではオーディオは転送しないので、data islandを完全に削除することとする.よって、HDMI packetについての解説は全て割愛する.
data islandは、480x640のようなビデオフォーマット指定情報を載せたpacketを含むが、data islandをごっそり削除するとpacketでビデオフォーマット指定情報を送るのも取りやめになるわけだ.それでHDMIが動くの?という疑問が生じるであろう.
これが、動いてしまうらしい.液晶モニタのビデオフォーマット設定はHDMI packetを通じて行われるのではない.VGAと同じように、液晶モニタはVSYNC/HSYNC周期でビデオフォーマットを判断するらしい.意外に原始的なHDMIである.まぁFPGAを設計するには楽ではあるがな.
サポートされるビデオフォーマット
これは液晶モニタの仕様を読むしかないが、HDMI規格では、いくつか必須な画素モードを指定している.
この両方をサポートせい.
640x480p @ 59.94/60Hz
720x480p @ 59.94/60Hz
それに加えてHD対応モニタならば、次のどちらかをサポートせい.
1280x720p @ 59.94/60Hz
1920x1080i @ 59.94/60Hz
次に色信号規格としては、
RGB 4:4:4, YCBCR 4:2:2, and YCBCR 4:4:4
が有り得る中で、
RGB 4:4:4
は必須である. (筆者はこの4:4:4とか4:2:2の意味を判らずに30年以上経った)
カラーbit数は、8bitが標準で、optionで30/26/48がある.詳細は割愛.
----------
HDMI規格書からビデオについて抽出できる知識は以上でおしまいだと思う.しかし以上を知っていても、FPGAの設計に不明で困ることはいろいろある.
・VSYNC/HSYNCは1キャラクタ限りでいいの? NTSCみたいに連続させたり、とりわけNTSCのVSYNCみたいな特殊な打ち方を実装しなくちゃいけないの?
・オーディオ不要だからといってdata islandをごっそり削除したらどうなるの? (ビデオフォーマット指定とかも消えるが)
・Preamble/GBを削除したらどうなるの?
今宵はこれまでにしとうございます.
1へ 3へ
かしこ
人気ブログランキングへ
DDRなどのバス系はRD/WRなどの信号が元の意味からかけ離れて格闘ゲームのコマンド入力みたいになっているのに比べて、この辺のインターフェースは小刻みな進歩しかしてなくて密かに好意を持っておりました。
返信削除上上下下上上下下左右左右AB
削除はシューティングゲームの裏コマンドでそんなのがあった。
SDRAMは状態遷移図の人になってしまいました。
AV系のデジタル規格って、なんでみんなこんな感じなんだろうな。
返信削除その昔、"Red Book"(ご存じとは思いますが、CDの規格書です。当然英文)
と格闘してた頃があったんですが、「サブコード?なんだそれ?」
とかやってたのを思い出しました。
(まぁ、ここでいう「Data Island」みたいなもんですね・・・)
でも、"Red Book"は単なる規格書だから、「サーチ」とか「早送り」って
どうやるの?(当然やり方は書いてない)とか。まぁ実装の自由度を
妨げない考慮なんだろうけど、変わんないですね。
そういえば、HDMIで、Ethernetの伝送が出来るって聞いたことあるんですが、
此処で言う「Data Island期間」に、潜り込ませてるんですかね?
CDの規格書は「DISKはこんな仕様です」が書かれているので、再生機器の作法については書かれてないんだと思います.極論すると再生機器は逆回転させても自由みたいなとこがあります.
削除記録メディアは規格書+神様DISK+神様再生機の3点が揃えば万全ですが、たしかCDには規格書だけしかなかったような記憶です.
ちなみにVHSの3倍モードは肝心のトラッキング互換についての規格が存在しなかったらしいdeath.
今ではHDDとFLASHぐらいしかないので、外形寸法+interfaceについての規格しかないので随分と簡単ですね.
HDMI ethernetですが、「Data Island期間」ぐらいしか空きがなさそうですね.リニアPCM5.1chを伝送すると「Data Island期間」がそれなりに満杯近くなっちゃうらしいので、etherの帯域が圧迫されないかしらと心配になりますが.
削除ちなみにわたしが読んだのはHDMI 1.3という初期バージョンの規格書でしたので、etherは登場しませんでした.1.4とかだったらetherがいるのかもです.
HDMI1.4を読んでみましたら、DataIsland期間とは無縁っぽいです.
削除1.3では、14pin=予備、19pin=HOTPLUGにアサインされているところを、差動とし、Ethernet信号を流すようにしているみたい.行きも帰りも1本橋しかありません.