Ultra96

Ultra96ボード
zedboard.org のページに Ultra96ボードの情報が出てきました。
Xilinx Zynq UltraScale+ MPSoC ZU3EG SBVA484 だそうなので、UltraZed-EG と同じ ZU3EG ですが、ピン数が違うようです。
Ultra96が来ました
昨日、Ultra96が来ました。
小さいですね。
Ultra96のGetting Startedをやってみた
”Ultra96が来ました”でUltra96ボードが来たことをブログに書いたが、電源と変換ケーブルが届いたので、Getting Startedをやってみた。
Ultra96用PMOD拡 張ボード1
Ultra96用PMOD拡張ボードを作ることにした。
2mmピッチ40ピンの低速用拡張コネクタから信号を引き出してPMODに変換する予定だ。
Ultra96用PMOD拡 張ボード2
Ultra96用PMOD拡張ボードの回路図の配線が終了した。

Ultra96のmini DisplayPort の変換ケーブル
Ultra96 ボードにはmini DisplayPort があるが家のディスプレイにはDisplayPort の入力がない。そこで、変換ケーブルを使用するわけだが、最初に買った「QTop Mini DisplayPort to HDMI変換ケーブル 高解像度4K,3D対応 Thunderbolt DP to HDMI HDTV変換アダプター 」では付属のMicroSDカードでブートしたときの画像がディスプレイに表示できなかった。

Ultra96用PMOD拡 張ボード3
前回は、回路図を作成した。今回は、パーツのフットプリントを作成し、部品のフットプリントを 決定した。
Ultra96用PMOD拡 張ボード4
前回は、パーツのフットプリントを作成し、部品のフットプリントを決定した。今回は、フットプ リントを基板上に置いて配線を行った。
Ultra96用PMOD拡 張ボード5
前回は、フットプリントを基板上に置いて配線を行った。今回は、ガーバー・ファイルを出力して SeeedStudio で発注した。
Ultra96用PMOD拡張ボード6(基板が届いた)
前回は、ガーバー・ファイルを出力してSeeedStudio で発注した。昨日、DHL で基板が届いた。
Ultra96用PMOD拡 張ボード7(部品を実装した)
前回は、Ultra96用PMOD拡張ボードが届いたので、今回は、部品を実装して、 Ultra96ボードに挿入した。

Ultra96用PMOD拡張ボードのPMOD端子のテストのために8ビットカウンタのLチカを作る
やはり、Vivado HLS 2018.2 で作ってみようと思う。8 ビットカウンタの最下位ビットは 4 HzでLチカして、最上位ビットは32秒間隔でLチカするようにしてみよう。そうすれば隣のピンとの接触も分かるに違いない。
Ultra96用PMOD拡 張ボードのPMOD端子のテストのために8ビットカウンタのLチカを作る2
前回は、Lチカ IP をVivado HLS で作成した。今回はそのLチカ IP をVivado で実装した。

Ultra96用PMOD拡 張ボードの波形を確認
Ultra96用PMOD拡張ボードの波形を確認した。

DPDMA の examples をやってみる
Ultra96 の DisplayPort を使えるようにしようとして奮闘しているが、”ZynqMP Standalone DisplayPort Driver”のドライバがXilinx\SDK\2018.2\data\embeddedsw\XilinxProcessorIPLib\drivers フォルダにあるということで、dpdma_v1_1/examples を確かめてみることにした。

Ultra96 ボードのDisplayPort について
Ultra96 ボードのDisplayPort を使いたいと思っているがなかなか難しい。
Ultra96の DisplayPort テストパターン生成用IPの作製
Ultra96のDisplayPort にテストパターンを表示するIP を作製しようということで、Vivado HLS 2018.2 で以前作った”Vivado HLS 2014.4 でディスプレイ・コントローラを作る1(高位合成、C/RTLコシミュレーション)”を参照しながら、HD解像度のテストパターンを表示するIP を作製しよう。
Ultra96の DisplayPort テスト用回路1
”Ultra96のDisplayPort テストパターン生成用IPの作製”で作ったIP を”DPDMA の examples をやってみる”で作ったVivado 2018.2 で作った dt_test プロジェクトを改造して入れてみることにした。
Ultra96の DisplayPort テスト用回路2
”Ultra96のDisplayPort テスト用回路1”の回路にILA を付けてデバックというか、video_test IP のビデオ信号が出ているのかどうか?を確かめてみた。

Ultra96用Yocto Linuxのビルド
Ultra96 のDisplayPort がベアメタルで動かないし、めどが立たないので、Ultra96 用のYocto Linux をビルドしてみることにした。参考にするのは、ひでみさんの薄い本の「超苦労したFPGAの薄い本 Yocto Projectと立ち上げ編」だ。なお、「超苦労したFPGAの薄い本(高位合成とリコンフィグ編)」もあって、そちらも購入済みだ。
Ultra96用Yocto LinuxのMicroSDカードのフォーマット
Ultra96 用Yocto Linux のビルドが終了したので、それを保存するためのMicro SD カードを用意する。なお、そのまま行けるかと思ったが zcu102 用なのでUltra96 用に変更しないといけないそうだ。
Ultra96用Yocto Linuxの再ビルド
”Ultra96用Yocto Linuxのビルド”でUltra96 用Yocto Linux のビルドを行ったが、local.conf ファイルのEXTRA_IMAGE_FEATURES に development tools や debugging tools を追加したくなった。ついでに、Eclipse remote debugging support も入れてしまった。
Ultra96用Yocto Linuxのビルドの続き1(sbl.elf と pmufw.elf の作成)
前回は、”Ultra96用Yocto Linuxのビルド”でUltra96 用Yocto Linux のビルドを行ったが、local.conf ファイルのEXTRA_IMAGE_FEATURES に development tools や debugging tools を追加したくなった。ついでに、Eclipse remote debugging support も入れてしまった。今回は、Ultra96 でYocto Linux を動かすためにビルドを進め、fsbl.elf と pmufw.elf を作成した。
Ultra96用Yocto Linuxのビルドの続き2(u-boot.elf と bl32.elf の作成)
前回は、SDK を使って、sbl.elf と pmufw.elf の作成を行った。今回は、u-boot.elf と bl32.elf をビルドしよう。
Ultra96用Yocto Linuxのビルドの続き3(boot.binの生成、Linux Kernel のビルド)
前回は、u-boot.elf と bl32.elf をビルドした。今回は、boot.bin を生成して、Linux Kernel のビルドした。
Ultra96用Yocto Linuxのビルドの続き4(Micro SD カードの用意、Ultra96で動作確認)
前回は、boot.bin を生成して、Linux Kernel のビルドを行った。今回は、Micro SD カードに生成してきたファイルをコピーして、Ultra96に挿入して、Linux を起動した。
Ultra96用Yocto Linuxのビルドの続き5(Debian Root FS で起動)
前回は、Micro SD カードに生成してきたファイルをコピーして、Ultra96に挿入して、Linux を起動することができた。今回は、Yocto でビルドしたRoot FS の代わりに ikwzm さんのDebian Root FS で起動できるかどうか?を確かめてみよう。
Ultra96用Yocto Linuxのビルドの続き6(WLANの設定)
前回は、Yocto でビルドしたRoot FS の代わりに ikwzm さんのDebian Root FS でUltra96 のLinux が起動できた。今回は、無線LAN の設定を行う。
Ultra96用Yocto Linuxのビルドの続き7(WLANの設定2)
前回は、無線LAN の設定をしたのだが、動作しなかった。今回は、石原ひでみさんの「超苦労したFPGAの薄い本」Yocto Project と立ち上げ編を参照して、無線LANとBluetooth のファームウェアをインストールしてみよう。

