2016年10月17日月曜日

FPGAでHDMIの液晶モニタに画を映す (2) HDMI規格

HDMIの規格書から要点を抜き出して、ひら的に解説してみる.

注意: 情報に間違いがあってもオレは知らん.

図表はクリックすると拡大できると思う.


接続関係・データレート
下図における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]     同期信号など

これらの3種類の性質の異なる信号がHDMIケーブルを流れる.3つが流れるとは、混ざって流れるのか? 時分割されて流れるのか?

その答えは時分割である.
下図は、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;

つぎに、Data Island期間の4/10変換.
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;

Video Data期間の8/10変換は少々厄介である.変換一覧表は存在しない.
エンコード手順は、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}に該当

次はガードバンドについて.
この連載の続きでは、ガードバンドなんか事実上不要なんじゃね?と思わせる部分が出てくるが、いまはさておく.

ひら理解では以下のようになる.
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だけである.
・Video data期間       →RGB用
・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へ

かしこ


人気ブログランキングへ

6 件のコメント:

  1. DDRなどのバス系はRD/WRなどの信号が元の意味からかけ離れて格闘ゲームのコマンド入力みたいになっているのに比べて、この辺のインターフェースは小刻みな進歩しかしてなくて密かに好意を持っておりました。

    返信削除
    返信
    1. 上上下下上上下下左右左右AB
      はシューティングゲームの裏コマンドでそんなのがあった。
      SDRAMは状態遷移図の人になってしまいました。

      削除
  2. いつもの通りすがりの人2016年10月20日 4:29

    AV系のデジタル規格って、なんでみんなこんな感じなんだろうな。

    その昔、"Red Book"(ご存じとは思いますが、CDの規格書です。当然英文)
    と格闘してた頃があったんですが、「サブコード?なんだそれ?」
    とかやってたのを思い出しました。
    (まぁ、ここでいう「Data Island」みたいなもんですね・・・)

    でも、"Red Book"は単なる規格書だから、「サーチ」とか「早送り」って
    どうやるの?(当然やり方は書いてない)とか。まぁ実装の自由度を
    妨げない考慮なんだろうけど、変わんないですね。

    そういえば、HDMIで、Ethernetの伝送が出来るって聞いたことあるんですが、
    此処で言う「Data Island期間」に、潜り込ませてるんですかね?

    返信削除
    返信
    1. CDの規格書は「DISKはこんな仕様です」が書かれているので、再生機器の作法については書かれてないんだと思います.極論すると再生機器は逆回転させても自由みたいなとこがあります.

      記録メディアは規格書+神様DISK+神様再生機の3点が揃えば万全ですが、たしかCDには規格書だけしかなかったような記憶です.

      ちなみにVHSの3倍モードは肝心のトラッキング互換についての規格が存在しなかったらしいdeath.

      今ではHDDとFLASHぐらいしかないので、外形寸法+interfaceについての規格しかないので随分と簡単ですね.

      削除
    2. HDMI ethernetですが、「Data Island期間」ぐらいしか空きがなさそうですね.リニアPCM5.1chを伝送すると「Data Island期間」がそれなりに満杯近くなっちゃうらしいので、etherの帯域が圧迫されないかしらと心配になりますが.

      ちなみにわたしが読んだのはHDMI 1.3という初期バージョンの規格書でしたので、etherは登場しませんでした.1.4とかだったらetherがいるのかもです.

      削除
    3. HDMI1.4を読んでみましたら、DataIsland期間とは無縁っぽいです.

      1.3では、14pin=予備、19pin=HOTPLUGにアサインされているところを、差動とし、Ethernet信号を流すようにしているみたい.行きも帰りも1本橋しかありません.

      削除