今天给大侠带来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]:
尽管AMBA在1996年就出现了,但是直到2003年的AMBA 3.0才第一次引入了AXI。2010 年发布的 AMBA 4.0,包含了最新的 AXI 版本,就是 AXI4[2]。
19.2 各种 AXI 4
有三种 AXI4 接口类型,每一种都适合各自不同的应用类型 [4]。
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 协议机制的运作:
19.3.2 读数据通道
写数据通道包括:
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 节中突出表示的频道对应起来。
你应该注意到在 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 互联),有几个信号需要考虑:
图 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等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!