FC2カウンター FPGAの部屋 KV260 の PYNQ で自作のソーベル・フィルタを動作させる5
fc2ブログ

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

FPGAの部屋

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

KV260 の PYNQ で自作のソーベル・フィルタを動作させる5

RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する4”の続きでもあり、
KV260 の PYNQ で自作のソーベル・フィルタを動作させる4”の続きでもある。

RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する4”で、Vitis HLS 2021.2 で sobel_axis_RGB24 の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。今回は、”KV260 の PYNQ で自作のソーベル・フィルタを動作させる1”で作成した img_filt ブロック・デザインの sobel_axis_RGB24 IP を入れ替えて、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビット・ファイルと hwh ファイルを生成した。それらのファイルを Jupyter Notebook にアップロードして、確かめた所、ソーベル・フィルタが動作した。完成だ。

Vivado 2021.2 で作成済みの KV260 用の img_filt プロジェクトを示す。
sobel_axis_RGB24_13_220322.png

現在の img_filt ブロック・デザインを示す。
System_ILA が実装されている。
sobel_axis_RGB24_45_220329.png

sobel_axis_RGB24 IP を ”RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する4”で作った sobel_axis_RGB24 IP に入れ替えた。

論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
sobel_axis_RGB24_46_220329.png

問題無さそうだ。

hwh ファイルとビットファイルを Jupyter Notebook 上から削除して、今回作成したファイルを KV260 の Jupyter Notebook 上に作成した sobel_axis_RGB24 ディレクトリにアップロードし、名前を sobel に変更した。
sobel.ipynb ファイルを示す。

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay

sobel_filter = Overlay("./sobel.bit")

dma = sobel_filter.axi_dma_0
sobel = sobel_filter.sobel_axis_RGB24_0

image_path = "./test2.jpg"
original_image = Image.open(image_path)

canvas = plt.gcf()
size = canvas.get_size_inches()
canvas.set_size_inches(size*2)

width, height = original_image.size
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(6, 5));
_ = plt.imshow(original_image)

in_buffer = allocate(shape=(height, width, 3), 
                           dtype=np.uint8, cacheable=1)
out_buffer = allocate(shape=(height, width, 3), 
                            dtype=np.uint8, cacheable=1)

in_buffer[:] = np.array(original_image)

def run_kernel():
    dma.sendchannel.transfer(in_buffer)
    dma.recvchannel.transfer(out_buffer)    
    sobel.write(0x00,0x01) # start
    dma.sendchannel.wait()
    dma.recvchannel.wait()

print(height)
print(width)

sobel.register_map.row_size = height
sobel.register_map.col_size = width
sobel.register_map.function_r = 3 # SOBELwAxiDma

run_kernel()
sobel_image = Image.fromarray(out_buffer)

print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(6, 5));
_ = plt.imshow(sobel_image)

del in_buffer
del out_buffer


sobel.register_map.function_r の値のみ変更した。

これで、sobel.ipynb ファイルを実行したところ、ソーベル・フィルタが動作した。成功だ。良かったよ。。。
sobel_axis_RGB24_47_220329.png
sobel_axis_RGB24_48_220329.png
sobel_axis_RGB24_49_220329.png

次に

sobel.register_map.function_r = 3 # SOBELwAxiDma

sobel.register_map.function_r = 2 # ORG_IMGwAxiDma

に変更して、動作させてみたところ、元画像が表示できた。これも成功だ。
sobel_axis_RGB24_50_220329.png
  1. 2022年03月30日 04:29 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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