Ultra96 で ikwzm さんのDebian を動作させたい
現在、Ultra96 でDebian Root FS を動作させて無線LANまで動かせたが、Debian RootFS はikwzm さんのZYBO 用のものを使用している。これを”UltraZed 向け Debian GNU/Linux (v2018.2版) ブートイメージの提供”のDebian RootFS に変更して、fclkcfg デバイス・ドライバと udmabuf デバイス・ドライバをインストールしてデバイスツリー・オーバーレイをやってみたい。
Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる
Ultra96 で ikwzm さんのデバイスツリー・オーバーレイや fclkcfg、 udmabuf を動かしたいということで、”UltraZed 向け Debian GNU/Linux (v2018.2版) ブートイメージの提供”の Debian9 Root File System と”Ultra96用Yocto Linuxのビルドの続き4(Micro SD カードの用意、Ultra96で動作確認)”で用意したMicro SD カードの第1パーティションのULTRA96_BOO にコピーした Image, boot,bin, system.dtb, uEnv.txt を使用してUltra96 でDebian をブートしたい。
Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる2
Ultra96 で ikwzm さんのROOT_FS でDebian が立ち上がってログインできるようになったので、今回は、パッケージをインストールしてみよう。
Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる3
前回パッケージをインストールしたが、warning が出てしまった。今回は、ikwzm さんの配布しているLinux カーネルに入れ替えて、もう一度パッケージをインストールしてみよう。更に、パッケージのインストールを追加して、nautilus と geany を起動できた。
Ultra96 ボード用 Debian ROOT FS のLinux起動用MicroSD カード用ファイルの使用方法
”Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる3”のUltra96 ボード用 Debian ROOT FS のLinux起動用MicroSD カード用ファイルの使用方法を書いておく。このファイルは 500 MB 以上あって巨大なので、今のところGoogle ドライブに置いているのだが、そのためもあって公開するかどうか?迷っている。Ultra96 勉強会の参加者には公開しようと思っている。
Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる4
前回は、ikwzm さんの配布されているLinux カーネルに変更したら各種パッケージをインストールできて、nautilus や geany もインストールできて起動できた。次はデバイスツリー・オーバーレイがうまく行くかどうか?を確認したい。今回は、AXI HPC port を Inner Share として使用するための設定を行う。
Vivado HLS でDMA Readしたデータを2乗し、DMA WriteするUltra96ボード用 IP を作成
”Ultra96 で ikwzm さんのDebian9 Root File Systemを動かしてみる4”でAXI HPC port を Inner Share として使用するための設定を行った。次には、デバイスツリー・オーバーレイを試すためのPLのハードウェアを作成する。そのために今回は、Vivado HLS 2018.2 を使用して、データをDMA Read で持ってきて、2乗し、そして、DMA Writeで書き込むIP を作成しよう。
デバイスツリー・オーバーレ イをテストするためのVivado 2018.2 のプロジェクトを作成する
”Vivado HLS でDMA Readしたデータを2乗し、DMA WriteするUltra96ボード用 IP を作成”でメモリからDMA Read したデータを 2 乗して、DMA Write でメモリに書き戻すVivado HLS 2018.2 のIP が出来た。今回は、その DMA_pow2 IP を使用してVivado 2018.2 でDMA_pow2_test プロジェクトを作成する。
デバイスツリー・オーバーレ イをテストするためのVivado 2018.2 のプロジェクトを作成する2
前回は、その DMA_pow2 IP を使用してVivado 2018.2 でDMA_pow2_test プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、SDKを使用して、ベアメタル・アプリケーションを作成し て、動作をチェックする。
Ultra96 ボードでデバイスツリー・オーバーレイをテストする1
前回は、デバイスツリー・オーバーレイをテストするためのVivado 2018.2 のプロジェクトで、SDK を起動して、ベアメタル・アプリケーションで2乗回路が動作することを確認した。今回は、ikwzm さんの”UltraZed 向け Debian GNU/Linux で AXI HPC port を使う (実践編1)”を参照しながら、デバイスツリー・オーバーレイをやってみよう。
Ultra96 ボードでデバイスツリー・オーバーレイをテストする2
前回は、ikwzm さんの”UltraZed 向け Debian GNU/Linux で AXI HPC port を使う (実践編1)”を参照しながら、デバイスツリー・オーバーレイをやってみたが、fclkcfg をロードした時点で失敗してしまった。今回は、ikwzm さんが Ultra96 ボードのSDカードのイメージを含んだ”kwzm/ZynqMP-FPGA-Linux”を公開してくれたので、SDカードのブート・パーティションのdtb だけをそれと入れ替えてやってみよう。
Ultra96 ボードでデバイスツリー・オーバーレイをテストする3
前回は、デバイスツリー・オーバーレイでFPGAのビットストリーム、PSからPLに出力され るクロック fclk 、uio と udmabuf がロード出来た。実は、uio がロードされていないようなのだ。今回は、その原因を探ってみよう。
DMA_pow2_test.dts を dtc でコンパイルして、デバイスツリー・オーバーレイでFPGAのビットストリーム、PSからPLに出力されるクロック fclk 、uio と udmabuf をもう一度ロードしてみたが、やはり uio0 だけで uio1 はロードされていなかった。
Ultra96 ボードでデバイスツリー・オーバーレイをテストする4
前回の uio がロードできない現象は、使用していた uEnv.txt の ”boot_args”に”uio_pdrv_genirq.of_id=generic-uio”が書いてなかったことだった。これを機会に ikwzm さんの ZynqMP-FPGA-Linux/target/Ultra96/boot のファイルをSDカードの第1パーティションのULTRA96_BOO のファイルとすべて交換したところ uio がロードできるようになった。
uio はロードできるようになったが、アプリケーション・ソフトを作成して、起動したところSegmentation fault になってしまって困っている。uio にデータを書き込むところでSegmentation fault になっているようだ。
Ultra96 ボードでデバイスツリー・オーバーレイをテストする5
前回は「アプリケーション・ソフトを作成して、起動したところSegmentation fault になってしまって困っている。uio にデータを書き込むところでSegmentation fault になっているようだ。」ということだった。今回はSegmentation fault を克服するべく頑張った。ハードウェアではなく、ソフトウェアそれもVivado HLSのドライバに問題があったようだ。

Ultra96 のuEnv.txt のbootargs に cpuidle.off=1を追加した
twitter で話題になっていたJTAGアダプタを付けていると、Linux 起動時にハングアップしたりする問題だが、私も1,2回なったことがあるので、対処方法を実行することにした。

Ultra96 ボードでデバイスツリー・オーバーレイをテストする6
前回は、Ultra96 でデバイスツリー・オーバーレイでLinux が動作中にデバイスツリーを入れ替えて、異なるハードウェアを動作させることができた。今回は、そのやり方を紹介する。

Ultra96用PMOD拡 張ボードでカメラ入力1(mt9d111_inf_axis IP の作成1)
”Ultra96 ボードでデバイスツリー・オーバーレイをテストする6”でUltra96 のデバイスツリー・オーバーレイは完成したので、次は、以前作製したUltra96用PMOD拡張ボードのPMOD にカメラ(MT9D111)を接続してカメラ画像を表示したいのだが、残念ながらDisplayPort が表示出来ていない。よって、その前段階として、Ultra96用PMOD拡張ボードにMT9D111は接続するのだが、Frame Buffer のメモリにDMA Write するだけのVivado 2018.2 プロジェクトを作成したい。そのFrame Buffer をARM プロセッサで読んで、BMP ファイルにできればパソコンへX Window 経由で表示できるはずだ。
Ultra96用PMOD拡 張ボードでカメラ入力2(mt9d111_inf_axis IP の作成2)
前回は、Ultra96用PMOD拡張ボードにMT9D111を接続して、Frame Buffer に書き込むプロジェクトを作成したい。ということで、カメラのMT9D111 のインターフェース用IP を作り始めた。手始めにカメラのデータとAXI4-Stream のデータの橋渡しをする pixel_fifo という名前の非同期FIFO を生成した。今回は、pixel_fifo を使用したカメラのMT9D111 のインターフェース用IP mt9d111_inf_axis を作成する。

Ultra96 USB-to-JTAG/UART Pod が来ました
Ultra96 USB-to-JTAG/UART Pod がAvnet から配送されてきました。

Ultra96用PMOD拡 張ボードでカメラ入力3(DMA_Write_sFB IPの作成)
ソースコードは、”Ultra96実践勉強会で作ったVivado HLS 2018.2 のDMA Write IP”に貼ってある。ソースコードのバグフィックスができたので、DMA した画像は出てきたが、C/RTL 協調シミュレーションがエラーになってしまう。なお、バグフィックスのために参考にさせていただいたのは、”OpenCV の Mat のデータを直接いじる”だ。これで、Mat の書き換え方法がわかった。ありがとうございました。
Ultra96用PMOD拡 張ボードでカメラ入力4(Vivado 2018.2のcam_test_182プロジェクト1)
前回はVivado HLS 2018.4 でAXI4-Stream をDDR4 SDRAM にDMA するDMA_Write sFB を作成した。これで、カメラのインターフェースIP とDMA IP が揃ったので、今回は、それらを使用して、Vivado 2018.2 で cam_test_182 プロジェクトを作成していこう。
Ultra96用PMOD拡 張ボードでカメラ入力5(Vivado 2018.2のcam_test_182プロジェクト2)
前回は、Ultra96 ボードの低速拡張コネクタにPMOD 変換基板を付けて、MT9D111 カメラを接続する回路のブロック・デザインを作成し、HDL ラッパー・ファイルを生成し、制約ファイルを作成した。今回は、論理合成、インプリメンテーション、ビットストリームの生成を行うが、エラーが出てしまっている。
Ultra96用PMOD拡 張ボードでカメラ入力6(Vivado 2018.2のcam_test_182プロジェクト3)
前回は、Ultra96 ボードの低速拡張コネクタにPMOD 変換基板を付けて、MT9D111 カメラを接続する回路の論理合成、インプリメンテーション、ビットストリームの生成を行ったが、タイミング・エラーが出てしまった。今回は、そのタイミング・エラーを解消 した。

