0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何创建基本AXI4-Lite Sniffer IP以对特定地址上正在发生的读写传输事务进行计数

YCqV_FPGA_EETre 来源:FPGA开发圈 2020-04-30 16:24 次阅读

引言

在某些情况下,通过嗅探 AXI 接口来分析其中正在发生的传输事务是很有用的。在本文中,我将为大家演示如何创建基本 AXI4-Lite Sniffer IP 以对特定地址上正在发生的读写传输事务进行计数。

首先,编写 HDL (Verilog) 代码,然后将其封装为 IP,最后将此 IP 添加到 IP IntegratorBlock Design (BD) 中。

我们将创建包含 AXI4-Lite 输入接口的 AXI Sniffer 用于嗅探 AXI4-Lite 链接,并包含 2 项输出以提供在特定地址上发生的读写传输事务的数量 (地址可通过 GUI 配置)。

创建 AXI Sniffer IP 以在 Vivado IP Integrator 中使用(教程)

1. 下载设计文件

https://forums.xilinx.com/xlnx/attachments/xlnx/support_blog/132/1/AXI_Basics_5.zip

2. 打开 Vivado 2019.2

3. 在 Tcl 控制台中,使用 cd 命令导航到解压缩的目录 (cd AXI_Basics_5)

4.在 Tcl 控制台中,使用 source 命令生成脚本 tcl (source ./create_proj.tcl)


这将创建一个附带 BD 的 Vivado 工程,此 BD 包含 AXI VIP (设置为 AXI4-Lite 主接口) 和 AXI GPIO IP。这与我们在AXI 基础第 3 讲一文中完成的最终设计十分相似。

在此工程中,我们将创建 AXI Sniffer IP,然后尝试将其连接到位于 AXI VIP 和 AXI GPIO IP 之间的 AXI4-Lite 接口

首先,让我们来编写适用于 AXI Sniffer IP 的 HDL (Verilog) 代码

5.双击“源 (Sources)”窗口中的 AXI_Sniffer.v 文件以在文本编辑器中将其打开

首先,需要声明 IP 端口。我们需要 1 个 AXI4-Lite 接口。根据 ARM 网站上提供的 AMBA AXI和 ACE协议规范 (扫码查看),AXI4-Lite 接口上所需信号如下

我们还需要添加 2 个端口 (read_accesses 和 write_accesses),用于输出监测地址的读写访问次数。

6. 添加以下代码以声明所有必需的信号。

module AXI_Sniffer

(

input aclk,

input aresetn,

input s_axi_arvalid,

input s_axi_arready,

input [31:0] s_axi_araddr,

input [2:0] s_axi_arprot,

input s_axi_rvalid,

input s_axi_rready,

input [31:0] s_axi_rdata,

input [1:0] s_axi_rresp,

input s_axi_awvalid,

input s_axi_awready,

input [31:0] s_axi_awaddr,

input [2:0] s_axi_awprot,

input s_axi_wvalid,

input s_axi_wready,

input [31:0] s_axi_wdata,

input [3:0] s_axi_wstrb,

input s_axi_bready,

input s_axi_bvalid,

input [1:0] s_axi_bresp,

output [31:0] read_accesses,

output [31:0] write_accesses

);

注:在本例中,所有 AXI4-Lite 信号均设置为输入,因为 IP 不应对 AXI4-Lite 接口执行任何操作,仅限于监测其中的流量

然后,IP 需要 1 个参数用于设置要监测的地址

7.添加以下代码以添加用于监测地址的参数

module AXI_Sniffer

#(

parameter SLAVE_BASE_ADDR = 32'h40000000

)

