FC2カウンター FPGAの部屋 ZYBO Z7-20 で PYNQ を使用する5(ソーベル・フィルタを動作させる2)
fc2ブログ

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

FPGAの部屋

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

ZYBO Z7-20 で PYNQ を使用する5(ソーベル・フィルタを動作させる2)

ZYBO Z7-20 で PYNQ を使用する4(ソーベル・フィルタを動作させる1)”の続き。

前回は、Vivado 2022.1 で ZYBO Z7-20 用の img_filt プロジェクトを作成し、前回作成した sobel_axis_RGB24 IP を使用して、ブロック・デザインを作成して、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、前回作成された bit ファイルと hwh ファイル、そして画像ファイルを ZYBO Z7-20 の PYNQ Linux にアップロードする。そして、Jupyter Notebook で sobel.ipynb を作成して実行した。結果としてソーベル・フィルタを動作させることができた。

Ubuntu 18.04 が動作するパソコン上で FileZilla を起動して、ZYBO Z7-20 の PYNQ Linux にアップロードする。
/my_project/sobel_filter ディレクトリを作成した。
img_filt/img_filt.runs/impl_1/img_filt_wrapper.bit をアップロードした。
ZYBO_Z7_PYNQ_40_220722.png

img_filt/img_filt.gen/sources_1/bd/img_filt/hw_handoff/img_filt.hwh をアップロードした。
ZYBO_Z7_PYNQ_41_220722.png

画像ファイルの test2.jpg をアップロードした。
ZYBO_Z7_PYNQ_42_220722.png

ZYBO Z7-20 の PYNQ Linux で Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

Ubuntu 18.04 のホスト・パソコンで、http://192.168.3.33:9090 を Chrome で表示した。
/my_project/sobel_filter ディレクトリに移動して、New -> Python 3 を選択して、Python 3 の新規ノートブック・ファイルを作成した。
ZYBO_Z7_PYNQ_43_220722.png

ホスト・パソコンの FileZilla で bit ファイルと hwh ファイルの名前を sobel に変更した。
ZYBO_Z7_PYNQ_44_220722.png

新規作成したノートブック・ファイルの名前を sobel.ipynb に変更した。
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.ipynb を実行したところ、ソーベル・フィルタの処理結果を見ることができた。成功だ。。。
ZYBO_Z7_PYNQ_45_220722.png

ZYBO_Z7_PYNQ_46_220722.png

ZYBO_Z7_PYNQ_47_220722.png
  1. 2022年07月22日 05:02 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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