ZYBO Z7

ZYBO Z7-20 が届きました
ZYBO Z7-20 が昨日届きました。
ZYBO Z7-20 のボードファイルをVivado 2017.2 にインストールする
ZYBO Z7-20 をVivado で使いやすくするためにDigilent 社のボードファイルをVivado 2017.2 にインストールしよう。
ZYBO Z7-20 のPS 設定とZYBO のPS 設定を比較する
ZYBO Z7-20 をLinux で使用するためにデバイスツリーが必要だが、その前にZYBO の u-boot が走るか?という問題がある。
そこで、ZYBO と ZYBO Z7-20 のPS の設定を違いを確かめてみることにした。
ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る
白線間追従走行用畳み込みニューラルネットワークを走らせるためのMicro SD カードをZYBO Z7-20 対応にすることを目的としてやってみよう。
今回は、ZYBO Z7-20 用の u-boot.elf と devicetree.dtb を作ってみようと思う。
ZYBO_Z7_0 のVivado 2017.2 プロジェクトでBOOT.bin を作成
”白線追従走行用畳み込みニューラルネットワーク・システムの製作1”
”白線追従走行用畳み込みニューラルネットワーク・システムの製作2”
で作った ZYBO_0_172_8 を ZYBO_Z7_0 プロジェクトとしてVivado 2017.2 で作ってみた。
Zybo Z7-20でLinux を起動しようとしたが失敗
”ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る”で作ったdevicetree.dtb と”ZYBO_Z7_0 のVivado 2017.2 プロジェクトでBOOT.bin を作成”で作ったBOOT.bin をZYBO Linux 用のMicro SD カードに入れてZybo Z7-20 で起動してみた。なお、LinuxカーネルはZYBO で使用してたものとした。
結果は、TTYPS0 までは行くのだが、その後の文字が化け化けになってしまった。
Zybo Z7-20 上でUbuntu 14.04 が動作したがネットワークがつながらない
いろいろと失敗してきたZybo Z7-20 上でUbuntu 14.04 の動作だが、やっと起動した。しかしネットワークがつながらなかった。
Zybo Z7-20 上でUbuntu 14.04 が動作し、ネットワークもつながった
前回、Zybo Z7-20 上でUbuntu 14.04 が動作したがネットワークがつながらない状態だった。
石原ひでみさんにご指摘を頂いて、Ether のMDIO がEMIO になっているのでMIO にすればOKとの情報を頂いた。MDIO をMIO にしたところ、ブートに長い時間がかかったがネットワークがつながった。ifconfig で eth1 が見えたので、設定を eth0 から eth1 にしたら正常に立ち上がるようになった。
Zybo Z7-20 のボードファイルの修正
”Zybo Z7-20 上でUbuntu 14.04 が動作し、ネットワークもつながった”でEthrnet 0 のMDIO をMIO に変更してZYBO Z7-20 上での Ubuntu 14.04 のネットワークがつながった。
これを最初からでEthrnet 0 のMDIO をMIO にするようにZybo Z7-20 のボードファイルを変更してみた
Zybo Z7-20上の白線間走行CNNシステムのプロジェクトでUbuntu 14.04 起動
”Zybo Z7-20でLinux を起動しようとしたが失敗”で、なかなかうまく行かなかった白線間走行畳み込みニューラルネットワーク・システムのプロジェクト(ZYBO では、ZYBO_0_172_8)をZYBO_Z7 用に変更して論理合成、インプリメント、ビットストリームの生成を行い、SDKでFSBL を作成して、BOOT.bin を作成した。
Zybo Z7-20上の白線間走行CNNシステムのプロジェクトが動作しないバグ
”Zybo Z7-20上の白線間走行CNNシステムのプロジェクトでUbuntu 14.04 起動”でZybo Z7-20上の白線間走行CNNシステムのVivado 2017.2 プロジェクトを使用してUbuntu 14.04 を起動することができたが、肝心のZybo Z7-20上の白線間走行CNNシステムのVivado 2017.2 プロジェクトがベアメタル・アプリケーションとして動作しない。これはなぜなのか?をVivado Analyzer で確認してみた。
む。。。これは。。。WVALID のアサートが AWVALID よりも前に来ている。AXI プロトコル的にはこれであっているが、自作のAXI4 Lite Slave インタフェースはどうだったか?
下の図のAXI4 Lite Slave Write Transaction State Machine を見ると、Write が 1 つのステートマシンになってしまっている。これではだめだ。。。orz
ビットマップ・ディスプレ イ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slaveのバグをフィックス
”Zybo Z7-20上の白線間走行CNNシステムのプロジェクトが動作しないバグ”で、ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slave インターフェース回路にバグがあることが分かった。
今回はそのバグをフィックスした。
白線間走行畳み込みニューラ ルネットワーク・システムをZYBO Z7-20で動作させる1
前回は、”ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPの AXI4 Lite Slaveのバグをフィックス”で、ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slave のデータのWrite がアドレスのWrite よりも先に来てしまったときのバグを修正した。
その結果、ビットマップ・ディスプレイ・コントローラIP は動作したが、カメラ・インタフェースIP が動作していなかった。カメラ・インタフェースIP のAXI4 Lite Slave インターフェースから接続されているAXI Interconnect のAXI4 Master ポートに空きがあったので、空きを無くしてカメラ・インタフェースIP が動作するかどうか?を確かめてみることにした。
それでうまく行ったが、カメラ画像はYUVのままで、RGBに設定されていなかった。
白線間走行畳み込みニューラ ルネットワーク・システムをZYBO Z7-20で動作させる2
前回は、カメラ・インタフェースIP のAXI4 Lite Slave インターフェースから接続されているAXI Interconnect のAXI4 Master ポートに空きがあったので、空きを無くしたらカメラ・インタフェースIP が動作することが分かった。しかし、今度はカメラ制御用のI2C インタフェースIP がおかしくなっているようだ。今回はカメラ制御用のI2C インタフェースIP を調査する。
結局、AXI Interconnect がおかしかった。AXI Interconnect を交換したら動作した。
白線間走行畳み込みニューラ ルネットワーク・システムをZYBO Z7-20で動作させる3(ガボール・フィルタの追加)
前回でFPGAのハードウェアをフィックスしたつもりだったが、やはり、ガボール・フィルタを 入れてみたいということで、入れてみた。更にFSBL を作ってからBOOT.bin を作成した。デバイスツリーも作成して、ZYBO Z7-20 に入れてUbuntu 14.04 をブートした。
ZYBO Z7-20上のUbuntu 14.04でカメラ画像を表示
”白線間走行畳み込みニューラルネットワーク・システムをZYBO Z7-20で動作させる3(ガボール・フィルタの追加)”でガボール・フィルタを追加したZYBO Z7-20 のZYBO_Z7_0 プロジェクトが出来上がって、Ubuntu 14.04 が起動したので、今回は、Ubuntu 14.04 上でカメラ画像を表示することができた。
ZYBO Z7-20上のUbuntu 14.04でカメラ画像をBMPファイルに変換する
前回は、ZYBO Z7-20 のUbuntu 14.04 上でカメラ画像を表示することができた。今回は、カメラ画像からBMPファイルを生成する cam_capture_bmp を試してみた。

