FC2カウンター FPGAの部屋 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路27(VIOで8ビットのデータを取得)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路27(VIOで8ビットのデータを取得)

昨日、Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路をFPGA-CAFEに持って行って、デモしてきた。画質は悪いが、ある程度、評価はしてもらえたかと思う。更には、Make Tokyou Meeting 06でデモ出来れば?と思っている。

現在は、DE0用にSCCBインターフェース回路をVerilogに変換中だが、Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路でも、現在は4ビット品質の画像しかディスプレイに出力していないので、8ビットの品質を見るためにVIOでYUVのデータを取得して、BMPファイルに変換して、画質を見てみた。(”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路22(ソフトでYUV-RGB変換)”参照)
前回のChipScopeのVIOを追加したプロジェクトを改造して、SCCBインターフェース回路を入れた。そして、tclのデータ収集スクリプトを動かして、YUVのデータを取得した。それを、YUV-RGB変換、BMPフォーマット変換ソフトにかけて、BMPファイルにした。そうしたところ、黒のところに緑が出てしまうことがあって、おかしかった。そういえば、前回も黒の縁に緑が出ていた。
CamDispCntrler_DDR2_pict_14_100903.jpg

前回のソフトウェアをよく見てみたところ、YUV-RGB変換のところで値がマイナスになった時のアンダーフロー対応と256よりも値が大きくなった時の飽和処理がなかった事に気がついた。これを修正したCコードを下に示す。

        for (j=0; j<4; j++){
            r_int = (Y[j]<<8) + V[j]*359 - 45952;
            g_int = (Y[j]<<8) - V[j]*183 - U[j]*88 + 34688;
            b_int = (Y[j]<<8) + U[j]*454 - 58112;
            if (r_int <0)
                red = 0;
            else if (((r_int)>>8)>=256)
                red = 0xff;
            else
                red = (r_int)>>8;

            if (g_int<0)
                green = 0;
            else if (((g_int)>>8)>=256)
                green = 0xff;
            else
                green = (g_int)>>8;

            if (b_int<0)
                blue = 0;
            else if (((b_int)>>8)>=256)
                blue = 0xff;
            else
                blue = (b_int)>>8;

            cam_red[(int)(i/640)][(int)((i%640)+j)] = red;
            cam_green[(int)(i/640)][(int)((i%640)+j)]  = green;
            cam_blue[(int)(i/640)][(int)((i%640)+j)] = blue;
        }


これで、再度、以前の取得画像をBMPファイルに変換した。
CamDispCntrler_DDR2_pict_22_100920.jpg

黒のエッジに入っている緑色は無くなった。やはりアンダーフローだったのではないか?と思う。
次に今回取得した画像をBMPファイルに変換した。
CamDispCntrler_DDR2_pict_23_100920.jpg

やはり色は綺麗に見えている。だが、右下のフローリングの模様がブロックノイズぽい。実際に画面に出力してみないとわからないと思う。やはり、DACかDVIトランスミッタのICを付けてみたい。。。

  1. 2010年09月20日 04:14 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:9

コメント

まいど!
Spartan3AのIOBってTMDS(DVIのI/O規格)もサポートしてますよね。
頑張れば、DVI Encoder & TMDS TransmitterもSpartan3A Starter Kitで実現できるんじゃないですか?
DVIの規格は<http://www.ddwg.org/lib/dvi_10.pdf>で入手できますよ。(Encode Algorithmの記述で???な部分がありますが。。)
あと、XilinxのXAPP460も参考になるかも知れません。
  1. 2010/09/20(月) 14:41:24 |
  2. URL |
  3. S #-
  4. [ 編集 ]

Sさん、こんにちは。DVIの規格書を教えていただいて、ありがとうございました。SさんはTMDSで出していますか?
確かにおもしろそうですが、家にオシロも持っていないですし、時間がかかり過ぎてしまうと思います。DVIをつなぐのでしたら、DVIトランスミッタを付けたいと思います。(VGAでも見られますし)CH7301Cが買えるのでしたら、一番良いのですが。。。
  1. 2010/09/20(月) 16:31:43 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

>SさんはTMDSで出していますか?
現在挑戦中です。。。正確には本業の方が忙しくなったためちょっと中断してました。
簡単なキャラジェネ+カラーバー発生器+DVI Encoder + TMDS Transmitterという構成の物を作っていて、
RTLは一応完成しているのですが、差動I/F部をLVDSと思い込んでいて別のボード用に実装していました。
TMDSをサポートしているFPGAってそんなにないんですよね。私が調べた限りではSpartan3A位ではないでしょうか? 運良く所有しているSpartan3 Starter KitのFPGAはSpartan3Aですので、コイツに実装しなおそうとしているところです。。。 だらだらと書いてしまってすみません。
  1. 2010/09/20(月) 18:20:48 |
  2. URL |
  3. S #-
  4. [ 編集 ]

Sさん、こんにちは。
凄いですね。うまく行ったら、ぜひブログとかに書いていただいて、教えていただければと思います。
  1. 2010/09/21(火) 03:31:08 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

こんにちは。
DVI encoderうまく行きましたよ。
難易度はそれほど高くありませんでした。
同じデータをVGAとDVIに出してディスプレイで見比べましたが、
やはりDVIの方が画質は良いですね。
blogやhome pageはまだ持っていないので携帯で動画を撮影して
youtubeにuploadしました。
http://www.youtube.com/watch?v=tiCbSGyDRlk
低解像度のため見づらいですが、何とか感じだけでも把握していただけるのではないでしょうか?
現状VGAサイズです。SVGAサイズまで出来たらRTLの公開を検討して見たいと思います。
  1. 2010/09/27(月) 20:35:22 |
  2. URL |
  3. S #-
  4. [ 編集 ]

おめでとうございます。
RTLの公開を楽しみにしています。
  1. 2010/09/27(月) 21:29:38 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

こんばんわ。
XGA(1024x768)の解像度で動作するようになりましたので、RTLを公開することにしました。どこに置くか迷ったのですが、多少場違いの感がありますが、<http://sourceforge.net/projects/dvienc/>にしました。
ご興味がありましたら、ダウンロードして下さい。
では。
  1. 2010/09/29(水) 22:26:13 |
  2. URL |
  3. S #-
  4. [ 編集 ]

Sさん、こんにちは。
ダウンロードさせていただきました。
凄いですね。一部、325MHz動作ですか?参考にさせていただきたいと思います。
  1. 2010/09/30(木) 03:47:37 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
  1. 2010/10/05(火) 17:51:44 |
  2. |
  3. #
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1592-d656e577
この記事にトラックバックする(FC2ブログユーザー)