”
ar37425のAXI4 Masterサンプルを試す5(シミュレーション2)”の続き。
Xilinx社のAXIバス回路のサンプルの動作を詳しく見ていこうと思う。
AXI4 Burst Writeまずは、AXI4 Burst Writeを見ていこう。図1にシミュレーション波形を示す。
AXI4 Burst Writeはアドレスd0000040番地からのBurst Writeとなっている。

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

図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 ReadAXI4 Burst Readを見ていこう。図3にシミュレーション波形を貼る。

図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に、オーバーラップしている読み出しバースト例を下に示す。

図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アクセスのシミュレーション波形を示す。

図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共に同じ位置に置いてある。
- 2012年01月20日 05:19 |
- AXI4 Master IPの作製
-
| トラックバック:0
-
| コメント:0