Ultra96 のDebian にOpenCV 3.4.3 をインストール1
Ultra96 のDebian にOpenCV 3.4.3 をインストールしてみたいということでやってみた。
Ultra96 のDebian にOpenCV 3.4.3 をインストール2
前回は、Ultra96 にOpenCV 3.4.3 をインストールして、demo.py が起動したが、cv.namedWindow('edge') でエラーになった。今回は、その続きをやってみよう。
Ultra96 のDebian にOpenCV 3.4.3 をインストール3
前回は、demo.py からいろいろなOpenCV のサンプルを起動できるようになった。今回は、環境を整備して ffmpeg とかも入れてみようと思う。

mjpg-streamer を使ってUltra96に付けたUSBカメラの画像をストリーミングする
Ultra96 にUSBカメラを付けて、その画像をパソコンにストリーミングできたら、ミニ・ロボットカーに付けて白線の画像を取得できそう。ということでやってみた。

Ultra96用PMOD拡 張ボードでカメラ入力7(Vivado 2018.2のcam_test_182プロジェクト4)
前回は、タイミングエラーを解消し、論理合成、インプリメンテーション、ビットストリームの生 成を完了した。今回は、実際にUltra96 に低速コネクタ用PMOD変換基板を取り付け、MT9D111 カメラを取り付けてテストを行う。
Ultra96用PMOD拡 張ボードでカメラ入力8(Vivado 2018.2のcam_test_182プロジェクト5)
前回は、Ultra96 に低速コネクタ用PMOD変換基板を取り付け、MT9D111 カメラを取り付けてテストを行ったが、動作していなかった。今回は、オシロスコープを購入したので、カメラの波形を観察して、Vivado Analyzer でもう一度確認してみよう。
Ultra96用PMOD拡 張ボードでカメラ入力9(Vivado 2018.2のcam_test_182プロジェクト6)
前回は、オシロスコープでカメラの信号を見たところ、正常だった。 mt9d111_inf_axis IP もおかしくないようなので、DMA_Write_sFB IPがおかしいのでは?という結論になった。今回は、DMA_Write_sFB を作り直してみよう。
Ultra96用PMOD拡 張ボードでカメラ入力10(Vivado 2018.2のcam_test_182プロジェクト7)
前回は、DMA_Write_sFB が動作しないということで、再度作り直して、ソースコードを貼った。今回は、再度Vivado HLS でC シミュレーションや合成、C/RTL 強調シミュレーション、Export RTL を行う。
Ultra96用PMOD拡 張ボードでカメラ入力11(Vivado 2018.2のcam_test_182プロジェクト8)
前回は、動作しなかったDMA_Write_SFB を修正したVivado HLS プロジェクトで、もう一度、C シミュレーション、C コードの合成、C/RTL 強調シミュレーション、Export RTL を行った。今回は、前回生成されたIP を使用して、もう一度、カメラのデータがフレーム・バッファにDMA されるのか?を確かめてみよう。

Ultra96 のDebianにインストールしたOpenCV-3.4.3のC++サンプルデザインをコンパイル
Ultra96 のDebian にインストールしたOpenCV-3.4.3 のC++ サンプルデザインをコンパイルしてみた。

Ultra96 のboot.bin を変更
以前作製したboot.bin は低速コネクタでLチカするビットファイルが入っているに気がついた。これでは、カメラを取り付けたときに出力同士がぶつかってしまう。
そこで、ビットファイルを抜いて、boot.bin を作り直すことにした。

Ultra96用PMOD拡 張ボードでカメラ入力11(Debian上でカメラ画像を画像ファイルに1)
前回は、cam_test_182 プロジェクトのビットファイルをUltra96 にダウンロードして、アプリケーションを起動し、Vivado Analyzer で動作を確かめた。ただし、動作しているという概況を見ただけで、画像データが正しいかどうかは確認していない。それはこれから、カメラ画像を画像ファイルにして、その画 像ファイルを確認することで確かめていこう。今回は、デバイスツリーを作成して、ロードしてみよう。
Ultra96用PMOD拡 張ボードでカメラ入力12(Debian上でカメラ画像を画像ファイルに2)
前回は、Ultra96 のDebian 上でビットファイルをロードし、クロックのデバイスツリーをロードした。今回は、引き続き、uio と udmabuf のロードを行う。
Ultra96用PMOD拡 張ボードでカメラ入力13(Debian上でカメラ画像を画像ファイルに3)
前回は、、uio と udmabuf のロードを行った。今回はいよいよ cam_capture.cpp を作成して、カメラ画像をBMPファイルにすることができた。

Ultra96用PMOD拡 張ボードの波形の観察
”Ultra96用PMOD拡張ボードでカメラ入力13(Debian上でカメラ画像を画像 ファイルに3)”でカメラの画像をBMPファイルに変換することができたので、Ultra96用PMOD拡張ボードの波形をオシロスコープで観察することにし た。

Ultra96用PMOD拡 張ボード8(基板の改版1)
Ultra96用PMOD拡張ボードは、+3.3V 側にプルアップ抵抗を付け忘れていた。よって、プルアップ抵抗を +3.3V の全出力ピンに追加する。
Ultra96用PMOD拡 張ボード9(基板の改版2)
前回は、Ultra96 用PMOD 拡張ボードの回路図にプルアップ抵抗を追加して、基板図面にエクスポートした。今回は、FreeRouter で自動配線を行って、基板図面を完成させよう。
Ultra96用PMOD拡 張ボード10(基板の改版3)
前回は、Ultra96用PMOD拡張ボードの基板レイアウトが完成した。今回は、ガーバー・ データとドリル・データを出力してFusion PCB に発注しよう。
Ultra96用PMOD拡 張ボード11(改版した基板が届いた)
昨日、改版したUltra96 用PMOD 拡張ボードが届いた。
Ultra96用PMOD拡 張ボード12(改版した基板に部品を実装した)
前回届いたUltra96用PMOD拡張基板に部品を実装した。
これでテストできる。

