IP

 同期FIFOと 非同期FIFO
同期FIFOの構造と非同期FIFOの構造を比較して、説明している。必見。

 2進数から BCDへの変換回路
必要があって10ビットの2進数から3桁のBCD(Binary-coded decimal)への変換回路を作りました。私はビットごとに+6補正を入れながら、足していきました。変換するに11クロックです。
 2進数から BCDへの変換回路(まとめ)
”2進数からBCDへの変換回路1”の続き。この前、お恥ずかしい自分の回路を公開してから、 いろんなかたに変換回路を紹介していただいた。やはり、アルゴリズムが大事だな、ということを実感した。紹介していただいた回路をまとめてみた。

 擬似乱数、M系 列を使う1 
今度、作製するAXI4マスタIP用に擬似乱数としてM系列を使うことにした。
 擬似乱数、M系 列を使う2
前回は8ビットのM系列を試してみたが、256回目で元のパターンに戻るので、ちょっと物足り ないかな?と思ったので、16ビットのM系列の下8ビットを取ってみることにした。これならば、元のパターンに戻るのは、65536回目だ。 

 AXI Performance Monitor IPを試してみた1(インプリメント)
今回はAXI Performance Monitor IPを試して見ることにした。
AXI Performance Monitor は、言わばカウンタ・レジスタの塊でReadやWriteのレイテンシや、総データ転送数、トランザクション数をカウントしてくれるIPのようだ。
 AXI Performance Monitor IPを試してみた2(SDK)
前 回は、AXI Performance Monitor をXPSプロジェクトに入れて設定し、PlanAheadに戻ってインプリメントを行った。今回はSDKを起動して、XMDでAXI Performance Monitor が動作しているどうかを確認する。動作が確認できた。
 AXI Performance Monitor IPを試してみた3(SDKでCソフトを作成)
前回はXMDで直接アドレスを入力してAXI Performance Monitor を試してみたが、今回はCでソフトウェアを作成して1秒あたりのRead/Writeトランザクションのパラメータを取得することにした。
AXI IIC のお勉強1
今までは、自分で作ったI2Cの回路を使用してきたが、Xilinx社のEDK用IPコアの AXI IIC を使ってみることにした。そこで、AXI IICの使い方を勉強してみた。
Control (CR) Register、Status Register (SR)
AXI IIC のお勉強2
各種レジスタとレジスタ設定例

XORShiftを試してみ た1(XORShift.vhd)
なひたふさんの月刊 特電技術 第2号に載っている擬似乱数発生回路XORShift を試してみた。VHDLコードをnumeric_stdパッケージ用に書き換えた。HDLコードとテストベンチのHDLコードあり。シミュレーションを行った。
XORShiftを試してみ た2(M系列、m_seq_32.vh)
XORShift との対比のために32ビット長のM系列を作ってシミュレーションを行った。HDLコードあり。
XORShiftを試してみ た3(ビットごとの自己相関を取ってみた)
XORShift と32ビット長のM系列のビットごとの自己相関を取って、グラフ化してみた。結構違っている。

