写在前面
从这篇文章开始,我们将正式进入AXI4协议的学习,在xilinx系列的FPGA中,AXI4协议的使用是非常广泛的,很多的IP核都会支持AXI接口,而如果使用的是zynq系列,那AXI协议的学习更是重中之重。但是作为一款商用的成熟的总线协议,AXI接口本身的复杂程度也让很多初学者觉得无从下手。本系列希望通过最朴素的语言和一系列的使用实例帮助读者快速入门AXI4协议。但是笔者受限于自身水平有限,难免会有纰漏和理解不深刻的地方,还望读者不吝指正。
AXI协议本身是一种数据传输协议,其作用就是把数据从一端传输到另一端,也就是一种通信,所以我们首先来理解一下什么是通信协议。
通信协议,简单说就是双方进行信息传递所遵循的某种规则,举一个最简单的例子,古代的烽火台就可以理解成一种通信协议:通信的双方约定当烽火台点起,就意味着有敌情,这就是一种最简单的通信协议。
但是考虑一些现实因素,有时候我们的通信会发生意外,信宿(接收方)无法正确收到信源(发送方)。那么为了使得信息能够确保正确的从一端传输到另一端,看我们就可以引入一个确认信号,当接收方正确收到信息,就给发送方发一个确认信号,如果发送方在一定时间内没有收到确认信号,就认为这次通信是失败的(不管是发送的信息丢失还是确认信号丢失)。
还有的时候,发送方准备发送数据了,但是接收方却没有做好接收的准备,设想一下,这边烽火狼烟点着了,那边负责接收的工作人员睡着了(好像不太可能,但是在通信中接收端没准备好还是很常见的)。因此,为了确保我们的通信能够正常进行,在真正重要的信息开始传输之前,最好还能有一个建立传输的机制,这里不妨就称之为握手机制吧。
还有一个问题,烽火台是单向的传输(边境—>中央),但是我们的信息通信有时候需要的双向可传输(你也不想打电话的时候只能听不能说吧),在专业的通信领域,会有很多的方式(例如使用不同的频段进行传输)来实现这一需求,但是对于总线的设计来说,简单才是最重要的,那就开设2个通道嘛,一个用于A->B,一个用于B->A 。
说了这么多通信协议的内容,主要是因为这是我们理解AXI总线协议设计初衷的必要储备,我们学习总线协议,最低的境界是学会如何使用它,更高的境界是从设计者的角度去理解为什么要这么进行设计。
言归正传,首先我们来认识一下什么是AXI协议。AXI,是Advanced eXtensible Interface的缩写,其中文含义是高级可扩展接口,它是 ARM 公司所提出的 AMBA (Advanced Microcontroller Bus Architecture)协议的一部分。如今主流的是AXI4,本系列文章也是以AXI4为讨论主题。(AXI4不是意味着AXI的第四代,是因为其是ABMA4协议的一部分,最早的AXI是AXI3,如今在一些地方还依然能看,如今随着AMBA5的推出,已经出现了AXI5,不过版本间都是向下兼容,且变化不大)。
AXI是一种面向高性能、高带宽、低延迟的片内总线,它具有如下的几个特点:
(1)总线的地址/控制和数据通道是分离的;
(2)支持不对齐的数据传输;
(3)支持突发传输,突发传输过程中只需要首地址;
(4)具有分离的读/写数据通道;
(5)支持显著传输访问和乱序访问;
(6)更加容易进行时序收敛。
这里暂时不做深入的解读,我们随着学习的深入来逐步体会这些特点。
AXI在如今xilinx的FPGA中有着非常广泛的应用,必然有其特殊的优点,主要就体现在三个方面
(1)将不同的接口整合到一个接口(AXI4)中,因此用户仅需要了解单个系列的接口即可。
(2)简化了不同领域IP的集成,并使自身或者第三方IP的开发工具更简单易行。
(3)由于AXI IP已经为实现最高性能、最大吞吐量及最低时延进行了优化,从而进一步简化了设计工作。
(1)支持嵌入式、DSP及逻辑版本用户
(2)调节互联机制,满足系统要求,即性能、面积和功耗。
(3)帮助设计者在目标市场中构建最具号召力的产品
(1)第三方IP和EDA厂商普遍采用AXI4标准从而使该接口获得广泛的应用。
(2)基于AXI4的目标设计平台可加速嵌入式处理,DSP及连接功能设计开发。
其实很简单,说白了就是好用,和搭积木一样,这个零件只要支持AXI接口,很多地方都能搭起来,而且性能还好,然后大家都在用,就这么简单。
AXI4下面也有细分:
AXI4(AXI4-full) | 高性能存储映射接口 |
AXI4-Lite | 简化版的 AXI4 接口,用于较少数据量的存储映射通信 |
AXI4-Stream | 用于高速数据流传输,非存储映射接口 |
这里面设计到了一个概念:存储映射(Memory Map)。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。简单说就是主机会给出一个地址去对应从机的某个区域。
AXI4和AXI4-Lite包含5个独立的通道:
(1)读地址通道(Read address channel,AR)
(2)读数据通道(Read data channel,R)
(3)写地址通道(Write address channel,AW)
(4)写数据通道(Write data channel,W)
(5)写响应通道(Write response channel,B)
回想一下我们最开始聊的通信协议,首先分通道是因为会有两个方向的数据要传输,这里由于是存储器映射的方式,所以除了数据通道,还需要有地址通道2条,而这里的读响应通道,就像是我们之前说的确认信号,我们进行一个写操作,但是有没有写成功我们却不知道,所以引入了确认机制(写响应)。为什么没有读响应通道?你在读数据的时候自己有没有读到还能不知道嘛。
AXI通道定义:每一个独立的通道都包含一组信息信号、VALID信号和READY信号,用于提供双向的握手机制。握手机制我们之前也在通信协议的部分提到了,这里补充一下AXI的握手机制:
(1)所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。
(2)双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率
(3)只有当VALID和READY同时为高电平时,传输才会发生。
(4)信息的源端使用VALID信号表示当前通道地址、数据和控制信息什么什么时候有效
(5)目的端使用READY信号表示什么时候可以接受信息
- 读数据通道和写数据通道都包含一个LAST信号,用来表示传输的最后一个数据。
- 读数据通道和写数据通道都包含各自的地址通道,地址通道携带了请求所需的地址和信息。
- 读数据通道由从机发送给主机,包含了读数据和读响应的信息,读响应的信号用于表示读数据是否操作完成。
- 写数据通道由主机发送给从机,包含了写数据,然后通过WSTRB信号表示当前数据的哪个字节有效。
- 写响应通道由从机发送给主机,包含了写响应信号,用于表示当前写操作是否完成。
这里补充说一下last信号,在通信协议的部分,我们说到了通信前要建立连接,既然有建立,就应该要有释放,所以就要释放约定什么是最后一个数据,这就是我们的last信号。
本文我们主要介绍了什么是AXI协议,AXI协议的特点与优点,然后对于AXI协议非常重要的五通道结构进行了介绍,了解了五通道各自的作用,初步了解了AXI协议中至关重要的握手协议,这是本系列的第一篇文章,带领大家了解一下我们学习的对象,接下来的文章中,我们将正式开始AXI协议深层次的学习。