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

    文章

    16332

    浏览量

    177803
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59759
  • VCS
    VCS
    +关注

    关注

    0

    文章

    79

    浏览量

    9600
  • AXI总线
    +关注

    关注

    0

    文章

    66

    浏览量

    14261
  • BRAM
    +关注

    关注

    0

    文章

    41

    浏览量

    10956
收藏 人收藏

    评论

    相关推荐

    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

    如何在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

    三个不同AXI IP的实现的方法_性能的对比及差异的分析

    本文先总结不同AXI IP的实现的方法,性能的对比,性能差异的分析,可能改进的方面。使用的硬件平台是Zedboard。 不同的AXI总线卷
    的头像 发表于 06-29 14:34 8241次阅读
    三个不同<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的实现的<b class='flag-5'>方法</b>_性能的对比及差异的分析

    基于MicroBlaze的AXI总线实时时钟IP设计

    作者:萨其日娜 内蒙古鲁电电力工程有限公司 摘要: 应用MicroBlaze软作为CPU的硬件平台,在此平台上设计了基于AXI总线的通用实时时钟IP。给出了创建
    发表于 11-17 16:34 3922次阅读

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

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

    自定义sobel滤波IPIP接口遵守AXI Stream协议

    自定义sobel滤波IP IP接口遵守AXI Stream协议
    的头像 发表于 08-06 06:04 3911次阅读

    如何使用MicroBlaze调用AXI IP详细解析

    在一个项目中,当你使用microblaze作为控制器来进行系统调度的时候,一般是建议将所有模块封装成AXI形式的IP,这样好管理,也容易调试。
    的头像 发表于 04-27 11:17 6817次阅读
    如何使用MicroBlaze调用<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>详细解析

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

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

    AXI4-Stream Video 协议和AXI_VDMA的IP介绍

    本文主要介绍关于AXI4-Stream Video 协议和AXI_VDMA的IP相关内容。为后文完成使用带有HDMI接口的显示器构建图像视频显示的测试工程做准备。
    的头像 发表于 07-03 16:11 8327次阅读

    Video In to AXI4-Stream IP知识介绍

    大家好!今日分享一些关于Video In to AXI4-Stream IP 的知识。在具体学习IP的过程中,我也将分享一些关于如何看x
    的头像 发表于 05-18 14:55 1651次阅读
    Video In to <b class='flag-5'>AXI</b>4-Stream <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 3326次阅读
    自定义<b class='flag-5'>AXI</b>-Lite接口的<b class='flag-5'>IP</b>及源码分析

    LogiCORE JTAG至AXI Master IP简介

    LogiCORE JTAG至AXI Master IP是一个可定制的,可生成AXIAXI总线可用于处理和驱动系统中FPGA内部的AXI
    的头像 发表于 10-16 10:12 1106次阅读
    LogiCORE JTAG至<b class='flag-5'>AXI</b> Master <b class='flag-5'>IP</b><b class='flag-5'>核</b>简介

    LogiCORE IP AXI UART 16550内核简介

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