(

最后,我们需要添加用于对地址访问次数进行计数的逻辑。监测地址出现在 axi 总线上时,每次 r/wready 和 r/wvalid处于高位时,此代码都会将计数增加 1。

8. 请将以下代码添加到此文件中

reg [31:0] read_accesses_cnt;

reg [31:0] write_accesses_cnt;

assign read_accesses = read_accesses_cnt;

assign write_accesses = write_accesses_cnt;

//Check the Read Address Channel

always @(posedge aclk)

begin

if(aresetn == 0)

begin

read_accesses_cnt = 0;

end

else if (s_axi_arready && s_axi_arvalid && s_axi_araddr == SLAVE_BASE_ADDR)

begin

read_accesses_cnt = read_accesses_cnt + 1;

end

else

read_accesses_cnt = read_accesses_cnt;

end

//Check the Write Address Channel

always @(posedge aclk)

begin

if(aresetn == 0)

begin

write_accesses_cnt = 0;

end

else if (s_axi_awready && s_axi_awvalid && s_axi_awaddr == SLAVE_BASE_ADDR)

begin

write_accesses_cnt = write_accesses_cnt + 1;

end

else

write_accesses_cnt = write_accesses_cnt;

end

endmodule

9.保存 AXI_Sniffer.v 文件

在 IP Integrator 中,提供了一项允许用户将 HDL 文件导入 BD 的功能。

10.右键单击 BD,然后单击“添加模块 (Add Module...)”

可以看到,该工具将所有 s_axi_* 信号组合为接口 s_axi。但如果我们尝试将此接口连接到 AXI VIP 与 AXI GPIO 之间的现有连接上,该工具将会禁止此操作。

这是因为导入模块工具已将 s_axi 接口设置为从接口,而 Vivado 仅允许每个主接口连接到一个从接口。

要创建监测 IP,我们需要将代码封装为 IP,这将为我们提供更多接口选项。

11.单击“工具 (Tools) > 创建并封装新 IP (Create and Package New IP...) ”

12.在“Create and Package New IP”的第 2 个页面上,选择“封装指定目录 (Package a specified directory)”,然后单击“下一步 (Next)”

13.选中 AXI_Basics_5/src/hdl/AXI_Sniffer 目录,然后单击“Next > Next(保留默认设置) > 完成 (Finish)

这样将创建 IP Packager 工程 。在“封装 IP (Package IP)”选项卡中,单击“端口和接口 (Ports and Interface)”部分。

可以看到,工具又一次将 s_axi_* 信号分组构成 s_axi 接口。但此接口仍设置为从接口。要连接到现有 AXI 总线,我们需要告知该工具,此接口并非从接口,而是监测接口。

14.右键单击 s_axi 接口,然后单击“编辑接口 (Edit Interface...)”

15.在“Edit Interface”窗口的“常规 (General)”选项卡中,将“模式 (Mode)”更改为“monitor”

16. 然后单击“端口映射 (Port Mapping)”选项卡,并启用“隐藏已映射的端口 (Hide Mapped Port)”

17.对于 IP 的每个名为 s_axi_* 的物理端口,查找接口的匹配“逻辑端口 (Logical Ports)”,然后单击“映射端口 (Map Ports)”

18.完成所有 s_axi_* 端口映射后,单击“确定 (OK)”,以关闭“编辑接口 (Edit Interface)”窗口

19. 再次右键单击 s_axi 接口,然后单击“关联时钟 (Associate Clocks...)”

20. 在下一个窗口中,应该会自动选中 aclk。单击“OK”

21. 单击“复查并封装 (Review and Package)”部分,然后单击“封装 IP (Package IP)”。

这样将关闭 IP Packager 工程。

22. 从初始工程的 BD 中移除先前的AXI_Sniffer IP
23. 右键单击初始工程的 BD,然后单击“添加 IP (Add IP)”。找到 AXI Sniffer IP(应已自动添加到 IP 目录中),并将其添加到 BD

24. 尝试将新 AXI Sniffer IP 的 s_axi 接口连接到 AXI VIP 与 AXI GPIO 之间的总线。现在,此操作已可行。

25. 将定制 IP 的 aclk 和 aresetn 输入端口连接到对应的 BD 端口。
26. 验证 BD 设计。确保其中不存在任何严重警告或错误。保存 BD。

最后,我们可在仿真中验证此 IP 是否有效。
27. 启动仿真,将 AXI_Sniffer IP 的端口 read_accesses 和 write_accesses 添加到波形窗口中。

28.重新启动仿真,保持运行 3us

在仿真波形中可以看到,正在执行 2 项读取和 2 项写入传输事务。但我们的 IP 计数仅显示 2 项写入传输事务和 1 项读取传输事务。

我们可以观察每项传输事务的地址,查看输出是否正确。在 IP 监测的地址 0x4000_0000 上正在发生 2 项写入传输事务。

但只有 1 项读取传输事务目标为地址 0x4000_0000(另一项读取传输事务目标为 0x4000_0008),因此 IP 行为正确。

本文仅展示了 1 个利用 AXI Sniffer(或者称为 Monitor)IP 可实现的操作的示例。您可编辑 Verilog 代码以添加自己的功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7629

    浏览量

    148439
  • 赛灵思
    +关注

    关注

    32

    文章

    1794

    浏览量

    130510

原文标题:AXI基础第5讲——创建 AXI4-Lite Sniffer IP 以在赛灵思 Vivado IP Integrator 中使用

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA通过AXI总线读写DDR3实现方式

    AXI总线由一些核心组成,包括AXI主处理器接口(AXI4)、AXI处理器到协处理器接口(AXI4-Lite)、
    发表于 04-18 11:41 90次阅读

    XILINX FPGA IPAXI Traffic Generator

    AXI Traffic Generator IP 用于在AXI4和AXI4-Stream互连以及其他AXI4系统外设上生成
    的头像 发表于 11-23 16:03 816次阅读
    XILINX FPGA <b class='flag-5'>IP</b>之<b class='flag-5'>AXI</b> Traffic Generator

    ZYNQ的ARM和FPGA数据交互——AXI交互最重要的细节

    。 ●AXI4: 主要面向高性能地址映射通信的需求,允许最大256轮的数据突发传输。 ●AXI4-Lite: 是一个轻量级的,适用于吞吐量较小的地址
    发表于 11-03 10:51

    AXI总线:读写地址结构

    在整个传输事务过程中,主机首先将接下来 burst 传输的控制信息以及数据首个字节的地址传输给从机,这个
    的头像 发表于 10-31 16:06 495次阅读
    <b class='flag-5'>AXI</b>总线:<b class='flag-5'>读写</b><b class='flag-5'>地址</b>结构

    AXI传输数据的过程

    AXI-LiteAXI-Full的简化版,适合小批量的数据传输,常用来进行命令的传输IP核的
    的头像 发表于 10-31 15:37 462次阅读
    <b class='flag-5'>AXI</b><b class='flag-5'>传输</b>数据的过程

    AXI时基看门狗定时器(WDT)概述

    XilinxLogiCORE IP AXI4-Lite时基看门狗定时器(WDT)是一个32位外设,提供32位自由运行时基和看门狗定时器。
    的头像 发表于 10-16 11:10 612次阅读
    <b class='flag-5'>AXI</b>时基看门狗定时器(WDT)概述

    LogiCORE IP AXI UART 16550内核简介

    LogiCORE IP AXI 通用异步接收发送器 (UART) 16550 连接到高级微控制器总线架构 (AMBA) AXI,为异步串行数据传输提供控制器接口。该软
    的头像 发表于 10-16 11:02 2113次阅读
    LogiCORE <b class='flag-5'>IP</b> <b class='flag-5'>AXI</b> UART 16550内核简介

    LogiCORE JTAG至AXI Master IP核简介

    中的一个参数来选择。 集成设计环境(IDE)。AXI数据总线的宽度可定制。该IP可通过AXI4互连驱动AXI4-LiteAXI4内存映射从
    的头像 发表于 10-16 10:12 471次阅读
    LogiCORE JTAG至<b class='flag-5'>AXI</b> Master <b class='flag-5'>IP</b>核简介

    基于AXI总线的DDR3读写测试

    本文开源一个FPGA项目:基于AXI总线的DDR3读写。之前的一篇文章介绍了DDR3简单用户接口的读写方式:《DDR3读写测试》,如果在某些项目中,我们需要把DDR挂载到
    的头像 发表于 09-01 16:20 2260次阅读
    基于<b class='flag-5'>AXI</b>总线的DDR3<b class='flag-5'>读写</b>测试

    PrimeCell基础设施AMBA 2 AHB至AMBA 3 AXI桥(BP136)技术概述

    AMBA™2 AHB™至AMBA 3 AXI™桥使AHB主机能够与AXI从机或互连进行通信(如果时钟和重置信号是公共的)。 该网桥有三种变种,可支持以下接口: ·ARM11 AHB-Lite
    发表于 08-21 06:43

    AMBA 4 AXI4AXI4-LiteAXI4-流协议断言用户指南

    您可以将协议断言与任何旨在实现AMBA®4 AXI4的接口一起使用™, AXI4 Lite™, 或AXI4流™ 协议通过一系列断言根据协议检
    发表于 08-10 06:39

    ARM CoreLink AXI4至AHB Lite XHB-400桥接技术参考手册

    XHB将AXI4协议转换为AHB-Lite协议,并具有AXI4从接口和AHB-Lite主接口。有关AXI4
    发表于 08-02 06:51

    AXI实战(二)-AXI-Lite的Slave实现介绍

    可以看到,在AXI到UART中,是通过寄存器和FIFO进行中介的。因为从AXI总线往里看,其控制的是就是地址上所映射的寄存器。
    的头像 发表于 06-27 10:12 2453次阅读
    <b class='flag-5'>AXI</b>实战(二)-<b class='flag-5'>AXI-Lite</b>的Slave实现介绍

    自定义AXI-Lite接口的IP及源码分析

    在 Vivado 中自定义 AXI4-Lite 接口的 IP,实现一个简单的 LED 控制功能,并将其挂载到 AXI Interconnect 总线互联结构上,通过 ZYNQ 主机控制,后面对 Xilinx 提供的整个
    发表于 06-25 16:31 2035次阅读
    自定义<b class='flag-5'>AXI-Lite</b>接口的<b class='flag-5'>IP</b>及源码分析

    简单讲解AXI Interconnect IP核的使用方法

    最近需要用到AXI接口的模块,xilinx的IP核很多都用到了AXI总线进行数据和指令传输。如果有多个设备需要使用
    的头像 发表于 06-19 15:45 5254次阅读
    简单讲解<b class='flag-5'>AXI</b> Interconnect <b class='flag-5'>IP</b>核的使用方法