秋月電子カメラモジュール OV5642を使う1
今までMT9D111 を使ってきたが、日昇テクノロジーのMT9D111 は在庫切れでディコンになってしまったようだ。
その代わりを探していたが、秋月電子を見ているとOV5642があったので、これを試してみたいと思った。たぶん、OV5642 は以前ひでみさんが試していたことがあったと思う。それに、エンヤさんの記事がインターフェースの 2014年11月号に載っているので、それを参考にしたいと思う。
秋月電子カメラモジュール OV5642を使う2(OV5642の設定の検討)
Ultra96 用PMOD 拡張ボードの発注ができたので、OV5642 に戻ってUltra96 や ZYBO-Z7-20 で使えるようにしたい。MT9D111 がディスコンになってしまったので、容易に購入できる秋月電子で売っているOV5642 に乗り換えたいからだ。
問題は、今まで使っていた800 x 600 ピクセルの画像サイズはデフォルトではないので、大きな画像サイズを切り取るしか無いかな?ということだ。もしくは、VGAかXGA に乗り換えるか?大きな画像サイズを切り取るにしてもOV5642 のレジスタ設定で出来るようだ。
秋月電子カメラモジュール OV5642を使う3(OV5642インターフェースIPの検討)
前回は、OV5642の設定レジスタの設定値を検討した。今回は、OV5642の信号を取り込 むOV5642インターフェースIP を検討する。
秋月電子カメラモジュール OV5642を使う4(AXI-Stream Data FIFO のシミュレーション)
前回は、OV5642の信号を取り込むOV5642インターフェースIP を検討した。その結果、AXI-Stream Data FIFO とOV5642 の画像データを受け取るVivado HLS のIP の組み合わせで行くことにした。今回は、AXI-Stream Data FIFO が使い物になるかどうか?HDL シミュレーションをしてみよう。
秋月電子カメラモジュール OV5642を使う5(OV5642インターフェースIP)
前回は、、AXI-Stream Data FIFO が使い物になるかどうか?ということで、HDL シミュレーションを行ったところ、うまく行きそうにないということがわかった。(AXI4-Stream の動作としては問題ない)今回は、OV5642のインターフェースIP を作っていこう。
秋月電子カメラモジュール OV5642を使う6(OV5642の設定レジスタの設定値)
OV5642のインターフェースIP を作ろうとし作ったのだが、設定レジスタの設定により、作成済みのMT9D111 のインターフェースIP と違いが無くなったためMT9D111 のインターフェースIP を使用することにした。今回は、OV5642を使用するための設定レジスタの設定値を決定する。ただしまだ半分くらいだ。
秋月電子カメラモジュール OV5642を使う7(OV5642の設定レジスタの設定値2)
前回は、OV5642を使用するための設定レジスタの設定値を半分程度決定した。今回は、 OV5642を使用するための設定レジスタの設定値を決定して、Python でC コードに変換してみよう。
秋月電子カメラモジュール OV5642を使う8(OV5642用Vivadoプロジェクト)
前回は、OV5642を使用するための設定レジスタの設定値を決定して、Python でC コードに変換した。今回は、Ultra96 用の cam_test_182 のVivado プロジェクトを少し改変して、OV5642用のVivado プロジェクトを作ろう。
秋月電子カメラモジュール OV5642を使う9(デバイスツリー・オーバレイ用ファイルの整備)
前回は、Ultra96 用の cam_test_182 のVivado プロジェクトを少し改変して、OV5642用のVivado プロジェクトを作った。今回は、Debian 上でソフトウェアを起動するために、デバイスツリー・オーバレイ関連のファイルを整備する。
秋月電子カメラモジュール OV5642を使う10(アプリを用意して実機テスト)
前回は、Ultra96 のDebian 上でソフトウェアを起動するために、デバイスツリー・オーバレイ関連のファイルを整備した。今回は、アプリケーション・ソフトを作成して、OV5642 を動作させてみよう。HREF、VSYNCの波形が出力されなかった。
秋月電子カメラモジュール OV5642を使う11(VGA解像度でテスト)
前回は、アプリケーション・ソフトを作成して、OV5642 を動作させようとしたが、HREF、VSYNC の波形が全く出ていなかった。今回は、インターフェース2014年11月号の設定値つまりVGA 解像度で、HREF、VSYNC が出てくるかどうか?を確かめてみよう。VGAだったらHREF、VSYNCは出力されていた。
秋月電子カメラモジュール OV5642を使う12(カメラ画像が表示できた)
前回は、インターフェース2014年11月号の設定値つまりVGA 解像度で、HREF、VSYNC が出てくるのを確認することができた。今回は、SVGA 解像度のレジスタ設定をいじってカメラ画像を表示させてみよう。カ メラ画像は見えたが、色がおかしかった。
秋月電子カメラモジュール OV5642を使う13(カメラ画像が表示できた2)
前回は、SVGA 解像度のレジスタ設定をいじってカメラ画像を表示させることができたが、色がおかしかった。今回は、教えてもらったレジスタ設定を試して、色も問題なくなった。本当に教え てくれた岩田さんに感謝する。
秋月電子カメラモジュール OV5642を使う14(画像が縦長で横に反転)
前回は、教えてもらったレジスタ設定を行って、カメラ画像を綺麗な色に表示できた。今回は、数 字を映してみると左右に反転して表示されている状況を確認して、カメラからレベル変換IC を通った後の波形を確認した。
秋月電子カメラモジュール OV5642を使う15(完成)
OV5642 のレジスタ設定では、標準で 0x3818 番地のレジスタ設定が 0xC1 になっていて、横方向がMirror になっている。MT9D111 に比べて撮像素子を 180 度回してマウントしてあるようなので、それを上下に Filp してMirror 無しにしたいのだが、どうしてもレジスタ設定でそうすることができない。よって、Filp は諦めて、Mirror 無しにして、ソフトウェアで読み方を修正することにした。こうすると行は反対になっているが、列のアドレスは単調増加なので、ハードウェアで読む場合に800ピクセルを バーストできる。画像全部は連続してバーストできないが、800 ピクセルごとにアドレスを再設定する、スキャッター・ギャザーDMA を実装すれば比較的簡単にAXI4-Stream にできるだろう。綺麗な色で、正常なサイズのカメラ画像のBMPファイルが作成できた。

Ultra96用PMOD拡張ボードを使って、PMOD VGAで画像出力1(Vivado HLS編)
”秋月電子カメラモジュールOV5642を使う15(完成)”でUltra96 ボードに Ultra96 用PMOD 拡張ボードを付けて、そこに、OV5642 を取り付けてカメラ画像を取得することができた。今回はUltra96 用PMOD 拡張ボードにPMOD VGA を取り付けて画像を出力できるか?を確かめてみよう。
Ultra96用PMOD拡 張ボードを使って、PMOD VGAで画像出力2(Vivado編)
前回は、”秋月電子カメラモジュールOV5642を使う15(完成)”でUltra96 ボードに Ultra96 用PMOD 拡張ボードを付けて、そこに、OV5642 を取り付けてカメラ画像を取得することができた。今回はUltra96 用PMOD 拡張ボードにPMOD VGA を取り付けて画像を出力できるか?を確かめてみよう。ということで、Vivado HLS でSVGA 画像を出力するIP を作成した。今回は、そのIP を使用して、Vivado 2018.3 でプロジェクトを作成しよう。
Ultra96用PMOD拡 張ボードを使って、PMOD VGAで画像出力3(実機テスト)
前回は、Vivado 2018.3 で display_cont_Ultra96_183 プロジェクトを作成し、そのプロジェクトのディレクトリに display_cont_ip ディレクトリを作成した。display_cont_ip ディレクトリに前回Vivado HLS で作成したIP をコピーした。そして、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルが生成された。今回は、生成されたビットファイルをbin ファイルに変換して、Ultra96 ボード上のDebian で動作させてみよう。

Ultra96用PMOD拡 張ボードのパーツリスト
”Ubuntu 18.04 の Kicad 5.0 でBOM出力”でUltrao96用PMOD拡張ボードのBOM は出したのですが、アカデミック向けにとりあえずはUltra96用PMOD拡張ボードを無料で配布して、具合を見てもらうと思っています。
そのためにパーツ購入リストを作ってみました。
アカデミック向けに送付したUltra96用PMOD拡張ボード
今日、アカデミック向けにUltra96用PMOD拡張基板とパーツを送付しました。
送付した内容は、1セットに付き
Ultra96用PMOD拡張基板 1枚
レベル変換IC、LSF0108,LSF0108QPWRQ1 2個
1608 パッケージの 1KΩ 16個 + 1 個予備
1608 パッケージの100 KΩ 4個 + 1 個予備
です。

Ultra96の DisplayPortを使用するためのテスト1(Vivado プロジェクトを作成した)
Ultra96 ボードのDisplayPort のことを調べていたが、DisplayPort を使用するための情報がひでみさんの”FPGAの内容が薄い本”に載っていたので、もう一度試してみようと思う。
”Ultra96用PMOD拡張ボードを使って、PMOD VGAで画像出力1(Vivado HLS編)”で使用したSVGA 解像度のパターン・ジェネレータのdisplay_cont_sub IP をDisplayPort に接続して、画像を表示してみたい。
Ultra96の DisplayPortを使用するためのテスト2(デバイス・ツリーの作成)
前回は、Ultra96 ボードのDisplayPort を使ってみたいということで、ひでみさんの”FPGAの内容が薄い本”を参照して、やってみることにした。そして、SVGA のテストバターンを画像出力するIP をZynq UltraScale+ MPSoC のLiveVideo 端子に接続し、ビットストリームを生成した。今回は、生成されたビットストリーム・ファイルをUltra96 にFTP し、ビットストリームやクロックをコンフィギュレーションするDTB ファイルを作成する。
Ultra96の DisplayPortを使用するためのテスト3(実機テスト)
前回は、生成されたビットストリーム・ファイルをUltra96 にFTP し、ビットストリームやクロックをコンフィギュレーションするDTB ファイルを作成した。今回は、memwrite アプリを作成してUltra96 のDisplayPort を使ってみよう。
Ultra96の DisplayPortを使用するためのテスト3(XGA解像度のdisplay_cont)
前回は、SVGA の画像パターン発生用IPのdisplay_cont をZynq UltraScale+ MPSoC のLive Video 入力に接続したのだが、XGA 解像度だったので、画像パターンが流れてしまった。本来は、Zynq UltraScale+ MPSoC のdp_video_out の水平動機信号や垂直同期信号に同期させる必要があるのだが、これは、Verilog HDL で書く必要がありそうなので、とりあえず、display_cont をXGA 対応にして、様子を見てみようと思う。
Ultra96の DisplayPortを使用するためのテスト4(Vivado、実機テスト)
前回は、XGA 解像度のdisplay_cont をVivado HLS 2018.3 で作成した。今回は、Vivado 2018.3 の DisplayPort_test プロジェクトの display_cont_sub IP と交換して論理合成、インプリメンテーション、ビットストリームの生成を行って、実機テストをしてみよう。
Ultra96の DisplayPortを使用するためのテスト5(Vivado、実機テスト2)
前回は、Vivado 2018.3 の DisplayPort_test プロジェクトの display_cont_sub IP と交換して論理合成、インプリメンテーション、ビットストリームの生成を行って、実機テストをしたのだが、テストパターンが出なかった。実は良くブロック・デザインを見て みると、、PSのdp_video_in_clk に繋ぎ忘れていた。。。これはまずいということで、今回はPSのdp_video_in_clk に接続してやってみた。

