FC2カウンター FPGAの部屋 ZYBO_0_2のビットマップ・ディスプレイ・コントローラのバグフィックス2

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

FPGAの部屋

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

ZYBO_0_2のビットマップ・ディスプレイ・コントローラのバグフィックス2

”ZYBO_0_2のビットマップ・ディスプレイ・コントローラのバグフィックス”の続き。

今回は、右目カメラ画像に出ている黒いドットを消すことができた。

今までは、右目カメラ画像に黒いドットが点々と出てしまっていた。
stereo_calib_46_160301.jpg

これが、こうなった。黒いドットを取り除くことができた。
BMDC_bugfix_26_160306.jpg

原因はビットマップ・ディスプレイ・コントローラの出力の display_enable が 1 クロックずれていたことだった。
bitmap_disp_engine.v の display_enable はこう書いてあった。

    // display_enable 出力
    always @(posedge clk_disp) begin
        if (reset_disp)
            display_enable <= 1'b1;
        else begin
            if (h_count<H_ACTIVE_VIDEO && v_count<V_ACTIVE_VIDEO)
                display_enable <= 1'b1;
            else
                display_enable <= 1'b0;
        end
    end


それをこのように変更した。

    // display_enable 出力
    always @(posedge clk_disp) begin
        if (reset_disp==1'b1 || cs_rdg==idle_rdg || cs_rdg==init_full_mode)
            de <= 1'b0;
        else begin
            if (h_count<H_ACTIVE_VIDEO && v_count<V_ACTIVE_VIDEO)
                de <= 1'b1;
            else
                de <= 1'b0;
        end
    end
    always @(posedge clk_disp) begin
        if(reset_disp==1'b1 || cs_rdg==idle_rdg || cs_rdg==init_full_mode) begin
            de_b1 <= 1'b0;
        end begin
            de_b1 <= de;
        end
    end
    assign display_enable = de_b1;


リセット条件はFIFOが最初にピクセル・データで満タンになるまでは、display_enable を出力しないというように変更したが、あまり影響は無いと思う。
データが有効な期間と display_enable が有効だと示す位置が1クロックずれていたようだ。これで、綺麗な右目カメラ画像を確保することができた。

(2016/03/07:追記) display_enable が1ビットずれていてこのように途中に黒いドットが見えるか?ということは、本来SVGA 解像度の画像をHDMI 送受信IP がSVGA 解像度に対応していない様です(マニュアルには対応していると書いてありますが、いくらやっても送受信できません)。そこで、SVGA 解像度のフレームバッファをXGA 解像度のフレームバッファとしてHDMIで送受信して、SVGA 画像としてフレームバッファを読みだしているからです。つまり、黒いドットはXGA 解像度の 1024 ピクセルごとに発生しています。XGA 解像度で見ると端にいるので、ディスプレイで見ても分かりません。ところが、SVGA 解像度で表示しているので、途中に見えて気になるということになります。
  1. 2016年03月06日 04:06 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:2

コメント

黒点解消おめでとうございます。

ブラウン管時代の垂直&水平同期やブランク期間なんて、今の液晶ディスプレイには
必要ないし高速シリアルバスで必要なデータだけ送っておいて、あとは自分で並べ
替えて表示してねが一番簡単なので、IPの設計思想が面ではなく線で考えられている
んでしょうか。転送単位の1024は、XGAというよりは単に区切りのよい値を使っている
だけのような気がしてきます。

水平ブランク期間にデバッグ用の文字を入れておいて、同期信号用のボリュームを
回すと簡単に今の状態がわかるなんてことは液晶ディスプレイではできないしw
  1. 2016/03/07(月) 10:24:40 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

承認待ちコメント

このコメントは管理者の承認待ちです
  1. 2016/03/07(月) 12:48:50 |
  2. |
  3. #
  4. [ 編集 ]

コメントの投稿


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

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