1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

2021-12-02 AXI4-Stream Verification IPをSlaveとして使う

Posted at

動作環境

  • Windows 10 Pro (21H1)
  • Vivado 2019.1

関連

手順の概要

  1. Vivadoでプロジェクトを新規作成
  2. Block Designを「sys」という名前で作成する
  3. Tools > Create and Package New IP ... > Create a new AXI4 peripheral
    • AXI4-Stream Master(カウンタ)をここで作る (後述を参照)
    • myip_211202_11_0としてIP化しておく
  4. myip_211202_11_0をBlock Designに追加する
  5. AXI4-Stream Verification IPを追加する
    • INTERFACE MODEをSLAVEに変更
  6. aclk, aresetnのピンをMake Externalする (名前をこのようにする)
  7. axi4stream_vip_0とmyip_0を接続する
  8. Create HDL Wrapperをする
  9. Simulation Sourcesにtb.svを作成する
  10. Run Simulationをする
  11. 見たいピンを波形に足す
    1. m_axi_wlast, m_axi_wvalid, m_axi_wready, m_axi_wdata[31:0]
    2. s00_axi_wdata[31:0], s00_axi_rready, s00_axi_rvalid

AXI4-Stream Master(カウンタ)

参考: AXI4-Streamを試す by 筑波大学 武内修様

上記を参考にIPを作成する。

  1. Interface Type: Stream
  2. Interface Mode: Master
  3. Edit IP
  4. <IP名>_v1_0_M00_AXIS.vファイルのM_AXIS_TVALID, M_AXIS_TDATA, M_AXIS_TLAST, M_AXIS_TSTRBのassignをコメントアウトする (下記)
  5. 武内様の実装を// Add user logic hereの下に追加する
  6. Package IP
    1. File Groups > Merge changes from File Groups Wizard
    2. Review and Package > IP has been modified
    3. Re-Package IPを実施
<IP名>_v1_0_M00_AXIS.v
	// I/O Connections assignments

	//assign M_AXIS_TVALID	= axis_tvalid_delay;
	//assign M_AXIS_TDATA	= stream_data_out;
	//assign M_AXIS_TLAST	= axis_tlast_delay;
	//assign M_AXIS_TSTRB	= {(C_M_AXIS_TDATA_WIDTH/8){1'b1}};

Block Design

image.png (29.3 kB)

axi4stream_vip_0の設定
image.png (59.0 kB)

テストベンチ (System Verilog)

https://qiita.com/tethys_seesaa/items/9d4c00212d9ea79b1497
の実装をベースとしてAXI4StreamのSlave用に書き換えした。
(PG277 AXI4-Stream Verification IP v1.0を参考に)

tb.sv
`timescale 1ns/1ps
import axi4stream_vip_pkg::*;
import sys_axi4stream_vip_0_0_pkg::*;

module tb();

    localparam int LP_CLK_PERI = 100;
    localparam int LP_RST_PERI = 777;

    // DUT instance
    logic aresetn, aclk;
    sys_wrapper dut(.*);

    task rst_gen();
        aresetn = '0;
        #(LP_RST_PERI);
        aresetn = '1;
    endtask

    task clk_gen();
        aclk = '0;
        forever #(LP_CLK_PERI/2) aclk = ~aclk;
    endtask

    task clk_dly(int n);
        repeat(n) @(posedge aclk);
    endtask

    // VIP decreation
    sys_axi4stream_vip_0_0_slv_t agent;

    task init_agent();
        agent = new("master vip agent", dut.sys_i.axi4stream_vip_0.inst.IF);
        agent.start_slave();
    endtask

    // Ready gen method

    task rd_rdy();
        axi4stream_ready_gen      ready_gen; 
        ready_gen = agent.driver.create_ready("ready_gen 2");
        ready_gen.set_ready_policy(XIL_AXI4STREAM_READY_GEN_SINGLE);
        ready_gen.set_low_time(1);
        agent.driver.send_tready(ready_gen); // rd_driver=>driver
    endtask

    // Testscenario
    initial begin

        fork
            init_agent();
            clk_gen();
            rst_gen();
        join_none

        clk_dly(100);

        rd_rdy();

        clk_dly(100);

        $finish(2);
    end
endmodule

波形

2000nsまで実行した。
s_axi_tdata[31:0]がカウントアップしていくのを見ることができるようになった。

image.png (27.0 kB)

備考 > XXXが見つからない

tb.svにおいて以下のエラーが出るが、Run Simulation可能。
visual bugとしてforumで報告されている。

  • axi4stream_vip_pkg が見つからない @ import axi4stream_vip_pkg::*;
  • sys_axi4stream_vip_0_0_pkgが見つからない @ import sys_axi4stream_vip_0_0_pkg::*;

AXI VIP and axi_vip_v1_0_2_pkg is not declared
https://support.xilinx.com/s/question/0D52E00006hphJ3SAI/axi-vip-and-axivipv102pkg-is-not-declared?language=ja

You may see the lines underlined in red, this is a visual bug and is being fixed. It is safe to ignore it.

同様に以下のエラーも出たが、Run Simulationできた。

  • XIL_AXI4STREAM_READY_GEN_SINGLE が見つからない
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?