FC2カウンター FPGAの部屋 HLS ビデオライブラリの hls::Window のVivado HLS 2015.4 以前とその後での変更点2(メモリ・ウインドウ・バッファー)

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

FPGAの部屋

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

HLS ビデオライブラリの hls::Window のVivado HLS 2015.4 以前とその後での変更点2(メモリ・ウインドウ・バッファー)

HLS ビデオライブラリの hls::LineBuffer のVivado HLS 2015.4 以前とその後での変更点”の続き。

hls::LineBuffer と同様に、hls::Window も行のインデックスとクラス・メソッドが変更になっているので紹介する。
hls::LineBuffer と同様に、hls::Window もガボール・フィルタでカーネルとして、重みとの演算に使用されている。

Vivado HLS 2015.4 以前のメモリ・ウインドウのデータ セットを引用する。”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2015.4) 2015 年 11 月 24 日”の”メモリ・ウインドウ・バッファー”の 194 ページの”表 2‐10 : メモリ ウ ィ ン ド ウ例のデー タ セッ ト”を引用する。
gabor_filter_lh2_3_170725.png

やはり、行が行2 から始まって、行1 、行0 とインデックスが減っているのが分かるだろうか?列は列0 から始まって増えていっている。メモリ・ウインドウを更新する際には、shift_left() メソッドでメモリ・ウインドウを1ビット左シフトし、insert()メソッドで、インデック0 以外にメモリ・ライン・バッファーの値を入力し、インデック0 には、現在の画像ピクセルの値を入力した。つまり、通常と逆のインデックスになっている。ソースコードを示す。

            mbuf.shift_left();    // mbuf の列を1ビット左シフト
            for(i=ARRAY_SIZE-2; i>=0; --i){
                mbuf.insert(linebuf(i,x), i+1, ARRAY_SIZE-1);
            }
            gray_pix = conv_rgb2y_soft(pix.data);
            mbuf.insert(gray_pix, 0, ARRAY_SIZE-1);


前回同様に、Vivado HLS 2016.1 からは、この行のインデックスが通常と同様にインデックス 0 からとなっている。
下に、”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2017.1) 2017 年 4 月 5 日”の”HLS ビデオライブラリ”の”メモリ ウィンドウ バッファー ”の221 ページの”2‐9: メモリ ウ ィ ン ド ウ例のデー タ セット”を引用する。
gabor_filter_lh2_4_170725.png

行のインデックスが列のインデックス同様に 0 から始まっているのが分かると思う。メモリ・ウインドウ・バッファーのメソッドも更新されている。メモリ・ウインドウ・バッファーのメソッドを示す。

• shift_pixels_up()
• shift_pixels_down()
• shift_pixels_left()
• shift_pixels_right()
• insert_pixel(value,row,colum)
• insert_row()
• insert_bottom_row()
• insert_top_row()
• insert_col()
• insert_left_col()
• insert_right_col()
• getval(row, column)


やはり、今まで使用していたshifft_left(), insert() が無くなっている。前回同様、互換性確保のためにshifft_left(), insert() メソッドなどの、Vivado HLS 2015.4 以前のコードも使用することができた。Vivado HLS 2016.1 以降の新しいメソッドを使用して、同様にメモリ・ウインドウの処理をする場合には、shift_pixels_left() と insert_pixel() を使用する。
新しいメソッドを使用した上と同様のコードを示す。

            mbuf.shift_pixels_left();    // mbuf の列を1ビット左シフト
            for(i=0; i<ARRAY_SIZE-1; i++){
                mbuf.insert_pixel(linebuf.getval(i,x), i, ARRAY_SIZE-1);
            }
            gray_pix = conv_rgb2y(pix.data);
            mbuf.insert_pixel(gray_pix, ARRAY_SIZE-1, ARRAY_SIZE-1);

  1. 2017年07月26日 05:00 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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