”
ZynqBerryZero で HDMI にラプラシアン・フィルタ画像を出力する2(Vitis HLS 2020.2編2)”の続き。
ZynqBerryZero 用のラプラシアン・フィルタを Vitis HLS 2020.2 で実装してみようということで、前回は、Vitis HLS 2020.2 の lap_filter_axis プロジェクトを作成し、 C コードの合成、 C/RTL 協調シミュレーション、 Export RTL を行って、 IP を作成した。今回は、 IP を 800 ピクセル X 600 行に変更し(現在は、 64 ピクセル X 48 行)、 C コードの合成、 Export RTL を行って IP を修正してから、その IP を Vivado 2020.2 で使用して、回路を作成する。
まずは、 lap_filter_axis.h を 800 ピクセル X 600 行ラプラシアン・フィルタ処理するように修正する。

再度、 C コードの合成を行った。

Export RTL を行った。

Vivado で回路を作成する前に、ブロック図を貼っておく。

この回路では、 lap_filter_axis IP 以外に 2 つの Vivado HLS で作成された IP を使用している。
1 つは、メモリから DMA したデータを AXI4 Stream に変換する IP だ。この IP (DMA2axis)は 2 つの AXI4 Stream 出力を持っていて、引数によりどちらに出力するかを決定することができる。一方の出力は、 AXI4 Stream から DMA に出力する IP (Axis2dma2st)に出力する。つまり元画像を表示するモードだ。もう一方の出力は、ラプラシアン・フィルタ IP (lap_filter_axis)を通って、エッジ画像を表示する。
DMA 出力をディスプレイ・コントローラー IP (bitmap_disp_cntrler_axi_master_v1_0)が DMA して HDMI 信号に変換する。
Vivado 2020.2 を起動して、 Create Project をクリックする。
New Project ダイアログが表示された。設定をしたダイアログを示す。
Project Name ウインドウでは、 Project location を設定し、 Project name を lap_filter_axis_test にした。

Default Part では、 ZYNQ07 TE0727 を選択した。

最後の New Project Summary を示す。

lap_filter_axis_test プロジェクトが作成された。

まずは、IP を IP Catalog に追加する。
lap_fiter_axis_test ディレクトリに lap_filter_axis ディレクトリを新規作成して、Vitis HLS 2020.2 で作成した lap_filter_axis_202 ディレクトリの下の solution1/impl ディレクトリ下の export.zip を展開する。

DMA2axis IP 、 Axis2dma2st IP 、 bitmap_disp_cntrler_axi_master_v1_0 IP を lap_fiter_axis_test ディレクトリにコピーした。
Vivado 2020.2 の PROJECT MANAGER で IP Catalog をクリックした。
IP Catalog ウインドウが開いた。
IP Catalog ウインドウ内で、右クリックし、右クリックメニューから Add Repository... を選択する。

Repositories ウインドウが開く。
lap_filter_axis を選択した。(最初はその他の IP をコピーするのを忘れてしまっていた)
Select ボタンをクリックする。

Add Repository ダイアログが開く。
Lap_filter_axis IP が追加されたのが分かる。

Lap_filter_axis IP が追加されている。

DMA2axis IP 、 Axis2dma2st IP 、 bitmap_disp_cntrler_axi_master_v1_0 IP を同様に追加した。

ブロックデザインを作成する。
Vivado 2020.2 の Flow Navigator -> IP INTEGRATOR -> Create Block Design をクリックする。
Create Block Design が表示される。
Design name に lap_filter_axis_bd と入力した。

IP を Add IP し、ブロックデザインを完成させた。

processing_systemp_7_0 の使用する AXI ポートは、 M_AXI_GP0 の他に S_AXI_HP0 を生かした。
processing_systemp_7_0 の PL へのクロックの設定を示す。
FCLK_CLK0 は 100 MHz に設定した。
FCLK_CLK1 も生かして、 25 MHz に設定した。

Vivado 2020.2 の Flow Navigator -> SYNTHESIS -> Run Synthesis をクリックして、論理合成を行った。

論理合成が終了し、Synthesis Completed が表示された。
Open Synthesized Design のラジオボタンをクリックしてから、OK ボタンをクリックする。

Synthesized Design が開いた。

ここでは、 HDMI の信号をピン配置して、IO STANDARD を指定する。
まずは、
ZynqBerryZero の回路図から HDMI に出力している Zynq のピン番号を取得する。
ZynqBerryZero の回路図から関連する部分を引用する。

ここでは、 HDMI_TX2_P, HDMI_TX2_N 以外の信号の _P と _N が入れ替わっているようなのだ。
通常は、制約ファイルに _P の信号のピン配置を記述するのだが、 _N の番号を記述した。
IO STANDARD には、 TMDS_33 を指定した。

制約ファイルの lap_filter_azis_test.xdc に制約が入力された。( lap_filter_azis_test.xdc のファイル名は指定した)

論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、タイミング・エラーが発生した。

場所は、 vsyncx をディスプレイのクロック(pclk_buf)から AXI4 インターフェースのクロック(clk_fpga0)に載せ替えている部分のようだ。
その部分を見てみよう。

vsync_node を 3段の FF で受けているので、タイミングの心配はしなくて良い。
よって、False Path を制約sファイルに設定した。
set_false_path -from [get_clocks -of_objects [get_pins lap_filter_axis_bd_i/bitmap_disp_cntrler_0/inst/dvi_disp_i/BUFR_pixel_clk_io/O]] -to [get_clocks clk_fpga_0]
これで、再度、論理合成、インプリメンテーション、ビットストリームの生成を行うと、成功した。
- 2020年12月14日 05:10 |
- ZynqBerryZero
-
| トラックバック:0
-
| コメント:0