1. 创建Vivado自定义IP
在vivado界面中选择菜单Tools》Create and Package New IP,
在向导对话框中选择Create AXI Peripheral,创建基于AXI总线接口的IP模块
定义AXI接口类型,这里可以选择Lite类型,可根据实际应用选择Full或者Stream,接口模式这里选择Slave,同时定义数据位宽和寄存器数量。
保存该自定义IP至指定路径。在vivado中创建工程,添加刚创建的IP模块和仿真模块axi_vip,
自动连接好模块之间的连线,设定slave地址,也可以由软件自动产生。
2. 建立仿真
- 创建testbench文件,并导入如下axi接口仿真需要的包
import axi_vip_pkg::*;
import design_1_axi_vip_0_1_pkg::*;
所需要支持的文件在安装路径:G:\Xilinx\Vivado\2019.1\data\xilinx_vip\hdl
- 将前面创建的IP design模块产生wrapper HDL文件,然后实例化。下面几行代码需要额外注意。
// Declare the agent for the VIP (one agent for one AXI VIP has to be declared).
// We want the VIP to act as a Master. Thus the type of the agent will be <component_name>_mst_t
design_1_axi_vip_0_1_mst_t master_agent;
// Create an agent
master_agent = new("master vip agent",DUT.design_1_i.axi_vip_0.inst.IF);
// set tag for agents for easy debug
master_agent.set_agent_tag("Master VIP");
// set print out verbosity level.
master_agent.set_verbosity(400);
//Start the agent
master_agent.start_master();
// Use the tasks AXI4LITE_READ_BURST and AXI4LITE_WRITE_BURST to send read and write commands
#20ns
master_agent.AXI4LITE_WRITE_BURST(addr1,prot,data_wr1,resp);
#20ns
master_agent.AXI4LITE_WRITE_BURST(addr2,prot,data_wr2,resp);
- 定义模块功能
软件自动产生的verilog文件,实现了axi接口的读写操作,针对实际应用,单独设计外设接口功能,重定义module中的输入输出信号,并更新至IP模块中,在自建的工程中如同Xilinx提供的IP,在ip status中选择更新。