大家好,欢迎来到IT知识分享网。
A1.3 AXI Architecture
AXI的全称是Advanced eXtensible Interface
- 读地址(Read Address,简称AR)
- 读数据(Read Data,简称R)
- 写地址(Write Address,简称AW)
- 写数据(Write Data,简称W)
- 写响应(Write response,简称B)
AXI的五个通道是单方向的,这样做的好处是可以对每个通道单独优化,而且当经过复杂的片上网络时,能够优化时序减少延迟。AXI支持突发(burst)传输,乱序(out of order)传输,极大地提高了数据吞吐能力,在满足高性能要求的同时,又减少了功耗
1) 对于读操作,主机(master)通过AR通道发送读事务地址,从设备(slave)通过R通道返回给主机所需要的数据,如下图
2) 对于写操作,主机通过AW通道发送写事务地址,并通过W通道把数据发送给从设备,而从设备接收到数据后,需要通过B通道返回一个响应给主机,整个过程结束。
读和写的不同之处,一是数据方向不一样,还有就是读事务不需要从设备再发响应了,想想为啥涅。
读和写的数据宽度可以是8, 16, 32, 64, 128, 256, 512, 1024 bits中的一种。
这里不得不提一下AMBA中广泛采用的 VALID/READY 握手机制。正是因为有了这个机制,发送方(Source)和接收方(Destination)才都有能力控制传输。
发送方通过置位 VALID 信号,来告诉接收方,自己已经将数据等信息准备好;而接收方通过置位 READY 信号,来告诉发送方,自己准备好了接收数据。只要有任何一方没准备好,传输就不能进行。
这里不要混淆了,发送方不总是主机,比如读数据通道上,发送方就是从设备,主机是接收方。
发送方的 VALID 信号和接收方的 READY 信号并不需要同时置位,可以发送方先准备好,也可以接收方先准备好。也就是说 VALID 可以早于 READY,也可以晚于 READY,也可以同时置位。对应的就是下面三种情况。
但是,为了避免死锁等问题,对于VALID/READY信号还是有一定要求的。协议规定,发送方的VALID信号一旦置位就不能拉低,直到完成一次握手;而且,发送方不能根据接收方的READY信号来置位自己的VALID信号。简单说,就是发送方可以根据自己的需求随时发起传输,不能也不需要判断接收方是否空闲,同时发送方一旦发起传输,就不能随意中止。对于接收方,如果没有准备好接收就可以不置位READY,这样就可以反压发送方的传输了,而且接收方置位READY后,只要发送方没置位VALID,可以拉低READY。
A2 Signal Descriptions
A2.3 Write data channel signals
A2.4 Write response channel signals
A2.5 Read address channel signals
A2.6 Read data channel signals
A2.7 Low-power interface signals
前面说到AXI的五个通道是独立的,但通道间必须保持一定的约定关系:
写回复必须在一次写事务的最后一个写数据之后
读数据必须在接收到读地址信号之后
通道间握手必须满足一定的依赖关系
前两条好理解,重点看一下第三条。之前讲过,为了避免死锁,协议规定发送方的VALID不能依赖接收方的READY;反过来,接收方的READY可以等待,也可以不等待发送方的VALID。当发生一次读传输时,读地址通道中,主机(master)是发送方,而从机(slave)是接收方;在读数据通道中,主机是接收方,从机是发送方,这时的依赖关系是:
AxSIZE信号指示突发传输中的数据位宽。数据位宽不能超过数据总线本身的位宽,而当数据总线位宽大于突发传输的位宽时,将根据协议的相关规定,将数据在部分数据线上传输。
A3.4 Transaction structure
了解完通道握手的依赖关系,我们再看看传输事务的结构。首先看传输的地址结构。AXI协议是基于突发(burst)传输的。所谓 burst 传输,就是在一次事务中,连续地传输多个地址相邻的数据。一次突发传输中可以包含一至多次数据(Transfer)。每个 transfer 因为使用一个周期,又被称为一拍数据(Beat)。每个数据可以是多个Byte构成。
协议规定,每次突发传输的累计地址不能跨4KB边界。至于为啥是4KB而不是别的数值,这是最初操作系统的问题,以4KB为一个页(page),对于某些设备而言,跨了4KB边界可能就是另外一个设备了。
Burst Length
Burst size
Burst Type
Burst Type 有以下几种类型:
- FIXED,所有数据都使用起始地址。该模式适合对某个固定地址进行多次数据更新,比如读写一个 fifo 时,读写地址就是固定的。
- INCR,后续数据的地址在初始地址的基础上进行递增,递增幅度与传输宽度相同。适合对于RAM 等通过地址映射(mapped memory)的存储介质进行读写操作。
- WRAP,首先根据起始地址得到绕回边界地址与最高地址。当前地址小于最高地址时,WRAP 与 INCR 类型完全相同,地址递增。但到递增后的地址到达最高地址后,地址直接回到绕回边界地址,再进行递增,就这样循环往复。最高地址由绕回边界地址计算得到。这种传输类型适用于对缓存行(cache line)的操作。
协议中规定,通信双方都不能在传输事务的所有 Transfer 完成前提前结束。哪怕发生错误,也要走完整个传输事务的流程。但是主机有办法减少传输的数据。在写传输事务中,发送方可以通过置低所有写有效位的方式,使得写数据无效。在读传输事务中,主机可以直接丢弃读取到的数据。
分析完传输的地址结构,再来看看读写数据的结构。主要是涉及窄传输(Narrow transfers),非对齐传输(unaligned transfer)和混合大小端(mixed-endian)传输等话题。
WSTRB信号用于指示WDATA中的哪些数据byte是有效的。
WSTRB[n] 对应的是WDATA[8n+7:8n],也就是:当 WSTRB[n] 为 1 时,WDATA[8n+7:8n]有效。
当主机发起的传输位宽小于总线宽度时,就是一次窄传输。如果是INCR或者WRAP类型,可以每拍(beat)使用不同的字节位置(byte lane),如果是FIXED类型就不可以了。协议中给出了两个例子,我们看一个就好了,如下图:
突发长度是5
起始地址0
每次传输8bit
数据总线宽度32bit
突发类型是INCR
上图中灰色表示该byte无效,我们可以看到,每次传输的有效字节位置是不同的。在窄传输中,主机可以调整有效数据的字节位置,以及给出字节有效信号 WSTRB,能够使从机无需进行数据重组等工作。
AXI中还有一个问题是大小端问题,之前的文章讲过什么是大端和小端。其根本不同就是高字节数据存在低地址位还是高地址位。AXI协议定义了一种字节顺序不变端序(byte-invariant endianness)方案。
Unaligned transfers
AXI 协议支持地址非对齐的传输,允许突发传输的首字节地址,即起始地址与突发传输位宽不对齐。比如,总线位宽为 32bit,也就是4byte,这时要保证对齐,起始地址的最低两位必须是2‘b00。如果起始地址为 0x1002,则产生了非对齐现象。
看完了数据结构。就剩下读写响应结构了。读写响应信号分别是RRESP/BRESP,各2bit,总共4种状态:
A4 Transaction Attributes
来看看事务属性(Transaction Attributes),主要是对cache,buffer和memory controller的规定。按照协议,从机分为存储从机(memory slave)和外设从机(peripheral slave)。存储从机要能够正确执行所有的事务,外设从机处理事务的能力取决于具体实现。
A4.4.1 Memory type requirements
对于Device Non-bufferable,协议规定:
A4.7 Access permissions
A7 Atomic Accesses
何为“原子性”?在这里,“原子性”指的是内存访问的一个特征,也称为原子访问,该内存访问操作要么执行完,要么不被执行,不存在执行一半被打断的可能。也就是该内存访问操作像原子一样不可切割。
为此,ARMv8-A(注意,不是AXI)中定义了两种原子性:单拷贝原子性(single-copy atomicity)和多拷贝原子性(multi-copy atomicity),此处不展开太多了,以后有机会单独写一篇与大家讨论。
AXI4中引入了一个概念,单拷贝原子大小(single-copy atomicity size)。这个术语定义事务原子更新的最小字节数。AXI4协议要求大于单拷贝原子大小的事务必须更新至少为单拷贝原子大小的内存块。
更复杂的系统需要支持更大的原子元素,特别是64bit,这样主机就可以使用基于这些更大原子元素的数据结构进行通信。系统中支持的单拷贝原子性大小非常重要,因为给定通信中涉及的所有组件都必须支持所需的原子元素大小。AXI4协议本身不需要特定的单拷贝原子大小,系统可以设计为支持不同的单拷贝原子大小。
排他访问机制可以提供信号量类型的操作,而不需要在操作期间保留总线给特定主机。也就是说信号量类型的操作不会影响总线访问延迟或最大可实现带宽。主机通过AxLOCK信号选择独占访问,RRESP和BRESP信号分别表示独占访问读写的成功或失败。从机需要额外的逻辑来支持独占访问。
A7.2 Exclusive accesses
主机对一个地址执行排他读取。在稍后的某个时间,主机试图通过执行排他写入来完成独占操作到相同的地址,并且具有与用于排他读取的地址匹配的AWID。
不支持独占访问的从机可以忽略AxLOCK信号。但是必须能够对正常访问和排他访问返回OKAY响应。
与排他访问相对的是锁定访问。当主机使用AxLOCK信号来指示事务是锁定的事务时,互连必须确保只有该主机可以访问目标从属区域,直到来自同一主机的未锁定事务完成。互连中的仲裁器必须执行此限制。在主机启动读或写事务的锁定序列之前,它必须确保没有其他事务等待完成。任何带有AxLOCK的表示已锁定事务的事务都会强制互连锁定后续的事务。因此,锁定的序列必须由一个没有AxLOCK指示锁定事务终结。这就要求最后一个事务包含在锁定的序列中,并有效地移除锁定。完成锁定序列时,在发出最终解锁事务之前,主机必须确保所有先前锁定的事务都已完成。然后,它必须确保最终解锁事务在开始任何进一步的事务之前已经完成。主机必须确保锁定序列中的所有事务都具有相同的AxID值。
可以看出,锁定访问需要在一段时刻内独占互连,因此会极大影响互连的性能。在AXI4中已经取消对锁定访问的支持。
AXI3支持locked access,AxLOCK信号为2bit。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121519.html