動作環境
- Windows 10 Pro (21H1)
- Vivado 2019.1
関連
- 2021-12-02 AXI Verification IPを使う (AXI4LITE)
- PG277 AXI4-Stream Verification IP v1.0
- 2021-12-02 AXI4-Stream Verification IPをMasterとして使う
手順の概要
- Vivadoでプロジェクトを新規作成
- Block Designを「sys」という名前で作成する
- Tools > Create and Package New IP ... > Create a new AXI4 peripheral
- AXI4-Stream Master(カウンタ)をここで作る (後述を参照)
- myip_211202_11_0としてIP化しておく
- myip_211202_11_0をBlock Designに追加する
- AXI4-Stream Verification IPを追加する
- INTERFACE MODEをSLAVEに変更
- aclk, aresetnのピンをMake Externalする (名前をこのようにする)
- axi4stream_vip_0とmyip_0を接続する
- Create HDL Wrapperをする
- Simulation Sourcesにtb.svを作成する
- Run Simulationをする
- 見たいピンを波形に足す
- m_axi_wlast, m_axi_wvalid, m_axi_wready, m_axi_wdata[31:0]
- s00_axi_wdata[31:0], s00_axi_rready, s00_axi_rvalid
AXI4-Stream Master(カウンタ)
参考: AXI4-Streamを試す by 筑波大学 武内修様
上記を参考にIPを作成する。
- Interface Type: Stream
- Interface Mode: Master
- Edit IP
-
<IP名>_v1_0_M00_AXIS.v
ファイルのM_AXIS_TVALID, M_AXIS_TDATA, M_AXIS_TLAST, M_AXIS_TSTRBのassignをコメントアウトする (下記) - 武内様の実装を
// Add user logic here
の下に追加する - Package IP
- File Groups > Merge changes from File Groups Wizard
- Review and Package > IP has been modified
- Re-Package IPを実施
// 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

テストベンチ (System Verilog)
https://qiita.com/tethys_seesaa/items/9d4c00212d9ea79b1497
の実装をベースとしてAXI4StreamのSlave用に書き換えした。
(PG277 AXI4-Stream Verification IP v1.0を参考に)
`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]がカウントアップしていくのを見ることができるようになった。

備考 > 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 が見つからない