FPGAでHDMI出力(Full-HD):その②エンコード/パラシリ変換のつづき
#UCFファイル
ATLYSボードの構成に合わせてピンの設定を以下のようにします。
pin.ucf
NET "o_HDMI_CLK_p" LOC = "B6" |IOSTANDARD = TMDS_33 ; # Clock
NET "o_HDMI_CLK_n" LOC = "A6" |IOSTANDARD = TMDS_33 ;
NET "o_HDMI_RED_p" LOC = "B8" |IOSTANDARD = TMDS_33 ; # Red
NET "o_HDMI_RED_n" LOC = "A8" |IOSTANDARD = TMDS_33 ;
NET "o_HDMI_GRN_p" LOC = "C7" |IOSTANDARD = TMDS_33 ; # Green
NET "o_HDMI_GRN_n" LOC = "A7" |IOSTANDARD = TMDS_33 ;
NET "o_HDMI_BLU_p" LOC = "D8" |IOSTANDARD = TMDS_33 ; # Blue
NET "o_HDMI_BLU_n" LOC = "C8" |IOSTANDARD = TMDS_33 ;
動作確認
実機で動作確認し、Full-HDサイズで画像が映ることが確認できました。
ここまでピクセルクロック=148.5MHzとして説明してきましたが、148.5MHzだとデータ化けがあるのか画像のちらつきがありました。
最終的には140MHzにしています。
写真では分かりづらいですが、黒い十字はななめに移動しています。
1080pの30fps対応
ピクセルクロック周波数を30fps対応の74.25MHzにすると、30fpsで画像表示できます。
ただし、パソコン用のモニタだと30fpsに対応していない機種が多いので注意ください。
(テレビは映る場合が多いです。)
#まとめ
SPARTAN6 FPGAでHDMI出力することができました。
今後はカメラ画像を取り込んでHDMIから出力してみようかと思っています。
今回作成したモジュールですが、SERDESE部分はSpartan6用のハードマクロを使用しておりますので、
他のデバイスを使用しているかたは、デバイスに合わせて直す必要があります。