开发者分享 | AXI 基础第 2 讲-使用AXI VIP 对 AXI4-Lite 主 (Master) 接口进行仿真
点击“蓝字”关注我们
在这篇新博文中,我们来聊一聊如何将 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))中“实用编码指南与示例”章节的内容来进行操作。
扫码查看
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 和<component_name>_pkg。
注:请使用以下 Tcl 命令来查找 VIP 实例的 <component_name>,以及对应于 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 <component_name>_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 下载该文件。
(下载方法如下:
扫码进入Xilinx官网/技术支持,
搜索“AXI VIP”即可找到ZIP文件包或输入网址 搜索框内输入“AXI VIP”
https://china.xilinx.com/support.html#documentation
在本教程中,我们将尝试开关连接到 AXI GPIO 通道 1 的 LED_1,并读取连接到 AXI GPIO 通道 2 的 SWITCH_1 的状态。
通过查看 AXI GPIO IP 的寄存器映射((PG144)的表 2-4)可知,我们必须在地址 0x0 执行写操作,在地址 0x8 执行读操作:
扫码查看PG144文件
我们将从写操作开始,尝试切换 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)时,数据从从接口传输至主接口。
注:执行读传输事务期间,从接口也会发送读响应以指示读操作是否成功。
此响应将与读通道上的数据同时发送。
往期精选
开发者分享 I 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真
觉得内容还不错的话
给我点个“在看”呗
点击阅读原文可查看
第一讲: AXI4 总线规范
开发者分享 | AXI 基础第 2 讲-使用AXI VIP 对 AXI4-Lite 主 (Master) 接口进行仿真相关推荐
- AXI 基础第 2 讲 - 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真
注:本文转自赛灵思中文社区论坛,源文链接在此.本文原作者为XILINX工程师. 以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教. 本篇 AXI 基础系列博文将介绍可用于对 AXI 接口进行仿真的 ...
- AXI 基础第 2 讲——使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真
该技术文章来源于Xilinx中文论坛 "Xilinx 产品设计与功能调试技巧 " 板块,更多内容请访问 https://forums.xilinx.com/cn 此次转载已获授权, ...
- AXI 基础第 5 讲-创建 AXI4-Lite Sniffer IP 以在赛灵思Vivado IP Integrator中使用
点击"蓝字"关注我们 引言 在某些情况下,通过嗅探 AXI 接口来分析其中正在发生的传输事务是很有用的.在本文中,我将为大家演示如何创建基本 AXI4-Lite Sniffer I ...
- AXI 基础第 1 讲 - AXI 简介
目录 引言 何谓 AXI? AXI 读写通道 AXI 读取传输事务 AXI 写入传输事务 AXI4 接口要求 注:本文转自赛灵思中文社区论坛,源文链接在此.本文原作者为XILINX工程师. 以下为个人 ...
- IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...
- 视频教程-2020最新微信小程序基础+实战精讲视频-微信开发
2020最新微信小程序基础+实战精讲视频 负责过多个软件项目的研发.设计和管理工作,拥有项目管理师认证.项目监理师中级认证.出版过的图书有<微信小程序开发图解案例教程><Axure ...
- Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...
- 直播预告|灵动MM32 MCU助力全国大学生智能汽车竞赛——基础培训第二讲
▌简介 基础培训第二讲--灵动MM32F3277/SPIN27手册阅读及开源固件库的使用. 1.直播时间 2021年4月8日下午14:00 2.直播内容 一.如何阅读MM32F3277微控制器的用户手 ...
- 计算机基础98均9,第三章 计算机基础 Windows98 (第二讲).ppt
<第三章 计算机基础 Windows98 (第二讲).ppt>由会员分享,可在线阅读,更多相关<第三章 计算机基础 Windows98 (第二讲).ppt(26页珍藏版)>请在 ...
最新文章
- 台大李宏毅机器学习2021
- 测序发展史,150年的风雨历程 (第二版)
- Newtonsoft.Json 概述
- linux 多线程编程笔记
- JAVA设计模式之装饰模式
- 21、python基础学习-new_three_menu
- [Leetcode][第96题][JAVA][不同的二叉搜索树][动态规划][数学]
- 推荐系统(3)-协同过滤2-矩阵分解算法
- Android 多媒体开发学习之简单的音乐播放器
- 交换机配置snmp及查看snmp配置信息
- Ubuntu18.04设置系统默认音频设备:使用pavucontrol命令
- 如何解决mac上不了网的问题
- pdfjs 字体新增_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...
- 易语言输出mysql日志_个人理解的易语言下的日志总结(备忘)
- 管家婆云辉煌的打印样式设置
- ERROR 1820 (HY000): You must reset your password using ALTER USER statement
- 触摸屏中应用的电容式触摸芯片
- 不知细叶谁裁出,二月春风似剪刀
- Unity3D空战游戏模板 Air Warfare Pro
- PMP考试计算题专题
热门文章
- 如果用户没有登陆直接通过url访问其它页面的解决办法
- App Store搜索广告如何筛词
- 电脑小白新装win10系统,要装哪些必备软件?
- 北京少儿编程培训,你知道我家孩子为什么要学习编程吗?
- 计算机毕业设计Node.js+Vue基于的宠物领养管理系统(程序+源码+LW+部署)
- 区分概率中的事件关系
- linux内核区分cpu架构,一文读懂处理器,内核,芯片三个概念的区别
- 像外行一样思考 像专家一样实践
- echarts 配置项手册legend
- 【异常】Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)