今天给大侠带来FPGA Xilinx Zynq 系列第三十二篇,开启十九章, 带来 AXI 接口等相关内容,本篇内容目录简介如下:
19. AXI 接口
19.1 AXI 开发
19.2 各种 AXI 4
19.3 AXI 架构
19.3.1 地址通道
19.3.2 读数据通道
19.3.3 写数据通道
19.3.4 写响应通道 l
19.4 应用实例
19.5 AXI 会话
19.5.1 AXI 写批量会话
19.5.2 AXI 读批量会话
19.6 在 Xilinx 工具流中的 AXI
19.7 本章小结
19.8 参考文献
本系列分享来源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。
AXI 接口
本章介绍在 Zynq 系统中以 IP 方式使用的 AMBA AXI 协议。我们会讨论 AXI4 协 议所提供的各种接口,包括这些协议在操作上的差异,以及哪种应用最适合哪个协议。最后还介绍了如何在 Xilinx Vivado IP Integrator 中实现 AXI 支持的 IP。
19.1 AXI 开发
AXI 是 ARM AMBA 单片机总线系列中的一个协议。AMBA 协议是一个开放的片内互 联规范标准,能在多主机设计中实现许多控制器和外围设备之间的连接和管理。AXI和 AMBA 系列其他协议一样是计划用于高性能、高主频的系统设计的。AXI 协议是被优化用于通过使用 Xilinx 进行的相应的开发来做 FPGA 实现,它被用作 FPGA 设计的IP 核之间的一种通信方式。
AXI 协议特别体现了以下的关键特性 [1]:
- 地址 / 控制阶段和数据阶段是分开的
- 用字节闸来实现了非对齐数据的传输
- 只需发布起始地址就能做批量数据传输
- 数据的读写通道是分离的,可以用来实现低成本的直接存储访问 (DirectMemory Access,DMA)
- 可以指定多个需要处理的地址
- 通信会话可以乱序完成
- 为了实现时序收敛,可以方便地加入寄存器级
尽管AMBA在1996年就出现了,但是直到2003年的AMBA 3.0才第一次引入了AXI。2010 年发布的 AMBA 4.0,包含了最新的 AXI 版本,就是 AXI4[2]。
19.2 各种 AXI 4
有三种 AXI4 接口类型,每一种都适合各自不同的应用类型 [4]。
- AXI4 — 最高性能的接口,适合存储器映射的通信,支持每个地址阶段最高 256 个数据传输周期的批量传输。
- AXI4-Lite — 这个接口的轻量级版本,用于存储器映射的单次数据通信会话。这个版本的好处是简化了的接口占用较少的逻辑部分面积。这个版本不支持批量数据,因此只支持每次传输单个数据
- AXI4-Stream — 它没有地址阶段,因此不是存储器映射,能够做无限制的数据批量大小。为流式数据的传输定义了单个通道,类似图 19.1 中的写数据通道(Write Data Channel),不过支持无数量限制的批量传输。连接只能是从 主机到从机,所以如果需要双向传输的话,两个外围设备都必须是主机 / 从机兼容类型的
19.3 AXI 架构
AXI 协议支持批量传输,每次是在地址通道传输地址和控制数据。多个 AXI 主机可以通过一个 AXI 互联连接到多个 AXI 从机。一个 AXI 主机可以用写数据通道通过这个 AXI 互联把数据传送给一个 AXI 从机 (或通过读数据通道从从机传送到主机)。写的这个数据传输会话特别具有一个额外的响应通道,当所有的数据从主机流向从机后,这个通道是用来让从机得知写入过程的结束。下图说明了 AXI 主机和从机之间的通信。注意在此图中,AXI 互联是被省略了的。
图 19.1 显示的是写通道架构,其中地址和控制数据是在发送批量数据之前,从主机传递给从机的,而在完成后则跟随了一个写响应信号。
图 19.1: AXI4 写通道架构
而另一方面,图 19.2 则显示了一个读的过程,地址和控制在批量的读数据被发送给主机之前先发送。
图 19.2: AXI4 读通道架构
用于定义每个通道的 AMBA AXI协议规范(AMBA AXI Protocol Specifications) 在协议 [1] 中。
19.3.1 地址通道
读和写的地址通道是分离的,能实现会话所需的所有地址和控制数据。这个数据决定了以下 AXI 协议机制的运作:
- 批量,每个批次从 1 到 16 个数据的传输
- 批量传输大小为 8-1024 位
- 包裹、递增和非递增的批量传输
- 在系统层面上的 cache 和缓冲
- 独占的原子级操作切换或有锁的访问
- 安全和特权访问
19.3.2 读数据通道
写数据通道包括:
- 一个 8-1024 位宽的数据总线
- 每八位数据一个字节道闸,用来在数据总线中识别出有效的字节
19.3.3 写数据通道
类似的,读数据通道包括一个相同范围的数据总线,另外还有一个读响应通道,用来表明一次读操作完成了。
19.3.4 写响应通道 l
写响应通道让从机可以在每个批次完成后,发出一个完成信号,从而向主机表明写操作完成了。
19.4 应用实例
表 19.1 详细列出了一些可用的 Xilinx IP,它们就是用了某种 AXI4 接口的。
正如前面所提到的,标准的 AXI4 接口是这个接口的高性能版本,最适合于更需要持久、高速性能的 IP AXI4-Lite 比其他协议用的硬件面积较少,所以适合于需要最小硬件消耗的较 低性能的 IP。
正如它的名字所暗示的,AXI4-Stream 是最适合于需要持续固定数据流的应用的。
表 19.1: 各种 AXI 接口的应用的例子 [1]
19.5 AXI 会话
19.5.1 AXI 写批量会话
图 19.3 显示了一个简化了的写批量会话,它用 AXI4 把数据写到地址 A。主机主动驱动从机,先通过 AWADDR 信号发送地址和控制数据。然后在 AWVALID 确认了有效地址之后,发送一个 AWREADY 信号来确认系统已经就绪可以做数据传输了。主机然后就在 WDATA 信号上向从机发送 DATA(A0)-DATA(A2) 数据包,最后的数据项发送的时候,把 WLAST 信号拉高来表示是最后的数据并确认传送完成了 [3]。主机还会发送数据批量相关的各种控制信号,但是为了清晰表达基本的操作,在图上这些信号被忽略了。
19.5.2 AXI 读批量会话
图 19.4 展示了一个简化了的读批量传输过程,是用 AXI4 从一个指定的地址 A 读数据。和写批量一样,从机是由主机驱动的,主机发送 ARADDR 信号来给出地址和控制数据。ARVALID 拉高来给出有效地址,并以 ARREADY 信号来表明系统确认已经就绪可以做传输了。数据包通过 RDATA 信号从 A 地址读出来,和前面一样,通过RLAST 信号来表明最终的数据包 [3]。注意 RVALID 信号会由从机负责保持低电平,直到有可读的数据。
图 19.3: 简化了的 AXI4 写批量会话
图 19.4: 简化了的 AXI4 读批量会话
正如 19.1 中所说的,AXI 协议支持乱序会话。每个会话由互联分配一个识别标识,这个互联要负责决定一个会话是必须按照发起的顺序完成还是实际上可以乱序发送。某些情况下系统性能可能因此受益,如 [3]:
- 响应时间更快的从机的优先级要高于那些较慢的。
- 读数据可以从从机乱序返回,比如当后面需要的数据在当前需要的数据已经有了之前就已经在缓冲区里了。
19.6 在 Xilinx 工具流中的 AXI
用Vivado IP Integrator的话,在Zynq芯片上实现采用AXI接口的IP是容易的。
图 19.5: 在 Vivado IP Integrator 里表示 AXI4 数据 FIFO 的符号
图 19.5 展示了用 Vivado IP Integrator 实现的单 AXI 数据 FIFO 部件。这个方框中具有一个从机 AXI 总线 (S_AXI)以及一个主机 AXI 总线 (M_AXI),这两个都是基于标准 AXI4 接口的。点击 号可以看到这些总线内部所含有的信号。在图 19.6 中,从机总线被扩展开来显示所有对应的信号。
图 19.6: 在 Vivado IP Integrator 里表示 AXI4 数据 FIFO 的符号 (总线扩展)
为了彻底理解所列出的每一种信号,你需要参考 Xilinx AXI Reference Guide[4],不过,我们可以把图 19.6 中的某些信号和 19.4 节中突出表示的频道对应起来。
- 写地址通道 — 这个通道中包含的信号的命名格式为 s_axi_aw...2
- 写数据通道 — 这个通道中包含的信号的命名格式为 s_axi_w...3
- 写响应通道 — 这个通道中包含的信号的命名格式为 s_axi_b...4
- 读地址通道 — 这个通道中包含的信号的命名格式为 s_axi_ar...5
- 读数据通道 — 这个通道中包含的信号的命名格式为 s_axi_r...
你应该注意到在 19.5 节中突出表示的信号既有读的也有写的操作,还有大量不同的控制信号。
图 19.7 给出了在 Xilinx Vivado IP Integrator 中配置 AXI 设备和 Zynq 处理器系统之间的连接的例子。这个操作的关键是使用 AXI Interconnect 包 (这个系统中的实例叫做 axi_intercon_1)。这个互联对于主处理器系统来说是个从机,同时又是把处理器来的信号转发给各种从机 AXI 设备的主机。在这个系统中,这个互联上连接了两个从机设备:AXI GPIO(gpio_1)和 AXI BRAM 控制器(bram_ctrl_1)。
特别注意这个 AXI Interconnect (AXI 互联),有几个信号需要考虑:
- 主机 AXI 从处理器系统和处理器时钟各自向从机输出 S00_AXI 及 S00_ACKL。
- 这个时钟还要供给两个 AXI 设备的时钟输入和它们在 AXI 互联上的主机输入。
- 为了简化起见,这个图中没有包含任何从处理器 reset 包来的 reset 信号。
- AXI 互联的输出都是主机通道,包含了图 19.6 中详细列出的信号,每个通道驱动对应的从机设备。
- 第 18 章深入说明了如何利用 Xilinx IP Integrator,以及如何连接包。
图 19.7: 在 Vivado IP Integrator 中的 AXI互联设置的例子
19.7 本章小结
本章介绍了用于 Zynq 芯片上的 IP 集成的 AMBA AXI4 接口。介绍了各种 AXI4, 以及一些 Xilinx IP 目录中的 IP 应用例子。还着重解释了如何在 Vivado IP Integrator 中利用 AXI 接口来使用 Xilinx IP。
19.8 参考文献
说明:所有的 URL 最后访问是在 2014 年 6 月。
[1] ARM, “Introduction — Channel Definition” in AMBA AXI Protocol Specification, v1.0, June 2003.
[2] Xilinx, Inc, “AXI4 IP Catalogue”, http://www.xilinx.com/products/intellectual-property/axi_interconnect.htm
[3] ARM, “Introduction — Basic Transactions” in AMBA AXI Protocol Specification, v1.0, June 2003.
[4] Xilinx, Inc, “AXI Reference Guide”, UG761, v14.3, November 2012.
第三十二篇到此结束,下一篇将带来第三十三篇,开始第二十章,带来探索 IP Integrator 等相关内容。欢迎各位大侠一起交流学习,共同进步。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!