AMBA5 AXI和ACE协议技术规范中文版-第A3章 单接口要求
第A3章 接口要求
本章描述了单个master和slave之间的基本AXI协议事务需求。它包含以下部分:
- 在A3-40页设置时钟和复位
- 第A3-41页上的基本读写事务
- 在A3-44页的通道之间的关系
- 第A3-48页的事务结构
A3.1 时钟和复位
这部分描述AXI全局时钟ACLK和复位信号ARESETn的实现要求。
A3.1.1 时钟
每个AXI接口都有一个时钟信号,ACLK。所有输入信号在ACLK上升沿采样。所有输出信号的变化只能发生在ACLK上升沿之后。
在master和slave的接口上,输入和输出信号之间不能有组合逻辑路径。
A3.1.2 复位
AXI协议使用单一的低有效复位信号ARESETn。复位信号可以异步生效,但失效只能与ACLK的上升沿同步。
在复位过程中,应用以下接口要求:
- master接口必须驱动ARVALID、AWVALID和WVALID为低。
- slave接口必须驱动RVALID和BVALID为低。
- 所有其他信号都可以被驱动为任意值。
复位后,master被允许开始驱动ARVALID、AWVALID或WVALID为高最早的点是在ARESETn为高后ACLK的上升沿。图A3-1显示了复位之后ARVALID、AWVALID或WVALID被驱动为高的最早的点。
A3.2 基本读和写事务
这部分定义了AXI协议事务的基本机制。基本机制是:
- 握手过程
- A3-42页的通道信号要求
A3.2.1 握手过程
所有五个事务通道都使用相同的VALID/READY握手过程来传输地址、数据和控制信息。这种双向流控制机制意味着主从双方都可以控制信息在master和slave之间移动的速率。源头生成VALID信号,以指示地址、数据或控制信息何时可用。目的地生成READY信号,表示它可以接受该信息。只有当VALID和READY信号都为HIGH时,才会发生传输。
在master和slave接口上,输入和输出信号之间不能有组合逻辑路径。
在A3-42页的图A3-2到图A3-4显示了握手过程的实例。
如图A3-2所示,源头在T1之后显示信息,并且使VALID信号生效。目的地在T2之后使READY信号生效。源头必须保持其信息稳定,直到在T3进行传输,此时该有效信号被识别。
在VALID生效前,源头不允许等待直到READY生效。
当VALID生效,它必须保持生效直到握手发生,握手发生时在时钟上升沿,这时VALID和READY都生效。
在图A3-3中,在地址、数据或控制信息有效之前,目的地在T1之后使READY生效。
这个生效表明它能接受信息。源头在T2之后,呈现信息,使VALID生效,然后传输发生在T3,这时生效被识别。在这种情况下,传输在一个周期内发生。
在对应的READY信号生效前,目的地被允许等待VALID生效。
如果READY生效,在VALID生效前,允许READY无效。
在图A3-4中,源端和目的端恰好都表示它们可以在T1之后传输地址、数据或控制信息。在这种情况下,传输发生在时钟上升沿,此时VALID和READY生效都可以被识别。这些生效意味着传输发生在T2。
通道信号要求描述了单个AXI协议通道握手机制。
A3.2.2 通道信号要求
下面各节定义了各通道的握手信号和握手规则:
- 通道握手信号
- 写地址通道
- 在A3-43页写数据通道
- 在A3-43页的写响应通道
- 在A3-43页的读地址通道
- 在A3-43页的读数据通道
通道握手信号
每一个通道有自己的VALID/READY握手信号对。表A3-1显示了每个通道的信号。
写地址通道
当它驱动有效的地址和控制信息时,Master只能使AWVALID信号生效。当生效时,AWVALID必须保持有效直到slave使AWREADY生效后的时钟上升沿。
AWREADY默认状态可以为高或为低。此规范推荐默认状态为高。当AWREADY为高,slave必须能接收任何呈现给它的有效地址。
注意
此规范不建议AWREADY默认状态为低,因为它强制传输至少花费两个周期,一个周期使AWVALID生效,另一个周期使AWREADY生效。
写数据通道
在一个写突发中,只有当它驱动有效写数据时,master可以使WVALID信号生效。当生效时,WVLAID必须保持有效直到slave使WREADY生效后的时钟上升沿。
WREADY的默认状态可以是高,但是只有在slave在一个周期中可以一直接受写数据的时候。
当它驱动在一个突发中的最后的写传输时,Master必须使WLAST信号生效,。
此规范推荐无效字节通道的WDATA被驱动为零。
写响应通道
只有当它驱动有效的写响应时,slave可以使BVALID信号生效。当生效时,BVALID必须保持生效直到master使BREADY生效后的时钟上升沿。
只有在master在一个写响应周期中可以一直接受写响应的时候,BREADY默认状态可以是高。
读地址通道
只有当它驱动有效的地址和控制信息时,master才能使ARVALID信号生效。当生效时,ARVALID必须保持有效直到slave使ARREADY信号生效后的时钟上升沿。
ARREADY的默认状态可以是高或低。此规范推荐默认状态为高。如果ARREADY为高,然后slave必须能接收任何呈现给它的有效地址。
注意
此规范不推荐ARREADY为低,因为它强制传输至少花费两个周期,一个使ARVALID生效,另外一个使ARREADY生效。
读数据通道
只有当它驱动有效的读数据时,slave可以使RVALID信号生效。当生效时,RVALID必须保持生效直到master使RREADY生效后的时钟上升沿。即使一个slave只有一个读数据源,它必须在只对数据请求响应时使RVALID信号生效。
Master接口使用RREADY信号从而用来表明它接收数据。RREADY的默认状态是高,但是只有在它开始读事务,master能立即接收读数据的时候。
当它正在驱动突发中的最后读传输时,Slave必须使RLAST信号生效。
此规范推荐无效的字节通道RDATA被驱动为零。
A3.3 通道之间的关系
AXI协议要求保持以下以下关系:
- 在写事务中,写响应必须一直跟在最后写传输之后。
- 读数据必须跟在数据的读地址之后。
- 通道握手必须符合在通道握手信号之间的依赖关系中定义的依赖关系。
协议没有定义通道之间的任何其他关系。
例如,缺乏关系意味着,写入数据可以在事务的写地址之前出现在某个接口上。如果写地址通道比写数据通道包含更多的寄存器级,就会发生这种情况。类似地,写数据可能与地址出现在相同的周期中。
注意:
当互连需要确定目的地址空间或slave空间时,它必须重新排列地址并写入数据。这种重新排列是必需的,以确保写数据对它的目标slave被标识为有效的。
当master发送一个写请求时,它必须能为该事务提供所有的写数据,而不依赖于来自该master的其他事务。
当master发送一个读请求时,它必须能接收该事务的所有读数据,而不依赖于该master的其他事务。
注意,master可以依赖于使用相同ID的事务按顺序返回的读数据,所以master只需要具有不同ID的事务读数据的足够存储。
A3.3.1 通道握手信号之间的依赖关系
为了防止死锁情况,必须注意握手信号之间存在的依赖规则。
如A3-42页的信道信号要求所述,在任何事务中:
- 发送信息的AXI接口的VALID信号不能依赖于接收该信息的AXI接口的READY信号。
- 正在接收信息的AXI接口可以等待,直到检测到VALID信号,然后其对应的READY信号才生效。
注意
在READY生效前等待VALID信号生效时可以接受的。检测对应的VALID信号前,READY信号生效时可以接受的。这可以导致更有效的设计。
此外,不同通道上的握手信号之间存在依赖关系,而且AXI4定义了一个附加的写响应依赖关系。下面的小节定义了这些依赖关系: - 在A3-45页上AXI3读事务依赖项
- 在A3-45页上AXI3写事务依赖项
- 在A3-46页的AXI4和AXI5写事务依赖项
在依赖关系图中: - 单头箭头指向的信号可以在箭头开始处的信号之前或之后生效。
- 双头箭头指向的信号必须在箭头开始处的信号生效之后才能生效。
读事务依赖关系
图A3-5显示了读事务握手信号的依赖关系,并且显示了在读事务中: - master必须不能等slave的ARREADY信号生效后再生效。
- slave可以等待ARVLID生效后ARREADY再生效。
- slave可以等待ARREADY生效后ARVALID再生效。
- slave必须等待ARVALID和ARREADY生效后RVALID再生效,从而表明有效的数据可以使用。
- slave必须不能等待master的RREADY生效后RVALID再生效。
- master可以等待RVALID生效后RREADY再生效。
- master可以使RREADY生效后RVALID再生效。
AXI3写事务依赖关系
图A3-6显示了写事务握手信号的依赖关系,而且显示了在写事务中:
- master必须不能等待slave使AWREADY或WREADY生效后再使AWVALID或WVALID生效。
- slave可以等待AWVALID或WVALID或这两个后,再使AWREADY生效。
- slave可以使AWREADY生效后再使AWVALID或WVALID或这两个生效。
- slave可以等待AWVALID或WVALID或这两个后使WREADY生效。
- slave可以使WREADY生效后再使AWVALID或WVALID或这两个生效。
- slave必须等待WVALID和WREADY生效后再使BVALID生效。
Slave必须等待WLAST生效后再试BVALID生效。之所以需要等待,是因为写响应BRESP必须在写事务的最后一次数据传输之后才发出信号。 - slave必须不能等待master使BREADY生效后再使BVALID生效。
- master可以等待BVALID后再使BREADY生效。
- master可以使BREADY生效后再使BVALID生效。
警告
必须遵守依赖规则,以防止出现死锁情况。例如,master必须不能等待AWREADY生效后再使WVALID生效。如果slave是正在等待WVALID后使AWREADY生效,则死锁情况发生。
AXI4和AXI5写事务依赖关系
AXI4和AXI5定义了一个附加的slave写响应依赖关系。Slave必须等待AWVALID,AWREADY,WVALID和WREADY生效后使BVALID生效。通过发出写响应,slave负责对写事务和后续事务进行风险检查。
注意
这个附加依赖项反映了AXI3中预期的使用,因为不期望任何组件接受所有写数据并在接受地址之前提供写响应。
图A3-7显示了所有AXI4和AXI5要求的salve写响应握手依赖关系。单头箭头指向可以在之前信号生效之前或之后生效的信号。双头箭头指向只有在前一个信号生效之后才必须生效的信号。
这些依赖项是:
- master必须不能等待slave使AWREADY或WREADY生效后使AWVALID或WVALID生效。
- slave可以等待AWVALID或WVALID或这两个后使AWREDAY生效。
- slave可以使AWREADY生效后使AWVALID或WVALID或这两个生效。
- slave可以等待AWVALID或WVALID或这两个后使WREADY生效。
- slave可以使WREADY生效后再使AWVALID或WVALID或这两个生效。
- slave必须等待 AWVALID, AWREADY, WVALID和WREADY生效后再使BVALID生效。
Slave也必须等到WLAST生效后再使BVALID生效。这是因为写响应BRESP必须在写事务的最后一次数据传输之后才发出信号。 - slave必须不能等待master使BREADY生效后再使BVALID生效。
- master可以等待BVALID后使BREADY生效。
- master可以使BREADY生效后再使BVALID生效。
A3.3.2 遗留问题
在A3-46页的AXI4和AXI5写事务依赖关系描述的附加依赖关系意味着在接受地址之前接受所有写数据并且提供写响应AXI3 salve是与AXI4或AXI5不符合。将一个AXI3遗留slave转换为AXI4或AXI5需要添加一个wrapper。这个wrapper确保在合适的地址被slave接受之前,不会提供返回的写响应。
将一个AXI3遗留从服务器转换为AXI4或AXI5需要添加一个包装器。这个包装器确保在合适的地址被从属服务器接受之前,不会提供返回的写响应。
注意
该规范强烈建议任何新的AXI3 slave实现都包含这个附加依赖项。
任何AXI3master都符合AXI4和AXI5写响应需求。
A3.4 事务结构
这部分描述了事务的结构。以下部分定义地址,数据和响应结构:
- 地址结构
- 在A3-52页传输的虚拟代码描述
- 在A3-54页的数据读和写的结构
- 在A3-59页的读和写响应结构
关于本节中使用的术语的定义,请参见Glossary-493页的Glossary。
A3.4.1 地址结构
AXI协议是基于突发的。通过驱动事务中的控制信息和首字节的地址到slave,master开始每个突发传输。随着传输进行,slave必须计算突发中随后传输中的地址。突发必须不能跨越4KB地址边界。
注意
这个限制阻止了在两个slave之间突发跨越过边界。它还限制了slave必须支持的地址递增的数量。
突发长度
突发长度指定由:
- ARLEN[7:0],对读传输
- AWLEN[7:0],对写传输
在本规范中,AxLEN表示ARLEN或AWLEN。
对所有的传输类型,AXI3支持1-16传输的突发长度。
AXI4对INCR突发类型扩展了突发长度,支持1-256传输。在AXI4中,对所有其他突发类型的支持仍然是1-16个传输。
AXI3突发长度定义为:
Burst_Length = AxLEN[3:0] + 1
为了适应AXI4中INCR突发类型的扩展突发长度,定义AXI4的突发长度为:
Burst_Length = AxLEN[7:0] + 1
AXI有以下规则来管理突发事件的使用: - 对环回突发, 突发长度必须2, 4, 8或16.
- 突发必须不能跨越4KB地址边界
- 不支持突发提前中止
任何组件都不能提前终止突发。然后,为了减少一个写突发中数据传输的数量,master可以通过使所有的写选通失效来禁用进一步的写。在这种情况下,master必须完成突发中剩余的传输。在读突发中,master可以启用读数据,但是它必须完成突发中所有的传输。
注意
当访问读敏感设备(如FIFO)时,丢弃不需要的读数据可能导致数据丢失。当访问这样的设备时,主机必须使用与所需数据传输的大小完全匹配的突发长度。
第A7-97页的独占访问限制定义了在独占访问期间影响突发的额外规则。
在AXI4中,具有INCR突发类型和长度大于16的事务可以转换为多个较小的突发,即使事务属性表明该事务是不可修改的。请参阅第A4-64页的AXI4对内存属性信号的更改。在这种情况下,生成的突发必须保留与原始事务相同的事务特征,唯一的例外是: - 突发长度减少
- 生成突发的地址是被适当的调整
注意
为了实现AXI3的兼容性,需要将较长的突发分解为多个较短的突发。为了减少较长突发对QoS保证的影响,也可能需要这种能力。
突发大小
The maximum number of bytes to transfer in each data transfer, or beat, in a burst, is specified by:
在每次突发数据传输中,或一拍,每次数据传输的最大字节数,被指定为: - ARSIZE[2:0], 对读传输
- AWSIZE[2:0], 对写传输
在这个规范中,AxSIZE表示ARSIZE或AWSIZE。
AxSIZE编码如表A3-2所示。
如果AXI总线的宽度大于突发大小,那么AXI接口必须从传输地址确定数据总线的哪个字节通道用于每次传输。参见第A3-54页的数据读写结构。
任何传输的大小都不能超过事务中任何一个代理的数据总线宽度。
突发类型
AXI协议定义了三种突发类型:
FIXED — 在固定突发中:
- 突发中每个传输的地址是相同的。
- 突发中所有拍的有效字节通道是相同的。然而,在这些字节通道中,WSTRB生效的实际的字节在突发中的每一拍可能不同。
这种突发类型用于重复访问相同的位置,如加载或清空FIFO。
INCR — 递增。在一个递增突发中,突发中每次传输的地址是之前传输地址的递增。递增的值依赖于传输的大小。例如,对于一个对齐的开始地址,突发中每次传输的具有四个字节的地址是之前的地址加四。
这种突发类型用于访问正常的顺序存储器。
WRAP — 环回突发是与递增突发类似,不同之处在于如果达到地址上限,地址就会环回到较低的地址。
以下限制应用于环回突发: - 起始地址必须与每次传输的大小对齐。
- 突发的长度必须是2,4,8,16传输。
环回突发的行为是: - 突发中使用的最低地址是与被传输的数据总的大小对齐,也就是突发中每次传输的大小乘以突发中传输的数量。地址被定义为环回边界。
- 每次传输后,地址以与INCR突发相同的方式递增。然而,如果这个递增地址是(环回边界加传输数据的大小),然后地址环回到环回边界。
- 突发中的首次传输可以使用比环回边界大的地址,这要遵守应用于环回突发的限制。当首地址比环回边界大时,对任何环回突发中地址要环回。
这种突发类型被用作缓存行访问:
突发类型指定被: - ARBURST[1:0],对读传输
- AWBURST[1:0], 对写传输
在本规范中,AxBURST表示ARBURST或AWBURST:
表A3-3显示了AxBURST信号编码:
突发地址
这部分提供决定在突发中传输的地址和字节通道的方法。这个方程使用以下变量:
Start_Address — master发出的起始地址
Number_Bytes —在每次数据传输最大的字节数
Data_Bus_Bytes —在数据总线中字节通道的数量
Aligned_Address — 起始地址的对齐版本
Burst_Length — 突发中数据传输的最大数量
Address_N — 突发中传输N的地址。突发中,第一次传输N是1。
Wrap_Boundary — 在环回突发中最低的地址
Lower_Byte_Lane — 传输中最低寻址字节的字节通道。
Upper_Byte_Lane — 传输的最高寻址字节的字节通道。
INT(x) – x的向下取整的整数值
这些公式确定了突发中传输的地址:
Start_Address = AxADDR
Number_Bytes = 2 ^ AxSIZE
Burst_Length = AxLEN + 1
Aligned_Address = (INT(Start_Address / Number_Bytes)) × Number_Bytes
这个方程决定了突发中第一次传输的地址:
Address_1 = Start_Address
对于递增突发和地址没有环回的环回突发,这个方程决定了突发中第一次传输后的任何地址:
Address_N = Aligned_Address + (N – 1) × Number_Bytes
对于环回突发,Wrap_Boundary变量定义了环回边界:
Wrap_Boundary = (INT(Start_Address / (Number_Bytes × Burst_Length)))× (Number_Bytes × Burst_Length)
对于环回突发, 如果 Address_N = Wrap_Boundary + (Number_Bytes × Burst_Length), 然后:
- 对于当前传输使用这个方程:
Address_N = Wrap_Boundary - 对于随后的传输使用这个方程:
Address_N = Start_Address + ((N – 1) × Number_Bytes) – (Number_Bytes × Burst_Length)
这些方程决定了突发传输中第一次传输使用的字节通道:
Lower_Byte_Lane = Start_Address – (INT(Start_Address / Data_Bus_Bytes)) × Data_Bus_Bytes
Upper_Byte_Lane = Aligned_Address + (Number_Bytes – 1) –
(INT(Start_Address / Data_Bus_Bytes)) × Data_Bus_Bytes
这些方程决定了突发中第一次传输后所有传输使用的字节通道:
Lower_Byte_Lane = Address_N – (INT(Address_N / Data_Bus_Bytes)) × Data_Bus_Bytes
Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1
传输数据在:
DATA((8 × Upper_Byte_Lane) + 7: (8 × Lower_Byte_Lane))
事务容器描述了该事务中可以访问的所有字节,如果地址对齐并且选通生效:
Container_Size = Number_Bytes x Burst_Length
对递增突发:
Container_Lower = Aligned_Address
Container_Upper = Aligned_Address + Container_Size
对环回突发:
Container_Lower = Wrap_Boundary
Container_Upper = Wrap_Boundary + Container_Size
A3.4.2 传输的虚拟代码描述
// DataTransfer()
// ==============
DataTransfer(Start_Address, Number_Bytes, Burst_Length, Data_Bus_Bytes, Mode, IsWrite)
// Data_Bus_Bytes is the number of 8-bit byte lanes in the bus
// Mode is the AXI transfer mode
// IsWrite is TRUE for a write, and FALSE for a read
assert Mode IN {FIXED, WRAP, INCR};
addr = Start_Address; // Variable for current address
Aligned_Address = (INT(addr/Number_Bytes) * Number_Bytes);
aligned = (Aligned_Address == addr); // Check whether addr is aligned to nbytes
dtsize = Number_Bytes * Burst_Length; // Maximum total data transaction size
if mode == WRAP then
Lower_Wrap_Boundary = (INT(addr/dtsize) * dtsize);
// addr must be aligned for a wrapping burst
Upper_Wrap_Boundary = Lower_Wrap_Boundary + dtsize;
for n = 1 to Burst_Length
Lower_Byte_Lane = addr - (INT(addr/Data_Bus_Bytes)) * Data_Bus_Bytes;
if aligned then
Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes - 1
else
Upper_Byte_Lane = Aligned_Address + Number_Bytes - 1
- (INT(addr/Data_Bus_Bytes)) * Data_Bus_Bytes;
// Peform data transfer
if IsWrite then
dwrite(addr, low_byte, high_byte)
else
dread(addr, low_byte, high_byte);
// Increment address if necessary
if mode != FIXED then
if aligned then
addr = addr + Number_Bytes;
if mode == WRAP then
// WRAP mode is always aligned
if addr >= Upper_Wrap_Boundary then addr = Lower_Wrap_Boundary;
else
addr = Aligned_Address + Number_Bytes;
aligned = TRUE; // All transfers after the first are aligned
return;
A3.4.3 常规事务
对事务,有许多突发,大小和长度的选项。然而,一些接口和事务类型可能仅使用这些选项的一个子集。如果一个slave组件被附加到一个只使用事务选项子集的master组件上,它可以用简化的解码逻辑来设计。
定义了Regular属性,以标记符合下列标准的事务:
- AxLEN is 1, 2, 4, 8, or 16.
- 如果AxLEN大于1,AxSIZE与数据总线宽度一致
- AxBURST是递增或环回,不是固定。
- 对递增事务,AxADDR是对齐事务容器。
- 对环回事务,AxADDR是对齐AxSIZE。
常规事务属性
Regular_Transactions_Only属性用于定义master是否只发出Regular类型的事务,slave是否只支持Regular类型的事务:
TRUE— 只支持常规事务
支持
FALSE —支持所有AxBURST, AxSIZE和AxLEN 的合法组合。
如果没有声明Regular_Transactions_Only,则认为是FALSE。
以下接口的Regular_Transactions_Only属性可以为True:
• AXI5
• ACE5
• ACE5-Lite
• ACE5-LiteDVM
互通性
表A3-4给出了连接具有不同属性值的master和slave组件的指导:
A3.4.4 数据的读和写结构
本节描述在AXI读写数据总线上不同大小的传输,以及接口如何执行混合大小端和非对齐传输。它包括以下各节:
- Write strobes写选通
- Narrow transfers窄传输
- 在A3-55页的字节不变形
- 在A3-56页的非对齐传输
写选通
当HIGH时,WSTRB[n:0]信号,指定包含有效信息的数据总线的字节通道。写入数据总线的每8bit有一个写选通,因此WSTRB[n]对应WDATA[(8n)+7: (8n)]。
Master必须确保只有包含有效数据的字节通道是高。
当WVALID为低,写选通可以使任何值,尽管这个规范推荐写选通可以被驱动为低或保持之前的值。
窄传输
当master生成的传输比传输它的总线窄时,地址和控制信息决定传输使用的字节通道: - 在递增或环回突发中,在突发中的每一拍,使用不同的字节通道。
- 在固定突发中,在每一拍上,使用相同的字节通道。
在A3-55页图A3-8和图A3-9举了使用字节选通的两个实例。阴影部分表明未被传输的字节。
在图A3-8中: - 突发有五个传输。
- 起始地址为零。
- 每一次传输是8bit。
- 传输是在32bit总线上。
- 突发类型是递增的。
在图A3-9中:
- 突发有三个传输。
- 起始地址是4。
- 每一次传输是32bit。
- 传输是在64bit总线上。
字节不变性
为了在单个内存空间中访问混合端序的数据结构,AXI协议使用字节不变的字节顺序模式。
字节不变的字节顺序意味着,对于数据结构中的任何多字节元素:
- 元素使用相同的连续字节的内存,而不管数据的字节顺序如何。
- 字节顺序决定了这些字节在内存中的顺序,这意味着它决定内存中的第一个字节是该元素的最高有效字节(MSB)还是最低有效字节(LSB)。
- 任何传输到地址的字节都会在相同的数据总线线路上传递8位数据到相同的地址位置,而不管它所组成的任何更大的数据元素的字节顺序是什么。
只有一个传输宽度的组件必须将其字节通道连接到数据总线的适当字节通道。支持多种传输宽度的组件可能需要更复杂的接口来转换到不是自然字节不变的接口。
大多数小端组件可以直接连接到字节不变接口。只支持大端传输的组件需要有一个对字节不变操作的转换功能。
在图A3-10的实例和在A3-56页显示了一个32bit的数0x0A0B0C0D,存储在一个寄存器和内存中。
图A3-10显示了一个大端实例,字节不变,数据结构。在这个结构中: - 数据的最高字节是0x0A,被存储在寄存器的最高位。
- 数据的最高位存储在内存中的最低位。
- 其他的数据字节按重要性递减的顺序排列。
图A3-11显示小端,字节不变,数据结构的实例。在这个结构中:
- 数据的最低位,是0x0D,存储在寄存器的最低位的位置。
- 数据的最低位存储在内存最低地址的位置。
- 其他数据字节按照重要性的递增的顺序存储。
在A3-55页的图A3-10和图A3-11中的例子表明,字节不变性确保大端和小端结构可以共存在一个单一的内存空间中而不会损坏。图A3-12是一个需要字节不变访问的数据结构示例。在本例中,头字段使用小端顺序,而有效负载使用大端顺序。
例如,在这个结构中,数据项是一个双字节的小端元素,这意味着它的最低地址是它的LSB。字节不变性的使用确保了对有效负载的大端访问不会破坏小端元素。
非对齐传输
AXI支持非对齐传输。对任何由数据传输宽度大于一个字节的突发来说,访问的第一个字节可能与自然边界不对齐。例如,开始的字节地址为0x1002的32bit数据包是与自然32bit地址边界不对齐。
master可以:
- 使用低顺序地址行来表示一个非对齐的起始地址。
- 提供一个对齐的地址,并使用字节通道选通向未对齐的起始地址发出信号。
注意
低阶地址行上的信息必须与字节通道选通上的信息一致。Slave不需要根据来自master的任何对齐信息采取特殊的操作。
图A3-13显示了在32bit总线上,具有对齐和非对齐的32bit传输的递增突发的实例。图中的每一行表示一次传输,阴影部分表示未传输的字节。
图A3-14显示了在64bit总线上,具有对齐和非对齐32bit传输的递增突发的实例。图中的每一行代表一次传输,阴影部分标识未传输的字节。
图A3-15显示了在64bit总线上,具有32bit对齐传输的环回突发的实例。图中的每一行代表一次传输,阴影部分表明未被传输的字节。
A3.4.5 读和写响应结构
AXI协议对读和写事务提供响应信号:
- 对读事务,来自slave的响应信息从读数据通道发出。
- 对写事务,写响应信息从写响应通道发出。
响应的信号是: - RRESP[1:0],,对读传输。
- BRESP[1:0],对写传输。
响应是:
OKAY — 常规访问成功。表明常规访问已经成功。也能表明独占访问失败。参看OKAY,常规访问成功。
EXOKAY — 独占访问成功。表明独占访问的读或写成功。参看EXOKAY,在A3-60页的独占访问。
SLVERR — slave错误。当访问已经成功的到达slave时使用,但是slave希望对发送给它的master返回一个错误状况。参看SLVERR,在A3-60y页的salve错误。
DECERR — 解码错误。通常由互连组件生成,以表明在事务地址上没有slave。参见DECERR,解码错误在A3-60页。
图A3-5显示了RRESP和BRESP信号的编码:
对于写事务,对整个突发发出单个响应信号,而不是对突发内的每个数据传输发出响应信号。
在读事务中,从端可以对突发的不同传输发出不同的响应信号。例如,在一连串的16个读传输中,slave可能会对其中15个传输返回一个OKAY响应,对其中一个传输返回一个SLVERR响应。
协议指定必须执行所需的数据传输数量,即使报告了错误。
例如,如果从slave请求读取8个传输,但是slave有一个错误状况,slave必须执行8个数据传输,每个数据传输都有一个错误响应。如果slave给出了一个错误响应,则剩余的突发不被取消。
OKAY, 常规访问成功
OKAY响应表明以下任何一种情况:
- 常规访问的成功。
- 独占访问的失败。
- 对不支持独占访问的slave进行独占访问。
OKAY是对大多数事务的响应。
EXOKAY,独占访问成功
An EXOKAY — EXOKAY响应表明独占访问的成功。这个响应只能作为对独占读或写的响应。参看A7-96页的独占访问。
SLVERR,slave错误
SLVERR响应表明一个不成功的事务。
为了简化系统监控和调试,此规范建议错误响应仅用于错误的状况,不用于发出正常的,预期的事件。Slave错误状况实例是: - FIFO或缓冲溢出或不满状况
- 尝试不支持的传输大小
- 试图对只读位置进行写访问
- slave中的超时状况
- 试图访问被禁用或关机的功能
DECERR,解码错误
DECERR响应错误表明互联不能成功的解码slave访问。
如果互联不能成功解码slave访问,它必须返回DECERR响应。该规范建议互连路由访问到一个默认slave,并且默认slave返回DECERR响应。
AXI协议要求所有完成一个事务的数据传输,即使发生错误的情况。给出DECERR响应的任何组件必须满足这个要求。