AXI VDMAのお勉強
AXI VDMAはXilinx社のEDK用のIPコアだ。この使い方を勉強するので、覚書として書いておくことにした。
AXI VDMAのお勉強2(Register Direct Mode)
AXI VDMAはマニュアルが152ページもあって、どうやって使うか覚えるのが大変だが、90ページの Programming Sequence を読みながら、覚書を書いていこうと思う。Register Direct Mode (C_INCLUDE_SG = 0) (90ページ) 、Updating Video Transfer Information (91ページ)
AXI VDMAのお勉強3(Scatter Gather Mode)
Scatter Gather Mode (C_INCLUDE_SG = 1) (92ページ)、Updating Video Transfer Information(93ページ)、Additional Design Information(101ページ)
AXI VDMAのお勉強4(AXI VDMA General Operations 1)
AXI VDMA General Operations(93ページ)
”AXI VDMA Frame Boundary”、”AXI VDMA Video Transfer”、”Free Run Mode (C_USE_FSYNC = 0)”、”Frame Sync Mode (C_USE_FSYNC = 1,2,3)”
AXI VDMAのシミュレーション1
AXI VDMAシミュレーションをするために、今まで、いろいろとXPSプロジェクトのカスタムIPを作ってきた。それらのIPを集めて、AXI VDMAをシミュレーションするために、Project Navigator のプロジェクト(VDMA_test)を作った。
AXI VDMAのシミュレーション2(Generate Netlist)
デザイン・ルール・チェックが通ったので、ネットリストを生成してみた。失敗した。
AXI VDMAのシミュレーション3(Generate Netlist2)
前回、ネットリストが生成できなかったので、もう一度、プロジェクトを作り直した。ネットリス トを生成することが出来た。
AXI VDMAのシミュレーション4(インプリメント)
ほとんどのカスタムIPはインプリメントする予定なので、Project Navigator に戻ってインプリメントしてみた。
AXI VDMAのシミュレーション5(こんどこそシミュレーション)
インプリメントをしてみたので、こんどこそISim14.5でシミュレーションを行った。
AXI VDMAのシミュレーション6(reg_set_axi_lite_master のバグ)
AXI VDMAの設定レジスタに設定値を入れる必要がある。それにはどうするかというと、reg_set_axi_lite_master IPの vdma_reg_set.txt に設定するレジスタのアドレスと設定データを書いて、AXI VDMAの設定レジスタに書き込む必要がある。その、reg_set_axi_lite_master IPにバグが有ったので修正した。
AXI VDMAのシミュレーション7(v_axi4s_vid_out)
v_axi4s_vid_outだが、AXI4 Stream の s_axis_video_tdata と s_axis_video_tuser の値が X になっている。
AXI VDMAのシミュレーション8(とりあえず休止)
いろいろとAXI VDMAのシミュレーションのために頑張ってきたが、どうやら AXI VDMAの m_axis_mm2s_tdata, m_axis_mm2s_tkeep, m_axis_mm2s_tuser が 'X' になる状況は解決できないようだ。AXI4-Streamのデータ幅が24ビットの場合はXになってしまう。
AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)
s_axis_video_tdata のMM2Sのデータ幅を24ビットから32ビットに変更した。
AXI VDMAのシミュレーション10(シミュレーション成功)
カメラ・インターフェース回路のmt9d111_inf_axi_stream のデータバス幅を24ビット幅から32ビット幅に変更した。シミュレーションができるようになった。(しかし、v_axi4s_vid_out のビデオ信号出力が出ないので自作することにした)
AXI VDMAのシミュレーション11(シミュレーション成功2)
前回、シミュレーションが成功したと書いたが、v_axi4s_vid_out IP の video_... の信号が出て無かった。従って、HDMIの信号が出力されていない。
そこで、v_axi4s_vid_out IP と互換(あくまで私が想定する用途ではということです)のカスタムIPを自分で作った。
シミュレーションすることができたが、13msecほどシミュレーションすると、ISimが落ちてしまう
AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)
ISimのハードウェア協調シミュレーションを試みたができなかった。
AXI VDMAのシミュレーション13(Questaでシミュレーション)
AXI VDMA回路のシミュレーションをQuesta で行った。成功した。

ラプラシアン・フィルタの AXI4 Master IPを作製する1(仕様の検討)
Vivado HLSでラプラシアン・フィルタをAXI Master で構成するC言語のソースを書いて、IPとしてZedBoardのLinux用ハードウェアに実装してみたが、動作しなかった。そこで、Vivado HLSが出力したIPのトップファイルのポート構成はそのままで、自分でHDLを書いて、ラプラシアン・フィルタのAXI4 Master IPを完成させてみることにした。
lap_filter_axim_cam_fb_if.v をシミュレーションする
Vivado HLSでラプラシアン・フィルタ関数をaxi masterモジュールにする2”で、Vivado HLSでIPとして出力された Verilog HDLファイルを見たが、使えそうな機能を持ったモジュールが結構あった。その中から、lap_filter_axim_cam_fb_if.v をシミュレーションしてみることにした。
lap_filter_axim_cam_fb_if.v をシミュレーションする2
”lap_filter_axim_cam_fb_if.v をシミュレーションする”でlap_filter_axim_cam_fb_if.vのAXI4 Master Readをシミュレーションしてみたが、今度は、AXI4 Master Write をシミュレーションしてみた。