Github で現在使用しているZYBO Z7-20用のBOOT.bin, devicetree.dtb, u-boot, uImage などを公開しました
Github で現在使用しているZYBO Z7-20用のBOOT.bin, devicetree.dtb, u-boot, uImage などを公開しました。

ZYBO Z7-20上のUbuntu 14.04でカメラ画像にガボール・フィルタを動作させる
ZYBO Z7-20上のUbuntu 14.04でカメラ画像からBMPファイルを生成する cam_capture_bmp でBMP ファイルが生成できることが分かった。今回は、ZYBO Z7-20上のUbuntu 14.04 でガボール・フィルタを動作させた。
ZYBO Z7-20上のUbuntu 14.04で白線間走行用畳み込みニューラルネットワークを動作させる
前回は、ZYBO Z7-20 上でガボール・フィルタを動作させた。今回は、白線間走行用畳み込みニューラルネットワークを動作さてみよう。
白線間走行用畳み込みニューラルネットワークが動作しました。

FPGA+SoC+Linux実践勉強会用のZYBO Z7用MicroSDカードの準備
ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(ブートイメージの提供)”を見ながら、MicroSDカードを作っていこう。
FPGA+SoC+Linux実践勉強会での課題をやってみた1(Vivado HLS編)
”FPGA+SoC+Linux実践勉強会”でZYBO Z7 を使用し、Vivado HLS でDMA IPを作成して、Vivado で回路にして、SDK でベアメタル・アプリケーションでDMA IP を動作させようとしたら動作しなかった。
そこで、DMA IP を仕上げてデバイツリー・オーバーレイやudmabuf などを確かめてみよう。
FPGA+SoC+Linux 実践勉強会での課題をやってみた2(Vivado 編)
「”FPGA+SoC+Linux実践勉強会”でZYBO Z7 を使用し、Vivado HLS でDMA IPを作成して、Vivado で回路にして、SDK でベアメタル・アプリケーションでDMA IP を動作させようとしたら動作しなかった。
そこで、DMA IP を仕上げてデバイツリー・オーバーレイやudmabuf などを確かめてみよう。」ということで、前回はVivado HLS 2017.3 でDMA_pow プロジェクトを作成し、10 個のデータをReadし、 2 乗して出力するIP にした。今回は、そのDMA_pow2 IP を使用して、Vivado 2017.3 の IPI で ZYBO Z7 のPS と接続して、SDK でアプリケーションソフトを作って実機で試してみよう。
FPGA+SoC+Linux 実践勉強会での課題をやってみた3(Vivado 編2 ACPポートを使用)
「”FPGA+SoC+Linux実践勉強会”でZYBO Z7 を使用し、Vivado HLS でDMA IPを作成して、Vivado で回路にして、SDK でベアメタル・アプリケーションでDMA IP を動作させようとしたら動作しなかった。
そこで、DMA IP を仕上げてデバイツリー・オーバーレイやudmabuf などを確かめてみよう。」ということで、前回はPS のHP ポートを使用して、Vivado HLS で作成したDMA_pow2 IP を接続して使用することができた。今回は、ACP ポートにDMA_pow2 IP を接続して使用してみようと思う。
FPGA+SoC+Linux実践勉強会での課題をやってみた4(Device Tree Overlay)
前回は、Vivado HLS 2017.3 で作成した 2 乗倍するDMAIP をVivado 2017.3 のブロック・デザインでインスタンスして、回路を構成した。その際には、ACP ポートを使用した。SDK のベアメタル・アプリケーションソフトで動作を確認した。今回は、ikwzm さんの Device Tree Overlay を試してみよう。
FPGA+SoC+Linux 実践勉強会での課題をやってみた5(FPGA Region)
前回は、Vivado HLS 2017.3 で作成した 2 乗倍するDMAIP をVivado 2017.3 のブロック・デザインでインスタンスして構成した回路で Device Tree Overlay を試した。今回は、それの回路で FPGA Region を使用して、ビット・ファイルをコンフィギュレーションしてみよう。
FPGA+SoC+Linux 実践勉強会での課題をやってみた6(udmabuf、実機テスト)
前回は、Vivado HLS 2017.3 で作成した 2 乗倍するDMAIP をVivado 2017.3 のブロック・デザインでインスタンスして構成した回路で Device Tree Overlay でデバイスツリー・オーバーレイで、 FPGA Region を使用して、ビット・ファイルをコンフィギュレーションした。今回は、それに加えて udmabuf を実装し、udmabuf を使用し、更にアプリケーションソフトを書いて、dma_pow2 IP を動作させてみよう。
FPGA+SoC+Linux 実践勉強会での課題をやってみた7(dma_pow2 IP のドライバを使用したアプリケーション)
前回は、Vivado HLS 2017.3 で作成した 2 乗倍するDMAIP をVivado 2017.3 のブロック・デザインでインスタンスして構成した回路で Device Tree Overlay でデバイスツリー・オーバーレイで、 FPGA Region を使用して、ビット・ファイルをコンフィギュレーションした。今回は、それに加えて udmabuf を実装し、udmabuf を使用し、更にアプリケーションソフト test_dma.c を書いて、dma_pow2 IP を動作させた。今回はその続きで、前回の test_dma.c を dma_pow2 IP のドライバを使用するコードに書きなおす。それを test_dma_wd.c とする。そして、Makefile も書いて make し、動作させてみる。

