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

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

FPGAの部屋

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

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

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

前回、AXI Verification IPのWrite トランザクションについて記事を書いたが、どうしてもWVALID をディアサートする方法が分からなかった。本当はランダムにできれば良かったのだが、WVALID を変化させる方法が分かったので、覚書を書いておく。

AXI Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite PG267 April 5, 2017”の60 ページの”Figure C-2: Write Command and Data Flow”の一部を引用する。
Vivado_2017-1_59_170501.png

ここでピンクの四角で囲ってある”Data Inter-Beat Delay (Transaction)”がWVILD に当たることができるDelay のようだ。
ここで、”AR# 68234 AXI Verification IP - AXI VIP のリリース ノートおよび既知の問題”のXILINX_AXI_VIP_2017_1.zip を展開した資料を見てみる。
Vivado_2017-1_60_170501.png

上の図でもわかるように set_beat_delay() があった。これを使用してみたが、updated の設定の仕方が分からない。
set_beat_delay() を使って、2番目のWrite トランザクションのバースト転送の2番目、4番目、6番目を遅らせてみた。2番目のWrite トランザクションのSystemVerilog のコードを示す。

  task wr_tran_method_two();
    axi_transaction              wr_transaction;     //Declare an object handle of write transaction
    xil_axi_uint                 mtestID;            // Declare ID  
    xil_axi_ulong                mtestADDR;          // Declare ADDR  
    xil_axi_len_t                mtestBurstLength;   // Declare Burst Length   
    xil_axi_size_t               mtestDataSize;      // Declare SIZE  
    xil_axi_burst_t              mtestBurstType;     // Declare Burst Type  
    xil_axi_data_beat [255:0]    mtestWUSER;         // Declare Wuser  
    xil_axi_data_beat            mtestAWUSER;        // Declare Awuser  
    /***********************************************************************************************
    * A burst can not cross 4KB address boundry for AXI4
    * Maximum data bits = 4*1024*8 =32768
    * Write Data Value for WRITE_BURST transaction
    * Read Data Value for READ_BURST transaction
    ***********************************************************************************************/
    bit [32767:0]                 mtestWData;         // Declare Write Data 

    mtestID = 0;
    mtestADDR = 'h100;
    mtestBurstLength = 15;
    mtestDataSize = xil_axi_size_t'(xil_clog2(32/8));
    mtestBurstType = XIL_AXI_BURST_TYPE_INCR; 
    wr_transaction = agent.wr_driver.create_transaction("write transaction in API");
    WR_TRANSACTION_FAIL: assert(wr_transaction.randomize());
    wr_transaction.set_write_cmd(mtestADDR,mtestBurstType,mtestID,mtestBurstLength,mtestDataSize);
    mtestWData[31:0] = 32'h12345678; 
    mtestWData[63:32] = 32'h9abcdef0;
    wr_transaction.set_data_block(mtestWData);
    wr_transaction.set_beat_delay(2,8);
    wr_transaction.set_beat_delay(4,8);
    wr_transaction.set_beat_delay(6,8);
    agent.wr_driver.send(wr_transaction);
  endtask :wr_tran_method_two


ここで、

    wr_transaction.set_beat_delay(2,8);
    wr_transaction.set_beat_delay(4,8);
    wr_transaction.set_beat_delay(6,8);

が今回書き加えた部分だ。
このシミュレーション波形を示す。
Vivado_2017-1_61_170501.png

2番目のWrite トランザクションでWVALID がトグルしているのが分かるが、同じ updated の値にしたのに、それぞれのWVALID がディアサートされている間隔が違っているのはなぜだかわからない?
2番目のWVALID のディレイの長さは 40 ns 、4番目のWVALID のディレイの長さは120 ns 、6番目のWVALID のディレイの長さは140 ns だった。
  1. 2017年05月01日 05:01 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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