FC2カウンター FPGAの部屋 AXI4 Master Interfaceモジュールの作製3(シミュレーション2)
FC2ブログ

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

FPGAの部屋

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

AXI4 Master Interfaceモジュールの作製3(シミュレーション2)

AXI4 Master Interfaceモジュールの作製2(シミュレーション)”の続き。

前回は、AXI Slave BFM がアドレス転送がネストできないので、アドレス転送のネストにも対応できるように AXI Slave BFM を書き換えた。そのため、シミュレーション用 同期FIFO IPを作製して使用した。
今度の AXI4 Slave BFM には、設定が4つある。それを下に示す。

WRITE_RANDOM_WAIT : integer := 1; -- Write Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
READ_RANDOM_WAIT : integer := 0; -- Read Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
READ_DATA_IS_INCREMENT : integer := 0; -- ReadトランザクションでRAMの内容をReadする = 0(RAMにWriteしたものをReadする)、Readデータを+1する = 1(データは+1したデータをReadデータとして使用する
RUNDAM_BVALID_WAIT : integer := 0 -- Write Data Transaction が終了した後で、BVALID をランダムにWaitする = 1、BVALID をランダムにWaitしない = 0, 31 ~ 0 クロックのWait


AXI Slalve BFMを下の設定にしてシミュレーションを行った。

.C_M_AXI_DATA_WIDTH(64),
.WRITE_RANDOM_WAIT(1), // Write Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
.READ_RANDOM_WAIT(1), // Read Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
.READ_DATA_IS_INCREMENT(1), // ReadトランザクションでRAMの内容をReadする = 0(RAMにWriteしたものをReadする)、Readデータを+1する = 1(データは+1したデータをReadデータとして使用する
.RUNDAM_BVALID_WAIT(1)


シミュレーション結果を下に示す。まずは Write Transaction を示す。AXI バスのクロックは200MHz、ユーザー回路側のクロックは149MHz程度だ。
axi4_master_inf_5_131112.png

次に Read Transaction を示す。
axi4_master_inf_6_131112.png

アドレス転送がネストできているのがわかると思う。Write Response の完了まで待たないで、次のデータ転送が始まっている。Zynqで、PLからPSのDDR3 SDRAM コントローラにデータをWriteすると Write Response が帰ってくるのが遅いので、Writeのデータ転送を重ね合わせできれば、スループットが改善できると思う。

テストベンチは、上に示した AXI Slave BFM の設定値以外は、”AXI4 Master Interfaceモジュールの作製2(シミュレーション)”で貼ったテストベンチと同じだ。以前のシミュレーション波形と見比べると、今回のシミュレーション波形がアドレス転送をネスト出来て、データ転送を重ねあわせることができているのがわかると思う。

次に、AXI Slalve BFMを下の設定に変更してシミュレーションを行った。

.C_M_AXI_DATA_WIDTH(64),
.WRITE_RANDOM_WAIT(0), // Write Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
.READ_RANDOM_WAIT(0), // Read Transaction のデータ転送の時にランダムなWaitを発生させる=1, Waitしない=0
.READ_DATA_IS_INCREMENT(1), // ReadトランザクションでRAMの内容をReadする = 0(RAMにWriteしたものをReadする)、Readデータを+1する = 1(データは+1したデータをReadデータとして使用する
.RUNDAM_BVALID_WAIT(0)


これで、Waitなしの最速の状態だ。
シミュレーション結果を下に示す。まずは Write Transaction を示す。
axi4_master_inf_7_131112.png

次に、Read Transaction を示す。
axi4_master_inf_8_131112.png

axi_slave_BFM.vhd は、773行になってしまった。ブログに貼るのが辛いかな?
  1. 2013年11月12日 04:43 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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