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

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

FPGAの部屋

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

カメラ・インターフェース用AXI4-Stream IPの作製1(仕様の検討)

カメラ、ビデオ表示カスタムIPを AX4-Stream に変更2(カメラ・インターフェースIP)”で仕様を検討したカメラ・インターフェース用のAXI4-Stream IPを作製しようと思う。(カテゴリをAXI4-Stream IPの作製に変更しました)
(AXI4-Streamでは、仕様上、TVALIDはTREADYを待ってはダメだという指摘を受けたので、カメラ・インターフェース用AXI4-Stream IPの仕様を変更します。教えて頂いた ikvzm さんありがとうございました。)

下にカメラ・インターフェース用のAXI4-Stream IPの仕様を示す。

1.カメラ・インターフェース用AXI4-Stream IPは、FIFOを持たない。FIFOはAXI VDMA の C_S2MM_LINEBUFFER_DEPTH (”LogiCORE IP AXI Video Direct Memory Access v5.04a Product Guide PG020 December 18, 2012”の86ページの”C_S2MM_LINEBUFFER_DEPTH”参照)でFIFO深度を決定できるFIFOを使用する。つまり、AXI VDMAの s2mm_buffer_full がアサートされたらデータ転送が間に合わずにエラーということだ。これは、カメラからくるデータの転送速度は決まっているので、これ以下のストリーム転送しか出来ない場合は当然エラーとなる。

1.改 カメラ・インターフェース用AXI4-Stream IPは同期FIFOを持ち、少なくとも同期FIFOがEMPTYでなくなった状態まで、カメラ・データが溜まった後で、TVALIDをアサートする。

2.1.の前提があるので、AXI4-Stream のTREADY の途中でのディアサートは想定しない。最初にカメラのフレームを転送する最初には、TREADY を確認しアサートされていたら、AXI4-Stream でカメラのフレームの画像データを転送する。TREADY がアサートされていない場合は、そのフレームはAXI4-Stream で転送しない。

2.改 同期FIFOを入れることになったので、AXI4-Stream のTREADY の途中でのディアサートにも問題なく対応できる。ただし、待てる範囲はFIFOの容量による。

3.AXI VDMAの s_axis_s2mm_aclk は入力で、カメラ・インターフェース用のAXI4-Stream IPからクロックを入力することができる。カメラからのPCLKを入力することで、カメラ・インターフェース用のAXI4-Stream IPのクロックドメインはPCLKの1つとすることができる。

4.カメラからのデータはRGB565 なので、2クロックで1つのピクセルデータが転送される。よって、AXI4-Stream のTVALID のアサートは s_axis_s2mm_aclk の2クロックについて1回となる。


・最初に、”AR# 37425 12.3 EDK、12.3 ISE - カスタム AXI IP コアの作成方法”から ar37425.zip をダウンロードする。

・ar37425.zip を解凍して、ar37425/axi_stream フォルダをテンプレートとして、カメラ・インターフェース用のAXI4-Stream IP (mt9d111_inf_axi_stream.vhd) を作る。
mt9d111_inf_axi_stream.vhd の entity を下に示す。(2013/06/01:修正)

entity mt9d111_inf_axi_stream is
  generic(
        -- Master AXI Stream Data Width
        C_M_AXIS_DATA_WIDTH : integer range 8 to 1024 := 24
    );
  port (
        s2mm_aclk    : out std_logic;
        s2mm_prmry_reset : in std_logic;
        s2mm_fsync        : out std_logic;

        -- Master Stream Ports
    --    m_axis_aresetn : out std_logic;
        m_axis_tdata   : out std_logic_vector(C_M_AXIS_DATA_WIDTH-1 downto 0);
        m_axis_tstrb   : out std_logic_vector((C_M_AXIS_DATA_WIDTH/8)-1 downto 0);
        m_axis_tvalid  : out std_logic;
        m_axis_tready  : in  std_logic;
        m_axis_tlast   : out std_logic;
        
        init_done        : in std_logic; -- PS部の初期化終了
        
        -- MT9D111 Camera Interface
        pclk_from_pll    : in    std_logic;    -- PLLからMT9D111のxck に出力するクロック
        pclk            : in     std_logic;    -- MT9D111からのピクセルクロック入力
        xck                : out    std_logic;    -- MT9D111へのピクセルクロック出力
        href            : in     std_logic;
        vsync            : in    std_logic;
        cam_data        : in    std_logic_vector(7 downto 0);
        standby            : out    std_logic;    -- STANDBY出力(ディスエーブル、0固定)
        pfifo_overflow    : out    std_logic;    -- pfifo overflow
        pfifo_underflow    : out    std_logic    -- pfifo underflow
    );

end mt9d111_inf_axi_stream;


これで、カメラ・インターフェース用のAXI4-Stream IPを作っていこうと思う。クロックドメインを変換する非同期FIFOは実装しないので、比較的簡単に実装できそうだ。
  1. 2013年05月29日 05:02 |
  2. AXI4-Stream IPの作製
  3. | トラックバック:0
  4. | コメント:4