FC2カウンター FPGAの部屋 2009年11月09日
FC2ブログ

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

FPGAの部屋

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

画像のエッジ検出5(2X2の画素の演算でやってみた)

画像のエッジ検出4(実機でテスト)”の最後に書いた2X2の画素の演算でやってみた。
-------
| -1| -1|
-------
| -1| 3|
-------
上の演算でやってみるために、VHDLコードを書きなおした。演算部分を下に示す。

    -- 1クロック前のBRAMの出力と現在の値の1クロック前の値を保持
    process(clk) begin
        if clk'event and clk='1' then
            if reset='1' then
                bram_data_1d <= (others => '0');
                y_data_1d <= (others => '0');
            else
                if r_w='1' then
                    y_data_1d <= cam_ydata_2d;
                    bram_data_1d <= bram_data;
                end if;
            end if;
        end if;
    end process;
    
    diff_cal_val <= "011"*(cam_ydata_2d) - ("000"&bram_data_1d) - ("000"&bram_data) - ("000"&y_data_1d);
    -- マトリクスの絶対値
    process(diff_cal_val) begin
        if diff_cal_val(10)='1' then -- 負の値
            abs_diff_cal_val <= not(diff_cal_val-1);
        else -- 正の数
            abs_diff_cal_val <= diff_cal_val;
        end if;
    end process;
    ydata_out <= x"FF" when (abs_diff_cal_val(10) or abs_diff_cal_val(9) or abs_diff_cal_val(8))='1' else abs_diff_cal_val(7 downto 0);    


これでシミュレーションで確かめてみたが、演算はあっているようだ。
ちなみに最初は飽和演算を入れていなかったのだが、”Sobel Core Module Verilog Code”を参考にさせていただいた。
インプリメントしてディスプレイ出力を見てみた。下の写真。
edge_detect_10_091109.jpg

うまくいかない。こうなったら3X3の画素の演算をインプリメントしてみようと思う。

(2009/11/13 追記)
BRAMによるダブルバッファリングのアドレスのコードにバグが見つかりました。バグを修正後、正常にエッジが表示されるようになりました。結果を下図に示します。
edge_detect_14_091113.jpg
  1. 2009年11月09日 21:41 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:4

ウッドデッキ作り1

昨日はウッドデッキを作り始めた。
グランステージで防腐処理済み2X4X8F、70本を注文したのだが、届いたのは防腐処理済み2X4X10Fだった。同じ値段でこれでも良いか?という話だったので承諾。
昨日の午前中、グランステージで軽トラックを借りて家まで持ってきた。
午後から、家で余っているレンガを使って、土台作り、低いところには土を追加した。まあ大体レベルがあっていればOKとした。その上に横に2X4を並べて、縦に2X4を張っていく予定だ。
台形の枠は大体出来たので、4mm の隙間を空けて2X4を張って行って、後で長い部分はカットする。
wood_deck_1_091109.jpg
  1. 2009年11月09日 06:18 |
  2. 木工
  3. | トラックバック:0
  4. | コメント:0