Ultra96の DisplayPortを使用するためのIPを作成する1(概要編)
”Ultra96のDisplayPortを使用するためのテスト5(Vivado、実機テス ト2)”で、テストパターン発生IP のクロックをdp_video_ref_clk から取ったプロジェクトでテストパターンを表示することができた。だが、まだ、同期が取れていなくて静止して表示されないので、Verilog HDL でPS の dp_video_out_hsync, dp_video_out_vsync, dp_live_video_de_out を使用して、それらの信号に同期した画像出力をする必要があるようだ。
Ultra96の DisplayPortを使用するためのIPを作成する2(pattern_gen_axis IP)
前回は、Ultra96 の PS のDisp;ayPort に出力するために、Video_out に同期信号に同期した画像出力をPS の Live Video の video_in に入れる必要があったので、そのブロック図を示した。今回は、その内のpattern_gen_axis IP (pattern_out_axis のはずだったが作ってみたら手元が狂って名前が変わってしまった。悪しからずご了承ください)をVivado HLS 2018.3 で作成してみよう。
Ultra96の DisplayPortを使用するためのIPを作成する3(pattern_gen_axis IPの変更)
前回は、pattern_gen_axis IP をVivado HLS 2018.3 で作成したのだが、次のaxis2video_out.v を書いている時に、axis2video_out.v からpattern_gen_axis IP をスタートさせたいという欲求があったので、pattern_gen_axis IP のブロック・レベル・インターフェースを ap_ctrl_hs に変更した。
Ultra96の DisplayPortを使用するためのIPを作成する4(pixel_fifo の作成)
前回は、axis2video_out.v を書いている時に、axis2video_out.v からpattern_gen_axis IP をスタートさせたいという欲求があったので、pattern_gen_axis IP のブロック・レベル・インターフェースを ap_ctrl_hs に変更した。今回は、axi2video_out.v に使用する非同期FIFO のpixel_fifo を生成する。
Ultra96の DisplayPortを使用するためのIPを作成する5(テストベンチ の作成1)
前回は、axi2video_out.v に使用する非同期FIFO のpixel_fifo を生成した。今回は、axis2video_out.v は書き上がったのだが、検証していないので、まだ貼れないため、テストベンチの作成について書いてみよう。テストベンチではカメラなどの複雑な入力のモデルを作るのが面倒 なのだが、ここにVivado HLS という便利なツールがある。C で書いてHDL で吐き出してくれるので、モデルを C で書いてHDLを作ろう。今回の pattern_gen_axis はVivado HLS で作ってあるので、それをモデルにしやすいようにパラメータを固定しただけでHDL モデルとして使用することにした。
Ultra96の DisplayPortを使用するためのIPを作成する6(テストベンチ の作成2)
前回は、テストベンチを作成する1歩として、 pattern_gen_axis をテストベンチに使用するために修正した。今回は、テストベンチ本体を作成してテストを行う。
Ultra96の DisplayPortを使用するためのIPを作成する7(テストベンチ の作成3)
前回からブログが2日空いてしまった。土曜日が大切な仕事で出勤だったためもあるのだが、いろ いろとプロジェクトを作って試していたが、どうしてもうまくテストバターンが表示されなかった。Vivado Analyzer を使って、実際の波形を確認したところ、アクティブローだと思っていたZynq UltraScale+ MPSoC のdp_video_out_hsync とdp_video_out_vsync がアクティブハイだということがわかった。逆の波形で実装していたので、これは表示できないというのが分かった。それを踏まえて、今回は、”Ultra96の DisplayPortを使用するためのIPを作成する6(テストベンチ の作成2)”で行ったシミュレーションをdp_video_out_hsync とdp_video_out_vsync 、dp_live_video_de_out のモデルを作って実行した。
Ultra96の DisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)
これまで作ってきたIP を接続してUltra96のDisplayPortを使用するためのプロジェクトを作成した。プロジェクト名はDisplayPort_test なのだが、DisplayPort_test_XGA1_sync ディレクトリに作ってある。
Ultra96の DisplayPortを使用するためのプロジェクトを作成する2(表示失敗)
前回は、これまで作ってきたIP を接続してUltra96のDisplayPortを使用するためのプロジェクトを作成した。プロジェクト名はDisplayPort_test なのだが、DisplayPort_test_XGA1_sync ディレクトリに作ってある。このプロジェクトを論理合成、インプリメンテーション、ビットストリームの生成を行った。ハードウェアをエクスポートして、SDKを立ち上げ、 ビットストリームを加工して、bin ファイルを生成した。今回は、Ultra96 のDebian を起動し、デバイス・ツリーをロードし、アプリケーション・ソフトを起動して、Displayport への表示を行う。
まだ、うまく表示することができない。
Ultra96の DisplayPortを使用するためのプロジェクトを作成する4(完成)
前回は、Ultra96 のDisplayPort でテストパターンがうまく表示できなかったので、Vivado Analyzer を使ってデバックを行った。今回は、デバック結果を元にVerilog HDL ソースコードを修正して、テストパターンの表示を行ってみよう。
テストパターンが正常に表示できたように見えたが、色を表示している場所が違っている。
Ultra96の DisplayPortを使用するためのプロジェクトを作成する5(HD解像度のテストパターン)
前回は、デバック結果を元にVerilog HDL ソースコードを修正して、テストパターンの表示を行って成功した。だが、前回の回路では、XGA解像度では、テストパターンを表示できても、HD解像度では、パターン生成 回路やAXI4-Stream の動作周波数が 100 MHz で、HD解像度の 148.5 MHz で動作する回路のスループットを満たせずにテストパターンが表示できなかった。今回は、HD解像度のテストパターンを表示してする。
正常に表示できるように見えて、色が違っていた。

カメラ画像を DisplayPortに出力する1(構想編)
”Ultra96のDisplayPortを使用するためのプロジェクトを作成する5(HD解 像度のテストパターン)”で、Ultra96 のDisplayPort にテストパターンを出力することができた。今回は、カメラ画像をUltra96 のDisplayPort に出力してみたい。
カメラ画像を DisplayPortに出力する2(vflip_dma_write2 の1)
前回は、カメラ画像をUltra96 のDisplayPort へ出力するための回路の構想を練った。今回は、その内のvflip_dma_write2 について書いてみよう。
カメラ画像を DisplayPortに出力する3(vflip_dma_write2 の2)
前回は、vflip_dma_write2 IP のVivado HLS 2018.3 プロジェクトを作成して、ソースコードを貼った。今回は、vflip_dma_write2 プロジェクトで、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。
カメラ画像を DisplayPortに出力する4(disp_dmar_aixs の1)
前回は、vflip_dma_write2 プロジェクトで、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行った。今回は、Read 側のDMA の disp_dmar_axis IP を作成しよう。
カメラ画像を DisplayPortに出力する5(disp_dmar_aixs の2)
前回は、Read 側のDMA の disp_dmar_axis IP のコードを貼った。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。
カメラ画像を DisplayPortに出力する6(Vivado プロジェクト)
前回は、Read 側のDMA の disp_dmar_axis IP のC シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行った。今回は、使用するIP が揃ったので、Vivado 2018.3 でプロジェクトを作成しよう。
カメラ画像を DisplayPortに出力する7(binファイルの生成)
前回は、使用するIP が揃ったので、Vivado 2018.3 でプロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートして、SDK を立ち上げてbin ファイルを生成した。
カメラ画像を DisplayPortに出力する7(ブロックデザインの変更)
前回は、ハードウェアをエクスポートして、SDK を立ち上げてbin ファイルを生成した。今回は、Ultra96 のDebian 上で動作するC 言語のアプリケーション・ソフトを作っていたところ、display 側の disp_dmar_axis IP がフレームバッファのアドレスを設定する前に動作する可能性があることがわかった。そこで、 disp_dmar_axis IP を起動する axis2video_out IP の init_done を制御する axi_gpio_0 を挿入することにした。更に active_frame もプロセッサが知る必要があるということで、axi_gpio_1 も追加することにした。

Zynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータ
どうやらZynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータの色のビットフィールドが間違っていたようだ。
LiveVideo のビット・フィールドはRGB ではなくBRG となっているようだ。

カメラ画像を DisplayPortに出力する8(Ultra96 での準備)
前回は、init_done 信号用と active_frame をキャプチャするための axi_gpio を 2 つ追加した。今回は、Ultra96 上のDebian で、デバイスツリーを生成して、アプリケーションを動作させる下準備を行う。
カメラ画像を DisplayPortに出力する9(アプリを作成、完成)
前回は、Ultra96 上のDebian で、デバイスツリーを生成して、アプリケーションを動作させる下準備を行った。今回は、カメラ画像をDisplayPort に出力するためのアプリケーション・ソフトを作成して、Ultra96 のDisplayPort でカメラ画像を表示しよう。
HD 解像度のディスプレイ画面にカメラ画像を表示できた。

