FC2カウンター FPGAの部屋 AXI4 Master Interfaceモジュールの作製1(仕様の検討)
FC2ブログ

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

FPGAの部屋

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

AXI4 Master Interfaceモジュールの作製1(仕様の検討)

今までのカメラ・コントローラやビットマップ・ディスプレイ・コントローラは、複数のアドレス転送を許さなかったので、今回は複数のアドレス転送を許す汎用AXI4 Master Interfaceモジュールを作製することにした。
(2013/10/31:書き換え、ユーザー回路とAXI4 Busのクロックドメインを分けた)
(2013/11/03 : read_fifo_rd_ena を追加)
(2013/11/26: write_data_empty ポートを追加)

CoreGen のFIFO IPを埋め込む関係上、64ビットデータバス幅の axi4_master_inf.v を作って、32ビット幅データバスにも対応させる予定だ。別々に作ろうと思う。

AXI4 Bus側とユーザー回路側は非同期FIFOで結ばれていて、それそれ独自のクロックで動作する。また、ユーザー回路のRead 側と Write 側は別々のクロックで動作することができる。
下に AXI4 Master Interface (axi4_master_inf.v) のブロック図を示す。
axi4_master_inf_1_131029.png

AXI4 Master Interface は、それぞれ4つのFIFOインターフェースで構成されている。

read_adfifo : AXI4 Master Read のアドレス転送用FIFOで、16深度の分散RAMを使用するFIFOとする。
read_fifo : AX4 Master Read のデータ転送用FIFOで、512深度のBlockRAMを使用するFIFOとする。
write_adfifo : AX4 Master Write のアドレス転送用FIFOで、16深度の分散RAMを使用するFIFOとする。
write_fifo : AX4 Master Write のデータ転送用FIFOで、512深度のBlockRAMを使用するFIFOとする。

4つのFIFOのクロックドメインは、Read側が read_clk, Write側が write_clkだ。リセットは、Read側が read_reset, Write側が write_reset だ。
4つのFIFOは独立に動作する。当然、read_adfifo と read_fifo は組で、read_adfifo にアドレスやバースト長(arlen)を書くと、AXI4 Master Readトランザクションを生成してAXI4バスに投げる。その後、Readアドレスに相当するReadデータを受け取る。AXI Slave から送られてきたReadデータは read_fifo に入ってきて、データが入ってくるとempty_n が 1 になり、Readデータがあることをユーザー回路に知らせる。
もう1つの組は、write_adfifo と write_fifo だ。Read同様に、write_adfifo にアドレスやバースト長(awlen)を書くと、AXI4 Master Writeトランザクションを生成してAXI4バスに投げる。その後、ユーザー回路が書き込んだwrite_data と wstrb(byte enable) をAXI Slave に送る。

ポートの説明
Readクロック、リセット

read_clk : ユーザー回路 Read 側のクロック
read_reset : ユーザー回路 Read 側のリセット


Readアドレス転送

read_adfifo_wr_ena : read_adfifoへのWrite Enable、1にすると read_adfifo へのWriteする。
read_adfifo_addr : Readアドレスを入力する(32ビット幅)
read_adfifo_arlen : データ転送数-1 を入力する(8ビット幅)
read_adfifo_full : read_adfifo の fullフラグ


Readデータ転送

read_fifo_rd_ena : read_fifoの Read Enable
read_fifo_read_data : read_data(32ビット幅または64ビット幅)
read_fifo_empty_n : read_fifoの empty フラグ(active low)、1の時にReadデータがある
read_fifo_almost_empty_n : read_fifo の almost emptyフラグ(active low)、後1つ Read すると empty になる


Writeクロック、リセット

write_clk : ユーザー回路 write 側のクロック
write_reset : ユーザー回路 write 側のリセット


Writeアドレス転送

wirte_adfifo_wr_ena : write_adfifo へのWrite Enable、1にすると write_adfifo へのWriteする
write_adfifo_addr : Writeアドレスを入力する(32ビット幅)
write_adfifo_arlen : データ転送数-1 を入力する(8ビット幅)
write_adfifo_full : write_adfifo の fullフラグ

Writeデータ転送

wirte_fifo_wr_ena : write_fifo へのWrite Enable、1にすると write_fifo へのWriteする
write_fifo_wirte_data : write_data(32ビット幅または64ビット幅)
write_fifo_wstrb : byte enable (4ビットまたは、8ビット)
write_fifo_full : write_fifo の fullフラグ
write_fifo_almost_full : write_fifo の almost full フラグ、後1つで full
write_fifo_empty : write_fifo のデータが空になった。クロックはwrite_clkに載せ替え済み。

アドレス転送はアドレスとデータ転送長をFIFOにWriteするのは、2クロックに1回を想定している。
  1. 2013年10月29日 19:34 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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