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

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

FPGAの部屋

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

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

KV260 の PYNQ で自作のソーベル・フィルタを動作させる1”の続き。

前回は、RGB 24 ビット・データ入出力対応のソーベル・フィルタ IP を使用して、Vivado 2021.2 で img_filtプロジェクトを作成し、img_filt ブロック・デザインを作成した。そして、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを作成した。今回は、ビットファイルと hwh ファイルを KV260 の Jupyter Notebook にアップロードし、sobel.ipynb を作成して、動作を確認したが、DMA buffer サイズが足りないというエラーになった。

前回作成した hwh ファイルとビットファイルを KV260 の Jupyter Notebook 上に作成した sobel_axis_RGB24 ディレクトリにコピーした。なお、2つのファイルともに名前を sobel に変更した。
Jupyter Notebook で sobel.ipynb ファイルを作成した。
画像ファイルの test2.jpg をアップロードした。
sobel_axis_RGB24_24_220323.png

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 = 1

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 を実行したが、DMA buffer サイズが足りないというエラーになった。
sobel_axis_RGB24_24_220323.png
sobel_axis_RGB24_25_220323.png
sobel_axis_RGB24_26_220323.png

どうしてだろうか? 同じようなコードで resizer_pl.ipynb は動いているのだけど、axi_dma の設定が違うのかな?
resizer_pl.ipynb で使っている Vivado のプロジェクトが見たい。何処かにあるかな?
  1. 2022年03月23日 04:56 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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