在 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 和 _pkg。组件名称即步骤 12 中 get_ips 所返回的名称
14. 在第 58 行附近添加以下行
//import two required packages: axi_vip_pkg and _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) 接口进行仿真
机器人都能自主阅读化学文献并生成标准化论文了
教你读懂PCB原理图的反推全过程
硬件工程师需要了解哪些PCB设计问题
激光加工在手机加工中的应用
英国宣布将在微软的帮助下建造世上最强大的天气超级计算机
如何使用AXI VIP在AXI4(Full)主接口中执行验证和查找错误
理想汽车累计交付量现已突破 40000 辆
云ERP的核心价值解读
商汤绝影“亮剑”慕尼黑车展,首秀智能座舱大模型产品体系
森海塞尔MOMENTUM真无线二代参数公布,采用了ANC主动降噪技术
智能扫地机 3528红外线发射接收管应用元器件
苹果iPhone的全球总激活量达到10亿台
松下变频器的常见故障处理
高通为蔚来首款旗舰轿车蔚来ET7带来最新下一代数字座舱技术
步进电机驱动器ULN2003的应用
拉绳位移传感器的安装技巧及精度计算
YouTub正在为某些平台推出经过改进的界面
基于TSMC 0.35μm锗硅射频工艺模型的低噪音放大器的设计
微软开发新技术,可通过手机相机远程测量心肺等体征
浅析SpringBoot:一个注解就能帮你下载任意对象