FC2カウンター FPGAの部屋 ZynqBerryZero で HDMI にラプラシアン・フィルタ画像を出力する3(Vivado 2020.2編1)
fc2ブログ

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

FPGAの部屋

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

ZynqBerryZero で HDMI にラプラシアン・フィルタ画像を出力する3(Vivado 2020.2編1)

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 行ラプラシアン・フィルタ処理するように修正する。
ZynqBerryZero_149_201213.png

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

Export RTL を行った。
ZynqBerryZero_151_201213.png

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

この回路では、 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 にした。
ZynqBerryZero_115_201213.png

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

最後の New Project Summary を示す。
ZynqBerryZero_117_201213.png

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

まずは、IP を IP Catalog に追加する。

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

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... を選択する。
ZynqBerryZero_120_201213.png

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

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

Lap_filter_axis IP が追加されている。
ZynqBerryZero_123_201213.png

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

ブロックデザインを作成する。

Vivado 2020.2 の Flow Navigator -> IP INTEGRATOR -> Create Block Design をクリックする。
Create Block Design が表示される。
Design name に lap_filter_axis_bd と入力した。
ZynqBerryZero_125_201213.png

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

processing_systemp_7_0 の使用する AXI ポートは、 M_AXI_GP0 の他に S_AXI_HP0 を生かした。

processing_systemp_7_0 の PL へのクロックの設定を示す。
FCLK_CLK0 は 100 MHz に設定した。
FCLK_CLK1 も生かして、 25 MHz に設定した。
ZynqBerryZero_127_201213.png

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

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

Synthesized Design が開いた。
ZynqBerryZero_130_201213.png

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

ZynqBerryZero の回路図から関連する部分を引用する。
ZynqBerryZero_131_201213.png

ここでは、 HDMI_TX2_P, HDMI_TX2_N 以外の信号の _P と _N が入れ替わっているようなのだ。

通常は、制約ファイルに _P の信号のピン配置を記述するのだが、 _N の番号を記述した。
IO STANDARD には、 TMDS_33 を指定した。
ZynqBerryZero_132_201213.png

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

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

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

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]


これで、再度、論理合成、インプリメンテーション、ビットストリームの生成を行うと、成功した。
ZynqBerryZero_136_201213.png
  1. 2020年12月14日 05:10 |
  2. ZynqBerryZero
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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