\\\插播一条:
今年整理了800多篇单片机单片机相关论文
论文制作思维导图
原理图 源代码 开题报告 正文 外文资料
想要的同学私信找我。
深入 AXI4 总线架构
我想深入探索这个系列 AXI4 总线。但事情总是这样,我不能说我想深入。目前,我是对的 AXI对总线的理解并不深入。但我希望读者能通过一系列文章与我一起深入探索 AXI4。
声明:引用或翻译部分时序图和句子 ARM AMBA 官方手册
(有的时候感觉手册写得太好了,忍不住就直接翻译了。。)
声明2:AXI 总线是 ARM 公司知识产权
备注:
·可以下载手册ARM官网搜AMBA ,需要注册 ARM 账号。
·若外网连接不方便,可到达 ARM China 下载极术社区(需要完成新手任务)
深入 AXI4 握手机制(一)总线
·百度文库应该有中文翻译版。
本期我们将讨论 AXI 总线传输通道(相应手册中的章 A1.三、各通道信号(A2)通道之间的关系(A3)以及 AXI 拓扑连接总线(A1.3.2)。
五个独立通道
AXI4 总线的一个主要特点是它有 5 只支持单向传输的独立传输通道。
作为类比,SPI 总线有 2 条单向传输通道:MISO, MOSI。SPI 输写输出数据,大路朝天,各走一条。
作为比较, IIC 协议则独有 SDA 输写输出数据只能在该通道上分时双向传输。
单向传输通道意味着两端的终端节点有身份差距,就像水只能从上游流向下游一样。在 AXI 在总线传输中,通道两端分为 Master 主机与 Slave 从机器上看,主机总是发起读写请求的一方。常见的主机有CPU、DMA,存储介质控制器(如果 DDR 控制器)是典型的从机。主机可以从机读取或写入存储介质。显然,从机器不可能主动 CPU 写入数据。
通道的读写定义是根据主机定义的,那么五个通道是谁呢?
读地址 (AR) read address
读数据 (R) read data
写地址 (AW) write address
写数据 (W) write data
写回复 (R) write response
5 不是很奇怪吗?你必须读/写。 2 倍数不是,那为什么不呢? 6 条,为什么不读回复?事实上,读回复借用了读数据通道。至于为什么有独立的写回复而不是读回复通道,我们稍后再谈。
读写传输操作中的通道
首先是写传输操作(Write transcation):
如下图所示,主机首先在写地址通道(AWC)通知从机本次传输操作(transcaction,对应后文"传输操作")的特性,包含地址和控制信息。
其次,写数据通道(WDC)将数据写入从机,一次传输操作可能包含多个数据传输(data transfer)。
最后,从接管到编写数据后,通过编写回复通道(RC)通知主机本传输操作的响应。主机收到从机响应信号作为传输操作完成的标志。手册强调,写回复是针对整个传输操作的(transcaction)是的,而不是每个写入数据(data transfer)。
在所有传输操作中,RC 与 WDC 如上图所示,写回复必须在收到传输操作中最后一个写数据后触发。
但是,AWC 与 WC 这种关系并不局限于一种情况。一般来说,编写数据发生在编写地址操作后,但不是绝对的。在某些情况下,允许先编写数据,或在同一周期内编写数据和地址。这也显示了 AXI 通道之间的独立性。(例外:RC 和 WDC 独立性弱)
然后阅读操作(Read transcation):
读取操作只影响两个通道。首先,主机在读取地址通道(ARC)本个传输操作写在上面(Transcation)待读取数据的地址以及控制信息。
从机接管到地址后,通过阅读数据通道将地址上的数据读取(RC)传输给主机。
值得注意的是, AR 虽然名称是读取地址通道,但实际上主机仍然写入地址,只是写入要读取数据的地址。读取地址通道,这个名字确实有点歧义,主机读取操作地址通道表达得更合适。
读操作时通道间(ARC&RC)完全独立,当然,主机写入读取地址后,从机发出的读取数据必须发生,从机不能预测先知,对吧?
无论是读写操作,AXI 总线支持,或基于突发传输(Burst Transaction)。简而言之,主机可以写入初始地址和突然传输的长度,接管主机传输的初始地址,或读取不间断地址上的数据作为读取数据传输给主机。因此,在上述两张图中,在一次传输操作中(Transcation) 地址和控制信息包含一次(Address & Control)、多个数据(data transfer)。
突发传输又称突发传输,详见后续更新文章:
通道定义
有一些共同的定义:
使用每个通道 VALID/READY 握手机制,详情见:
在读写数据(WC&RC)在两个数据通道中,突然传输(Burst Transaction)必须给出最后一个数据 LAST 信号,来标识这是此次突发传输中的最后一个数据(data transfer)。
除了共同的定义,每个通道都有自己的定义。
读&写地址通道(ARC&AWC):
写入本次传输操作所需的地址和控制信息,读写操作都有自己的地址通道。
读数据通道(RC):
读取数据通道包括从机发送给主机的读取数据和从机对读取传输操作的回复。稍后将讨论详细的读取操作状态回复。总线数据的位宽可以是 8,16,64,128,256,512 或者是 1024 比特。
写数据通道(WC):
编写数据通道用于将主机的编写数据传输到位宽和从机RC数据位宽相同。WC 有一点 RC 所没有的特征是拥有 STROBE 用于识别数据中有效传输字节的信号。也就是说,当读写宽度不对称时,将一些无效数据放在写作数据通道上,与有效数据一起发送,以减少主机的工作量。而 STROBE 信号的作用是识别这些无用的数据,并告知从机器不需要接管无用的数据。(Master:我太懒了,把所有的信号都发出去了)
数据通道设计有缓存,可以提前从机响应本次传输操作,启动下一次写传输操作。
写回复通道(RC):
用于从机器上将写作响应回复给主机。所有的写作和传输操作都必须以接管写作响应作为完成信号。同样,写作回复是针对传输操作的(transcation)是的,而不是每次写数据(data transfer)。
所以问题是,为什么没有读回复通道,只写回复通道?
这个问题可以从数据流向中看出。当主机读取数据时,数据在读取通道上传输,流向从机到主机。读取回复从从机器到主机报告读取操作,信号的数据流向也从机器到主机,因此读取回复可以在读取数据通道中合并,并搭便车。
但是写回复通道的数据流与写数据相反。写数据是从主机到从机,写回复是从机报告写操作的完成,流向是从机到主机,不能合并到写数据通道。另一方面,写回复是必不可少的,所以有一个独立的写回复通道。
通道上的信号
全局信号
AXI 总线有两个全局信号:ACLK,全局时钟信号,所有传输操作都发生在 ACLK 的回升沿。ARESETn,全局复位信号,低电平有效。AXI 在后续的文章中讨论一些细节。
注意:AResetn 一般是同步复位信号,A 代表 AXI,而不是 Async。
写地址通道
写地址通道的信号可分为 3 局部:经常用到的根底信号、突发传输的控制信号、内存访问有关以及其他的在根底阶段不是很常用的信号。
根底信号即 AWADDR:传输操作的起始地址,AWVALID 以及 AWREADY:握手信号用于所有通道。
突发传输是指在传输一个起始地址后,在重复地址上进行连续的读写操作。与突发传输相关的操作包括:AWLEN:突发传输的长度,即突发传输中数据传输的数量。AWSIZE:数据传输在每次突然传输中的位宽。AWBURST:突发传输类型。
其他信号包含与内存原子操作相关的信号 AWLOCK,AWCACHE,AWPROT 用户自定义和用户自定义 AWUSER 所有的信号都会在以后的文章中受到影响。(等我自己先用)
读地址通道
读地址通道和写地址通道的信号非常相似,所以不再从 specification 中截图及介绍。
写数据通道
值得注意的是 AXI4 不再支持 WID 信号,这和 AXI4 与乱序机制有关,AXI4 必须按顺序发送所有数据通道的数据。
WDATA 不再重复常见的握手信号,WDATA 上面可以看到可用位宽。WSTRB 信号用于标记传输数据中的有效字节,每个字节 WSTRB 如果数据位宽对应一个字节的位宽, 64 位,那么 WSTRB 信号的位宽是 1 个字节,共 8 (感谢评论区的纠正)
WLAST 如果在一次突然传输中没有正确的最后一次数据传输标识 WLAST 信号会导致写入地址的混乱,导致从机无法正确接管写入数据,导致从机不再拉高 READY 信号现象。
写回复通道
与编写数据通道不同,编写回复通道支持 BID,也就是支持乱序写回复,以后再谈乱序。BREP 回复上一次的写状态。
读数据通道
读数据通道与写数据通道类似,差别有两点:一,支持 RID 信号。二,由于读回复信息在读数据通道上传递,所以集成了 RRESP 信号,用于返回读状态,值得注意的是读回复信号和读数据一样,发送方(source)为从机(slave)。
通道间的关系
首先,再次声明一般情况下 AXI 的五个通道之间是独立的。但凡事都免不了例外,是吧。AXI 的通道间须要保证以下三种联络(relationship):
·写回复必需在其所属传输的最后一个写数据完成后(write response must follow the last write transfer in the transaction)
·读数据必需在接管到读地址信号后产生
·通道间的握手须要满足通道间的握手依赖性(handshake dependencies)
除了这三种联络外,通道之间保持独立关系。前两种联络已在上文中探讨,之后我们探讨第三种情况:通道间的握手信号依赖
*握手依赖关系
协议规定握手依赖的目标是为了防止死锁(deadlock),手册定义于章节 A3.3 ,主要的原则还是第一章中说过的两条:
·发送方 VALID?一定不能依赖接管方 READY 信号
·接管方 READY 信号能够检测到 VALID 置起后再置起有效,换句话说,能够依赖?VALID 信号
下述内容就是对上述原则在不同情况下的详细表述,为选读内容,没需达到协议的读者能够略过。
我们首先来看读传输的情况,读地址通道中主机为发送方、从机为接管方;读数据通道中主机为接管方、从机为发送方。其中,
图中的单头箭头表示:其指向的信号能够在箭头起始信号置起之前或之后置起(没依赖)
图中的双头箭头表示:其指向的信号必需在箭头起始信号置起之后置起(指向信号依赖起始信号)
详细的依赖能够表述为:
·主机的?ARVALID?信号不能等待从机的?ARREADY?信号置起后才置起,反之能够
·从机的?ARREADY?信号能够先于主机的?ARVALID?信号置起(如单头箭头所示)
·从机的?RVALID?信号必需等待?ARVALID?和?ARREADY?信号均置起后置起(如两个双头箭头所示)
·从机的?RVALID?信号不能等待主机的?RREADY?信号置起后才置起,反之能够
·主机的?RREADY?信号能够在?RVALID?置起前置起,换句话说:没依赖关系(如单头箭头所示)
之后是写传输的情况,在写数据以及写地址通道中,主机作为发送方;写回复通道中从机作为发送方
从图中看到,独有 2 组代表着依赖关系的双头箭头指向了?BVALID,这代表从机首先等待?WVALID?以及?WREADY?置高,此时写传输启动。再等待?WLAST?置起,此时传输完成。独有在传输完成后才能依据情况生成写回复信号中的?BRESP?信号。此时置高?BVALID?信号表示从机的写回复已经就绪。
此外另外三组单头箭头表示?AWREADY?、WREADY?信号能够依据?AWVALID、WVALID?信号生成,但不存在依赖。同样的关系还存在于?BREADY?与?BVALID?信号之间。本文此处不再展开详细依赖,能够参阅官方手册的 A3-43 页获得详细的表述。
(手册中图 A3-6 即上图中的注释局部似乎将 BVALID 误写为 WVALID,由于主机置起 WVALID 似乎与本次传输的 WLAST 没,那么每篇文章的实现细节章节能够跳过。这个章节面向有实现 AXI 协议需求的读者。
AXI 协议并没有对写数据以及写地址通道中的握手信号先后顺序做出规定。因此,实现中数据能够先于地址完成握手。这适用于一些情况,手册中举了个例子,假如写地址通道为了满足时序,触发器的级数与写数据通道不同,这样一来两通道握手的先后顺序可能不同。
这反映了 AXI 通道间的独立性,利用该特性可调整路径中的触发器,满足时序约束。
结语
本文中我们了解了 AXI 总线的架构,它的五大通道以及各自的信号,最简略的读写操作流程以及AXI 总线的拓扑连接。在接下来的文章中,我们会愈加深层到:各通道的握手机制以及传输细则,突发传输以及乱序传输的规则与实例中。
读者可能须要区分三个中文中的传输概念,本文许多地方反复地标记出了对应的英文,也是为了帮助大家区分。
传输 v. 指数据在主机和从机之间的流动的动作
传输操作 n. Transcation
数据传输 n. (data) transfer
其中地址与控制信号写入、读写恢复以及 last 信号相关概念均为
【文章福利】:小编整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!~
说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~
-END-
*本文系网络转载,版权归原作者所有,如有侵权请联系删除