ZYBO Z7-20でPcam 5Cを使用する1(D-PHYインターフェース)
まずは、Xilinx 社の XAPP 894 (v1.0) D-PHY ソリューション でD-PHY のことを学習しよう。
ZYBO Z7-20でPcam 5Cを使用する2(pcam-5c プロジェクト)
前回は、MIPI のD-PHY インターフェースについて調べた。今回は、Digilent 社のZybo Z7 Pcam 5C Demo プロジェクトをダウンロードして、Vivado 2016.4 のプロジェクトを生成してみよう。
ZYBO Z7-20でPcam 5Cを使用する3(インプリメント)
前回は、pcam-5c プロジェクトを生成した。今回は、pcam-5c プロジェクトのsystem ブロック・デザインを階層化して、論理合成、インプリメント、ビットストリームの生成を行う。
ZYBO Z7-20でPcam 5Cを使用する4(タイミングエラーの検討)
前回はインプリメントを行ったら、タイミングエラーが出てしまった。今回は、そのタイミングエ ラーの原因を探ってみよう。
ZYBO Z7-20でPcam 5Cを使用する5(SDK1)
前回は、タイミングエラーを検証した。今回は、とりあえず、SDKでアプリケーションソフトを 作成してみよう。
ZYBO Z7-20でPcam 5Cを使用する6(Pcam 5Cのカメラ画像を表示できた)
前回は、SDKのビルドでエラーが出て解消できなかった。今回は、ブロック・デザインで階層を 設けないでやってみた。結果的にこれでうまく行ってPcam 5Cのカメラ画像を表示することができた。
ZYBO Z7-20でPcam 5Cを使用する7(Pcam 5Cの設定を変更)
前回は、Digilent 社のデモ・プロジェクトで Pcam 5Cのカメラ画像を表示することができた。今回は、Pcam 5Cのカメラ画像をレジスタを設定することで、画像を変更してみた。
ZYBO Z7-20でPcam 5Cを使用する8(シリアル・インターフェースで設定変更)
前回は、pcam_vdma_hdmi アプリケーション・プロジェクトの src フォルダの ov5640 フォルダの OV5640.h を変更してカメラの設定を変更した。今回は、pcam_vdma_hdmi アプリケーション・ソフトウェアは、シリアル・インターフェースを使用して設定を変更できる機能があるので、それを使用してみた。

