FC2カウンター FPGAの部屋 ZUBoard 1CG の PYNQ v3.0.1 で自作のガウシアン・フィルタ、メディアン・フィルタとソーベル・フィルタを動作させる4
fc2ブログ

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

FPGAの部屋

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

ZUBoard 1CG の PYNQ v3.0.1 で自作のガウシアン・フィルタ、メディアン・フィルタとソーベル・フィルタを動作させる4

ZUBoard 1CG の PYNQ v3.0.1 で自作のガウシアン・フィルタ、メディアン・フィルタとソーベル・フィルタを動作させる3”の続き。

前回は、生成されたビット・ファイルと hwh ファイルを ZUBoard 1CG 上の Jupyter Notebook にアップロードし、i3filters.ipynb ファイルを作成して、メディアン・フィルタとソーベル・フィルタの動作を確認したところ動作した。
しかし、”AXI4-Stream Data Width Converter のバイト・レーン変換を確認する4”で、3 バイト幅の AXI4-Stream インターフェースの色のフィールドが MSB から BGR であることがわかった。今までは RGB のつもりで各フィルタの IP を作成していた。今回は、色のフィールドの修正のため AXI4-Stream Subset Converter を 2 個、i3filters ブロック・デザインに追加して、バイト・レーンの変換を行った。その後、論理合成、インプリメンテーション、ビットストリームの生成を行って、ZUBoard 1CG の PYNQ Linux にアップロードして、動作を確認したところ問題なく動作した。

Vivado 2023.1 の i3fliters プロジェクトで、i3filters ブロック・デザインに AXI4-Stream Subset Converter を 2 個追加した。
XI4-Stream Subset Converter の設定は共通で、Slave Interface と Master Interface の TDATA width (bytes) を 3 に設定した。
TDATA Remap String を tdata[7:0], tdata[15:8], tdata[23:16] に設定した。つまり 1番めのバイト・レーンと 3 番めのバイト・レーンを入れ替えた。
zub1cg_pynq_228_230902.png

完成した i3filters ブロック・デザインを示す。
zub1cg_pynq_229_230902.png

Address Editor 画面を示す。
zub1cg_pynq_230_230902.png

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

ZUBoard 1CG の PYNQ LInux の ~/jupter_notebooks/example/i3filters ディレクトリの i3filters.bit と i3filters.hwh ファイルを Jupyter Notebook 画面から消去した。

以下のファイルを FileZilla を使って、ZUBoard 1CG の PYNQ Linux のホーム・ディレクトリにアップロードした。
HDL/2023.1/zub1cg/i3filters/i3filters.runs/impl_1/i3filters_wrapper.bit
HDL/2023.1/zub1cg/i3filters/i3filters.gen/sources_1/bd/i3filters/hw_handoff/i3filters.hwh

ファイルをホーム・ディレクトリから ~/jupyter_notebooks/examples/i3filters ディレクトリにコピーした。
cd
sudo mv i3filters.hwh jupyter_notebooks/examples/i3filters
mv i3filters_wrapper.bit jupyter_notebooks/examples/i3filters/i3filters.bit


現在の ~/jupyter_notebooks/examples/i3filters ディレクトリを示す。
zub1cg_pynq_232_230902.png

test2.jpg を Image.open() でオープンするように i3filters.ipynb を書き換えた。

image_path = "./test2.jpg"
#image_path = "./blue.bmp"
#image_path = "./green.bmp"
#image_path = "./red.bmp"
original_image = Image.open(image_path)


ガウシアン・フィルタはスルー、メディアン・フィルタとソーベル・フィルタは有効に設定した。

gaussian.register_map.row_size = height
gaussian.register_map.col_size = width
gaussian.register_map.function_r = 2 # ORG_IMGwAxiDma
#gaussian.register_map.function_r = 3 # GAUSSIANwAxiDma


median.register_map.row_size = height
median.register_map.col_size = width
#median.register_map.function_r = 2 # ORG_IMGwAxiDma
median.register_map.function_r = 3 # MEDIANwAxiDma


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


実行結果を示す。
zub1cg_pynq_233_230902.png

ZUBoard 1CG の PYNQ v3.0.1 で自作のメディアン・フィルタとソーベル・フィルタを動作させる3”の実行結果と比べてみたが、見た目には変わらないな。。。
zub1cg_pynq_171_230816.jpg
  1. 2023年09月02日 12:19 |
  2. ZUBoard
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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