AXI4 Master用自作AXI4 Slave BFM
今までの自作BFMでは、Writeした値をReadするという検証戦略だったため、Read している時にはWrite出来ないという制約が付いていた。今回はそれではシミュレーションするのに不都合があったため、その制約を取り払った。
シミュレーション用 同期FIFO IP
axi_slave_BFM.v を変更して、ネストされたアドレス転送を受け付けることにした。そのためには、ネストされたReadアドレス転送を溜めておくためにFIFOが必要となる。それで、シミュ レーションに使用するために汎用の同期FIFO を作った。
AXI4 Slave Bus Functional Model (axi_slave_BFM.vhd)
AXI4 Slave Bus Functional Model (axi_slave_BFM.vhd) を貼っておく。今回のBFMは今まで公開したBFMをアドレス転送をネストできるように変更したものだ。よりXilinx社のAXI Interconnect に近くなったと思う。但し、ネストできるアドレス転送は15なので、より多いと思う。ソースコードあり。

AXI4 Master Interfaceモジュールの作製1(仕様の検討)
今までのカメラ・コントローラやビットマップ・ディスプレイ・コントローラは、複数のアドレス 転送を許さなかったので、今回は複数のアドレス転送を許す汎用AXI4 Master Interfaceモジュールを作製することにした。
AXI4 Master Interfaceモジュールの作製2(シミュレーション)
汎用AXI Master IPを目指して、ユーザー回路を非同期FIFOのインターフェースで接続するAXI4 Master Interfaceモジュールが大体出来た。非同期FIFOを使用しているので、例えばユーザー回路がフルHDのピクセルクロックで動作して、AXIバスが200MHzで 動作するということが可能になる。
単体シミュレーションを行った。
AXI4 Master Interfaceモジュールの作製3(シミュレーション2)
前回は、AXI Slave BFM がアドレス転送がネストできないので、アドレス転送のネストにも対応できるように AXI Slave BFM を書き換えた。そのため、シミュレーション用 同期FIFO IPを作製して使用した。このAXI Slave BFM を使用してシミュレーションを行った。
AXI4 Master Interfaceモジュールの作製4(axi4_master_inf.v のHDLソース)
AXI4 Masterアクセスをする汎用モジュール axi4_master_inf.v を貼っておく。
AXI4 Master Interfaceモジュールの作製5(Write用FIFOのXCO)
axi4_master_inf.v で使用されているWrite用のFIFOのXCOファイルを貼っておく。
AXI4 Master Interfaceモジュールの作製6(Read用FIFOのXCO)
axi4_master_inf.v で使用されているRead用のFIFOのXCOファイルを貼っておく。

CORDIC IP
XilinxのCoregenにCORDIC IPがある。CORDIC IP では、次の種類の方程式を実行できるそうだ。
直交座標⇔極座標の変換、三角関数、双曲型、平方根

AXI VDMAのレジスタ設定(Triple Frame Buffer)
AXI VDMAを Triple Frame Buffer (LogiCORE IP AXI Video Direct Memory Access v6.1Product Guide for Vivado Design Suite PG020 December 18, 2013の65ページ)の設定値に設定する際のAXI VDMAのレジスタ設定値の覚書を書いておく。

AXI4-Stream Switchについて
今回は、”AXI4-Stream版ラプラシアンフィルタIPのカメラ表示システム5(制約 ファイル、インプリメント)”で使ったAXI4-Stream Switchについて学んでいく。

AXI VDMAのソフトウェア制御について
AXI VDMAのソフトウェア制御について学習した。
AXI VDMAのドライバによるレジスタの設定値
AXI VDMAのドライバを使って書いてみたが、実際にどのようにレジスタを設定しているか?を見ていく。Vivado Logic Analyzer でAXI VDMAの設定用のAXI4 Lite Slave バスを観察して、どのレジスタを設定しているのかを見ていこう。

AXI VDMAのドライバによるレジスタの設定値
AXI VDMAのドライバを使って書いてみたが、実際にどのようにレジスタを設定しているか?を見ていく。Vivado Logic Analyzer でAXI VDMAの設定用のAXI4 Lite Slave バスを観察して、どのレジスタを設定しているのかを見ていこう。
AXI VDMAのドライバによるレジスタの設定値2
前回はディスプレイに画像が表示されない状態でデバックのためにドライバを使用してAXI VDMA を設定した時のWrite/Read したレジスタ番地とその値を調べた。
今回は、動作する状態になった時のWrite/Read したAXI VDMAのレジスタ番地とその値を調べる。

