在这篇新博文中,我们来聊一聊如何将 axi vip 添加到 vivado 工程中,并对 axi4-lite 接口进行仿真。随后,我们将在仿真波形窗口中讲解用于axi4-lite 传输事务的信号。
使用 axi vip 作为 axi4-lite 主接口(教程)
下载设计文件(本文后附)
打开 vivado 2019.2。
在 tcl 控制台中,使用 cd 命令进入解压缩的目录 (cd axi_basics_3)
在 tcl 中,使用 source 命令执行tcl脚本(source./create_proj.tcl)
这将创建 1 个 vivado 工程,其中附带包含 axi gpio ip 的块设计 (block design)。此 axi gpio ip 的通道 1作为外部输出接口,用于仿真到板载 led 的连接,我们将尝试通过 axi4-lite 传输事务来开关此 led;同时,此 ip 的通道 2作为外部输入接口,用于仿真到板载开关的连接,我们将尝试读取此开关的状态。
5. 将 axi verification ip (axi vip) 添加到设计中。
6. 双击 axi vip 打开其配置 gui,并修改以下参数:
interface mode:master
protocol (manual):axi4lite
7. 将 axi vip 的 axi4-lite 主接口 (m_axi) 连接到 axi gpio ip 的 axi4-lite 从接口 (s_axi),将 axi vip 的 aclk 和 aresetn 端口连接到块设计的输入
8. 打开“地址编辑器 (address editor)”选项卡(“窗口 (window) > 地址编辑器 (address editor)”),然后单击“自动分配地址 (auto assign address)”图标
9.确认此地址设置为 0x4000_0000
注:此处地址的上半部分无关紧要,因为 axi gpio 的 s_axi 接口,其中仅有 9 个地址位连接到 axi vip
点击“验证块设计”图标。确保其中不存在任何严重警告或错误。然后保存块设计。现在,我们需要更新测试激励文件,以声明例化并控制 axi vip。为此,我们将按照(pg267(2019年 10 月 30 日v1.1))中“实用编码指南与示例”章节的内容来进行操作。
11. 从“源 (sources)”窗口打开测试激励文件 axi_gpio_tb.sv
测试激励文件中已包含部分信号(例如,时钟和复位)的控制逻辑,并包含将 led 状态输出至控制台的流程。
always @(posedge led_1)
begin
$display(led 1 on);
end
always @(negedge led_1)
begin
$display(led 1 off);
end
在“实用编码指南与示例”中提到的第 1 步是在 systemverilog 测试激励中创建 1 个模块。此操作在此测试激励文件中已完成。
第 2 步是导入 2 个必需的包:axi_vip_pkg 和_pkg。
注:请使用以下 tcl 命令来查找 vip 实例的 ,以及对应于 axi vip 实例的输出。
随附的测试激励中假定 axi 组件名称为 design_1_axi_vip_0_0(添加到 bd 的首个 axi vip 的默认名称)
get_ips *vip*
12. 在第 58 行附近添加以下行
//step 2 - import two required packages: axi_vip_pkg and _pkg.
import axi_vip_pkg::*;
import axi_gpio_sim_axi_vip_0_0_pkg::*;
第3 步是声明vip 主接口的代理(agent)
13. 在第 102 行附近添加以下行
// step 3 - declare the agent for the master vip
axi_gpio_sim_axi_vip_0_0_mst_t master_agent;
第 4 步和第 5 步为创建新代理并将其启动。
14. 在第 107 行附近添加以下行
// step 4 - create a new agent
master_agent = new(master vip agent,uut.axi_gpio_sim_i.axi_vip_0.inst.if);
// step 5 - start the agent
master_agent.start_master();
准备就绪,可以发送传输事务了。
发送 axi4-lite 传输事务其实很简单。
只需使用axi4lite_write_burst(addr,prot,data,resp) api 执行写传输事务,
使用axi4lite_read_burst(addr,prot,data,resp) api 执行读传输事务即可。
注:axi vip 的所有 api 都记录在 zip 文件中,您可从 china.xilinx.com 下载该文件。
(下载方法如下:
在本教程中,我们将尝试开关连接到 axi gpio 通道 1 的 led_1,并读取连接到 axi gpio 通道 2 的 switch_1 的状态。
通过查看 axi gpio ip 的寄存器映射((pg144)的表 2-4)可知,我们必须在地址 0x0 执行写操作,在地址 0x8 执行读操作:
我们将从写操作开始,尝试切换 led_1 的状态。
15. 添加以下代码以将 0x1 写入 axi gpio 寄存器 0x0,这样应可开启此 led
//send 0x1 to the axi gpio data register 1
#500ns
addr = 0;
data = 1;
master_agent.axi4lite_write_burst(base_addr + addr,0,data,resp);
16. 添加以下代码以将 0x0 写入 axi gpio 寄存器 0x0,这样应可关闭此 led
//send 0x0 to the axi gpio data register 1
#200ns
addr = 0;
data = 0;
master_agent.axi4lite_write_burst(base_addr + addr,0,data,resp);
下一步,我们将读取开关位置的每次变更,并向控制台显示开关状态。
17. 添加对应于读传输事务的以下代码:
// switch in off position
switch_1 = 0;
// read the axi gpio data register 2
#200ns
addr = 8;
master_agent.axi4lite_read_burst(base_addr + addr,0,data,resp);
switch_state = data&1'h1;
if(switch_state == 0)
$display(switch 1 off);
else
$display(switch 1 on);
// switch in on position
switch_1 = 1;
// read the axi gpio data register 2
#200ns
addr = 8;
master_agent.axi4lite_read_burst(base_addr + addr,0,data,resp);
switch_state = data&1'h1;
if(switch_state == 0)
$display(switch 1 off);
else
$display(switch 1 on);
18. 启动仿真,并使其运行 3us。在 tcl 控制台中,您应可看到该 led 的开启和关闭,并可看到开关状态
现在,我们即可对 axi4-lite 接口上的传输事务进行分析
19. 在“范围 (scope)”窗口中,选中位于“axi_gpio_tb > uut >axi_gpio_sim_i”下的 axi_vip_0
20. 在“对象 (objects)”窗口中,右键单击 m_axi 协议实例,然后单击“添加到波形窗口 (add to wave window)”
21. 重新启动仿真,并运行 3us
这样在 axi4-lite 接口上将可看到 4 个传输事务:2 个写传输事务后接 2 个读传输事务
22. 展开 m_axi 协议实例,查看各个通道
这样可以看到写传输事务中的各个步骤。首先,当 ready 和 valid 信号在写地址通道上均处于高位(awready 和 awvalid)时,地址从主接口传输到从接口
随后,当 ready 和 valid 信号在写通道上均处于高位(wready 和 wvalid)时,数据从主接口传输到从接口。
注:每个地址仅传输一个数据,因为在 axi4-lite 接口上不支持突发 (burst) 读写。
最后,当从接口在写响应通道上发送写响应(以表明写操作是否成功)时,写传输事务即告完成。当 ready 和 valid 信号在写响应通道上均处于高位(bready 和 bvalid)时,响应从从接口传输到主接口
对于读传输事务,同样可执行此分析。首先,当 ready 和 valid 信号在读地址通道上均处于高位(arready 和 arvalid)时,地址从主接口传输到从接口
随后,当 ready 和 valid 信号在读通道上均处于高位(rready 和 rvalid)时,数据从从接口传输至主接口。
注:执行读传输事务期间,从接口也会发送读响应以指示读操作是否成功。
此响应将与读通道上的数据同时发送。
往期精选
如何让高科技配置合乎车规要求_全新奥迪A6做到了
乔安360°无极云台:5G双频摄像头 无极云台AI摄像机详解
基于视频解码芯片SAA7111A和FPGA实现实时视频采集系统的设计
Nordic宣布已与美国私营企业Mobile Semiconductor达成收购协议
“源计划”演讲,Qualcomm Halo 无线充电技术都涉及哪些?
如何将AXI VIP添加到Vivado工程中
曙光自研分布式存储产品ParaStor获得青睐
中国的“谷歌”?百度有哪些黑科技?
光伏逆变器介绍
减持计划公布后,长电科技股价不断下跌
“超灵敏电子皮肤”为手术机器人练手感
小米5s、魅族MX6,价格都为1999,看完这个你就知道选了
用“芯”带动新时代的北斗产业发展创新
天翼视讯携手中兴通讯联合打造出了5G智慧场馆赛事直播
微软发布Windows 10更新:优化触控键盘、弥补Intel处理器安全漏洞
柔性电流传感器的工作原理和特点
星源材质论降本高压下隔膜市场变局
如何使用Python操控手机微信APP
FANUC机器人建立part carrier和跟踪参数的方法
阿里启动香港上市 人工智能是阿里布局之重