ZYBO Z7-20でのMNISTの実装にOV5642を使用する1
Ultra96 のUltra96 用PMOD 拡張ボード経由でOV5642 を使用することができた。
今回は、ZYBO Z7-20 のMNIST の実装で、OV5642 を使用してみたい。
ZYBO Z7-20でのMNISTの実装にOV5642を使用する2
前回は、ZYBO Z7-20 のMNIST の実装で、OV5642 を使用してみたいということで、やってみたところ、うまく行かない。mt9d111_inf_axis_0 のAXI4-Stream のトランザクションもないので、mt9d111_inf_axis_0 がおかしいようだということが分かった。今回は、Vivado Analyzer を入れて2日ほど調査したが、原因が分からなかった。やっと今日、その原因が分かったのだった。原因は、アプリケーション・ソフトでのコマンド順によるものだった。
ZYBO Z7-20でのMNISTの実装にOV5642を使用する3
前回は、OV5642 カメラ画像を垂直方向にフリップした画像で、ディスプレイに表示することができた。その後、垂直方向にフリップするDMA の vflip_dma_write もできたので、これを使用してMNIST 手書き数字判定システムを修正して行こう。

”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”をやってみる1
小林さんから”FPGAプログラミング大全 Xilinx編 第2版”をいただいた。
その中から私が意図的に使ってこなかった Zynq の割り込みをやってみようと思う。具体的には”5-4 タイマー割り込みとAPIの利用”をやってみようと思う。
まずは、”FPGAプログラミング大全 Xilinx編 第2版”のサンプルをやってみるということで、ブロック・デザインを作成した。
”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”をやってみる2
”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”をやってみるということで、前回は、Vivado 2020.2 の second プロジェクトを作成して、ブロックデザインを完成させた。今回は、ラッパー Verilog HDL ファイルのトップファイルを生成し、制約ファイルを追加して、論理合成、インプリメンテーション、ビットストリームの生成を行う。そして、ハードウェアをエクスポートし、 XSA ファイルを生成した。
”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”をやってみる3
前回は、ラッパー Verilog HDL ファイルのトップファイルを生成し、制約ファイルを追加して、論理合成、インプリメンテーション、ビットストリームの生成を行う。そして、ハードウェアをエクスポートし、 XSA ファイルを生成した。今回は、Vitis 2020.2 を立ち上げて、プラットフォームとアプリケーション・プロジェクトを作成して、ZYBO Z7-10 で実機検証を行って、成功した。

