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

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

3天内不再提示

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

冬至子 来源:Bug记录 作者:woodfan 2023-06-19 15:45 次阅读

最近需要用到AXI接口的模块,xilinx的IP核很多都用到了AXI总线进行数据和指令传输。如果有多个设备需要使用AXI协议对AXI接口的BRAM进行读写,总线之间该如何进行仲裁,通信

这里我们注意到,Vivado有一个叫做AXI Interconnect (RTL)的IP核,这个IP核可以实现上述功能。

本文将简单讲解AXI Interconnect IP核的使用方法,设计到Vivado的Block Design,仿真等知识运用。

为了简化整体例子的复杂度,整个测试工程项目采用了两个措施:

  1. 使用Block Design代替了RTL代码书写连线操作
  2. 使用AXI4-Lite总线进行测试,相对于AXI4,省去了部分信号
  3. 整个工程量不大,故没有在VCS中仿真,使用Vivado自带的仿真器做仿真

最终整体的Block Design结构如下图:

图片

图1

简单介绍一下图1中的模块功能

  1. clk_wiz_0: MMCM,模式时钟管理器,这里作用主要是产生100MHz的clk_out1和200MHz的clk_out2,类似锁相环;
  2. proc_sys_reset_x: 系统复位模块,根据输入时钟和输入的信号产生对应的高复位有效信号和低复位有效信号;
  3. axi_interconnect_0: AXI Interconnect,这里管理着2个Slave接口和1个Master接口;对总线传输进行仲裁,通信,时序转换等操作。
  4. axi_bram_ctrl_0: Bram Controller,AXI接口的Bram控制器
  5. blk_mem_gen_0: Block Ram

简单介绍下Block Design的AXI Interconnect IP核使用(因为Block Design可以实现自动连线,自动设置位宽等信息,所以设置内容没有AXI Interconnect RTL多,后者专用于Verilog代码中使用)

图片

图2

这个界面设置Slave Interface的数量,与Master 模块的数量对应;Master Interface数量,与 Slave模块的数量对应,如果想不明白可以看图6。

图片

图3

图片

图4

这里使能S/M_AXI端口的Register Slice和Data FIFO功能,Slice对时序收敛有一定作用,但是数据输出会延迟一个周期;Data FIFO,顾名思义,可以实现数据缓存和packet mode。

图片

图5

勾选图2的Advanced Options后,可以进入图5界面,这里可以设置S_AXI端口的优先级,优先级值越高,越优先,平行优先级的端口会使用轮询的方式处理端口请求。

图片

图6

整个IP核的外部端口,Sxx_AXI连接Master模块的M_AXI接口;Mxx_AXI连接Slave模块的S_AXI接口;ACLK是IP核的运行时钟,ARESETN是IP核的异步低有效复位信号。

Sxx_ACLK是对应总线的总线时钟,Sxx_ARESETN是对应总线的异步低有效复位信号。同理,Mxx_ACLK是对应总线的总线时钟,Mxx_ACLK_ARESETN是对应总线的异步低有效复位信号。

图中出现了4个时钟端口,这4个时钟端口的频率可以各不相同。曾经我很疑惑ACLK的时钟频率到底应该如何设置,找到了一个在Xilinx论坛的帖子,上面的建议是连接到任一Sxx_ACLK或者Mxx_ACLK,虽然ACLK可以随意连接到一个时钟频率信号。

图1的输入端口有S00_AXI,S01_AXI的接口,clk_100MHz的时钟输入信号,reset_rtl_0的高有效复位信号;输出有100MHz的clk_out1,200MHz的clk_out2;

然后将Block Design生成为verilog文件,供其他的verilog文件直接实例化。这里我们利用留出的clk_out1,clk_out2,s00_axi,s01_axi接口,对Bram进行简单的地址读写操作,读写时钟分别为200MHz/100MHz。

Testbench里面,除了必要的initial和时钟赋值外,主要的还是对s00_axi,s01_axi的控制。

s00_axi在100MHz时钟域下,我们单独对它进行写操作。

在设计过程中,我还发现了一个奇怪的现象,原本的设计中,握手信号想等着s00_axil_awready信号拉高之后,这边的s00_axil_awvalid再拉高。结果发现awready迟迟没有拉高,在看完参考资料1后,才知道需要Master这侧的valid先拉高,否则slave的ready信号不一定会拉高;所以s00_axil_awvalid, s01_axil_arvalid设置为1 。

