前回、キャラクタは表示できても色がおかしかった。その状況から、RGB - YCbCr変換がおかしいのか?と疑ったが、変換はおかしくないようだった。
その次に、YUV変換なのかな?と思っていたが、ツイッターでY, Cb,Crの値を教えていただいたので、現在のRGB - YCbCr変換はおかしくないようだということがわかった。
次に
ADV7511 Programming Guid Rev G のTable 18 YCbCr 4:2:2 Formats (24, 20, or 16 bits) Input Data Mapping: を見ると、現在はStyle 2, 16bit(赤の四角で囲った部分) で使用しているが、24bit, 20bit はCb, Crの方が先でYが後なのに、16bitだけYが先になっている。どうも怪しい。この図で行くと16bit の部分もCb, CrとYというフォーマットじゃないだろうか?と思った。つまり、Style 3(ピンクで囲った部分)にする必要があるのでは?と思った。下にTable 18を引用させていただく。

(こちらの回路では、YとCb, Crを連結してhdmi_data[15:0] に出力している)
そこで、Style 3に設定した。具体的にはADV7511のレジスタ設定の0x16番地を0xb5 から0xbd に変更した。”
ZedBoardでHDMI出力7(ADV7511のレジスタ設定1)”を参照。
iic_write(0x39, 0x16, 0xbd); // [3:2] -> Input Style => 11 = style 3
その他の設定はリファレンス・デザインの通りにした。そうすると、ちゃんとした色で出力できた。マニュアルが間違っていたようだ。

良かった。嬉しいです。
リファレンス・デザインはどうやって出力しているか見るために、Verilog HDLコードを見てみたが、やはり、Cb, Crが上位ビットでYが下位ビットだった。本当に人騒がせなマニュアルだ。(怒怒怒)
リファレンス・デザインでは、cf_ss_444to422.v の123行目~134行目に、YCbCr422の出力部分がある。
次にDVIでも出力できるのか?を探るために、HDMIからDVIにモードを変更してみた。
iic_write(0x39, 0xaf, 0x04); // [1] -> HDMI/DVI Mode Select => 0 = DVI Mode
// iic_write(0x39, 0xaf, 0x06); // [1] -> HDMI/DVI Mode Select => 1 = HDMI Mode
そうすると、また違ったように色がおかしくなってしまった。

ADV7511 Programming Guid Rev G の19ページ、4.2.2 HDMI DVI Selection を見ると、” DVI only supports the RGB color space”だそうだ。YCbCrはサポート無しとのことだった。もう一度、HDMIモードに変更した。
ZedBoardでVGAサイズの画像をHDMI出力することが出来た。
- 2012年11月27日 04:22 |
- ZedBoard
-
| トラックバック:0
-
| コメント:2
zedboardを使っているのですが、よろしければ動作するサンプルプロジェクトを頂けないでしょうか?
- 2023/08/16(水) 17:29:11 |
- URL |
- 北村雅行 #-
- [ 編集 ]
Zedboard用は古いので、もう残っていません。
記事を見ながら、自分で実装してみてください。
- 2023/08/17(木) 04:02:19 |
- URL |
- marsee #f1oWVgn2
- [ 編集 ]