Ultra96-PYNQを ビルドしてみた
”Docker でPetaLinux 2018.2 をインストールする”でDocker でUbuntu 16.04 にVivado 2018.2 をインストールしてPetaLinux 2018.2 をインストールすることができた。これでいよいよ目的だった。Avnet 社のAvnet/Ultra96-PYNQ をインストールすることができる。
ビルドは失敗した。
Ultra96 のPYNQ リソースやhackstar.io のリソース
”Ultra96-PYNQをビルドしてみた”ではUltra96-PYNQ のビルドが失敗してしまったが、Ultra96-PYNQ のイメージはあるのでやってみることができる。

Ultra96のPMOD拡張ボード計画(高速、低速コネクタをPMODへ変換)の部品調査結果の覚書
Ultra96 のPMOD 拡張ボードを作ってきたが、Ultra96V2 の回路図を見た結果、Ultra96V2 では動作しないことが判明した。
理由は、低速コネクタ用のPMOD 拡張ボードの電源に使用しているVSYS_IN に逆向きにショットキーバリアダイオード (D18) が挿入されたからだ。Ultra96 への電源供給用だったんだ。。。知らなかった。(やまさん、ありがとうございました)
この低速コネクタ用のPMOD 拡張ボードの電源をVSYS_IN からVCC5V0 へ変更すれば良いので、改版はすぐにできそうだ

MIPI Adapter MezzanineボードのJ15用のPMOD拡張ボードの部品選定
96boards の MIPI Adapter Mezzanine カードの J15 に挿すのPMOD 拡張ボードを作ろうと思っている。これを作れば、ラズパイカメラをMIPI で接続して、PMODから従来から使用しているモーター制御用のPMODモジュールに接続することができる。
MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの回路図
前回、MIPI Adapter MezzanineボードのJ15用のPMOD拡張ボードの部品選定を行ったが、精査してみると、J15 にはPL のポートが 5 つしか無いことが判明した。後のGPIO は PS のGPIO だった。という訳でPL のGPIO の数が足りないので、J13 からも信号を出力することにした。こうすれば、+3.3V 電源が手に入るので、DCDCコンバータを実装する必要がなくなる。
MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの基板1
前回はMIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの回路図を書いた。今回は、その基板のパターンを作成していこう。
MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの基板2
前回は、MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの基板パターンを作成した。今回は、基板のシルクの追加とそれに基板のサイズを少々縮小し、 FusionPCB に発注した。
MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードの部品の発注
今回は部品を秋月電子に発注した。
MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードが届いた
FusionPCB に発注したMIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードが届いた。発注してから足掛け4日で届いた。とっても速い。凄いです。

Ultra96用PMOD拡 張ボード13(Ultra96V2用に改版した)
Ultra96 のPMOD 拡張ボードを作ってきたが、Ultra96V2 の回路図を見た結果、Ultra96V2 では動作しないことが判明した。
理由は、低速コネクタ用のPMOD 拡張ボードの電源に使用しているVSYS_IN に逆向きにショットキーバリアダイオード (D18) が挿入されたからだ。Ultra96 への電源供給用だったんだ。。。知らなかった。(やまさん、ありがとうございました)
この低速コネクタ用のPMOD 拡張ボードの電源をVSYS_IN からVCC5V0 へ変更する。
Ultra96用PMOD拡 張ボード14(Ultra96V2用に改版した2)
前回は、Ultra96V2 の回路図を見た結果、Ultra96 のPMOD 拡張ボードがUltra96V2 では動作しないことが判明したので、電源をVSYS_IN からVCC5V0 へ変更した。今回は、電源スイッチを押すのが、とっても大変なので、電源スイッチとPOR (Power On Reset) のタクトスイッチを 2 個実装することにした。

Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる1
基板は、まだPMOD 6 個のUltra96 用PMOD 拡張ボードが残っているのだが、基板の設計に飽きたので、Fixstars Tech Blog さんに「Ultra96 Linux で MIPI カメラから画像を取得する」がある。これは、Ultra96 にMIPI 拡張ボードを挿して、MIPI コネクタにPcam 5C を挿入して画像を自分でもMIPI 拡張ボードとPcam 5C カメラを持っているので、やってみることにした。
Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる2
前回は、Fixstars Tech Blog さんの「Ultra96 Linux で MIPI カメラから画像を取得する (セットアップ編)」の手順通りに、Vivado 2018.2 でTCL スクリプトを起動して、Vivado 2018.2 のプロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は続きの「bin ファイルの生成」、「V4L2 カーネルドライバおよびカメラ初期化 S/W のビルド」を行っていく。
Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる3
前回は、Fixstars Tech Blog さんの「Ultra96 Linux で MIPI カメラから画像を取得する (セットアップ編)」の手順通りに、「bin ファイルの生成」、「V4L2 カーネルドライバおよびカメラ初期化 S/W のビルド」を行った。今回は、「5. 実機上でのカーネルドライバロードおよび初期化 S/W の実行」、「6. 実機上でのカメラ画像取得テストの実行」を行う。
Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる4
前回は、Fixstars Tech Blog さんの「Ultra96 Linux で MIPI カメラから画像を取得する (セットアップ編)」の手順通りに、「5. 実機上でのカーネルドライバロードおよび初期化 S/W の実行」、「6. 実機上でのカメラ画像取得テストの実行」を行った。今回は、「7. display port 経由での外部ディスプレイ出力」をやってみよう。

MIPIボード用PMOD拡 張ボードをテストする1
”MIPI Adapter MezzanineボードのJ13、J15用のPMOD拡張ボードが届いた”で届いた基板に部品を実装した。
次からは、Vivado のブロック・デザインにPMOD に出力する信号を追加して、MIPIボード用PMOD拡張ボードをテストしていこう。
MIPIボード用PMOD拡 張ボードをテストする2(PMODテスト用IPの作成)
前回は、MIPI ボード用PMOD 拡張ボードに部品を実装し、MIPI ボードの取り付けて、MIPI ボードの動作に変化が無いことを確かめた。今回は、PMOD 拡張ボードのPMOD の動作を確認するためにPMOD テスト用IP を作成し、Vivado に持っていって論理合成を行った。
MIPIボード用PMOD拡 張ボードをテストする3(実機でテスト)
今回は、PMOD 拡張ボードのPMOD の動作を確認するためにPMOD テスト用IP を作成し、Vivado に持っていって論理合成を行ったのだが、前回の回路では、clkcfg のDTS ファイルにfclk1 のエントリが無いので、クロックが主力されなかった。DTS ファイルに fclk1 のエントリを作れば良いのだが、面倒なので、fclk0 からクロックをもらってしまった。目で見て分からなくなったが、オシロスコープで確認すれば良いということにした。

Ultra96用PMOD拡 張ボード15(Ultra96V2用に改版した3)
Ultra96V2用に改版したUltra96用PMOD拡張ボードを5月15日に FusionPCB に発注したが、5月24日(金)に基板が到着した。
今回は、Power SW などを搭載するようにした。
Ultra96用PMOD拡 張ボード16(タクトスイッチのフットプリントの修正)
”Ultra96用PMOD拡張ボード15(Ultra96V2用に改版した3)”で基板が届 いたので、部品を載せてみたところ、タクトスイッチのフットプリントが小さすぎてはみ出してしまうことが分かった。タクトスイッチのフットプリントを修正し た。

MIPIボード用PMOD拡 張ボードをテストする3(I2C、SPI のテスト方法)
MIPIボード用PMOD拡張ボードのI2C をテストする。
MIPIボード用PMOD拡 張ボードをテストする4(I2Cのテスト用部品の到着)
MIPIボード用PMOD 拡張ボードのI2C 入出力をテストするために秋月電子に注文しておいた部品が届いた。
BME280使用 温湿度・気圧センサモジュールキットをTCA9548A の 0 番ポートの I2C0 や I2C1 に接続して温度が計測できるかどうか?をテストしてみよう。
MIPIボード用PMOD拡 張ボードをテストする5(I2Cのテスト1)
前回、I2C のテスト用のBME280使用 温湿度・気圧センサモジュールキットなどが到着した。今回は、そのBME280使用 温湿度・気圧センサモジュールキットにヘッダをはんだ付けし、I2C モードに設定して、ブレッドボード上に回路を組んでテストした。
MIPIボード用PMOD拡 張ボードをテストする6(I2Cのテスト2)
前回は、BME280使用 温湿度・気圧センサモジュールキットにヘッダをはんだ付けし、I2C モードに設定して、ブレッドボード上に回路を組んでI2C のテストをし、レジスタが読めることを確認した。今回は、温度、気圧、湿度を表示してみよう。