100MHz频率下,s00_axil_awaddr 在写入数据完成(s00_axil_wready & s00_axil_wvalid)后,地址会加4;地址写到1024后会重新归零。

可以看到,等到s00_axil_wready拉高,Master会把s00_axil_wvalid拉高,并生成一个随机数写入BRAM;然后s00_axil_wvalid拉低。

always @ (posedge clk_out1) begin
if (s00_axil_wready & s00_axil_wvalid)
s00_axil_awaddr <= (s00_axil_awaddr < 32'd1023) ? s00_axil_awaddr + 32'd4 : 0;

if (s00_axil_wready & ~s00_axil_wvalid) begin
s00_axil_wvalid <= 1'b1;
s00_axil_wdata <= $random;
end
else
s00_axil_wvalid <= 1'b0;
end

200MHz频率下,s01_axil_araddr在读取数据完成后(s01_axil_rvalid & s01_axil_rready),会加4;同样,地址写到1024后会重新归零。

可以看到,等到s01_axil_rvalid拉高,s01_axil_rready会拉高,读取出对应数据,然后拉低s01_axil_rready;

always @ (posedge clk_out2) begin
s01_axil_arvalid <= 1'b1;
if (s01_axil_rvalid & s01_axil_rready)
s01_axil_araddr <= (s01_axil_araddr < 32'd1023) ? s01_axil_araddr + 32'd4 : 0;

if (s01_axil_rvalid & ~s01_axil_rready) begin
s01_axil_rready <= 1'b1;

end
else
s01_axil_rready <= 1'b0;
end

当然,为什么两个不同的总线能够对一个BRAM进行操作,这里涉及到地址分配的问题;

图片

图7

两个总线可以访问到同一个地址,所以自然可以对同一个BRAM进行操作;那有人可能问,假如我操作s00访问的地址超过了分配的地址范围呢,那么s00_axil_bresp会等于2'd3,告知地址错误的问题。

图片

图8

由于设计问题,读取的地址相比写入数据落后几个时钟周期,这样可以将刚写入的数据读出来。

这个实验表明AXI Interconnect不仅是总线仲裁器,还帮助时钟域不同的AXI总线完成了时序转换。除此之外,AXI Interconnect还可以实现数据位宽转换,AXI协议转换,例如AXI4/3转AXI4-Lite,AXI4转AXI3等;增加Register Slice改善时序,增加数据fifo缓存数据;

AXI Interconnect最多支持16 MI与16 SI组合。不过,当配置只有一个SI接口时,MI接口最多可以设置到64位。

其中的仲裁采用的轮询调度算法,当然,IP核可以设置每个SI的优先级,值越高,优先级越高;

当然,这篇文章只是为了简单介绍AXI Interconnect的作用,更复杂更多的功能还有待发掘。当然,功能强大意味着复杂,比如根据参考资料2,AXI4协议中的ID信号,如果在AXI Interconnect中使用不当,可能造成仲裁器死锁。

图片

图9

看上图,在我的示例中,ACLK与S01_ACLK同源同频,所以示意图中,s01_couples从S_AXI直通到M_AXI;而s00_couples则添加了一个AXI Clock Converter做时序转换;在m00_couples中,又使用了AXI Clock Converter将ACLK转换到M00_ACLK;

至此,简单总结下在AXI通信中使用AXI Interconnect的好处:

  1. 真正实现了总线通信,N Master模块与M Slave模块的通信,减少了相互间通信的复杂度
  2. 内部实现时钟域转换,不需要外部的过度干预
  3. 内部可实现FIFO等,免去了很多场景下需要FIFO,Register,位宽转换,协议转换的需求
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15239

    浏览量

    171225
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59076
  • VCS
    VCS
    +关注

    关注

    0

    文章

    78

    浏览量

    9497
  • AXI总线
    +关注

    关注

    0

    文章

    65

    浏览量

    14159
  • BRAM
    +关注

    关注

    0

    文章

    40

    浏览量

    10888
收藏 人收藏

    评论

    相关推荐

    玩转赛灵思Zedboard开发板(5):基于AXI Lite总线的从设备IP设计

    本小节通过使用XPS中的定制IP向导(ipwiz),为已经存在的ARM PS 系统添加用户自定IP(Custom IP ),了解AXI Lite I
    发表于 12-23 15:39 1.1w次阅读

    Designing High-Performance Video Systems with the AXI Interconnect

    can be created using Xilinx AXI IP. The use of AXI Interconnect, Memory Interface Generator
    发表于 01-26 18:57

    有人知道为什么MIG IP中的AXI协议。为什么没有AXI_WID这个信号呢?

    有人知道为什么MIG IP中的AXI协议。为什么没有AXI_WID这个信号呢。
    发表于 04-13 09:22

    有人有经验AXI4-Stream到视频输出IP吗?

    现在我正在使用Xilinx的AXI视频处理内核进行小型设计。现在我面对一个奇怪的问题。我的设计很简单。我使用Xilinx的三个内核:1.测试模式发生器(TPG)2。视频定时控制(VTC
    发表于 03-08 10:00

    如何在IP_catalog中创建可见的axi_interconnect_v2.1?

    你好。Vivado 2015.1 IP目录包含AXI_interconnect V1.7(默认情况下),同时DIR .. / data / IP / xilinx包含文件
    发表于 04-08 10:30

    PCIE项目中AXI4 IP例化详解

    4和PCIE之间有什么联系,敬请关注我们的连载系列文章。在本篇文章中暂时先不讲解AXI4协议,先来分享例化AXI4的自定义IP详细步骤。一
    发表于 12-13 17:10

    基于IP的FPGA设计方法是什么?

    的分类和特点是什么?基于IP的FPGA设计方法是什么?
    发表于 05-08 07:07

    AXI_Lite总线使用方法

    PL端的编写和使用,接下来是PS端的介绍AXI_Lite总线使用方法(上)pl端读写BRAM一、总览如图,main函数实现的功能主要是初始化中断,中断来自WRRD模块发送数据完毕,中断触发为上升沿。具体功能往下看。我们首先来看#define。不知道还有没有记得..
    发表于 01-10 08:00

    axi_iic ip的学习笔记分享

    框图。这个看起来好像不是很复杂,下面咱们一起来学习学习这个ip。在这里我还没搞明白sda和scl的_t,_o是什么意思,后面慢慢了解。接着手册讲解了这几个模块的作用到这里,我大概理解一下,axi_lite接口接收到主机发送过来的
    发表于 01-18 07:00

    AXI FIFO和AXI virtual FIFO这两个IP使用方法

    Controller 的 IP 内核,以简化开发人员希望使用 DDR 存储器将信号或数据样本存储在外部 DDR 中作为 FIFO 的情况。AXI Virtual FIFO Controller为开发人员提供可连接
    发表于 11-04 11:03

    一步一步学ZedBoard Zynq(四):基于AXI Lite 总线的从设备IP设计

    本小节通过使用XPS中的定制IP向导(ipwiz),为已经存在的ARM PS 系统添加用户自定IP(Custom IP ),了解AXI Lite I
    发表于 02-10 20:37 5444次阅读

    AXI接口简介_AXI IP核的创建流程及读写逻辑分析

    本文包含两部分内容:1)AXI接口简介;2)AXI IP核的创建流程及读写逻辑分析。 1AXI简介(本部分内容参考官网资料翻译) 自定义IP
    的头像 发表于 06-29 09:33 1.5w次阅读
    <b class='flag-5'>AXI</b>接口简介_<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b>核的创建流程及读写逻辑分析

    Xilinx AXI Interconnect

    在 AMBA 系列之 AXI 总线协议初探 中,了解到 AXI 总线交互分为 Master / Slave 两端,而且标准的 AXI 总线支持不同的位宽,既然是总线,那么必须要支持总线互联,多 Master,多 Slave的场景
    发表于 02-23 06:57 45次下载
    Xilinx <b class='flag-5'>AXI</b> <b class='flag-5'>Interconnect</b>

    Xilinx FPGA里面的AXI DMA IP核的简单用法

    本文以浮点数Floating-point IP核将定点数转换为浮点数为例,详细讲解AXI DMA IP核的使用方法
    的头像 发表于 02-16 16:21 7843次阅读
    Xilinx FPGA里面的<b class='flag-5'>AXI</b> DMA <b class='flag-5'>IP</b>核的<b class='flag-5'>简单</b>用法

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

    在 Vivado 中自定义 AXI4-Lite 接口的 IP,实现一个简单的 LED 控制功能,并将其挂载到 AXI Interconnect
    发表于 06-25 16:31 2053次阅读
    自定义<b class='flag-5'>AXI</b>-Lite接口的<b class='flag-5'>IP</b>及源码分析