FC2カウンター FPGAの部屋 AXI VDMAのシミュレーション10(シミュレーション成功)
FC2ブログ

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

FPGAの部屋

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

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

前の記事は、”AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)

前回は、v_axi4s_vid_out のMPDファイルを変更して、AXI4-Stream のデータバス幅を24ビット幅から32ビット幅に変更した。
今回は、カメラ・インターフェース回路のmt9d111_inf_axi_stream のデータバス幅を24ビット幅から32ビット幅に変更する。また、v_axi4s_vid_out の vtg_sync が AXI VDMA の mm2s_fsync に接続されているが、この信号は出力されないそうなので、custom_vtc に vtg_sync を新設して、その信号を AXI VDMA の mm2s_fsync に接続する。AXI VDMAの C_USE_FSYNC パラメータがデフォルトの 1 の場合は、” Both channels in frame sync mode”で fsync を入れないとDMA転送がスタートしない。

最初に、mt9d111_inf_axi_stream.vhd の m_axis_tdata を出力するコードが手抜きだった。
最初のコードを下に示す。

m_axis_tdata <= pfifo_dout(23 downto 0);


データ幅24ビット限定のコードだったが、下のようにパラメータで変更できるように修正した。

    m_axis_tdata(23 downto 0) <= pfifo_dout(23 downto 0);
    DATA_WIDTH_EXTENTED : if C_M_AXIS_DATA_WIDTH>24 generate
        m_axis_tdata(C_M_AXIS_DATA_WIDTH-1 downto 24) <= (others => '0');
    end generate DATA_WIDTH_EXTENTED;


これで、mt9d111_inf_axi_stream_0 の XPS Core Config ダイアログの Master Stream Data Width を 32 にすれば、AXI4-Stream のデータバス幅が32ビットとなる。
VDMA_test_30_130730.png

次に、custom_vtc.v に vtg_sync 出力ポートを追加した。

    // vtg_sync 出力
    always @(posedge vclk) begin
        if (reset)
            vsyncx_node_1d <= 1'b0;
        else 
            vsyncx_node_1d <= vsyncx_node;
    end
    
    always @(posedge vclk) begin
        if (reset)
            vtg_sync_node <= 1'b0;
        else if (vsyncx_node == 1'b1 && vsyncx_node_1d == 1'b0)    // falling edge
            vtg_sync_node <= 1'b1;
        else
            vtg_sync_node <= 1'b0;
    end
    assign vtg_sync = vtg_sync_node;


custom_vtc.v の vtg_sync 出力を AXI VDMA の mm2s_fsync にXPS上で接続した。

後は、AXI VDMAの設定レジスタを設定後に、mm2s_fsync と s2mm_fsync が AXI VDMA に入力されるように回路を調整した。

これでシミュレーションを行ったところ、AXI4-Stream のデータバス幅が24ビットの時の AXI VDMAの m_axis_mm2s_tdata, m_axis_mm2s_tkeep, m_axis_mm2s_tuser が 'X' になる状況は改善され、シミュレーションが正常に行えるようになった。
AXI VDMA の AXI4-Stream のデータバス幅が24ビットに設定できるが、そのためのHDLコードが実装されていない気がする?

やっと実験ができるようになって嬉しい。下にシミュレーション波形を示す。下の波形は、AXI VDMA へのレジスタ設定用 AXI4 Lite アクセスを示す。約 7 usec でレジスタ設定は終了している。
VDMA_test_31_130730.png

次に、MM2Sを見ていこう。約 53 usec で mm2s_fsync が入って、AXI4 Master ReadをAXI VDMAが行ない、AXI4 Stream にデータを出力している。なお、シミュレーションのタイムスケールは変えていない。
VDMA_test_32_130730.png

最後に、S2MMを見ていこう。約 30 usec で、s2mm_fsync が入って、AXI4 Stream からカメラのデータが入ってくるので、それを AXI4 Master でメモリに書き込んでいる。
VDMA_test_33_130730.png

これで、シミュレーションがうまくいくことが分かったので、AXI VDMA の動作を調査しようと思う。

#追加。ツイッターでの私のつぶやきです。
・AXI VDMA はMM2S のAXI4 Masterアクセスで、6個ずつアドレス転送を投げている。やはり、AXI4バスはこうでないとね。。。

・バースト幅は16バーストだ。AXI3のためかな?

・あれ?なんでだろう。インターコネクトかな?案外、スループットが上がらないぞ?

・わ~。楽しい。いろいろとXilinx のIPの動きが丸見えだ。。。このシミュレーションからいろいろなことが分かりそうだ。苦労した甲斐があったね。。。

・う~ん。MM2Sの方は、アドレス転送を6個連続投入しているんだから、このスループットが現在のスループットということで良いと思う。

・MM2Sでスループットの4割くらいしか使えてないのはなぜだろうか? AXI Interconnect の設定なのか?

・見ていても飽きないね。シミュレーションがとっても面白い。

・S2MMのAXI Master Write のバーストは、1つのアドレス転送に対して、1つのデータ転送で、アドレス転送を連続投入はされていない。カメラのデータレートが遅くて、帯域をあまり使っていないからだね。

・メモリモジュールは、デュアル・ポート・メモリになっているから、DDR3とかよりスループット出るね。より実際のシステムに近づけるためには、Write とReadを排他的にする必要があるか。。。

AXI VDMAのシミュレーション11(シミュレーション成功2)”に続く。
  1. 2013年07月30日 04:57 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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