Zynq で PL から PS に割り込みを掛ける1
”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”の second プロジェクトを改造して、プッシュボタンスイッチを押した時に割り込みを掛けて RGB LED のON/OFF 制御をしてみよう。
今回は、Zynq 割り込みコントローラを構造を確認して、 Xilinx のライブラリを使用した設定方法を見ていこう。
Zynq で PL から PS に割り込みを掛ける2
”FPGAプログラミング大全 Xilinx編 第2版”の”5-4 タイマー割り込みとAPIの利用”の second プロジェクトを改造して、プッシュボタンスイッチを押した時に割り込みを掛けて RGB LED のON/OFF 制御をしてみようということで、前回は、前振りとして、PL から PS への割り込み方法について調査した。今回は、 second プロジェクトのブロックデザインに押しボタンスイッチによって PL から PS への割り込みを追加する。
Zynq で PL から PS に割り込みを掛ける3
前回は、 second プロジェクトのブロックデザインに押しボタンスイッチによって PL から PS への割り込みを追加して、動作を確認することができた。今回は、”Zynq で PL から PS に割り込みを掛ける1”で、 IRQ_F2P 割り込みはレベル割り込みとエッジ割り込みの 2 種類から選べるはずだが、どちらになっているか?を確認してみよう。

Vivado 2020.2 で ZYBO Z7-20 の Pcam5C を使ってカメラ画像を表示する1
”Zybo Z7 Pcam 5C DemoをVivado 2020.02で動作させてみた”を見たので、私も Vivado 2020.2 で ZYBO Z7-20 の Pcam5C を使ってカメラ画像を表示させてみたくなったので、やってみることにした。
タイミング・エラーは出てしまったが、ビットストリームの生成まで終了した。
Vivado 2020.2 で ZYBO Z7-20 の Pcam5C を使ってカメラ画像を表示する2
”Zybo Z7 Pcam 5C DemoをVivado 2020.02で動作させてみた”で、 Vivado 2020.2 で ZYBO Z7-20 の Pcam5C を使ってカメラ画像を表示させていたので、私もやってみたということで、前回は、 Vivado 2019.2 の Zybo-Z7-20-pcam-5c プロジェクトを Vivado 2020.2 のプロジェクトにアップグレードして、論理合成、インプリメンテーション、ビットストリームの生成を行って、タイミング・エラーがあるが成功した。今回は、ハードウェアを エクスポートする。

ZYBO Z7-20 で PYNQ を使用する1
ZYBO Z7 用の PYNQ を見つけたのでやってみようと思う。
ZYBO Z7-20 で PYNQ を使用する2
ZYBO Z7 用の PYNQ が”Pynq 2.7 for Zybo-Z7”にあったということで、前回は、Zybo-Z7-2.7.0.img を MicroSD カードに書き込んだ。今回は、その MicroSD カードを ZYBO Z7-20 に挿入して、PYNQ Linux を起動し、環境を整備する。更に Jupyter Notebook を起動する。
ZYBO Z7-20 で PYNQ を使用する3
前回は、PYNQ イメージを書き込んだ MicroSD カードを ZYBO Z7-20 に挿入して、PYNQ Linux を起動し、環境を整備する。更に Jupyter Notebook を起動することができた。今回は、 Jupyter Notebook が動作するかどうか? base/GPIOs_test.ipynb を動作させてみよう。

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

