参考
- `1. XilinxのAXI Verification IPを試す。
- `2. https://support.xilinx.com/s/question/0D52E00006hphJ3SAI/axi-vip-and-axivipv102pkg-is-not-declared?language=ja
処理の概要
- Vivadoでプロジェクトを新規作成
- Block Designを「sys」という名前で作成する
- Tools > Create and Package New IP ... > Create a new AXI4 peripheral
- 設定はデフォルトのまま作成してIP化する
- myip_0をBlock Designに追加する
- AXI VIPを追加する
- PROTOCOLはAXI4LITEにする
- aclk, aresetnのピンをMake Externalする (名前をこのようにする)
- axi_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
以下の実装はQiitaの記事からimport axi_vip_pkgを変更している (参考2).
tb.sv
`timescale 1ns/1ps
//import axi_vip_v1_0_1_pkg::*;
import axi_vip_pkg::*;
import sys_axi_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_axi_vip_0_0_mst_t agent;
task init_agent();
agent = new("master vip agent", dut.sys_i.axi_vip_0.inst.IF);
agent.start_master();
endtask
// Transaction method
task wr_tran();
axi_transaction wr_transaction;
wr_transaction = agent.wr_driver.create_transaction( "write transaction with randomization");
WR_TRANSACTION_FAIL: assert(wr_transaction.randomize());
agent.wr_driver.send(wr_transaction);
endtask
task rd_tran();
axi_transaction rd_transaction;
rd_transaction = agent.rd_driver.create_transaction("read transaction with randomization");
RD_TRANSACTION_FAIL_1a:assert(rd_transaction.randomize());
agent.rd_driver.send(rd_transaction);
endtask
// Testscenario
initial begin
fork
init_agent();
clk_gen();
rst_gen();
join_none
clk_dly(100);
wr_tran();
clk_dly(100);
rd_tran();
clk_dly(100);
$finish(2);
end
endmodule
波形の例
m_axi_wdata[31:0]に書き込まれた2f2391d9がs00_axi_rdata[31:0]に読み込まれているので、AXIの通信が成功している?