IP Integrator のブロックデザインで使うと便利なIP
IP Integrator のブロックデザインで使うと便利なIP がある。それは、ISEのXPS 時代からも存在していた。
わかっている限りでは、Utility Vector Logic, Utility Reduced Logic, Concat, Constant, Slice だ。

Video In to AXI4-Stream IP と AXI4-Stream to Video Out IP
ビデオ入力-AXI4 Stream 変換、AXI4 Stream-ビデオ出力 を作ろうと思ったが、すでにXilinx のIP としてあるので、それを学習して使おうと思う。
Video Timing Controller (VTC)
Video In to AXI4-Stream IP と AXI4-Stream to Video Out IPを使うということになったが、Video Timing Controller (VTC) も必要ということだった。

プロジェクトにインスタンスされているIPに制約を追加する
IP にBUFRの制約を追加すれば、XGA解像度でもHDMI 表示がうまくいくことを確かめる。(BUFR でクロックを分周する場合は制約を追加する必要がある(ビットマップ・ディスプレイ・コントローラ IP のHDMI 出力参 照)

AXI VDMAのドライバによるレジスタの設定値(S2MMの設定)
”AXI VDMAのドライバによるレジスタの設定値”でAXI VDMA のS2MM を使用する場合のベアメタル・ドライバの設定値をVivado Analyzer を使って解析した。
それでも、前回解析したのは動作しなかった場合で、フレームバッファが 1 面の時だったので、動作するようになった 3 面のフレームバッファの場合の解析をしてみた。

ビットマップ・ディスプレ イ・コントローラのReport CDC unsafe 箇所を確認し、修正する
”Vivado のImplemented Design で Report CDC を確認する”で確認されたビットマップ・ディスプレイ・コントローラのReport CDC unsafe 箇所を確認して修正した。

Synchronizer IP をVivado 2016.2 で作った
”PmodHB5 のセンサー・フィードバック処理IP を作ってみた2”で作ったセンサー・フィードバック端子の入力はベースクロックに同期しているわけではないので、シンクロナイザーが必要だ。
FF を数個並べてシンクロナイザーを作ることにした。これはVivado HLS で作ろうとしてみたのだが、やはり作ることは難しい。
そこで、久しぶりにVerilog HDL を使って、シンクロナイザーを作ることにした。

ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする1(構想編)
以前にVivado HLS でDMA IP を作ってみた。(”Vivado HLS で DMA Write IP を作る(絶対アドレス指定編)”、”Vivado HLS で DMA Read IP を作る(絶対アドレス指定版)”)これを使ってみたいと思っていた。カメラ・コントローラはAXI4-Stream版がすでに作ってあるが、ビットマップ・ディスプレイ・ コントローラのAXI4-Stream版がないのでそれを作ることにした。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする2(bitmap_afifo)
前回は構想編だったので、今回は、Vivado 2016.2 のプロジェクトを作って、bitmap_afifo (ビットマップのピクセル用の非同期FIFO)を作った。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする3(シミュレーション)
前回は、bitmap_afifo を生成した。今回は、”Vivado HLS でAXI4-Stream Master Model IP を作る”で作った AXI4-Stream Master Model IP を使って、AXI4-Stream版ビットマップ・ディスプレイ・コントローラをシミュレーションしてみた。なお、AXI4-Stream版ビットマップ・ディスプレイ・ コントローラは、Verilog HDL で実装できている。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする4(ソースコードの公開)
前回は、シミュレーションを行って、テストベンチのVerilog HDLのソースコードを貼った。今回は、それ以外のVerilog HDLのソースコードを貼っておく。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする5(IP作成)
前回は、シミュレーションを行ってから、Verilog HDLのソースコードを公開した。今回は出来上がりAXI4-Stream版ビットマップ・ディスプレイ・コントローラをIPにする。
Vivado HLS で生成した AXI4 Master DMA IP を使用したカメラ画像表示システム2(SDK)
前回は、今まで作ってきた AXI4-Stream版ビットマップ・ディスプレイ・コントローラ IPと AXI4-Stream版カメラ・コントローラ IP、Vivado HLS で作成したAXI4 Master DMA Write IP、Vivado HLS で作成したAXI4 Master DMA Read IP を使って、カメラ表示システムのVivado プロジェクトを作り、ビットストリームの生成まで終了した。今回は、ハードウェアをエクスポートしてSDK を立ち上げてアプリケーションを作り、実機で動作させようと思う。

Xilinx 社の AXI IIC IP で ADXL355 を使用する
Xilinx 社の AXI IIC IP を使用して、I2C インターフェースで、ストロベリーリナックスの ADXL355 超低ノイズ3軸加速度センサモジュール を ZYBO Z7-20 ボードに接続した。その際に AXI IIC IP の使い方に相当時間がかかってしまったのでブログに書いておく。

MIPI CS-2 Receiver Subsystem IP を調べる1
MIPI について調べたいと思っていたので、MIPI CS-2 Receiver Subsystem IP を見てみよう。
MIPI CSI-2 Receiver Subsystem IP のお勉強
MIPI CSI-2 Receiver Subsystem IP について勉強したことを書いておこう。
”MIPI CSI-2 Receiver Subsystem v5.1 Product Guide Vivado Design Suite PG232 (v5.1) January 8, 2021”に書いてあることをGoogle 翻訳で翻訳して図と一緒に引用してまとめていく。
MIPI D-PHY v4.2 のお勉強
”MIPI D-PHY v4.2 LogiCORE IP Product Guide Vivado Design Suite PG202 (v4.2) September 7, 2020”に書いてあることをGoogle 翻訳で翻訳して図と一緒に引用してまとめていく。

非同期外部入力に xpm_cdc を使用する
これまで、uart_rx や uart_tx を作ってきたが、uart_rx の入力は自分の FPGA の内部クロックに同期していない信号となる。そこで、自分の内部クロックに同期させる必要があるわけだ。以前は、Synchronizer IP を自分で作っていたのだが、 ”Vivado 2020.2 の新機能1”で紹介したように、新たに xpm_cdc IP が追加されたので、使ってみよう。

Vivado 2020.2 を使ってビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする1
Vitis Vision Library を以前やってみたのだが、 Array2xfMat と xfMat2Array を使用する Mat 形式のデータを DMA で持ってきて Vitis Vision Library で処理する形式が一般的のようだ。 AXI4-Stream ー フィルタ ー AXI4-Stream とするパスはうまく実装できなかった。そこで、 Mat 形式のデータを DMA で持ってきて使うために AXI4-Stream 入出力の IP を使いたいと思う。パラレル入力のカメラ・インターフェース IP は AXI4-Stream 出力になっているので、ビットマップ・ディスプレイ・コントローラを AXI4-Stream 入力にしたい。今回は、 Vivado 2020.2 を使用してビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にしようと思う。手始めに非同期FIFO の bitmap_afifo を生成する。
Vivado 2020.2 を使ってビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする2
前回は、Vivado 2020.2 を使用してビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にするために、非同期FIFO の bitmap_afifo を生成した。今回は、シミュレーションするために、Vitis_HLS 2020.2 で AXI4-Stream Master Model を作ってみよう。
Vivado 2020.2 を使ってビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする3
前回は、Vitis_HLS 2020.2 でシミュレーション用の AXI4-Stream Master Model を作った。今回は、今まで作ったファイルを使用してシミュレーションしてみよう。
Vivado 2020.2 を使ってビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする4
前回は、今まで作ったファイルを使用してシミュレーションを行って、成功した。今回は、IP としてパッケージをしてみよう。

Vivado 2020.2 を使用して AXI4-Stream 版ビットマップ・ディスプレイ・コントローラをテストする1
今まで作ってきた IP と Digilent の GitHub の Digilent Vivado library の rgb2dvi IP を使用して AXI4-Stream 版ビットマップ・ディスプレイ・コントローラをテストしてみよう。
Vivado 2020.2 を使用して AXI4-Stream 版ビットマップ・ディスプレイ・コントローラをテストする2
今まで作ってきた IP と Digilent の GitHub の Digilent Vivado library の rgb2dvi IP を使用して AXI4-Stream 版ビットマップ・ディスプレイ・コントローラをテストしてみようということで、前回は、Vivado 2020.2 で bm_disp_axis_test プロジェクトを作成し、IP を接続したブロックデザインを作成して、論理合成、インプリメンテーション、ビットストリームの生成を行って、ハードウェアをエクスポートした。今回は、Vitis 2020.2 を立ち上げて、プラットフォームとアプリケーション・プロジェクトを作成して、実機検証してみよう。

AXI4-Lite インターフェースの I2C Master Core を IP にする
”OpenCores.org の I2C controller core をシミュレーションする”で、OpenCores.org の WishBone バスの I2C controller core をシミュレーションしたが、これを Xilinx の Zynq で使用するために AXI4-Lite インターフェースで使用したいと思ったということで、前回は AXI4-Lite インターフェース版の I2C Master Core をシミュレーションを行ったが、問題無さそうだった。今回は、IP にしてみよう。

DFX Decuopler について
今回のブログでは、 DFX Decuopler について学んでいこう。
DFX AXI Shutdown Manager について
”DFX Decuopler について”に続いて、DFX AXI Shutdown Manager について勉強していこう。

Xilinx の axi_dma IP を画像用に使用するための方法
Xilinx 社の axi vdma などの画像用仕様では、画像フレームの最初のデータで AXI4-Stream の tuser を 1 にして、その後は 0 にする。画像の行の最後のデータで tlast を 1 にするという規則がある。

AXI4-Lite インターフェースの FIFO を作成する1
AXI4-Lite インターフェースを AXI4-Stream に変換する axilw2stream IP と AXI4-Stream を AXI4-Lite インターフェースに変換する stream2axilr IP を使用し、その間に AXI Stream Data FIFO を挟んで AXI4-Lite インターフェースの FIFO を作成する。
AXI4-Lite インターフェースの FIFO を作成する2
前回は、ZYBO Z7-10 用の axi4l_stream プロジェクトを Vivado 2022.1 で作成し、system ブロック・デザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートし、Vitis 2022.1 を立ち上げて、プラットフォームと axi4l_stream アプリケーション・プロジェクトを作成し、ZYBO Z7-10 で実機動作を確認した。

ビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする6(Vivado 2022.1 で IP作成)
bitmap_disp_cont_axis は Vivado 2016.2 で IP にしてあったので、あれから 6 年経っているので、改めて Vivado 2022.1 で IP 化を行った。結果としては、ほとんど同じ手順で IP にすることができた。

パラレル入出力カメラ用 AXI4-Stream 出力 IP の作成
パラレル入出力カメラ用 AXI4-Stream 出力 IP を作成する。
秋月電子の”OV5642使用500万画素カメラ M12レンズ付き B0020”用の AXI4-Stream 出力インターフェース IP だ。
これは以前作成した mt9d111 カメラ用 IP と同じ HDL コードで行けるので、それのファイル名を変更して Vivado 2022.1 で ZYBO Z7-20 用の paracam2axis プロジェクトを作成する。

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 に変換したところ、色が正常になった。

axi dma をシンプル DMA モードで動作させる方法
”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる22”で、Vivado 2022.1 の kv260_medeian_platform プロジェクトの ビットファイルは KV260 の Ubuntu 20.04 Kria-PYNQ 上で動作するのを確認できた。それでは、”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる19”の Vitis アクセラレーション・アプリケーション・プロジェクトの vadd プロジェクトの kv260_median_platform 上の median_pf アプリケーション・ソフトウエアがなぜ動作しなかったか?を調べるために原因と思われる axi dma のシンプル DMA の動作方法を見ていこう。

axi_timer を使う 3 (割り込みを使用する)
ikwzm さんの FPGA-SoC-Linux を ZYBO Z7-20 で起動して、axi_timer を使用したビットストリームを使用して、axi_timer を割り込みで使用したが、”axi_timerを使う2(割り込みを使用した)”のコードを参考に Debian Linux 上でアプリケーションを作成してもうまく行かなかった。

Clocking Wizard の Dynamic Reconfiguration mode を使ってみよう1
Clocking Wizard の Dynamic Reconfiguration mode を使ってみよう。つまり PLL の出力周波数をソフトウェアで動的に変更する機能だ。
Clocking Wizard の Dynamic Reconfiguration mode を使ってみよう2
PLL の出力周波数をソフトウェアで動的に変更する機能の Clocking Wizard の Dynamic Reconfiguration mode を使ってみようということで、Adom Taylor さんの”MicroZed Chronicles: Dynamic Clocking”を参照して、やってみたが、ブロック・デザインに手を加えて、カウンタのカウント数で周波数をカウントしている。ただし、出力周波数は設定とは少し異 なっていた。今回は、clk_wiz_0 の s_axi_lite に System ILA を挿入して、XClk_Wiz_SetRate(&ClkWiz_Dynamic, 10); のアクセスを調べて、設定周波数ピッタリになるように設定を行ってみよう。

AXI4-Stream Data Width Converter のバイト・レーン変換を確認する1
”ZUBoard 1CG の PYNQ v3.0.1 で自作のガウシアン・フィルタ、メディアン・フィルタとソーベル・フィルタを動作させる3”でガウシアン・フィルタの動作を確認できたが、ファイルをロードした 4 バイトのデータは AXI4-Stream Data Width Converter で 4 バイトを 3 バイトに変換してガウシアン・フィルタに入力されている。
このバイト変換は”PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する8”で解析して、4 バイトのデータが OpenCV の MAT 形式であることは確認してある。(MAT 形式のフォーマットについては、”Vitis Vision Library の AXI4 Master インターフェース版 medianblur をZYBO Z7-20 で使ってみる1(準備編)”を参照)
しかし、”PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する8”では、4 バイトを 3 バイトに変換した後についての検証が足りなかったので、もう一度、”ZUBoard 1CG の PYNQ v3.0.1 で自作のガウシアン・フィルタ、メディアン・フィルタとソーベル・フィルタを動作させる3”のハードウェアで検証してみよう。
AXI4-Stream Data Width Converter のバイト・レーン変換を確認する2
Pythonの画像処理ライブラリPillow(PIL)の Image.open でオープンした画像ファイルのフォーマットを確認するということで、前回は、blue.png、 green.png、 red.png の画像ファイルを作成した。今回は、PNG の画像ファイルを ZUBoard 1CG の PYNQ Linux にアップロードし、Jupter Notebook を書き換えて実行したところ、PNG の画像ファイルは 4 チャネルでエラーが出てしまった。
AXI4-Stream Data Width Converter のバイト・レーン変換を確認する3
Pythonの画像処理ライブラリPillow(PIL)の Image.open でオープンした画像ファイルのフォーマットを確認するということで、前回は、PNG の画像ファイルを ZUBoard 1CG の PYNQ Linux にアップロードし、Jupter Notebook を書き換えて実行したところ、PNG の画像ファイルは 4 チャネルでエラーが出てしまった。今回は、blue.bmp、 green.bmp、 red.bmp を用意して、ZUBoard 1CG の PYNQ Linux にアップロードし、Jupter Notebook を書き換えて実行したところ、AXI4-Stream Data Width Converter で変換された 3 バイトの AXI4-Stream は上のバイトから RGB でなく BGR であることがわかった。
AXI4-Stream Data Width Converter のバイト・レーン変換を確認する4
Pythonの画像処理ライブラリPillow(PIL)の Image.open でオープンした画像ファイルのフォーマットを確認するということで、前回は、blue.bmp、 green.bmp、 red.bmp を用意して、ZUBoard 1CG の PYNQ Linux にアップロードし、Jupter Notebook を書き換えて実行したところ、AXI4-Stream Data Width Converter で変換された 3 バイトの AXI4-Stream は上のバイトから RGB でなく BGR であることがわかった。前回の作業は、AXI4-Stream Data Width Converter は 2 個搭載されているが、その内の 3 バイト幅の AXI4-Stream から 4 バイト幅に変換する AXI4-Stream Data Width Converter の動作を見た。今回は、4 バイト幅の AXI4-Stream から 3 バイト幅に変換する AXI4-Stream Data Width Converter の動作を見た。




inserted by FC2 system