ZYBO Z7-20 用カメラ画像表示システムの作成1
今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思う。
今まで作ってきた IP と Digilent/vivado-library の rgb2dvi IP を使用して、Vivado 2022.1 で cam_disp プロジェクトを作成する。
ZYBO Z7-20 用カメラ画像表示システムの作成2
今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、Vivado 2022.1 で cam_disp プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポートして、Vitis 2022.1 でプラットフォームとアプリケーション・プロジェクトの生成を行った。
ZYBO Z7-20 用カメラ画像表示システムの作成3
前回は、ハードウェアをエクスポートして、Vitis 2022.1 でプラットフォームとアプリケーション・プロジェクトの生成を行った。今回は、アプリケーション・ソフトウェアを作成し、ビルドしたら elf ファイルができた。ZYBO Z7-20 で実機確認した見たところ、カメラ画像が表示されなかった。
ZYBO Z7-20 用カメラ画像表示システムの作成4
前回は、アプリケーション・ソフトウェアを作成し、ビルドしたら elf ファイルができた。ZYBO Z7-20 で実機確認した見たところ、カメラ画像が表示されなかった。今回は、以前動作していたはずの Vivado プロジェクトを 2022.1 上で再現することにした。Vivado 2021.1 のプロジェクトを DFX の変更をもとに戻して Vivado 2022.1 に変換し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
ZYBO Z7-20 用カメラ画像表示システムの作成5
前回は、以前動作していたはずの Vivado プロジェクトを 2022.1 上で再現することにした。Vivado 2021.1 のプロジェクトを DFX の変更をもとに戻して Vivado 2022.1 に変換し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポートし、Vitis 2022.1 を起動して、アプリケーション・ソフトウェアをビルドして ZYBO Z7-20 で実機確認したところ、カメラ画像の表示に成功した。
ZYBO Z7-20 用カメラ画像表示システムの作成6
前回は、ハードウェアをエクスポートし、Vitis 2022.1 を起動して、アプリケーション・ソフトウェアをビルドして ZYBO Z7-20 で実機確認したところ、カメラ画像の表示に成功した。今回は、以前のプロジェクトでカメラ画像の表示に成功するということは、今回作った IP のいずれかがおかしいのだろう?ということで、cam_disp プロジェクトで IP を交換してみた所、bitmap_disp_cont_axis IP を交換したらカメラ画像が表示された。
ZYBO Z7-20 用カメラ画像表示システムの作成7
前回は、以前のプロジェクトでカメラ画像の表示に成功するということは、今回作った IP のいずれかがおかしいのだろう?ということで、cam_disp プロジェクトで IP を交換してみた所、bitmap_disp_cont_axis IP を交換したらカメラ画像が表示された。しかし、フレームバッファをシングル・バッファにすれば正常に表示できたが、トリプル・バッファにすると画像が乱れた。今回は、トリ プル・バッファにした時も正常に画像を表示できるようにバグをフィックスした。

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる1
”ZYBO Z7-20 用カメラ画像表示システムの作成7”で完成したビットストリームを PYNQ で動作させてみよう。
ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる2
”ZYBO Z7-20 用カメラ画像表示システムの作成7”で完成したビットストリームを PYNQ で動作させてみようということで、前回は、ZYBO Z7-20 の PYNQ を起動して、ノートブックを新規作成し、Python コードを書いて実行してみたが、途中で Linux カーネルが落ちてしまった。今回は、原因を探るため、System ILA を入れて、まずは、動作時の動作を見るため、ZYBO Z7-20 を JTAG モードで起動して、ベアメタル・アプリケーションを使用して、カメラ画像表示時の波形を見ておこう。
ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる3
前回は、途中で Linux カーネルが落ちた原因を探るため、System ILA を入れて、まずは、動作時の動作を見るため、ZYBO Z7-20 を JTAG モードで起動して、ベアメタル・アプリケーションを使用して、カメラ画像表示時の波形を見た。今回は、そのデバッグを行って、vflip_dma_write IP の設定がおかしいことに気付いた。vflip_dma_write IP の設定を修正したら、カメラ画像が表示できた。

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する1
”ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる3”で ZYBO Z7-20 の PYNQ 上でカメラ画像を表示することができた。今度は、その回路にソーベル・フィルタを追加して、エッジをリアルタイムに表示させてみよう。
PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する2
ZYBO Z7-20 の PYNQ 上でカメラ画像を表示することができたので、ソーベル・フィルタを追加して、エッジをリアルタイムに表示させてみようということで、前回は、ソーベル・フィルタ IP をブロック・デザインに追加し、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、ハードウェアをエクスポートし、Vitis でアプリケーション・ソフトウェアを修正して、ベアメタル・アプリケーションとして、ソーベル・フィルタを動作させた。
PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する3
前回は、ハードウェアをエクスポートし、Vitis でアプリケーション・ソフトウェアを修正して、ベアメタル・アプリケーションとして、ソーベル・フィルタを動作させた。今回は、ソーベル・フィルタを PYNQ 上で動作させることができた。

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する1
”axis2DMA IP の作成1”と”axis2DMA IP の作成2”で作成した axis2DMA IP を”PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する1”のブロック・デザインに追加して、Jupyter Notebook にカメラ画像を表示しよう。

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールする1
ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールしてみよう。
make を行ったが、まる 1 日経っても 80 % から進んでいない。。。これはどれだけ日にちを掛けてもダメなようだ。
ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールする2
ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールしてみようということで、前回は、make の 80 % まで make できたがそれ以上は難しいようだった。今回は、cmake のオプションを変更して、ビルドの負荷を軽くして make して見たところ成功した。

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する2
Jupyter Notebook にカメラ画像を表示しようということで、前回は、cam_disp_bd ブロック・デザインに axis2DMA IP を追加した。今回は、前回作成したビットストリームと hwh ファイルを ZYBO Z7-20 の PYNQ LInux 上にアップロードして、Jupyter Notebook を起動して動作を確認したところ、Jupyter Notebook に表示されたカメラ画像が真っ黒だった。axis2DMA IP に AXI4-Stream データが渡っていないのだろうか?
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する3
前回は、ビットストリームと hwh ファイルを ZYBO Z7-20 の PYNQ LInux 上にアップロードして、Jupyter Notebook を起動して動作を確認したところ、Jupyter Notebook に表示されたカメラ画像が真っ黒だった。今回は、原因を追求するために System ILA を入れて、波形を確認したが、axis2DMA IP の DMA Write が出ていなかった。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する4
前回は、Jupyter Notebook に表示されたカメラ画像が真っ黒だった原因を追求するために System ILA を入れて、波形を確認したが、axis2DMA IP の DMA Write が出ていなかった。今回は、メモリ帯域の負荷が増えるけど、DMA2axis_3buf IP と sobel_axis_RGB24 IP をもう 1 個ずつ実装した。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する5
前回は、メモリ帯域の負荷が増えるけど、DMA2axis_3buf IP と sobel_axis_RGB24 IP をもう 1 個ずつ実装して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、Jupyter Notebook で動作の確認を行ったが、結局動作しなかった。ブロック・デザインを再検討した結果、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無かったことに気がついた。これが原因だと思う。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する6
前回は、Jupyter Notebook で動作の確認を行ったが、結局動作しなかった。ブロック・デザインを再検討した結果、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無かったことに気がついた。今回は、axis2DMA4dwc IP を作成したので、axis2DMA IP を axis2DMA4dwc IP に交換した。Jupyter Notebook で実行してみたが途中で PYNQ が落ちてしまったようだ。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する7
前回は、axis2DMA4dwc IP を作成したので、axis2DMA IP を axis2DMA4dwc IP に交換した。Jupyter Notebook で実行してみたが途中で PYNQ が落ちてしまったようだ。今回は、デバッグをしたところ、axis2DMA4dwc IP のアドレスが 64 ビットアドレスだったため、AXI4 Master のアドレスの上 32 ビットだけアドレスを書き込んでいたので、DMA でアドレスが 0 番地になっていたのがバグの原因だった。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する8
前回は、デバッグをしたところ、axis2DMA4dwc IP のアドレスが 64 ビットアドレスだったため、AXI4 Master のアドレスの上 32 ビットだけアドレスを書き込んでいたので、DMA でアドレスが 0 番地になっていたのがバグの原因だった。今回は、axis2DMA4dwc IP のアドレスを 32 ビット・アドレスに変更し、Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行った。その後 Jupyter Notebook で動作を確認したところ、Jupyter Notebook に画像を表示できたが、色が違っていた。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する9
前回は、axis2DMA4dwc IP のアドレスを 32 ビット・アドレスに変更し、Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行った。その後 Jupyter Notebook で動作を確認したところ、Jupyter Notebook に画像を表示できたが、色が違っていた。今回は、色の違いを修正するために、Red と Blue を入れ替えたところ、正常な色になった。
ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する10
前回は、色の違いを修正するために、Red と Blue を入れ替えたところ、正常な色になった。今回は、1 つやるのを忘れていたことがあった。それは、カメラ画像をファイルにすることだ。結論を言うとカメラ画像を JPEG ファイルにすることができた。

