开发者分享 | AXI 基础第 3 讲-使用 AXI VIP 作为 AXI4 主 (Master) 接口的协议检查工具...
点击“蓝字”关注我们
在 AXI 基础第 2 讲 一文中,曾提到赛灵思 Verification IP (AXI VIP) 可用作为 AXI 协议检查工具。在本次第4讲中,我们将来了解下如何使用它在 AXI4 (Full) 主接口中执行验证(和查找错误)。
1. 下载设计文件(请输入以下网址进行下载
https://forums.xilinx.com/xlnx/attachments/xlnx/support_blog/130/1/AXI_Basics_4.zip
2. 打开 Vivado 2019.2。
3. 在 Tcl 控制台中,使用 cd 命令导航到解压缩的目录 (cd AXI_Basics_4)
4. 在 Tcl 控制台中,用 source 命令来创建一个 Vivado 工程,其中附带包含自定义 IP 的块设计 (BD),此自定义 IP 具有我们要验证的 AXI4 主接口。
(source ./create_proj.tcl)
现在,我们可将 AXI VIP 连接到自定义 IP 的主接口并对其进行验证。
5. 右键单击 BD、单击“添加 IP (Add IP)”,并将 AXI Verification IP (AXI VIP) 添加到 BD 中
6. 双击 AXI VIP 以打开其配置界面
7. 将接口模式更改为“ (Slave)”,然后单击“确定 (OK)”
8. 将 AXI VIP 的 S_AXI 输入接口连接到自定义 IP 的 m00_axi 输出接口,并将 AXI VIP 的 aclk 和 aresetn 输入端口连接到 BD 的对应输入端口
9.打开“地址编辑器 (Address Editor)”选项卡,单击“自动分配地址 (Auto Assign Address)”按钮。确保为 AXI VIP 自动分配的地址为 0x44A0_0000,如果显示其它地址,请手动分配该地址。
10. 验证 BD。确保其中不存在任何严重警告或问题。
11. 保存 BD。
12. 在 Tcl 控制台中输入以下命令,以查找 AXI VIP 实例的全名:
get_ips *vip*
默认情况下,返回的组件名称应为 design_1_axi_vip_0_0
13. 双击“ (Sources)”窗口中的测试平台文件 AXI_tb 以在文本编辑器中将其打开
AXI_tb 测试平台文件已包含运行自定义 IP 所需的代码。我们只需添加 AXI VIP 所需的代码即可。根据 AXI 基础第 3 讲,我们只需遵循来自PG267(v1.1,2019年 10 月 30 日)第 46 页的“实用编码指南与示例”进行操作即可。
首先,导入 2 个必需的包:axi_vip_pkg 和 <component_name>_pkg。组件名称即步骤 12 中 get_ips 所返回的名称
14. 在第 58 行附近添加以下行
//Import two required packages: axi_vip_pkg and <component_name>_pkg.
import axi_vip_pkg::*;
import design_1_axi_vip_0_0_pkg::*;
下一步是声明类型为从 VIP 的代理。
15. 在第 91 行附近添加以下行
// Declare the agent
design_1_axi_vip_0_0_slv_mem_t slv_agent;
下一步,我们需要创建从代理。
16. 在第 96 行附近添加以下行
//Create an agent
slv_agent = new("master vip agent",UUT.design_1_i.axi_vip_0.inst.IF);
17. 在本教程中,我们需要使 AXI VIP 在控制台中输出错误,因此我们需要使用以下行(99行附近)启用详细模式
// set print out verbosity level
slv_agent.set_verbosity(400);
18. 最后,使用以下代码行启动从代理:
//Start the agent
slv_agent.start_slave();
19. 保存测试平台文件,启动仿真,运行 200 us
20. 查看 Tcl 控制台,搜索关键字“Fatal”。您应看到以下行:
Fatal: AXI4_ERRM_AWADDR_BOUNDARY: A burst must not cross a 4kbyte boundary. Spec: section A3.4.1.
为理解此错误,我们可以按错误消息中所述查看ARM 网站上提供的 AMBA® AXI™ 和 ACE™ 协议规范中的第 A3.4.1 小节
在此规范中可以看到如下语句:
“A burst must not cross a 4KB address boundary.”
21. 关闭仿真,双击定制 IP axi_master_0 以打开其配置界面。
可以看到,自定义 IP 配置为发送突发 (burst),其中含 16 个 32 位的数据,从地址 0x44A00FC8 开始。这意味着写突发将从地址 0x44A00FC8 开始并于地址 0x44A01004 结束。这是一个错误,因为这些突发会跨越 4k 边界,其地址为 0x44A01000 (4K = 4*1024 = 4096 = 0x1000)。
22. 将 M00 Axi Target Slave Base Address 更改为 0x44A00000,单击“OK”关闭 IP 配置界面,然后保存块设计。
23. 重新运行仿真并持续 200 us。
24. 重新搜索关键字“Fatal”。可以看到,错误消息已改变(这表明第一个问题已解决)。您应看到如下错误:
Fatal: AXI4_ERRM_WDATA_STABLE: WDATA must remain stable when WVALID is asserted and WREADY low. Spec: section A3.2.1.
25. 在波形窗口中,展开 m00_axi 接口的写数据通道。您将看到 wvalid 确实正在发生改变,而 tready 为低,这有违 AXI 规范。
26. 关闭仿真,在“Sources”窗口中打开位于BD下的 AXI_Master_v1_0_M00_AXI.v 文件
27. 修改 506/518行附近的如下段落。这样当 tready 为低时就会阻止 wdata 发生更改。
/* Write Data Generator
Data pattern is only a simple incrementing count from 0 for each burst */
always @(posedge M_AXI_ACLK)
begin
if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)
axi_wdata <= 'b1;
//else if (wnext && axi_wlast)
// axi_wdata <= 'b0;
else if (wnext)
axi_wdata <= axi_wdata + 1;
else
axi_wdata <= axi_wdata;
end
28. 保存此文件。这样应可显示“刷新已更改的模块 (Refresh Changed Modules)”选项。单击该选项。
29. 重新运行仿真并持续 200 us。
在新仿真运行中应该不会再出现任何新错误,如果您查看波形窗口,应看到正常发生的 16 次写入和 16 次读取的突发传输事务。也就是说第二个问题已经得到修复。
往期精选
第二讲 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真
第三讲 使用AXI VIP 对 AXI4-Lite 主 (Master) 接口进行仿真
觉得内容还不错的话
给我点个“在看”呗
点击阅读原文查看
第一讲AXI4 总线规范
开发者分享 | AXI 基础第 3 讲-使用 AXI VIP 作为 AXI4 主 (Master) 接口的协议检查工具...相关推荐
- AXI 基础第 2 讲 - 使用 AXI Verification IP (AXI VIP) 对 AXI 接口进行仿真
注:本文转自赛灵思中文社区论坛,源文链接在此.本文原作者为XILINX工程师. 以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教. 本篇 AXI 基础系列博文将介绍可用于对 AXI 接口进行仿真的 ...
- 开发者分享 | AXI 基础第 2 讲-使用AXI VIP 对 AXI4-Lite 主 (Master) 接口进行仿真
点击"蓝字"关注我们 在这篇新博文中,我们来聊一聊如何将 AXI VIP 添加到 Vivado 工程中,并对 AXI4-Lite 接口进行仿真.随后,我们将在仿真波形窗口中讲解用于 ...
- 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页珍藏版)>请在 ...
最新文章
- java培训面试技巧分享
- JavaScript的语言标准
- sql基础教程和mysql基础教程_书评「SQL基础教程(第2版)」| 你应该知道的基础知识点梳理·上...
- linux cp -ip,linux cp命令
- iOS开发那些事--创建基于故事板的iOS 6的HelloWorld
- 征稿通知!ICCV 2021 第一届面向意图表达的手绘草图研讨会
- [学习笔记] PHP回调函数的实现方法 [转]
- 【C++11】新特性——auto的使用
- iOS 版微信可以改微信号;传腾讯计划入股爱奇艺;Qt 6.0 发布首个预览版本| 极客头条...
- Oracle密码过期ORA-28001
- HTML 5中的tips两则
- Myeclipse性能优化
- 给对话框加上背景皮肤
- 亚马逊kindle设置_索尼阅读器和亚马逊Kindle-这次会发生电子书吗?
- 前端(JavaScript)------字符串
- 2019年度受欢迎的开源软件
- 2014中国机器视觉行业十大知名品牌
- 一个事物两个方面的对比举例_作比较的句子大全简短-对比的句子什么比什么重要-什么和什么做比较的句子...
- linux 修改主机名 命令,Linux修改主机名命令详解
- GIS添加XY坐标操作
热门文章
- aptio2018设置u盘启动_怎么设置bios从u盘启动|bios设置u盘启动方法
- Linux刻录光盘win10认不到,Win10系统无法读取DVD光驱和刻录光盘的解决方法
- 在家如何访问公司电脑文件和服务器的共享文件夹
- 论文写作——课程总结
- MATLAB立体椭球,matlab拟合三维椭球
- P1196 [NOI2002] 银河英雄传说
- 移动硬盘插入提示需要格式化RAW_分区变成RAW格式怎么办?
- matlab计算可靠性过程,基于MATLAB的蒙特卡洛方法对可靠度的计算
- ubuntu20.4上不网、进不了root和编译内核出现:cc1: error: code model kernel does not support PIC mode
- 个人常用观影网址记录