一、关于include
报错:ERROR: [VRFC 10-3195] cannot open include file 'timescale.v'
解决方案:
(1)把timescale.v文件添加至工程,右键设置成"Set Global Include”
(2)把timescale.v的“set file type”设置成Verilog Header
二、关于import
报错:error: "axi_vip_pkg" is not declared
我看官方例程也报错?????
附使用教程(转载:【VIVADO IP】AXI Verification IP - 知乎 (zhihu.com)):
1 IP主要功能
AXI Verification IP(VIP)专为支持仿真客户设计而开发,即只参与仿真,不参与综合实现,可以用来进行AXI协议校验(AXI Protocol Checker)使用。
主要功能摘要:
- 支持 AXI3、AXI4 或 AXI4-Lite 接口
- 可配置为 AXI master接口、AXI slave接口和直通模式
- 可配置的模拟消息传递
- 提供仿真 AXI 协议检查
如需获取 AXI VIP IP 核手册以及API设计文件,请从该链接中PDF和附件中获取。
2 IP配置
IP的配置除了接口模式外,其他都可配置为自适应
这里主要说明一下,此IP并非接入设计即可使用,需要进行一些配置才能正常工作。
我们打开IP的实例工程,在仿真文件中可以看到很多测试文件,根据功能被划分在不同文件夹中:
具体功能的描述我们可以在手册【PG267】的【table 6-1】中查看:
简单的从命令格式也可知道功能:basic/adv(基础/高级)+ mst(master)【active/passive】+pt(pass through)【slv/mst/passive/mem】+slv(slave)【passive/mem/comb】
接下来我们以单个slave作为测试端口来介绍配置。我们打开slave配置活动模式(__comb)的仿真文件,例如:
可以看到每个模式都有相关的头文件被加入仿真(配置为passive的没有加入),我们需要把对应的头文件加入自己的test-bench中,才能正确运行IP。
STEP 1:添加头文件并声明
头文件加入自己的仿真列表中:
并在test-bench中进行声明
`timescale 1ns/1ps
`include "axi_vip_0_slv_stimulus.sv"
...
axi_vip_0_slv_stimulus slv();
接下来我们需要修改这个头文件来匹配我们自己的工程。在顶部注释中可以看到配置流程:
* This file contains example on how Slave VIP withput memory model responds
* For Slave VIP to work correctly, user environment MUST have the lists of item below and follow
* this order.
* 1. import two packages.(this information also shows at the xgui of the VIP)
* import axi_vip_pkg::*
* import <component_name>_pkg::*;
* 2. delcare <component_name>_slv_t agent
* 3. new agent (passing instance IF correctly)
* 4. start_slave
* As for ready generation, if user enviroment doesn't do anything, it will randomly generate ready
* siganl,if user wants to create his own ready signal, please refer task user_gen_wready.
STEP 2:导入packages
这一步我们需要导入packages
* import axi_vip_pkg::* ;
* import <component_name>_pkg::*;
使用Tcl命令来获取 ip 在工程中的实例化名称
get_ips *vip*
# return : ad_test_axi_vip_0_0
或者在IP的参数信息中也可以看到
对应修改即可:
import axi_vip_pkg::*;
import ad_test_axi_vip_0_0_pkg::*;
STEP 3:声明agent
// <component_name>_slv_t
ad_test_axi_vip_0_0_slv_t agent;
STEP 4:新建agent并启动
新建agent需要确定IP在工程中的路径,以我的工程为例:
// "Xilinx AXI VIP Found at Path: my_ip_exdes_tb.DUT.ex_design.axi_vip_mst.inst"
agent = new("slave vip agent",inst_ad_test_wrapper.ad_test_i.axi_vip_0.inst.IF);
agent.start_slave();
到此文件的配置就完成了。
其他配置
ready
信号的决策有多种,在下面可以设置:
task user_gen_awready();
...
awready_gen.set_ready_policy(XIL_AXI_READY_GEN_EVENTS);
...
endtask
在AXI协议检查时可以设置返回错误信息:
/*************************************************************************************
* Set verbosity of agent - default is no print out
* Verbosity level which specifies how much debug information to produce
* 0 - No information will be printed out.
* 400 - All information will be printed out
*************************************************************************************/
agent.set_verbosity(400); // set verbosity of agent