FC2カウンター FPGAの部屋 2019年01月13日
FC2ブログ

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

FPGAの部屋

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

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 を使用して、それらの信号に同期した画像出力をする必要があるようだ。

それらの情報は、ひでみさんの”FPGAの内容が薄い本”に載っている。それらの情報を元にしている。ありがとうございます。

さて、テストパターン作成用IP (pattern_gen) の構成を見ていこう。下にブロック図を貼っておく。
DisplayPort_test_52_190112.png

pattern_gen は pattern_out_axis と axis2video_out 、 init_done_axi4ls モジュールで構成される。pattern_out_axis と axis2video_out モジュールの間はAXI4-Stream で接続される。pattern_out_axis はテストパターンを生成して、生成したデータをAXI4-Stream で出力するモジュールだ。 axis2video_out は、video_timing 入力との同期を取りながら、pattern_out_axis からのAXI4-Stream を受けたデータを Video_out に出力する。
init_done_axi4ls モジュールはAXI4 Lite Slave としてARMプロセッサにインターフェースされ、init_done レジスタを持つ。init_done レジスタから接続されるのは、 init_done_out 信号出力だ。init_done_out 信号出力は、axis2video_out モジュールのリセット信号として使用される。
pattern_out_axis, init_done_axi4ls モジュールはVivado HLS で作成してみよう。axis2video_out モジュールはVerilog HDL で作成し、PS の dp_video_out_hsync, dp_video_out_vsync, dp_live_video_de_out の video_timing に同期して Video_out を出力する。

次にカメラからの画像を出力する vflip_dma_disp_cont のブロック図も貼っておく。
DisplayPort_test_53_190112.png

vflip_dma_disp_cont は、vflip_dma_axis, axis2video_out 、 init_done_axi4ls モジュールで構成される。つまり、pattern_gen のpattern_out_axis を vflip_dma_axis に交換した構造になる。
vflip_dma_axis はOV5642の垂直方向にフリップされた画像を正常にDMA するためのVivado HLS で作成されたモジュールにする予定だ。

今、考えたところ、init_done_axis モジュールは、pattern_out_axis, vflip_dma_axis モジュールに取り込もうと思う。そして、それら 2 つのモジュールもAXI4 Lite Slave でレジスタマップしよう。

新しいテストパターン作成用IP (pattern_gen) と vflip_dma_disp_cont のブロック図を貼っておく。
DisplayPort_test_54_190113.png

DisplayPort_test_55_190113.png

(おまけ)
試しに作った init_done_axi4ls.cpp を示します。
DisplayPort_test_56_190113.png

C コードの合成結果です。
DisplayPort_test_57_190113.png

ソースコード。

// init_done_axils.cpp
// 2019/01/12 by marsee
//

#include "ap_int.h"

int init_done_axi4ls(ap_uint<1> &init_done, ap_uint<1> &init_done_out){
#pragma HLS INTERFACE ap_none register port=init_done_out
#pragma HLS INTERFACE s_axilite port=init_done
#pragma HLS INTERFACE s_axilite port=return
    init_done_out = init_done;

    return(0);
}


  1. 2019年01月13日 05:07 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0