Ultra96用PMOD拡 張ボード17(部品の実装)
前回は、タクトスイッチのフットプリント図が間違っていて購入したタクトスイッチが取り付け出 来なかったので、タクトスイッチのフットプリントを修正した。しかし、”Ultra96用PMOD拡張ボード15(Ultra96V2用に改版した3)”で出 来上がった基板にタクトスイッチを実装するためにフットプリントに合うタクトスイッチをツィッターで教えてもらった。タクトスイッチが実装できるようになった ので、今回は部品を実装した。
Ultra96用PMOD拡 張ボード18(動作の確認)
前回は、Ultra96用PMOD拡張ボードに部品を実装した。今回は、Ultra96ボード にUltra96用PMOD拡張ボードを搭載してOV5642 カメラを接続して画像がDisplayPort に表示されるかどうか?を確認することができた。
なお、今回のUltra96_ext_board Ver.3 はUltra96V2 にも対応するボードだ。前のVer. 2はUltra96V2 では動作しないと思う。

Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する1(準備編)
”Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる4”でPcam5C のカメラ画像をディスプレイに表示することができなかった。だが、”カメラ画像をDisplayPortに出力する9(アプリを作成、完成)”でMIPI ではないパラレル出力のOV5642 をDisplayPort に表示することができている。そこで、両方を組み合わせてPcam5C の画像をUltra96 のDisplayPort に出力したい。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する2(ブロックデザインの変更)
前回は、”Fixstars Tech Blogの「Ultra96 Linux で MIPI カメラから画像を取得する」をやってみる4”でPcam5C のカメラ画像をディスプレイに表示することができなかった。だが、”カメラ画像をDisplayPortに出力する9(アプリを作成、完成)”でMIPI ではないパラレル出力のOV5642 をDisplayPort に表示することができている。そこで、両方を組み合わせてPcam5C の画像をUltra96 のDisplayPort に出力したいということで、PSのLiveVideo を有効にした。今回は、それを元にブロックデザインを完成させよう。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する3(fpga.binファイルの生成)
前回は、Ultra96 にMIPI 拡張ボードを挿入し、Pcam5C を取り付けて、DisplayPort にPcam5C のカメラ画像を出力するVivado プロジェクトのブロックデザインを作成した。今回は、そのブロックデザインを論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルを生成さ せる。そして、そのビットファイルをbin ファイルに変換しよう。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する4(再度ブロックデザインの変更)
”Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する”シリーズも fpga.bin の生成まで行っているが、このままではまずい。なぜならば、VGA画像をXGA 画像やHD 画像に変換する必要がある。ということで、”VGA画像をXGA画像やHD画像に変換するdisp_dmar_axis_vga IP 5(やっと完成2)”でVGA画像をXGA画像やHD画像に変換するdisp_dmar_axis_vga IP を作成した。このDMA を使用するとVGA画像をXGA画像やHD画像に変換することができるので、”Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する2(ブロックデザインの変更)”のブロックデザインをdisp_dmar_axis_vga IP に入れ替えよう。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する5(再度fpga.bin を生成)
前回は、ultra96_design_dp ディレクトリのVivado 2018.2 プロジェクトのブロックデザインをdisp_dmar_axis_vga IP に入れ替えて、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、fpga.bin を再度生成しよう。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する6(現状確認)
前回は、fpga.bin を再度生成した。今回はPcam5C カメラの画像をDisplayPort に出力するために現状を再確認しよう。
カメラ画像をPNGファイルとしてみることはできている。つまり、カメラ画像を取得する部分は動作している。
V4L2の資料へのリンクあり
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する7(現状確認2)
前回は、Pcam5C カメラの画像をDisplayPort に出力するために現状を再確認したのだが、自分で 1 からソフトウェアを作るか、それてもV4L2 を勉強して、それに沿って作るか迷っていた。今回は、とりあえずは、フレームバッファからDMA Read して、DisplayPort に出力するだけなので、VDMA のフレームバッファのアドレスが分かれば良いのでは? ということで、VDMA のステータスをRead してみた。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する8(ブロックデザインの変更)
前回は、VDMA のフレームバッファのアドレスが分かれば良いのでは? ということで、VDMA のステータスをRead してみた。今回は、VDMA のフレームバッファが正常に読めたので、それを元にアプリケーション・ソフトが書けそうだ。だが、VDMA の現在表示しているフレームバッファの番号を示すs2mm_frame_ptr_out を観察したいので、AXI_GPIO を追加して、もう一度、手順をやり直した。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する9(DisplayPort のクロック制約を追加)
前回は、active_frame をGPIO で観察できるようにブロックデザインにGPIO を追加して、論理合成、インプリメンテーション、ビットストリームの生成を行って、fpga_dp.bin を生成した。今回は、DisplayPort 用のクロックのdp_video_ref_clk の制約を追加していなかったので、追加した。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する10(CDCでUnsafeにならない記述)
前回は、DisplayPort 用のクロックのdp_video_ref_clk の制約を追加していなかったので、追加した。これで十分だとは思うが、今回は、CDC でUnsafe を 0 にすることを目標にaxis2video_out.v の Verilog HDL コードを修正してみよう。
Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する11(アプリケーションで動作確認)
前回は、CDC でUnsafe を 0 にすることを目標にaxis2video_out.v の Verilog HDL コードを修正した。今回は、アプリケーション・ソフトを作成して、回路を動作させてみよう。

Ultra96V2 が届いた
昨日、Ultra96V2 が届いた。

Ultra96 MIPI拡張ボードに接続したPcam5C の画像をDisplayPort に表示する12(Vivado Analyzerでデバック)
前回は、アプリケーション・ソフトを作成して、回路を動作させてみようということで、 DisplayPort に画像を出力することができなかった。今回は、動かないのが悔しいので、Vivado Analyzer を入れてどうなっているのか?を調査してみたい。

Adam Taylerさんの”MicroZed Chronicles: DisplayPort Controller — Part One”をやってみた1
Adam Taylerさんの”MicroZed Chronicles: DisplayPort Controller — Part One”をやってみた。
これは、Ultra96V2 のDisplayPort をベアメタル・アプリケーションで表示するという記事だった。プロジェクトのあるGitHub はAdam Tayler さんから直々にツィッターで教えてもらった。”MicroZed Chronicles: DisplayPort Controller — Part One”のGitHub

Ultra96-V2 Factory Image を試してみた
Ultra96-V2 で Ultra96-V2 Factory Image を試してみよう。
ひでみさんの”FPGAの内容が薄い本2”にも書いてあったが、Ultra96-V2 に入っていたMicro SD カードには何も書かれていなくて空だった。そこで、SD カードのイメージをダウンロードして書き込もう。
Ultra96-V2 Factory Image を試してみた2(Ultra96-V2 を無線LANでネットワークに接続した)
前回は、Ultra96-V2 Factory Image をMicroSD に書いて、Linux をブートした。今回は、Ultra96-V2 Factory Image のLinux を無線LAN でネットワークに接続できた。

Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール1
Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストールすることにした。
まずは、MicroSD カードの用意から始めよう。Ultra96-V2 Factory Image が書いてあったMicroSD カードを使用する。
Debianの起動メッセージあり。
Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール2(無線LANへの接続とデバイス・ドライバのインストール)
前回は、MicroSD カードにファイルをコピーして、Ultra96-V2 で Debian を起動した。今回は、そのDebian を無線LANに接続し、デバイス・ドライバのパッケージをインストールしてみよう。
Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール3(GUIアプリのインストール)
前回は、Ultra96-V2 のDebian を無線LANに接続し、デバイス・ドライバのパッケージをインストールした。今回は、nautilus, geany などのGUI アプリをインストールして、起動してみよう。
Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール4(OpenCV 4.1.0 のインストール)
前回は、nautilus, geany などのGUI アプリをインストールして、起動させることができた。今回は、Ultra96-V2 のDebian に OpenCV 4.1.0 をインストールしてみよう。
Ultra96 のDebianにインストールしたOpenCVのC++サンプルデザインをコンパイル
OpenCV 4.1.0 のC++ のサンプルデザインをコンパイルしてみようとしたが、結局うまく行かなかった。よって、以前、”Ultra96 のDebianにインストールしたOpenCV-3.4.3のC++サンプルデザインをコンパイル”でやったように、OpenCV 3.4.3 をインストールして、OpenCV 3.4.3 のC++ のサンプルデザインをコンパイルした。
Ultra96-V2 のDisplayPort にテストパターンを表示する1(プロジェクトの作成)
Ultra96-V2 のDisplayPort にテストパターンを表示してみようということで、”Ultra96のDisplayPortを使用するためのプロジェクトを作成する 1(DisplayPort_test_XGA1_sync)”を参照して Vivado 2018.3 の DisplayPort_test_XGA1_sync_V2 プロジェクトを作成した
Ultra96-V2 のDisplayPort にテストパターンを表示する2(binファイルの作成)
前回は、Ultra96-V2 のボード・ファイルを使用して、Ultra96-V2 のDisplayPort にテストパターンを表示するためのブロックデザインを作成した。今回は、それを論理合成、インプリメンテーション、ビットストリームの生成を行って、bin ファイルを作成する。
Ultra96-V2 のDisplayPort にテストパターンを表示する3(各種スクリプト・ファイルやDTS ファイルの用意)
前回は、Ultra96-V2 のボード・ファイルを使用して、Ultra96-V2 のDisplayPort にテストパターンを表示するためのブロックデザインを論理合成、インプリメンテーション、ビットストリームの生成を行って、bin ファイルを作成した。今回は、各種スクリプト・ファイルやDTS ファイルを用意し、DTS ファイルをコンパイルしてDTB ファイルに変換した。
Ultra96-V2 のDisplayPort にテストパターンを表示する4(テストパターンを表示できた)
前回は、各種スクリプト・ファイルやDTS ファイルを用意し、DTS ファイルをコンパイルしてDTB ファイルに変換した。今回は、つまずきはあったが、テストパターンをDisplayPort に出力することができた。

