AXI4协议详解(一)
写在前面:AMBA总线协议在SOC设计中的地位是不言而喻的,从本篇文章开始,将会依托于官方手册详解AXI4、AXI4-LITE、AHB、APB等目前最常见的AMBA总线协议,梳理一下其中常用的知识点。本篇为AXI4协议的开篇,更多解析将会在之后继续分享给大家。
AXI4协议是amba协议中比较新的一个协议,目前应用的也很广泛。例如在ZYNQ核的ARM与FPGA部分信息交互中就大量应用了AXI4总线协议,官方手册给出了以下几点的AXI协议特点:
- 地址/控制信号与数据处于不同阶段
- 支持非对齐数据传输
- 支持突发式传输,且仅需提供首地址
- 独立的读写通道,可提供低资源消耗DMA
- 支持发送多个待执行地址(outstanding address)
- 支持乱序数据包收发
- 允许插入寄存器以保证时序收敛
以上特点我们先按下暂且不表,在之后会通过仿真的方式逐步向大家展现上面的关键地方。AXI区别于其他总线的地方在于它的通道分离特性,AXI4协议具有五个独立的通道:读地址通道、读数据通道、写地址通道、写数据通道、写回应通道。通道分离带来了很多优点,比如地址通道与数据通道分离,使得AXI4总线当中的控制、地址信息与数据信息无固定的相位关系,支持在未收到回应时发送多个待执行操作的地址信息,这样的设置有利于流水线操作,提升传输效率与速度;当多个slave操作完成时间不一致时,完成顺序与Master的控制顺序可以不同,这就使得AXI总线具有了乱序数据包收发的特性,等等。
本篇文章主要说明解释AXI协议中的以下要点:
- 通道信号定义总览
- AXI4总线中的握手机制
通道信号定义总览
下面是AXI4中各通道的信号表,笔者将读与写操作中对应的信号放在了一行,大家可以观察一下信号的规律:
通道 | 信号 | 方向 | 描述 | 通道 | 信号 | 方向 | 描述 |
---|---|---|---|---|---|---|---|
Global | ACLK | 全局时钟 | |||||
Global | ARESETn | 全局复位,低有效 | |||||
WADDR | AWID | M2S | 写地址ID号 | RADDR | ARID | M2S | 读地址ID号 |
WADDR | AWADDR | M2S | 写地址 | RADDR | ARADDR | M2S | 读地址 |
WADDR | AWLEN | M2S | 突发长度 | RADDR | ARLEN | M2S | 突发长度 |
WADDR | AWSIZE | M2S | 突发数据包大小 | RADDR | RWSIZE | M2S | 突发数据包大小 |
WADDR | AWBURST | M2S | 突发类型 | RADDR | ARBURST | M2S | 突发类型 |
WADDR | AWLOCK | M2S | 锁定类型 | RADDR | ARLOCK | M2S | 锁定类型 |
WADDR | AWCACHE | M2S | 存储类型 | RADDR | ARCACHE | M2S | 存储类型 |
WADDR | AWPROT | M2S | 保护类型 | RADDR | ARPROT | M2S | 保护类型 |
WADDR | AWQOS | M2S | 服务质量 | RADDR | ARQOS | M2S | 服务质量 |
WADDR | AWREGION | M2S | 区域标志 | RADDR | ARREGION | M2S | 区域标志 |
WADDR | AWUSER | M2S | 用户自定义 | RADDR | ARUSER | M2S | 用户自定义 |
WADDR | AWVALID | M2S | 写地址有效 | RADDR | ARVALID | M2S | 写地址有效 |
WADDR | AWREADY | S2M | 准备接收写地址 | RADDR | ARREADY | S2M | 准备接收写地址 |
通道 | 信号 | 方向 | 描述 | 通道 | 信号 | 方向 | 描述 |
WDATA | WID | M2S | 写过程ID标签 | RDATA | RID | S2M | 读操作ID标签 |
WDATA | WDATA | M2S | 写数据 | RDATA | RDATA | S2M | 读数据 |
WDATA | WSTRB | M2S | 数据片选 | ||||
WDATA | WLAST | M2S | 最后一个写数据 | RDATA | RLAST | S2M | 最后一个读数据 |
WDATA | WUSER | M2S | 用户自定义 | RDATA | RUSER | S2M | 用户自定义 |
WDATA | WVALID | M2S | 写操作有效 | RDATA | RVALID | S2M | 写操作有效 |
WDATA | WREADY | S2M | 准备接收写数据 | RDATA | RREADY | M2S | 准备接收写数据 |
WRESP | BID | S2M | 写回应ID标签 | ||||
WRESP | BRESP | S2M | 写回应 | RDATA | RRESP | S2M | 读回应 |
WRESP | BUSER | S2M | 用户自定义 | ||||
WRESP | BVALID | S2M | 写回应有效 | ||||
WRESP | BREADY | M2S | 准备接收写回应 |
我们能够从上面的表中总结得到以下信息:
- AXI4协议将信号分为五个通道,分别是写地址通道(WADDR)、写数据通道(WDATA)、写回应通道(WRESP)、读地址通道(RADDR)、读数据通道(RDATA);
- 每个通道中均含有READY信号以及VALID信号,并且除了READY信号,通道内的其他信号方向是一致的(S2M表示方向由SLAVE向MASTER,M2S反之),如果抛开这两个握手信号来讲,通道中信号方向是单向的;
- 每个通道都具有ID标签,不同的传输任务具有不同的ID,这也是AXI总线支持乱序收发的基础
关于写回应通道为什么被剥离出来成为一个单独的通道,网上有一种解释是从数据流向的角度分析,写回应的数据流向与写数据的数据流向相反,而读回应与读数据的数据流相同,因此读回应未被剥离出来,写回应成为一个单独的通道。但是笔者认为,单纯因为要回避不同的数据流向就将一个信号剥离出来,成为一个独立的通道是不划算的,因为一个独立的通道意味着要添加一些如ID标签、VALID、READY等信号,而对于一个通道来说,多一两个数据流相反的信号影响也不会很大。
笔者想要尝试从另一个方面解释,那就是写回应信号的使用频率通常比写数据的使用频率要低,而读回应信号与读数据的使用频率是一样的。为什么呢?我们假设在写数据时,进行了一次突发式的传输,传输了16组数据,写回应只会在最后一个写数据时进行回应,前15组数据是不进行回应的。其原因是因为只有收到最后一组数据后,才能判断收到的写数据是完整的,写回应此时才有意义,写操作才有效。在这个例子中写回应的使用频率为1/16,如果突发传输的长度更大,使用频率将会更低。
而读传输在16组数据的读取过程中将会回应16次,读取每个数据过后均会进行读回应。其原因是读回应的目的是指示SLAVE的一些状态,SLAVE可能在前8个读取数据时状态为OKAY,而后8个数据状态为ERROR,且状态值为ERROR时并非是MASTER未访问到SLAVE,而是SLAVE由于自身的状态想要返回给MASTER一个ERROR的状态值。也就是说读回应本身也是SLAVE想要返回的一种状态量,回应是以突发包数据为单位的,而不是像写回应一样是以传输任务为单位的,因此使用频率为16/16,将读回应放在读数据通道是符合现实情况,且节省资源的。
以上是笔者的一些个人理解,如果有不同的意见可以后台联系共同探讨。
AXI4总线中的握手机制
前面一节已经介绍了每个通道的信号定义,不难发现,每个通道都有一对READY与VALID信号。这就是AXI4握手机制中的两个主角。其中VALID为高表示地址、数据或控制信息有效,READY为高表示目标处于可以接收信息的阶段。
既然是握手,那么就只有两只手握到的时候才是有效的,下面这样可不行
当VALID和READY信号存在同时为高的时刻,握手即视为成功,根据双方做出握手动作的时间可以分为以下三种情况:分别是VALID先拉高、READY先拉高、双方同时拉高。下面这个图比较明了,就不再赘述。
由于各通道间的流程顺序,它们的握手信号也存在着一定的顺序性,ARM官方文档中从读传输、写传输两个传输过程声明了握手信号间的顺序,其中需要首先说明的是以下两个标志表示的意义:
- 单箭头:被指向的信号可在箭头起始端的信号有效前或后变为有效状态
- 双箭头:被指向的信号只能在箭头起始端的信号有效后变为有效状态
首先是读传输过程,涉及到的信号有:ARVALID、ARREADY、RVALID、RREADY。
上面的图表示ARVALID与ARREADY并无指定的有效顺序,但RVALID需要等待ARVALID与AREADY均有效后才能变为有效,RVALID与RREADY之间也并无指定的有效顺序。也可以理解为读数据操作需要在给出读地址操作之后才能执行,但读数据通道与读地址通道中的握手信号无规定的先后顺序。
写传输过程,涉及到的信号有:AWVALID、AWREADY、WVALID、WLAST、WREADY、BVALID、BREADY。
写传输过程也可以大致分为两个部分,一是写信息过程,一是写回应部分。在写回应BVALID有效前,必须要使得写地址通道与写数据通道的握手信号均有效,且写数据通道的WVALID信号必须为最后一个写入数据的有效信号。BREADY信号可在BVALID信号前后有效。而写地址通道与写数据通道的四个握手信号之间无必须要求的时间前后关系。
从上面这些可以看出,AXI4协议的信号驱动模式是有一定自由空间的,因此可以在协议给出的约束之下,结合自身系统进行一定程度的改动,达到更好的效果。
受篇幅所限,本次的分享就暂时到这里了。下一期我们将聚焦于读写过程,结合RTL设计深入体会AXI4协议的奥妙。
参考资料:AMBA 4 AXI and ACE Protocol Specification
关注公众号【TechDiary】,获得更多干货分享