FC2カウンター FPGAの部屋 2013年08月17日
FC2ブログ

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

FPGAの部屋

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

AXI VDMAのシミュレーション11(シミュレーション成功2)

前の記事は、”AXI VDMAのシミュレーション10(シミュレーション成功)

前回、シミュレーションが成功したと書いたが、v_axi4s_vid_out IP の video_... の信号が出て無かった。従って、HDMIの信号が出力されていない。
そこで、v_axi4s_vid_out IP と互換(あくまで私が想定する用途ではということです)のカスタムIPを自分で作ることにした。名前は、custom_axi4s_video とした。custom_axi4s_video.v を下に示す。

// custom_axi4s_video.v
// v_axi4s_vid_outの代わりに自作したIP
// 2013/08/16

`default_nettype none

module custom_axi4s_video #(
    parameter  VIDEO_DATA_WIDTH = 32
)(
    // AXI4-Stream
    input    wire    aclk,
    input    wire    aresetn,
    input    wire    [VIDEO_DATA_WIDTH-1:0]    s_axis_video_tdata,
    input    wire    s_axis_video_tvalid,
    output    wire    s_axis_video_tready,
    input    wire    s_axis_video_tuser,
    input    wire    s_axis_video_tlast,
    
    // video output
    input    wire    video_clk,
    output    wire    video_de,
    output    wire    video_vsync,
    output    wire    video_hsync,
    output    wire    video_vblank,
    output    wire    video_hblank,
    output    wire    [VIDEO_DATA_WIDTH-1:0]    video_data,
    
    // VTG Signals
    input    wire    vtg_vsync,
    input    wire    vtg_hsync,
    input    wire    vtg_vblank,
    input    wire    vtg_hblank,
    input    wire    vtg_act_vid,
    output    wire    vtg_ce,
    output    wire    vtg_fsync,
    
    // Error Signals
    output    wire    vfifo_underflow,
    output    wire    vfifo_overflow
);
    wire    vfifo_almost_empty;
    wire    vfifo_almost_full;
    wire    vfifo_empty;
    wire    vfifo_full;
    
    // video_fifo のインプリメント
    video_fifo video_fifo_i (
        .rst(~aresetn), // input rst
        .wr_clk(aclk), // input wr_clk
        .rd_clk(video_clk), // input rd_clk
        .din(s_axis_video_tdata), // input [31 : 0] din
        .wr_en(s_axis_video_tvalid & s_axis_video_tready), // input wr_en
        .rd_en(vtg_act_vid), // input rd_en
        .dout(video_data), // output [31 : 0] dout
        .full(vfifo_full), // output full
        .almost_full(vfifo_almost_full), // output almost_full
        .overflow(vfifo_overflow), // output overflow
        .empty(vfifo_empty), // output empty
        .almost_empty(vfifo_almost_empty), // output almost_empty
        .underflow(vfifo_underflow) // output underflow
    );
        
    assign s_axis_video_tready = ~vfifo_full;
    
    assign video_de =         vtg_act_vid;
    assign video_vsync =    vtg_vsync;
    assign video_hsync =    vtg_hsync;
    assign video_vblank =    vtg_vblank;
    assign video_hblank =    vtg_hblank;
    
    assign vtg_ce = 1'b1;
    assign vtg_fsync = 1'b0;
endmodule


IPコアで非同期FIFOをインスタンスしただけのIPだ。MPDファイルとPAOファイル、MUIファイルも作って、XPSプロジェクトにAdd IPした。
VDMA_test_34_130817.png

1msec シミュレーションした時のトップの波形を下に示す。
VDMA_test_35_130817.png

13msecほどシミュレーションすると、ISimが落ちてしまうので、VSYNCが出るところまでシミュレーションすることが出来ないのが残念だ。

HDMIのデータが出る辺りを拡大した。
VDMA_test_36_130817.png

これでインプリメントもできるし、AXI VDMAの動きをシミュレーションすることができると思ったのだが、長い間シミュレーションできないのでは困った。

次は、ISimを使用したCo-Simulation をやってみたい。

AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)”に続く。
  1. 2013年08月17日 19:36 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0