FC2カウンター FPGAの部屋 Vivado 2017.1 の新機能6(AXI Verification IPの使い方の覚書2)

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

FPGAの部屋

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

Vivado 2017.1 の新機能6(AXI Verification IPの使い方の覚書2)

AXI Verification IPの使い方の覚書2です。大体AXI Verification IPの使い方が分かってきた。
今回は、シミュレーションの下から2番目の sim_adv_mst_active__pt_passive__slv_mem をやってみます。
AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の 46 ページの”Figure 6-2: Advanced Simulation Sets”のうちの sim_adv_mst_active_pt_passive_slv_mem を引用する。
Vivado_2017-1_49_170429.png
図1 sim_adv_mst_active__pt_passive__slv_mem

上の図のように、前回からはSlave VIP にメモリが入ったモデルを使用しているところが違っている。
このモデルで、Behavioral Simulation を行った。波形が表示された後で、run all を実行して、$finish で停止する所まで実行した。
Slave VIP のシミュレーション波形を図2 に示す。
Vivado_2017-1_50_170429.png
図2 Slave VIP のシミュレーション波形1

さて、ここで wready の波形を変更してみよう。
wready はスレーブが出力する。よって、axi_vip_0_mem_stimulus.sv の user_gen_wready タスクを変更してみよう。
axi_vip_0_mem_stimulus.sv の user_gen_wready タスク部分を引用する。
Vivado_2017-1_51_170429.png

wready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
があるが、これで、wready の出力のポリシーを設定しているようだ。今は、XIL_AXI_READY_GEN_OSC で wready_gen.set_low_time(1); と wready_gen.set_high_time(2); の設定値を交互に出力している。図 2 を見ると、wready の High の期間が 2 クロック、Low の期間が 1 クロックになっているのが分かる。
これを

wready_gen.set_low_time(1);
wready_gen.set_high_time(1);

に変更してみよう。
変更後にBehavioral Simulation を行った。波形を図3 に示す。
Vivado_2017-1_52_170429.png
図3 Slave VIP のシミュレーション波形2

図2 と図3 を比べてみると、図3 の s_axi_wready のHigh の幅が短くなっているのが分かる。図3 では、wready のHigh の幅とLow の幅が等しくなっている。

次に、

wready_gen.set_ready_policy(XIL_AXI_READY_GEN_RANDOM);

に変更してみよう。
変更後にBehavioral Simulation を行った。波形を図4 に示す。
Vivado_2017-1_53_170429.png
図4 Slave VIP のシミュレーション波形3

wready の生成がランダムになった。

次は、Write トランザクションを変更してみる。
1番目のWrite トランザクションはランダムなので、そのままとする。2番目のWrite トランザクションは値を設定しているので、それを変更してみよう。当初の2番目のWrite トランザクションを示す。
Vivado_2017-1_54_170429.png

mtestADDR(アドレス)は0番地なので 0x100 番地に、mtestBurstLength(バースト長)は0 (シングル転送)なので、15 (16バースト)に変更する。
そして、Write するデータは mtestWData にセットすれば良いらしい。32ビット幅なので、32768 バイトと宣言されているmtestWData の32ビット区切りでデータを入れていけばよいようだ。

mtestWData[31:0] = 32'h12345678;
mtestWData[63:32] = 32'h9abcdef0;を

入れてみよう。
Vivado_2017-1_55_170429.png

変更後にBehavioral Simulation を行った。全体波形を図5 に示す。
Vivado_2017-1_56_170429.png
図 5 Slave VIP のシミュレーション波形4(全体波形)


2番目のアドレス転送を拡大してみよう。
Vivado_2017-1_57_170429.png
図 6 Slave VIP のシミュレーション波形4(アドレス転送の拡大)

100番地で 16 バースト、32ビット幅のWrite トランザクションとなっている。

2番目のデータ転送を拡大してみよう。
Vivado_2017-1_58_170429.png
図 7 Slave VIP のシミュレーション波形5(データ転送の拡大)

最初のWrite データが 0x12345678 で2番目のWrite データが 0xabcdef0 であること分かる。

なお、AXI VIP API の資料は、”AR# 68234 AXI Verification IP - AXI VIP のリリース ノートおよび既知の問題”のXILINX_AXI_VIP_2017_1.zip を参照するとよいと思う。
  1. 2017年04月29日 06:22 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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