Ultra96-V2 でカメラ画像をDisplayPort に出力する1(ブロックデザイン)
”Ultra96-V2 のDisplayPort にテストパターンを表示する4(テストパターンを表示できた)”でUltra96-V2 でDisplayPort にテストパターンを表示することができた。今回は、Ultra96-V2 でカメラ画像をDisplayPort に出力してみようと思う。
Ultra96-V2 でカメラ画像をDisplayPort に出力する2(Ultra96-V2 の環境整備)
前回は、Ultra96-V2 でPMOD 拡張ボードに搭載したOV5642 カメラの画像をUltra96-V2 のDisplayPort から出力したいということで、Ultra96-V1 のブロックデザインの内のZynq UltraScale+ MPSoC のDDR の設定をUltra96-V2 用に変更して、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、bin ファイルを作成し、Ultra96-V2 のDebian を起動して、環境の整備を行う。
Ultra96-V2 でカメラ画像をDisplayPort に出力する3(完成)
前回は、bin ファイルを作成し、Ultra96-V2 のDebian を起動して、環境の整備を行った。しかし、fclkcfg でエラーが出てしまい、目的の周波数に pl_clk0 を設定することができなかった。pl_clk0 は 100 MHz に設定されたので、XGA 解像度でカメラ画像をDisplayPort に表示することはできたが、HD 解像度で表示することはできなかった。今回は、ikwzm さんがfclkcfg のバグを修正してくれたので、HD 解像度でのDisplayPort 出力を試してみよう。

Ultra96用ガボールフィル タIP の作成1
Ultra96-V2 にガボールフィルタを実装しようということで、以前、ZYBO 用に作っていたガボールフィルタIP をUltra96用に変更することにした。
Ultra96用ガボールフィル タIP の作成2
前回は、ガボールフィルタをかけるフィルタ・サイズを row と col を引数に入れて設定できるように変更したソースコード、テストベンチなどを貼った。今回は、C シミュレーション、Cコードの合成を行った。
Ultra96用ガボールフィル タIP の作成3
前回は、Ultra96 用ガボールフィルタのC シミュレーション、Cコードの合成を行った。今回は、C/RTL 協調シミュレーションとExport RTL を行う。

Ultra96用ラプラシアン フィルタIP の作成1
前回は、Ultra96 用のガボールフィルタを作成したが、今回は、Ultra96 用のエッジ検出フィルタのラプラシアンフィルタを作成しよう。
Ultra96用ラプラシアン フィルタIP の作成2
前回は、Ultra96 用のエッジ検出フィルタのラプラシアンフィルタを作成するということで、ソースコードを貼った。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。

Ultra96-V2で Vivado Analyzerを接続した時にUltra96-V2のDebianが落ちる
まだブログには書いていないのだが、OV5642 にガボールフィルタとラプラシアンフィルタを付けてカメラ画像と、ガボールフィルタ画像とラプラシアンフィルタ画像の比較をする回路をUltra96-V2に実装してあ る。それが動かないので、Vivado Analyzer でデバックしようと思ったのだ。しかし、Vivado Analyzer で波形を見ようとして、Vivado 2018.3 のPROGRAM AND DEBUG -> Open Hardware Manager -> Open Target -> Auto Connect でVivado Analyzer を開始するとUltra96-V2 のDebian が落ちてしまった。
ツィッターでツィートしたところ、ikzwm さんが、bootargs に cpuidle.off=1 を入れるとOKと教えてくれた

ガボールフィルタとラプラシアン を使ってUltra96-V2でカメラ画像をフィルタする1(デバック中)
今まで作ってきたガボールフィルタとラプラシアンフィルタを使用して、カメラ画像をリアルタイ ムにフィルタする回路をUltra96-V2 で作ることにした。
ガボールフィルタとラプラシアン フィルタを使ってUltra96-V2でカメラ画像をフィルタする2(デバック中)
前回は、今まで作ってきたガボールフィルタとラプラシアンフィルタを使用して、カメラ画像をリ アルタイムにフィルタする回路をUltra96-V2 で作った。全く動作しなかったが、デバックの結果、カメラ画像とラプラシアンフィルタ画像は写るようになったが、ガボールフィルタの画像だけが表示されなかった。今回は、 ガボールフィルタだけをAXI4-Stream に接続してトラブルシュートしてみたが、やはりうまく行かなかった。
ガボールフィルタとラプラシアン フィルタを使ってUltra96-V2でカメラ画像をフィルタする3(完成)
前回は、ガボールフィルタの出力が真っ白になってしまって、デバックしていた。今回は、やっと ガボールフィルタが動作するようになった。
以前は、ガボールフィルタの演算は、重みを256 倍して int 型で演算して、最後に 256 で割っていた。これだと、Vivado に持っていくと真っ白になってしまうようである。Vivado HLS ではC/RTL 協調シミュレーションでもガボールフィルタ出力画像がそれらしく出ていたのだが? これは、ツールのバグじゃないのだろうか?

Ultra96-V2のPMOD 拡張ボードに秋月電子OV5642を付けたデモ
8月26日の”Ultra96用ガボールフィルタIP の作成1”からの 11 日間で、RECONF研展示用のデモを作っていた。会場の電源の関係で、デモは無しで、PMOD拡張ボードの展示だけになるかも知れない?

演算に任意精度固定小数点データ 型を使用したUltra96用ガボールフィルタ1
ZYBO で使用したガボールフィルタをUltra96 に持ってきたが、C/RTL 協調シミュレーションできちんと出力が出ていたのに、Vivado でIP として使うと白一色になってしまった。(ソースコードは、”Ultra96用ガボールフィルタIP の作成1”参照)
どうしようか?と思ったが、試しに演算を任意精度固定小数点データ型でやってみたところ、 Vivado に持っていっても正常動作するようになったので、紹介する。
演算に任意精度固定小数点データ 型を使用したUltra96用ガボールフィルタ2
前回は、ガボールフィルタの演算を任意精度固定小数点データ型で実装したソースコードを示し た。今回は、C シミュレーション、C コードの合成を行った。

Ultra96のPMOD拡張 ボード計画(高速、低速コネクタをPMODへ変換)の部品調査結果の覚書2
前回は、Ultra96のコネクタや拡張ボードを作るためのコネクタについて考察した。
石原ひでみさんの”FPGAの内容の薄い本2”を見て、改めてPMOD X 6 個のボードを作りたくなったので、もう一度コネクタを考えてみよう。

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板1
Ultra96-V2 の低速コネクタに接続する PMOD 拡張基板を作ってきたが、PMOD が 2 個だと、CMOS カメラを接続するので、精一杯で、ロボットを動かすPWM を出力するPMOD が確保できなかった。よって、高速コネクタのピンも使用して、最大PMOD 6 個出力できるようにしようと思う。
Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板2(回路図作成途中)
前回は、”Ultra96-V2 の低速コネクタに接続する PMOD 拡張基板を作ってきたが、PMOD が 2 個だと、CMOS カメラを接続するので、精一杯で、ロボットを動かすPWM を出力するPMOD が確保できなかった。よって、高速コネクタのピンも使用して、最大PMOD 6 個出力できるようにしようと思う。”ということで、Ultra96V2 のコネクタの仕様や使用する部品について検討した。今回は、KiCad で回路図を作成している。新たな部品のシンボルを作成して、階層回路図を使用して書いている。
Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板3(回路図完成)
前回は、Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板の回路図を作成している途中だった。今回は、Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板の回路図が完成した。
Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板4(回路図修正、フットプリント作成)
前回は、「Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板の回路図が完成した」と書いたが、やはり、電源ICのフットプリントを作るのが難しいので、1.2V の電源モジュールを MOUSER で売っているTRACO Power TSR 1-0512SM に変更した。更に 3 個のフットプリントを作成した。



inserted by FC2 system