”MicroZed Chronicles: PYNQ Interrupts”をやってみる1
PYNQ での割り込みを学習するために、Adam Taylor さんの”MicroZed Chronicles: Memory Scrubbing”を ZYBO Z7-20 の PYNQ でやってみることにした。今回は、Vivado 2022.1 で pynq_int プロジェクトを作成してブロック・デザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。
”MicroZed Chronicles: PYNQ Interrupts”をやってみる2
PYNQ での割り込みを学習するために、Adam Taylor さんの”MicroZed Chronicles: Memory Scrubbing”を ZYBO Z7-20 の PYNQ でやってみることにしたということで、前回は、Vivado 2022.1 で pynq_int プロジェクトを作成してブロック・デザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ZYBO Z7-20 上の PYNQ Linux にビットストリームと hwh ファイルをアップロードし、pynq_int.ipynb ファイルを生成して、割り込み動作を確認した。

Xilinx 社の Video IP を使ってブロック・デザインを作る1
自分で作った IP を使用して画像を表示しているが、それを Xilinx 社の IP を使用して画像を表示してみたい。
具体的には bitmap_disp_cont_axis IP を AXI4-Stream to Video Out(v_axi4s_vid_out) IP と Video TIming Controller (v_tc) IP で置き換えたい。
Xilinx 社の Video IP を使ってブロック・デザインを作る2
自分で作った IP を使用して画像を表示しているが、それを Xilinx 社の IP を使用して画像を表示してみたいということで、前回は bitmap_disp_cont_axis IP を AXI4-Stream to Video Out(v_axi4s_vid_out) IP と Video TIming Controller (v_tc) IP で置き換えた。今回は、実際に v_axi4s_vid_out と v_tc を配線して、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Xilinx 社の Video IP を使ってブロック・デザインを作る3
前回は、実際に v_axi4s_vid_out と v_tc を配線して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、Jupyter Notebook の cam_disp2.ipynb を作成して実行したが、ディスプレイに表示される色が間違っていた。たぶん RGB のところ RBG になっていると思われる。
Xilinx 社の Video IP を使ってブロック・デザインを作る4
前回は、Jupyter Notebook の cam_disp2.ipynb を作成して実行したが、ディスプレイに表示される色が間違っていた。たぶん RGB のところ RBG になっていると思われる。今回は、ディスプレイに表示するソーベル・フィルタの後に AXI4-Stream Subset Converter を挿入して RGB を RBG に変換したところ、色が正常になった。

