点击“蓝字”关注我们

在这篇新博文中,我们来聊一聊如何将 AXI VIP 添加到 Vivado 工程中,并对 AXI4-Lite 接口进行仿真。随后,我们将在仿真波形窗口中讲解用于AXI4-Lite 传输事务的信号。

使用 AXI VIP 作为 AXI4-Lite 主接口(教程)

  1. 下载设计文件(本文后附)

  2. 打开 Vivado 2019.2。

  3. 在 Tcl 控制台中,使用 cd 命令进入解压缩的目录 (cd AXI_Basics_3)

  4. 在 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,并修改以下参数:

  1. Interface mode:MASTER

  2. 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)时,地址从主接口传输到从接口

随后,当 READYVALID 信号在读通道上均处于高位(RREADY 和 RVALID)时,数据从接口传输至主接口。

注:执行读传输事务期间,从接口也会发送读响应以指示读操作是否成功。

此响应将与读通道上的数据同时发送。

往期精选

开发者分享 I 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真

觉得内容还不错的话

给我点个“在看”呗

点击阅读原文可查看

第一讲: AXI4 总线规范

开发者分享 | AXI 基础第 2 讲-使用AXI VIP 对 AXI4-Lite 主 (Master) 接口进行仿真相关推荐

  1. AXI 基础第 2 讲 - 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真

    注:本文转自赛灵思中文社区论坛,源文链接在此.本文原作者为XILINX工程师. 以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教. 本篇 AXI 基础系列博文将介绍可用于对 AXI 接口进行仿真的 ...

  2. AXI 基础第 2 讲——使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真

    该技术文章来源于Xilinx中文论坛 "Xilinx 产品设计与功能调试技巧 " 板块,更多内容请访问 https://forums.xilinx.com/cn 此次转载已获授权, ...

  3. AXI 基础第 5 讲-创建 AXI4-Lite Sniffer IP 以在赛灵思Vivado IP Integrator中使用

    点击"蓝字"关注我们 引言 在某些情况下,通过嗅探 AXI 接口来分析其中正在发生的传输事务是很有用的.在本文中,我将为大家演示如何创建基本 AXI4-Lite Sniffer I ...

  4. AXI 基础第 1 讲 - AXI 简介

    目录 引言 何谓 AXI? AXI 读写通道 AXI 读取传输事务 AXI 写入传输事务 AXI4 接口要求 注:本文转自赛灵思中文社区论坛,源文链接在此.本文原作者为XILINX工程师. 以下为个人 ...

  5. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  6. 视频教程-2020最新微信小程序基础+实战精讲视频-微信开发

    2020最新微信小程序基础+实战精讲视频 负责过多个软件项目的研发.设计和管理工作,拥有项目管理师认证.项目监理师中级认证.出版过的图书有<微信小程序开发图解案例教程><Axure ...

  7. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  8. 直播预告|灵动MM32 MCU助力全国大学生智能汽车竞赛——基础培训第二讲

    ▌简介 基础培训第二讲--灵动MM32F3277/SPIN27手册阅读及开源固件库的使用. 1.直播时间 2021年4月8日下午14:00 2.直播内容 一.如何阅读MM32F3277微控制器的用户手 ...

  9. 计算机基础98均9,第三章 计算机基础 Windows98 (第二讲).ppt

    <第三章 计算机基础 Windows98 (第二讲).ppt>由会员分享,可在线阅读,更多相关<第三章 计算机基础 Windows98 (第二讲).ppt(26页珍藏版)>请在 ...

最新文章

  1. 台大李宏毅机器学习2021
  2. 测序发展史,150年的风雨历程 (第二版)
  3. Newtonsoft.Json 概述
  4. linux 多线程编程笔记
  5. JAVA设计模式之装饰模式
  6. 21、python基础学习-new_three_menu
  7. [Leetcode][第96题][JAVA][不同的二叉搜索树][动态规划][数学]
  8. 推荐系统(3)-协同过滤2-矩阵分解算法
  9. Android 多媒体开发学习之简单的音乐播放器
  10. 交换机配置snmp及查看snmp配置信息
  11. Ubuntu18.04设置系统默认音频设备:使用pavucontrol命令
  12. 如何解决mac上不了网的问题
  13. pdfjs 字体新增_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...
  14. 易语言输出mysql日志_个人理解的易语言下的日志总结(备忘)
  15. 管家婆云辉煌的打印样式设置
  16. ERROR 1820 (HY000): You must reset your password using ALTER USER statement
  17. 触摸屏中应用的电容式触摸芯片
  18. 不知细叶谁裁出,二月春风似剪刀
  19. Unity3D空战游戏模板 Air Warfare Pro
  20. PMP考试计算题专题

热门文章

  1. 如果用户没有登陆直接通过url访问其它页面的解决办法
  2. App Store搜索广告如何筛词
  3. 电脑小白新装win10系统,要装哪些必备软件?
  4. 北京少儿编程培训,你知道我家孩子为什么要学习编程吗?
  5. 计算机毕业设计Node.js+Vue基于的宠物领养管理系统(程序+源码+LW+部署)
  6. 区分概率中的事件关系
  7. linux内核区分cpu架构,一文读懂处理器,内核,芯片三个概念的区别
  8. 像外行一样思考 像专家一样实践
  9. echarts 配置项手册legend
  10. 【异常】Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)