FC2カウンター FPGAの部屋 2016年03月06日
FC2ブログ

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