FC2カウンター FPGAの部屋 YUV-RGB変換5(インプリメントして基板にコンフィグ)
FC2ブログ

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

FPGAの部屋

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

YUV-RGB変換5(インプリメントして基板にコンフィグ)

YUV-RGB変換4(シミュレーション)”の続き。
前回、シミュレーションが終了したので、インプリメントするためにUCFに2つ目のSRAMのIOパッドを加えてインプリメントした。何回かやって成功した。
次は基板にコンフィグして動作するかどうか確かめる。うまく行けばYUV-RGB変換したあとのカラーの画像が見れるはず。。。
これから基板にダウンロードする。下が基板の写真。
YUV_RGB_conv_6_091209.jpg

ダウンロードケーブルを接続して、iMPACTからダウンロードした。液晶ディスプレイを見ると、同期範囲外で同期が外れている。いかにもおかしい、ということでオシロで同期信号を見てみることにした。
まずは HSYNCから。HSYNCの出力波形を下に示す。
YUV_RGB_conv_7_091209.jpg

VGAの信号フォーマットを下に示すが、32usec のはずが出力されているのは16usec で、半分の周期、倍の周波数だった。これじゃ、同期範囲外ですね。
#私もオシロを使っているので、HDLコード屋からハード屋さんに昇格かな?
YUV_RGB_conv_3_091128.png

念のために VSYNCも波形を見てみた。
YUV_RGB_conv_8_091209.jpg

やはり、8.32msec で半分の周期。これは同期が取れない。
次にどこで2倍の周波数になっているのかを検証してみることにした。
クロック関係のブロック図を下に示す。
Camera_Disp_6_090921.png

次にクロック関係のVHDLコードを下に示す。

    DCM_module_25MHz_inst : DCM_module_25MHz port map(
        clk50MHz_in => clk,
        clk50_out => clk50,
        cam_clk_out => cam_clk_node,
        pclk_in => cam_pclk,
        mclk_out => mclk,
        cam_clk_locked => cam_clk_locked,
        mclk_locked => mclk_locked
    );
    reset <= not mclk_locked;
    
    -- CMOSカメラ用クロックの生成
    n_cam_clk_node <= not cam_clk_node;
    cam_clk_reset <= not cam_clk_locked;
    ODDR2_for_cam_clk : ODDR2 generic map(
        SRTYPE => "ASYNC"
    ) port map(
        Q => cam_clk,
        C0 => cam_clk_node,
        C1 => n_cam_clk_node,
        CE => '1',
        D0 => '1',
        D1 => '0',
        R => cam_clk_reset,
        S => '0'
    );



上の図のDCM1/2 の24MHzクロック出力が cam_clk_nodeだ。これはODDR2_for_cam_clk のODDR2で クロッキングされてcam_clk としてCMOSカメラに供給されている。CMOSカメラからはPCLKが出力され、それが DCM_module_25MHz_instのpclk_in (図で言うとDCM1/1)に入って、mclk_out から mclkとして出力され、すべてのモジュールに供給されている。
まずは、mclkをコネクタに出力して、オシロで見てみることにした。その波形を下に示す。
YUV_RGB_conv_9_091209.jpg

ひえ~、50MHzでした。これじゃ当たり前。予定の2倍の周波数です。念のために、cam_clk_nodeをコネクタに出力して見てみた。(下図参照)
YUV_RGB_conv_10_091209.jpg

これは正常。するとCMOSカメラでクロックが2倍になっているんだな?
そこで、もう一度、OV7725のデータシートを確認。なんだ、デフォルト値が書いてあるんじゃないですか。。。見落としていました。申し訳ない。。。
気を取り直して、デフォルト値でどこか悪いというか、そういう設定になっているかを検証。
そうすると、アドレス11の CLKRCのデフォルト値が 80だった。bit6が外部クロックをダイレクトに使用するというビットでこれは立っていない。bit5 - 0 が内部クロック・プリスケーラで、内部クロック = 入力クロック/(bit5-0 + 1)/2 だそうだ。/2 がどこにかかるか分からないが、入力クロック/((bit5-0 + 1)/2) だとしたら、現在の現象と合っている。
解決策としては、今まで入れていた25MHzのクロックを半分にして、12.5MHzをCMOSカメラに供給することにした。

しかし、やはりSCCBレジスタを設定するI2Cのモジュールを作成することにしたい。YUV-RGB変換が終了したら作ろうと思う。それでもわからないフォーマットがあるんだけど。。。
  1. 2009年12月09日 05:44 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:6

コメント

> #私もオシロを使っているので、HDLコード屋からハード屋さんに昇格かな?
これって元ネタは某所ですか?
  1. 2009/12/09(水) 10:22:14 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

windyさん、お久しぶりです。

そうです。某所です。
  1. 2009/12/09(水) 13:05:28 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

お久しぶりです。覚えていて下さってうれしいです。

実はだけ屋ネタを最初に投下したの僕なんです
自分へのイマシメのつもりだったんですが、maeseeさんほどの方が反応されてしまうとは恐縮です…
  1. 2009/12/09(水) 18:34:09 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

>実はだけ屋ネタを最初に投下したの僕なんです
そうなんですか?某掲示板は、ためになることが書いてあることがあるので、よく見ています。書き込みはしないで見ているだけですけど。。。
自分を振り返ってもChipscopeやSignalTapばかりでオシロを見ていないなと思いました。今回は、それらではトラブルシュートできずに、オシロの出番だったので、いい機会でした。
  1. 2009/12/09(水) 20:19:34 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

僕もついさっき自作UARTモジュールの検証にロジアナを使ったので、HDLだけ屋から波形も見られるHDL屋にレベルアップしました
  1. 2009/12/10(木) 12:22:03 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

windyさん、おめでとうございます。
ロジアナもたまに使ってやらないとすねてしまうかもしれませんし、使ってやるのが良いのでは?と思います。
#本当に何年も電気を入れていないと、コンデンサの容量が抜けそう。。。
  1. 2009/12/10(木) 18:22:00 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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