FC2カウンター FPGAの部屋 ar37425のAXI4 Masterサンプルを試す6(シミュレーション3)
fc2ブログ

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

FPGAの部屋

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

ar37425のAXI4 Masterサンプルを試す6(シミュレーション3)

ar37425のAXI4 Masterサンプルを試す5(シミュレーション2)”の続き。

Xilinx社のAXIバス回路のサンプルの動作を詳しく見ていこうと思う。

AXI4 Burst Write
まずは、AXI4 Burst Writeを見ていこう。図1にシミュレーション波形を示す。
AXI4 Burst Writeはアドレスd0000040番地からのBurst Writeとなっている。
AXI_Protcol_5_120119.png
図1. AXI4 Burst Write シミュレーション波形

これを、”AXI4 プロトコルの勉強3(書きこみバースト例)”と見比べてみる。そうすると、オーバーラップしてない書き込みバーストに当たる。
オーバーラップしていない書き込みバーストのタイミングチャート例を図2に示す。
AXI_Protcol_3_111209.png
図2. AXI4バスのオーバーラップしていない書き込みバーストのタイミングチャート例

図1で、M_AXI_AWVALIDが常時 1 なのに、バーストWriteが終了してからしかM_AXI_AWREADYが 1 にアサートされないのは、アドレス転送をオーバーラップできないということになる。つまり、XilinxのバーストWriteはアドレス転送をオーバーラップできない。(バースト長に依存して、オーバーラップできないという可能性がある)

Write Address Channel
・M_AXI_AWADDR はアドレスでd0000040番地。
・M_AXI_AWVALID はアドレスが有効なことを示す。
・M_AXI_AWREADYはスレーブがアドレスを取得したことを示す。1の時にAW...にで示されるアドレス転送の属性をスレーブが取得する。
・M_AXI_AWID は ID、いつも 0 。1 は使用していない。
・M_AXI_AWLEN は 0f で16個のバーストがあることを示している。
・M_AXI_AWSIZE は 2 で、4バイトつまり32ビット単位でバーストすることを示す。
・M_AXI_AWBURST は 1 で、INCR。アドレスは単調増加。
・M_AXI_AWLOCK は 0 。
・M_AXI_AWCACHE は 2 で、Normal Non-cacheable Non-bufferable。
・M_AXI_AWPROTは 0 で、Data access, Secure access, Unprivileged access。
・M_AXI_AWQOS は 0 で、デフォルト値。
・M_AXI_AWUSER は 0。ユーザー信号。

Write Data Channel
・M_AXI_WDATA は書き込みデータ。00000000から0000000fまで。
・M_AXI_WSTRB はバイト・イネーブル。常に1。
・M_AXI_WLAST は最後のデータ転送を示す。
・M_AXI_WVALID は書き込みデータが有効なことを示す。
・M_AXI_WREADY はスレーブが書き込みデータを受け取れる状態にあることを示す。

Write Response Channel
・M_AXI_BID はID、いつも0。M_AXI_AWID が0のみだから。
・M_AXI_BRESP は0。OKAYで書きこみ成功。
・M_AXI_BVALID は M_AXI_BID, M_AXI_BRESP が有効であることを示す。
・M_AXI_BREADY はマスターが M_AXI_B... 信号を受け取れることを示す。

だいたい想定内の信号だったが、M_AXI_AWCACHE が Normal Non-cacheable Non-bufferable だった。
なお、これは2番目のBurst Writeとなっている。最初のBurst Writeのアドレスの書き込みはシミュレーションの最初の方で行われている。その後、WriteしようにもDDR2 SDRAMが初期化中でWriteできなかったので、ずっと待機していて、図1に示されたBurst Writeの前に書きこまれている。

AXI4 Burst Read
AXI4 Burst Readを見ていこう。図3にシミュレーション波形を貼る。
AXI_Protcol_6_120120.png
図3.AXI4 Burst Read シミュレーション波形

黄色のカーソルはAXI4 Burst Writeと同じ位置にある。AXI4 Burst Readはアドレスd0000000番地から16バーストのReadになっている。d0000000番地にWriteしてから同じ番地をReadしている。
AXI4 Burst Write はアドレス転送がオーバーラップしていないが、AXI4 Burst Read はオーバーラップしている。ReadはDDR2 SDRAMを読んでくるので、レイテンシが発生するので、合理的な仕様といえると思う。
図4に、オーバーラップしている読み出しバースト例を下に示す。
AXI_Protcol_2_111209.png
図4. AXI4バスのオーバーラップしている読み出しバースト例

AXI4 Burst Read の M_AXI_ARVALID は常に1ではなく、必用な場合に1をアサートしている。これはXilinxのAXI4 Burst Read がオーバーラップを許しているということを示している。

Read Address Channel
・M_AXI_ARADDR はアドレス。このReadデータのアドレスは d0000000番地。
・M_AXI_ARVALID はアドレスが有効であることを示す。と言うか、Readしたいという意思を示す。
・M_AXI_ARREADY はアドレスが有効になって、スレーブがアドレスを受け取ったことを示す。
・M_AXI_ARID はいつも0。
・M_AXI_ARLEN は 0f で16個のバーストがあることを示している。
・M_AXI_ARSIZE は 2 で、4バイトつまり32ビット単位でバーストすることを示す。
・M_AXI_ARBURST は 1 で、INCR。アドレスは単調増加。
・M_AXI_ARLOCK は 0 。
・M_AXI_ARCACHE は 2 で、Normal Non-cacheable Non-bufferable。
・M_AXI_ARPROTは 0 で、Data access, Secure access, Unprivileged access。
・M_AXI_ARQOS は 0 で、デフォルト値。
・M_AXI_ARUSER は 0。ユーザー信号。

Read Data Channel
・M_AXI_RID はID、いつも0。M_AXI_ARID が0のみだから。
・M_AXI_RDATA は、Readデータ。00000000 から 0000000f まで。
・M_AXI_RREESP は 0 で、OKAY。Readデータが問題ないことを示す。
・M_AXI_RLAST は最後のデータ転送を示す。
・M_AXI_RVALID は、スレーブからのReadデータが有効であることを示す。
・M_AXI_RREADY は、マスタがReadデータを受け取ったことを示す。
・M_AXI_RUSER は 0。ユーザー信号。


最後に、AXI4 Busrt Write, AXI4 Burst Read を行なっている時のDDR2 SDRAMアクセスの様子を見てみよう。
図5に、DDR2 SDRAMアクセスのシミュレーション波形を示す。
AXI_Protcol_7_120120.png
図5. DDR2 SDRAMアクセスのシミュレーション波形

mcbx_dram_cas_n と mcbx_dram_we_n が同時に0になるのがWriteで、mcbx_dram_cas_n のみが0になるのがReadとなる。
最初のバーストはWriteで、Read, Write, Read と続いている。AXI4 Master の処理をしているのが確認できた。
黄色いカーソルは図1,図3,図5共に同じ位置に置いてある。

  1. 2012年01月20日 05:19 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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