ZYBO Z7 の Debian LInux からパソコンへ TCP/IP でデータを送る
ZYBO Z7-20 に ikwzm さんの FPGA-SoC-Linux を走らせているが、ZYBO Z7-20 の Debian Linux からパソコンに TCP/IP でデータを送信して、パソコンで受信したいということでやってみた。なお、パソコンは、Windows 10 の WSL2 上の Ubuntu 22.04 LTS を使用した。

ikwzm さんの Debian Linux 上で axi timer の割り込みを試す
axi timer の割り込みで axi gpio に接続された LED の点滅をすることで、Debian Linux 上での割り込みを試してみたい。
ikwzm さんの FPGA-SoC-Linux を ZYBO Z7-20 で起動して、その Debian Linux 上で axi timer と axi gpio の PL デザインを動作させて、axi timer の割り込みで LED を点滅させる。

ZYBO Z7 の Debian LInux からパソコンへ TCP/IP で 3.333 ms 毎にデータを送る
”ZYBO Z7 の Debian LInux からパソコンへ TCP/IP でデータを送る”と”ikwzm さんの Debian Linux 上で axi timer の割り込みを試す”を組み合わせて、ZYBO Z7 の Debian LInux からパソコンへ TCP/IP で 3.333 ms 毎にデータを送った。

ZYBO Z7-20 の Debian Linux で gettimeofday() と axi_timer の値を比べる
”ZYBO Z7 の Debian LInux からパソコンへ TCP/IP で 3.333 ms 毎にデータを送る”で、ZYBO Z7-20 の Debian Linux の gettimeofday() の精度はどのくらいなのだろう?ということで、axi_timer_0 の Timer2 をイネーブルして、axi timer の値と比較したところ、双方とも大きな違いは無かった。

MicroBlaze で axi timer の割り込みを使用する
ZYBO Z7-20 で MicroBlaze プロセッサを使用した axi timer の割り込みを試してみたので、ブログに書いておく。

ZYBO Z7-20 の Debian Linux で MicroBlaze プロセッサを使用する
ZYBO Z7-20 に ikwzm さんの FPGA-SoC-Linux を走らせているが、そこに PL に MicroBlaze プロセッサを使用したシステムを構築してみよう。PS は何もやらないので、ソフトウェアを実行する必要はないが、Zynq Processing System 7 のクロックを MicroBlaze が使用してる。





inserted by FC2 system