AXI3/4协议

这篇具有很好参考价值的文章主要介绍了AXI3/4协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A1: Introduction

A1.1 About the AXI protocol

AMBA AXI支持高性能、高速的系统设计。

AXI协议:

  • 适合高带宽、低延迟的设计

  • 不使用复杂bridge的情况下运行高工作频率

  • 满足很多组件的接口要求

  • 灵活实现interconnect架构

  • 向后兼容AHB、APB接口

AXI协议的关键特性是:

  • 地址/控制和数据分离

  • 支持非对齐的data transfer(通过byte选通)

  • 基于burst的transaction,仅需要首地址

  • 读/写数据通道分离,从而实现低消耗的DMA

  • 支持发送多个oustanding的地址

  • 支持out-of-order的transaction

  • 容易进行寄存器打拍去满足timing

AXI协议有低功耗信号。

A1.2 AXI revisions

A1.3 AXI Architecture

AXI协议是基于burst的,并且有5条独立的通道

读地址通道(AR)

master --> slave

写地址通道(AW)

master --> slave

写数据通道(W)

master --> slave

写响应通道(B)

slave --> master

读数据通道(R)

slave --> master

AXI协议支持:

  • 在发送数据前发送地址

  • 多条outstanding的transaction

  • out-of-order的transaction

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A1-1 Channel architecture of reads

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A1-2 Channel architecture of writes

A1.3.1 Channel definition

5条独立的通道都有各自的握手信号(VALIDREADY):source使用VALID信号表明地址/数据/控制信息有效;READY信号表明下游准备好了。读/写数据通道还有LAST信号,表明一个transaction中最后一个transfer。

读/写地址通道

携带地址和控制信息

读数据通道

携带读数据和读响应:

  • 8/16/32/64/128/512/1024bit的数据总线

  • 读响应表明读tranfer完成

写数据通道

携带写数据:

  • 8/16/32/64/128/512/1024bit的数据总线

  • byte选通信号(以byte为粒度

写数据通道信息通常认为是buffer的,,因此master可以在slave没有确认之前的写transaction前发送新的写访问。

写响应通道

写响应表明写transaction完成

A1.3.2 Interface and interconnect

典型的系统中有多个master和多个slave,master和slave之间通过interconnect相连。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A1-3 Interface and interconnect

AXI协议提供如下接口的接口定义:

  • master <--> interconnect

  • slave <--> interconnect

  • master <--> slave

master/slave间的interconnect的接口,相当于与master/slave连接的slave/master的接口

典型系统拓扑

  • 共享地址和数据总线

  • 共享地址总线,多条数据总线

  • 多条地址总线,多条数据总线

对于多数系统,地址通道的带宽需求是远小于数据通道的带宽需求的。可以通过使用一条共享的地址总线以及多条数据总线(并发多个data transfer),实现系统性能和interconnect复杂性的平衡。

A1.3.3 Register slices

每条AXI通道都是单向的,并且通道间没有固定的关系。所以可以在通道内的任意位置插入寄存器,从而提高时钟频率,但代价是引入延迟。

延迟和最高工作频率的权衡。
处理器和高性能存储器间直接、快速的连接;而处理器到低性能外设的critical path用寄存器打断。

A1.4 Terminology

A2: Signal Descriptions

A2.1 Global signals

Signal

Source

Description

ACLK

Clock source

全局时钟信号

ARESETn

Reset source

全局复位信号,低有效

所有信号都在时钟上升沿采样

A2.2 Write address channel signals

Signal

Source

Description

AWID

Master

一个写transaction的ID。

AWADDR

Master

一个写burst transaction的起始地址,即第1个transfer的地址。

AWLEN

Master

burst length,即一个burst内有几个transfer。AXI3AXI4有不同。

AWSIZE

Master

burst size,一个transfer的数据位宽 = (2^AWSIZE) ×8

AWBURST

Master

burst的类型,即决定地址的递增方式(FIXED/INCR/WRAP),一个burst内的首个transfer外的其他transfer通过AWBURST计算地址。

AWLOCK

Master

lock type。与tranfer的原子特性有关。AXI3AXI4有不同。

AWCACHE

Master

memory type。

AWPROT

Master

protection type。此信号指明该transaction的特权和安全级别,以及该transaction是数据访问还是指令访问。

AWQOS

Master

Quality of Service,QOS。AXI4独有。

AWREGION

Master

允许slave上的单个物理接口用于多个逻辑接口。AXI4独有。

AWUSER

Master

用户自定义信号。AXI4独有。

AWVALID

Master

AWREADY

Slave

A2.3 Write data channel signals

Signal

Source

Description

WID

Master

写数据transfer的ID。AXI3独有。

WDATA

Master

写数据。

WSTRB

Master

写选通信号,表明写数据的哪些数据有效(byte为粒度)。

WLAST

Master

表明一个写burst的最后一个transfer。

WUSER

Master

用户自定义信号。AXI4独有。

WVALID

Master

WREADY

Slave

A2.4 Write response channel signals

Signal

Source

Description

BID

Slave

写响应的ID,与AWID/WID对应。

BRESP

Slave

写响应。表明这个写transaction结束。

BUSER

Slave

用户自定义信号。AXI4独有。

BVALID

Slave

BREADY

Master

A2.5 Read address channel signals

Signal

Source

Description

ARID

Master

一个读transaction的ID。

ARADDR

Master

一个读burst transaction的起始地址,即第1个transfer的地址。

ARLEN

Master

burst length,即一个burst内有几个transfer。AXI3AXI4有不同。

ARSIZE

Master

burst size,一个transfer的数据位宽 = (2^ARSIZE) ×8

ARBURST

Master

burst的类型,即决定地址的递增方式(FIXED/INCR/RRAP),一个burst内的首个transfer外的其他transfer通过ARBURST计算地址。

ARLOCK

Master

lock type。与tranfer的原子特性有关。AXI3AXI4有不同。

ARCACHE

Master

memory type。

ARPROT

Master

protection type。此信号指明该transaction的特权和安全级别,以及该transaction是数据访问还是指令访问。

ARQOS

Master

Quality of Service,QOS。AXI4独有。

ARREGION

Master

允许slave上的单个物理接口用于多个逻辑接口。AXI4独有。

ARUSER

Master

用户自定义信号。AXI4独有。

ARVALID

Master

ARREADY

Slave

A2.6 Read data channel signals

Signal

Source

Description

RID

Slave

读数据transfer的ID。AXI3独有。

RDATA

Slave

读数据。

RRESP

Slave

读响应。表明这个读transfer结束。

RLAST

Slave

表明一个读burst的最后一个transfer。

RUSER

Slave

用户自定义信号。AXI4独有。

RVALID

Slave

RREADY

Master

BRESP是表明写transaction的结束,因此虽然一个transaction内可能有有多个tansfer,但是只会有最后一个transfer发出后才回BRESP;
RRESP是表明读transfer的结束,因此如果一个transaction内有N个transfer,就会回N个RRESP。

A2.7 Low-power interface signals

Signal

Source

Description

CSYSREQ

Clock controller

系统进入低功耗状态的req。system clock controller --> peripheral。

CSYSACK

Peripheral device

进入低功耗状态的ack。peripheral --> system。

CACTIVE

Peripheral device

clock active。表明外设需要时钟。

A3 Single Interface Requirements

A3.1 Clock and reset

A3.1.1 Clock

每个AXI组件使用一个时钟信号:ACLK。所有信号都是ACLK上升沿触发

master和slave接口处,输入/输出信号间不能有组合逻辑通路。

A3.1.2 Reset

AXI协议使用低有效的复位信号,ARESETnARESETn可以异步复位,但是必须在ACLK的上升沿同步释放。

在复位期间:

  • master接口必须将ARVALIDAWVALIDWAVLID拉低

  • slave接口必须将RVALIDBVALID拉低

  • 其他信号可以为任意值

即,将所有的 VALID信号拉低

ARESETn释放后的下一个ACLK时钟上升沿,ARVALIDAWVALIDWAVLID就允许拉高

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-1 Exit from reset

A3.2 Basic read and write transactions

A3.2.1 Handshake process

5条通道都使用相同的VALID/READY握手机制,传递地址、数据或控制信息。这个握手机制意味着,master和slave都可以控制信息的移动速率。source在地址、数据或控制信息有效时拉高VALID,目的地在准备好接收信息时将READY拉高。transfer在VALIDREADY都拉高时发生

master和slave接口处,输入/输出信号间不能有组合逻辑通路。

图A3-2到图A3-4展示了握手过程的示例波形。

在图3-2,source在T1后将地址、数据或控制信息放在总线上,同时拉高VALID。目的地在T2后拉高READY。source必须在目的地拿到信息(T3)前保持信息的稳定(即信息和VALID要保持,直到READY拉高)。因为READY的反压,transfer花费2个时钟周期。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-2 VALID before READY handshake

source的VALID使能条件不能与READY有关(即不能将READY通过组合逻辑生成VALID),因为READY的使能可能与VALID有关(协议支持),若VALID又取决于READY,则会造成死锁

只要VALID拉高了,在握手之前都不能将VALID拉低,在时钟上升沿抓到握手后可以将VALID拉低。

在图A3-3,目的地在T1后将READY拉高,而source在T2后才将信息放到总线上,同时拉到VALID,在T3时寄存器抓到握手成功。这个例子中只用了1个时钟周期transfer就完成了(因为READY提前准备好,或者说READY没有反压上游)。

axi3协议,AXI,fpga开发,Powered by 金山文档

图A3-3 READY before VALID handshake

目的地允许将VALID作为READY拉高的条件(之一)。

如果READY拉高了,但是VALID尚未拉高,此时允许目的地将READY拉低。

在图A3-4,source和目的地同时在T1后将VALID/READY拉高,在T2时钟上升沿抓到握手成功,transfer完成。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-4 VALID with READY handshake

A3.2.2 Channel signaling requirements

Channel handshake signals

AXI有5条独立的通道,每条通道都有自己的VALID/READY握手信号。

Transaction

Handshake pair

写地址通道

AWVALID/AWREADY

写数据通道

WVALID/WREADY

写响应通道

BVALID/BREADY

读地址通道

ARVALID/ARREADY

读数据通道

RVALID/RREADY

Write address channel

只有当可以发送有效地址和控制信息时master将AWVALID拉高,并且直到AWREADY拉高的时钟上升沿后才能将AWVALID拉低。(废话,同A3.2.1)

AWREADY的默认值可以为0或1,Spec建议为1。只有slave可以接收有效地址时才可以将AWREADY拉高。

Spec不建议将 AWREADY的默认值设为0,因为这回导致transfer至少消耗2个时钟周期,一个用于拉高 AWVALID,另一个用于拉高 AWREADY
Write data channel

在一个写burst期间,只有当可以发送有效写数据时master将WAVLID拉高,并且直到WREADY拉高的时钟上升沿后才能将WVALID拉低。(废话,同A3.2.1)

WREADY的默认值可以为1,但是是在slave在一个周期内可以接收有效写数据的情况下。

在一个写burst的最后一个transfer,master必须将WLAST拉高。

在最后一个transfer时, WVALID拉高的同时拉高 WLAST,而不用等到 WREADY也拉高。
Write response channel

只有当可以发送有效的写响应时slave将BVALID拉高,并且直到BREADY拉高的时钟上升沿后才能将BVALID拉低。(废话,同A3.2.1)

BREADY的默认值可以为1,但是是在master在一个周期内可以接收写响应的情况下。

Read address channel

只有当可以发送有效地址和控制信息时master将ARVALID拉高,并且直到ARREADY拉高的时钟上升沿后才能将ARVALID拉低。(废话,同A3.2.1)

ARREADY的默认值可以为0或1,Spec建议为1。只有slave可以接收有效地址时才可以将ARREADY拉高。

Spec不建议将 ARREADY的默认值设为0,因为这回导致transfer至少消耗2个时钟周期,一个用于拉高 ARVALID,另一个用于拉高 ARREADY
Read data channel

只有当可以发送有效读数据时slave将RVALID拉高,并且直到RREADY拉高的时钟上升沿后才能将RVALID拉低。(废话,同A3.2.1)

master接口使用RREADY去表明可以接收读数据。RREADY的默认值可以为1,但只有master可以马上接收读数据时(每当其开始一个读transaction)。

在一个读burst的最后一个transfer,slave必须将RLAST拉高。

A3.3 Relationships between the channels

AXI协议要求保持以下关系:

  • 写响应必须在最后一次写transfer后,master收到写响应意味着这个transaction结束

  • 读数据必须在相应的读地址之后(否则不知道应该读哪里的数据)

  • 通道握手必须满足A3.3.1定义的依赖关系

除此以外,协议再无定义通道间的任何关系。

这意味着可能出现:在一个transaction中W握手出现在AW握手前(在AW通道比W通道打了更多拍的情况下出现)。同样的,W握手可以和AW握手同时发生

当需要interconnect来确认目的地的地址空间或者slave空间时,必须对齐写地址和写数据。这是为了确保写数据只对其想写入的slave的有效。

A3.3.1 Dependencies between channel handshake signals

为了避死锁,以下依赖关系必须遵从。

如A3.2.2所示,在任何transaction中:

  • VALID不能取决于READY

  • READY可以取决于VALID

READY可以等到 VALID拉高后再拉高,也可以在 VALID拉高前拉高。这将使得设计更为高效。

此外,不同通道间的握手信号也有依赖关系:

  • 读transaction依赖

  • 写transaction依赖

  • 写响应依赖(AXI4新增)

单头箭头:其指向的信号可以在箭头起始信号拉高前/后拉高,即无依赖关系;
双头箭头:其指向的信号必须在箭头起始信号拉高后再拉高,即指向信号依赖起始信号。
Read transaction dependencies

在读transaction中:

  • ARVALID不能依赖ARREADY(废话,同A3.2.1)

  • ARREADY可以在ARVALID拉高前/后拉高(可以无依赖关系)

  • RVALID必须等到ARVALIDARREADY握手后拉高

  • RVALID不能依赖RREADY(废话,同A3.2.1)

  • RREADY可以在RVALID拉高前/后拉高(可以无依赖关系)

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-5 Read transaction handshake dependencies

Write transaction dependencies

在写transaction中:

  • AWVALID/WVALID不能依赖AWREADY/WREADY(废话,同A3.2.1)

  • AWREADY可以在AWVALID/WVALID拉高前/后拉高(可以无依赖关系)

  • WREADY可以在AWVALID/WVALID拉高前/后拉高(可以无依赖关系)

  • BVALID必须等到最后一个transfer的WAVLIDWREADY握手后拉高(此时WLAST也拉高)

  • BVALID不能依赖BREADY(废话,同A3.2.1)

  • BREADY可以在BVALID拉高前/后拉高(可以无依赖关系)

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-6 Write transaction handshakedependencies

slave需要等到 WVALIDWREADY都拉高后才能拉高 BAVALID
slave需要等到 WLAST拉高后才能拉高 BVALID,因为写响应 BRESP必须在写transaction的最后一个transfer后发出;
依赖关系必须要满足,以防止死锁。比如: WVALID不能依赖 AWREADYAWREADY不能等 WVALID
AXI4 write response dependency

AXI4定义了新的依赖关系:AXI4 slave写响应依赖。

这个新加的依赖关系反应了 AXI3中预期的使用方式,因为在地址被接收之前,所有组件都不会接收所有的写数据并回写响应;
通过发出写响应,slave负责对所有后续写transaction进行危险检查。

图A3-7展示了AXI4所有需要的slave写响应握手依赖关系:

  • AWVALID/WVALID不能依赖AWREADY/WREADY(废话,同A3.2.1)

  • AWREADY可以在AWVALID/WVALID拉高前/后拉高(可以无依赖关系)

  • WREADY可以在AWVALID/WVALID拉高前/后拉高(可以无依赖关系)

  • BVALID必须等到最后一个transfer的AWAVLIDAWREADY握手,以及WAVLIDWREADY握手后拉高(此时WLAST也拉高)

  • BVALID不能依赖BREADY(废话,同A3.2.1)

  • BREADY可以在BVALID拉高前/后拉高(可以无依赖关系)

axi3协议,AXI,fpga开发,Powered by 金山文档

图3-7 Slave write response handshake dependencies

A3.3.2 Legacy considerations

A3.3.1定义的AXI4写响应依赖意味着,一个可以在接收写地址前接收所有写数据和回写响应的AXI3 slave,与AXI4协议并不兼容。

AXI3协议的slave转为AXI4时,需要一个额外的wrapper,以确保在slave接收相应的写地址前,不会返回写响应。

这个Spec强烈建议任何新的 AXI3 slave都添加这个新增的约束关系。

任何AXI3 master都符合AXI4写响应要求。

A3.4 Transaction structure

A3.4.1 Address structure

AXI协议是基于burst的。master发出控制信息以及首地址到slave,从而开启一个burst。在burst的过程中,slave需要计算后续transfer的地址。

burst的首地址即一个transaction中第1个byte的地址。

一个burst不能跨4KB地址边界

这是为了避免一个burst访问两个slave。它还限制了slave需要支持的地址递增的数量。
Burst length

burst长度由AxLEN确定,AxLEN代表ARLENAWLEN

ARLEN[7:0]

读transfer

AWLEN[7:0]

写transfer

AXI3 burst长度

AXI4 burst长度

burst类型

1~16

1~16

FIXED

1~16

1~256

INCR

1~16

1~16

WRAP

对于AXI3Burst_Length = AxLEN[3:0] + 1

对于AXI4Burst_Length = AxLEN[7:0] + 1(因为INCR时最大burst长度是256)

burst使用规则:

  • 对于WRAP,burst长度必须为2/4/8/16

  • 一个burst不能跨4KB地址边界

  • burst不能提前中止,即假如burst长度为4,必须发满4个transfer,burst才结束

没有组件可以提前将burst中止。但是,为了减少写burst中transfer的数量,master可以将不想要的写数据用WSTRB进行mask,但master仍然需要完成burst中剩余的transfer;在一个读burst中,master可以丢掉读数据,但是仍然需要完成burst中剩余的transfer。

并不是可以随意丢掉读数据,这可能导致数据丢失,比如在读取FIFO的数据的时候。当访问这样的设备的时候,master必须使用与所需transfer的数量完全一致的burst长度。
如,master需要读取5个transfer的数据,因此需要先发burst长度等于4的burst,再发一次burst长度等于1的burst,而不能发burst长度大于4的burst,再将大于4的transfer的数据丢掉。

AXI4中,INCR类型的burst,若burst长度大于16,可以被拆分成多个小的burst,即使transaction的属性是Non-modifiable的(见A4.3)。此时拆分后的burst需要保持与原始的burst相同的transaction特性,除了:

  • burst长度

  • 起始地址

将burst长度大于16的burst拆分成多个≤16的burst,是为了兼容AXI3,或者减少长burst对QoS guarantees的影响。
Burst size

burst size是burst中每个transfer中传输的最大字节数。AxSIZE代表ARSIZEAWSIZE

ARSIZE[2:0]

读transfer

AWSIZE[2:0]

写transfer

下表是AxSIZE的编码方式:

AxSIZE[2:0]

Bytes in transfer

0b000

1

0b001

2

0b010

4

0b011

8

0b100

16

0b101

32

0b110

64

0b111

128

一个transfer的数据位宽 = (2^AxSIZE) ×8

如果AXI总线比burst size宽,AXI接口必须根据transfer的地址确定每个transfer使用数据总线的哪个byte车道,见A3.4.3。

任何一个transfer的大小不能超过transaction中任何一个agent的数据总线宽度。

Burst type

AXI协议定义了3中burst类型:

  • FIXED

  • 一个burst内的每个transfer的地址相同。

  • 一个burst内所有beat的有效byte车道是个常量。然而,在这些byte车道中,WSTRB选通的实际byte可以因为burst中的每个beat而有所不同。

FIXED适合用于重复访问相同的位置,例如加载或清空FIFO时。

在AXI transaction中,数据是burst的,一次burst中包含1至多个transfer,每个transfer占1个周期,所以又称为beat。
  • INCR

递增(Incrementing)。在INCR burst中,每个transfer的地址是前一个transfer地址的递增。递增的值取决于transfer的大小。例如,size为4byte的burst中每个transfer的地址是前一个transfer的地址+4。

AXI协议中, 地址是byte对齐的

INCR适合访问常规的顺序存储器。

  • WRAP

WRAPINCR类似,只是如果达到了地址上限,则地址就会绕回到低地址。

WRAP burst的限制:

  • 起始地址必须与每个transfer的大小对齐

  • burst长度是2/4/8/16

WRAP的行为:

  • burst中最低地址与要传输数据的总大小对齐,即Transfer_Size × Burst_Length。这个最低地址被定义为绕回边界(wrap boundary)。

  • 最高地址 = wrap boundary + (Transfer_Size × Burst_Length),当前地址小于最高地址时,地址递增方式与INCR相同。当递增后的地址到达最高地址时,地址绕回到边界地址。

  • burst中的起始地址可以用高于绕回边界的地址。

WRAP用于cache line的访问:

  • 和cache line相关,在读一个cache line时,cache line的地址是0 4 8 c,可以用INCR4从0开始读,读到c,1个burst;也可以用single,读4下,4个burst;也可以用WRAP4从c开始读,回绕到0 4 8,1个burst。INCR和WRAP在AHB上效率一样,对于CPU而言,取指令,WRAP会把CPU急需的c地址数取回来,CPU就可以进行下一步操作了,0 4 8 补位就好;对INCR而言,要先取0 4 8,CPU就是在单纯的等待。因此WRAP这种方式为cache line操作提供了便利和效率。DDR也必须配合支持这种WRAP方式。

burst类型由AxBURST定义,AxBURST代表ARBURSTAWBURST

AxBURST[1:0]

Burst type

0b00

FIXED

0b01

INCR

0b10

WRAP

0b11

Reserved

Burst address

介绍如果确定burst中transfer的地址和byte车道的方法。方程式用到的变量的定义如下:

Start_Address

master发出的起始地址

Number_Bytes

每个transfer有多少个byte

Data_Bus_Bytes

数据总线有多少个byte

Aligned_Address

对齐后的起始地址

Burst_Length

一个burst内transfer的个数

Address_N

burst内第N个transfer的地址(N = 1, 2, 3...)

Wrap_Boundary

绕回burst的最低地址

Lower_Byte_Lane

一个transfer的最低寻址byte

Upper_Byte_Lane

一个transfer的最高寻址byte

INT(x)

x向下取整

确定一个burst内transfer的地址:

  • Start_Address = AxADDR

  • Number_Bytes = 2 ^ AxSIZE

  • Burst_Length = AxLEN + 1

  • Aligned_Address = ( INT(Start_Address / Number_Bytes) ) × Number_Bytes

确定一个burst的第1个transfer的地址:

  • Address_1 = Start_Address

对于INCR,或者WRAP还没绕回时,确定除了第1个transfer外其余transfer的地址:

  • Address_N = Aligned_Address + (N-1) × Number_Bytes(N>1)

对于WRAP,Wrap_Boundary确定绕回边界:

  • Wrap_Boundary = ( INT( Start_Address / (Number_Bytes × Burst_Length) ) ) × (Number_Bytes × Burst_Length)

对于WRAP,如果 Address_N = Wrap_Boundary + (Number_Bytes × Burst_Length),则

  • 当前transfer的地址:Address_N = Wrap_Boundary

  • 后续其余transfer的地址:Address_N = Start_Address + ((N-1) × Number_Bytes) - (Number_Bytes × Burst_Length)

确定burst的第1个transfer使用的byte车道:

  • 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

确定burst的第N个transfer使用的byte车道(N>1):

  • 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))

A3.4.2 Pseudocode description of the transfers

// 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 Data read and write structue

Write strobes

WSTRB[n:0]用于指示写数据总线哪些byte车道包含有效数据。写数据总线每8bit对应一个写选通信号,即WSTRB[n]对应 WDATA[(8n)+7 : (8n)]。

master必须保证只有该byte车道的数据是有效的时候,才可以拉高对应的WSTRB

WVALID拉低时,WSTRB可以为0或1,Spec建议将WSTRB拉低,或者保持之前的值。

Narrow transfers

当master发出一个数据位宽比数据总线窄的transfer时,地址和控制信息决定哪些byte车道会被transfer使用:

  • INCRWRAP时,burst内的每一beat使用不同的byte车道

  • FIXED时,每一beat使用相同的byte车道

图A3-8和图A3-9给出了使用两个byte车道的例子。阴影部分表示这个byte没有数据传输。

在图A3-8:

  • burst有5个transfer(即Burst_Length == 5)

  • 起始地址是0

  • 每个transfer是8bit

  • 数据总线位宽是32bit

  • burst类型是INCR

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-8 Narrow transfer example with 8-bit transfers

在图A3-9:

  • burst有3个transfer(即Burst_Length == 3)

  • 起始地址是4

  • 每个transfer是32bit

  • 数据总线位宽是64bit

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A3-9 Narrow transfer example with 32-bit transfers

Byte invariance

内存中的大小端模式

  • 大端:MSB应该存在低地址

  • 小端:LSB应该存在低地址

MSB:most significant byte;LSB:less significant byte

为了使大小端模式在memory中共存,AXI协议使用字节顺序恒定(byte-invariant endianness)的大小端传输方案。对于memory中包含多个字节的数据结构(单字节时自然不存在大小端问题):

  • 不管数据是大端还是小端存储的,每个数据结构存储空间的分配方式是相同的

  • 大小端的区别即:memory的第一个byte是元素的MSB还是LSB

  • 在传输过程不考虑大小端,按照byte原先的存储顺序,原样传输并存放到对端

该模式的意义在传输双方均不对数据结构的大小端进行解析转换,而严格按照字节的存储顺序进行传输并转存,防止大小端模式同时存在时导致数据被覆盖。

只有一个传输宽度的组件必须将其byte车道连接到数据总线合适的byte车道。支持多个传输宽度的组件可能需要一个更复杂的接口来转换一个不是byte-invariant的接口。

大多数小段组件可以直接连接到byte-invariant接口,只支持大端传输的组件需要一个转换函数实现byte-invariant。

AXI中的数据,是不区分大小端的,直接将memory中地位数据放在数据总线的低位。byte-invariant实际数据的大小端,需要slave自己调整。

图A3-10和图A3-11展示了一个32bit数据:0x0A0B0C0D,在寄存器和memory存储的例子。

图A3-10的数据结构是大端、byte-invariant的:

  • 数据的MSB(0x0A)存储在寄存器的MSB位置

  • 数据的LSB(0x0D)存储在寄存器的LSB位置

  • 数据的MSB(0x0A)存储在memory的最低地址

axi3协议,AXI,fpga开发,Powered by 金山文档

图A3-10 Example big-endian byte invariant data structure

图A3-11的数据结构是小端、byte-invariant的:

  • 数据的MSB(0x0A)存储在寄存器的MSB位置

  • 数据的LSB(0x0D)存储在寄存器的LSB位置

  • 数据的LSB(0x0D)存储在memory的最低地址

axi3协议,AXI,fpga开发,Powered by 金山文档

图A3-11 Example little-endian byte invariant data structure

图A3-12展示了一个需要byte-invariant访问的数据结构的例子。在这个例子中,Header使用小端排序,Payload使用大端排序。

axi3协议,AXI,fpga开发,Powered by 金山文档

图A3-12 Example mixed-endian data structure

在这个例子中,Data items是2个字节,小端排序的,即最低地址是LSB。使用byte invariance保证了对Payload的大端访问不会破坏小端排序的数据。

Unaligned transfers

AXI协议支持非对齐传输。对于任何由大于1个字节的transfer组成的burst,被访问的第一个字节可能与地址边界不对齐。例如,起始地址为0x1002的32bit数据包,与32bit地址边界不对齐。

  • 若总线位宽为32bit(4byte),与32bit总线对齐的地址需要能被4整除

  • AHB不支持非对齐传输。

对于非对齐传输,master会进行两项操作:

  • 即使起始地址不对齐,也保证所有的transfer都是对齐的

  • 在首个transfer前增加填充数据,将首个transfer填充至对齐,填充数据使用WSTRB信号标记为无效

slave不需要任何特殊操作。

图A3-13展示了在32bit总线上的一个对齐/非对齐32bit的transfer的INCR burst。图中每一行表示一个 transfer,阴影部分表示没有传输的字节。

axi3协议,AXI,fpga开发,Powered by 金山文档

图A3-13 Aligned and unaligned transfers on a 32-bit bus

图A3-14展示了在64bit总线上的一个对齐/非对齐32bit的transfer的INCR burst。图中每一行表示一个 transfer,阴影部分表示没有传输的字节。

axi3协议,AXI,fpga开发,Powered by 金山文档

图3-14 Aligned and unaligned transfers on a 64-bit bus

图A3-15展示了在64bit总线上的一个对齐/非对齐32bit的transfer的WRAP burst。图中每一行表示一个 transfer,阴影部分表示没有传输的字节。

axi3协议,AXI,fpga开发,Powered by 金山文档

图3-15 Aligned wrapping transfers on a 64-bit bus

A3.4.4 Read and write response structure

AXI协议为读/写transaction提供响应信号:

  • 对于读transaction,读响应信号RRESP[1:0]在读数据通道由slave发向master

  • 对于写transaction,写响应信号BRESP[1:0]在写响应通道由slave发向master

OKAY

常规访问成功,或者独占访问失败。

EXOKAY

独占访问(Exclusive access)完成,表明独占写或独占读访问成功。

SLVERR

Slave error。当访问已经成功到达slave,slave将错误条件返回给master。

DECERR

Decode error。通常由interconnect组件生成,表明AxADDR对应的地址上没有slave。

axi3协议,AXI,fpga开发,Powered by 金山文档

对于写transaction,slave在burst完成后发出单个写响应。

对于读burst,slave为burst的每个transfer发出不同的响应信号。例如,在16个读transfer的burst中,slave可能为15个transfer返回OKAY,为1个transfer返回SLVERR

协议规定了,即使报告了错误,仍然必须执行相应次数的transfer。例如,如果slave发出8个读transfer,但是slave有一个错误条件,这个slave必须执行8个transfer,每一个都有一个SLVERR。即使在burst过程中slave发出了SLVERR,burst也不会中止。

OKAY, normal access success

OKAY响应表明:

  • 常规访问成功

  • 独占访问失败

  • 对不支持独占访问的slave发起独占访问

OKAY是最常用的响应方式。

EXOKAY, exclusive access success

EXOKAY响应表明独占访问成功。

SLVERR, slave error

SLVERR表示transaction不成功。

为了简化系统监控和调试,此Spec建议错误相应只应用在错误条件,而不用于发送正常的、预期内的事件。slave错误条件举例:

  • FIFO或buffer上溢或下溢

  • 不支持的transfer大小

  • 尝试写只读的位置

  • slave超时

  • 试图访问禁用或断电的功能

DECERR, decode error

DECERR响应表明interconnect不能成功解码应该访问哪个slave。

如果interconnect无法成功解码应该访问哪个slave,则必须返回DECERR响应。此Spec建议interconnect将访问路由到DET(Defualt Error Target),并且DET返回DECERR响应。

AXI协议要求一个transaction的所有transfer都已完成,即使发生了错误条件。任何提供DECERR响应的组件都必须满足此要求。

A4: Transaction Attributes

A4.1 Transaction types and attributes

slave分为存储器slave和外设slave。

Memory Slave

存储器slave需要支持所有transaction类型。

Peripheral Slave

外设slave具有具体实现决定(IMPLEMENTATION DEFINED)的访问方法。这个通常在组件的data sheet中定义支持的transaction类型。

如果对外设slave发起了不属于IMPLEMENTATION DEFINED的访问(即外设不支持的访问),必须按照协议完成。但是,一旦进行了这样的访问,不要求外设slave继续正确操作,它只需要继续以符合协议的方式完成剩余的transaction。

为了防止系统死锁,必须按要求完成整个transaction(即使存在其不支持的transaction类型),但是并不要求外设slave继续正确操作。极端情况下,slave接收到一个不支持的访问方式,然后崩溃了,但是必须完成这次transaction再崩溃,以免整个系统死锁。
外设slave只需要支持自己的data sheet定义的访问方法,这样可以显著减少接口信号。

AXI协议定义了一组支持存储器slave和外设slave的transaction属性,用AxCACHE(即ARCACHEAWCACHE)控制:

  • 一个transaction如何在系统中运行

  • 任何一个系统级的cache如何处理transaction

注意,AXI cache的相关机制是针对处理器的系统级cache的一种实现。系统级cache区别于处理器内部的cache,系统级cache提高整个系统访问片外存储器的速度。当使用系统级cache连接处理器核和片外存储器时,可以被看成处理器核外部的L2缓存(或者说是last level cache)。
axi3协议,AXI,fpga开发,Powered by 金山文档
处理器核(Processor)、系统级cache(system-level cache)以及外部存储控制器(memory controller)通过AXI总线接口互连。L1 cache位于处理器核内部。当处理器访问外部存储中的数据,在L1 cache中miss时,向外部缓存发起transaction。transaction在通过系统级cache时,如果该transaction命中cache,即可直接得到结果,而无需访问外部存储。

A4.2 AXI3 memory attribute signaling

AXI3中,AxCACHE[3:0]指定了transaction是“Bufferable”、“Cacheable”还是“Allocate”。

axi3协议,AXI,fpga开发,Powered by 金山文档

AxCACHE[0], Bufferable (B) bit

AxCACHE[0]为1时,interconnect或任何组件,都可以将发往最终目的地的transaction延迟多个周期。

Bufferable属性一般应用于 transaction。
Cacheable的一定Bufferable

AxCACHE[1], Cacheable (C) bit

AxCACHE[1]为0时,将禁止对transaction的分配(allocation)。

AxCACHE[1]为1时:

  • 允许对transaction的分配。RAWA提供更多信息;

  • 在最终目的地的transaction的特性不需要与起点的transaction的特性匹配;

对于写操作,这意味着可以将许多不同的写操作合并在一起;

对于读操作,这意味着可以预期一个位置的内容,或者来自单个读的值可以用于多个读transaction。

AxCACHE[2], Read-allocate (RA) bit

AxCACHE[2]为1时,建议对transaction进行读分配,但是并不是强制性的。

C bit为0时,RA bit必须也为0。

AxCACHE[3], Write-allocate (WA) bit

AxCACHE[3]为1时,建议对transaction进行写分配,但是并不是强制性的。

C bit为0时,WA bit必须也为0。

A4.3 AXI4 changes to memory attribute signaling

AXI4AXI3的存储器属性进行了以下修改:

  • AxCACHE[1]重命名为Modifiable

  • Non-modifiable的transaction定义了顺序要求;

  • 更新了Read-allocateWrite-allocate的意义。

A4.3.1 AxCACHE[1], Modifiable

AXI4中,AxCACHE[1]表示是否Modifiable。当为1时,代表transaction的特性可以修改;当为0时,代表transaction的特性不可以修改。

AxCACHE[1]从 Cacheable重命名为 Modifiable,是为了更好描述相应功能,实际功能并没有改变。
Non-modifiable transaction

AxCACHE[1]为0时表示transaction是Non-modifiable的。这样的transaction是不能拆分成多个transaction,或者与其他transaction 合并在一起的。以下parameter不能够被更改:

Parameter

Signals

transfer的地址

AxADDR, AxREGION

burst大小

AxSIZE

burst长度

AxLEN

burst类型

AxBURST

锁类型

AxLOCK

保护类型

AxPROT

只能将AxCACHE的属性从Bufferable改成Non-bufferable,其他更改都是不允许的。

可以修改transaction的ID和QoS的取值。

一个burst长度大于16Non-modifiable的transaction可以拆分成多个transaction。每个拆分后的transaction必须与拆分前的transaction的属性保持一致,除了:

  • burst长度

  • 起始地址

AxBURSTINCR时, AXI4允许burst长度大于16,但是 AXI3最大burst长度就是16。为了兼容 AXI3 ,允许将burst长度大于16的transaction进行拆分。

一个Non-modifiable的transaction是独占访问(AxLOCK == 1),如果访问的字节总数保持不变,则允许修改AxSIZEAxLEN

在一些情况下,无法满足 Non-modifiable的要求。例如,当将总线位宽缩短到比 AxSIZE更窄时,必须修改transaction的属性。
执行这样操作的组件可以(非必须地)使用IMPLEMENTATION DEFIEND机制,表示进行了修改。这可以帮助软件进行调试。
Modifiable transactions

AxCACHE[1]为1时表示transaction是Modifiable的。Modifiable的transaction可以通过以下方式修改:

  • 一个transaction可以拆分成多个transaction

  • 多个transaction可以合并成一个transaction

  • 读transaction可以获得比所需更多的数据

  • 写transaction可以访问比所需更大的地址范围,使用WSTRB信号来确保多余的位置的数据不会被更新

  • 在每个拆分后的transaction,以下信号可以被修改:

  • transfer的地址,AxADDR

  • burst大小,AxSIZE

  • burst长度,AxLEN

  • burst类型,AxBURST

以下信号一定不能被修改:

  • 锁类型,AxLOCK

  • 保护类型,AxPROT

可以修改AxCACHE,但任何修改都要保证不会降低其他组件对transaction的可见性,可以通过阻止transaction传播到该点,或者不通过cache查找transaction。相同地址范围内的所有transaction的AxCACHE需要保持一致,即改了一个transaction,其他transaction也需要修改。

可以修改transaction的ID和QoS的取值。

以下情况不能修改transaction:

  • 导致与原始transaction访问不同的4KByte地址空间;

  • 导致对单次访问的单拷贝原子性大小区域(single-copy atomicity sized region)进行多次访问,见A7.1。

A4.3.2 Ordering requirements for Non-modifiable transactions

AXI4要求满足以下所有条件的transaction需要保序:

  • Non-modifiable的transaction

  • 使用相同AXI ID的transaction

  • 访问相同slave的transaction

如果多个transaction访问同一个slave,不管transaction的地址,必须保序。

只有之前的某个方向的transaction收到响应后才发出另一个方向的transaction,两个独立的读/写通道的transaction的顺序才能保证;如果在之前的某个方向的transaction收到响应前就发出另一个方向的transaction,则说明这两个transaction没有顺序要求。
同方向指写通道间,或读通道间。

对于访问不同slave的transaction并没有顺序要求。

因为不同物理设备(slave)间的地址映射边界是IMPLEMENTATION DEFINED的,如果slave之间的地址边界是不知道的,那么对于同一条路径的相同AXI ID的所有Non-modifiable的transaction都要保序。

这个保序要求是适用于所有Non-modifiable的transaction,不论是Non-bufferable还是Bufferable

当AXI路径上的中间组件发出transaction的响应时,该组件负责确保顺序正确。

更多关于ordering model的信息见A6。

A4.3.3 Updated meaning of Read-allocate and Write-allocate

AXI4中,更新了Read-allocateWrite-allocate的含义,其中1bit用来表示是否将transaction的数据存入cache,另1bit用来表示是否数据已经由另一个transaction存入cache。

对于读transaction,Write-allocate含义如下:

  • 由于写transaction,数据可能之前已经存入cache(同AXI3

  • 由于另一个master的操作,数据可能之前已经存入cache(AXI4新增)

对于写transaction,Read-allocate含义如下:

  • 由于读transaction,数据可能之前已经存入cache(同AXI3

  • 由于另一个master的操作,数据可能之前已经存入cache(AXI4新增)

这些改变意味着:

  • 如果AxCACHE[3:2]的值不是0b00,必须在cache中查找数据

  • 如果AxCACHE[3:2]的值是0b00,则不需要在cache中查找数据

AxCACHE定义的更改意味着相同位置的 ARCACHEAWCACHE可以不同。

Signal

AXI4 definition

Description

AWCACHE[3]

Allocate

AWCACHE[3]或AWCACHE[2]为1时,必须在cache中查找数据,因为可能已经将数据存在cache中;

AWCACHE[3]和AWCACHE[2]为0时,则不需要在cache中查找数据,并且transaction必须传播到目的地。

AWCACHE[3]为1,为了提高性能,建议将数据存入cache。

AWCACHE[2]

Other Allocate

AWCACHE[2]为1时,因为可能由于读transaction或者另一个master的transaction,数据已经存在cache中,必须在cache中查找数据;

AWCACHE[2]和AWCACHE[3]为0时,则不需要在cache中查找数据,并且transaction必须传播到目的地。

AWCACHE[1]

Modifiable

AWCACHE[1]为1时,可以修改transaction的特性,并且可以合并写transaction;

AWCACHE[1]为0时,不可以修改transaction的特性。

AWCACHE[0]

Bufferable

AWCACHE[0]为0时,如果AWCACHE[3:2]也为0,必须由最终目的地回写响应;

AWCACHE[0]为1时,如果AWCACHE[3:2]都为0,可以由中间节点的组件回写响应,但是写transaction需要及时传播到最终目的地;

AWCACHE[0]为0时,如果AWCACHE[3:2]不全为0,可以由中间节点的组件回写响应,但是写transaction需要及时传播到最终目的地;

AWCACHE[0]为1时,如果AWCACHE[3:2]都为1,可以由中间节点的组件回写响应,写transaction不需要最终目的地可见。

Signal

AXI4 definition

Description

ARCACHE[3]

Other Allocate

ARCACHE[3]为1时,因为可能由于写transaction或者另一个master的transaction,数据已经存在cache中,必须在cache中查找数据;

ARCACHE[3]和ARCACHE[2]为0时,则不需要在cache中查找数据。

ARCACHE[2]

Allocate

ARCACHE[2]或ARCACHE[3]为1时,必须在cache中查找数据,因为可能已经将数据存在cache中;

ARCACHE[2]和ARCACHE[3]为0时,则不需要在cache中查找数据。

ARCACHE[2]为1,为了提高性能,建议将数据存入cache。

ARCACHE[1]

Modifiable

ARCACHE[1]为1时,可以修改transaction的特性,并且可以读取比所需更多的读数据;

ARCACHE[1]为0时,不可以修改transaction的特性。

ARCACHE[0]

Bufferable

ARCACHE[3:1]全为0时,ARCACHE[0]没有作用;

ARCACHE[3:2]全为0,ARCACHE[1]为1时:

  • 如果ARCACHE[0]为0,必须从最终目的地读取数据;

  • 如果ARCACHE[0]为1,可以从最终目的地读取数据,或者读取正在传播到最终目的地的写数据。

ARCACHE[3]或ARCACHE[2]为1时,ARCACHE[0]可以用来区分Write-through类型还是Write-back类型。

A4.4 Memory types

AXI4AXI3AxCACHE编码见下表,其中括号内表示AXI3中不同的编码。

AxCACHE可以在读/写通道有不同的编码,因此 AXI3可以向后兼容 AXI4
AXI4中,对某个存储器类型使用多个 AxCACHE是合法的。
axi3协议,AXI,fpga开发,Powered by 金山文档

A4.4.1 Memory type requirements

本节描述每个存储器类型的行为。

Device Non-bufferable
  • 写响应必须由最终目的地发出

  • 读数据必须由最终目的地发出

  • transaction是Non-modifiable的,见A4.3.1 Non-modifiable transactions

  • 读不能预取,写不能被合并

  • 到同一个slave的同ID的所有Non-modifiable的读/写transaction(AxCACHE[1] = 0)必须保序

Device Bufferable
  • 写响应可以由中间节点的组件发出

  • 写transaction需要及时传播到最终目的地,见A4.6

  • 读数据必须由最终目的地发出

  • transaction是Non-modifiable的,见A4.3.1 Non-modifiable transactions

  • 读不能预取,写不能被合并

  • 到同一个slave的同ID的所有Non-modifiable的读/写transaction(AxCACHE[1] = 0)必须保序

上面这两种存储器类型都是 Non-modifiable的。在本Spec中,术语Device momory和Non-modifiable memory是等价的。
读不能预取,写不能合并:在访问非存储外设时,读写的是寄存器值,预取数据是没有必要的。而将不同的写transaction合并则容易出现预期之外的问题,比如导致相邻寄存器操作的先后顺序无法满足。

对于读transaction,Device Non-bufferableDevice Bufferable的行为是一致的。

Normal Non-cacheable Non-bufferable
  • 写响应必须由最终目的地发出

  • 读数据必须由最终目的地发出

  • transaction是Modifiable的,见A4.3.1 Modifiable transactions

  • 写可以被合并

  • 到有重叠的地址的同ID的读/写transaction必须保序

Normal Non-cacheable Bufferable
  • 写响应可以由中间节点的组件发出

  • 写transaction需要及时传播到最终目的地,见A4.6。但是具体什么时候传播到最终目的地并没有定义

  • 读数据必须来自

  • 最终目的地

  • 或者正在传播到最终目的地的写transaction

如果读数据来自写transaction:

  • 必须从最新的写transaction获取

  • 不能将数据存入cache以用于后续的读

  • transaction是Modifiable的,见A4.3.1 Modifiable transactions

  • 写可以被合并

  • 到有重叠的地址的同ID的读/写transaction必须保序

对于一个 Normal Non-cacheable Bufferable的读,可以从正在传播到最终目的地的写transaction获取数据。这与同时到达最终目的地的读/写transaction没有区别。以这种方式获取读数据时,并不表示写transaction需要在最终目的地可见。
Normal Non-cacheable指正常访问存储介质,而不会查找cache
Write-through No-allocate
  • 写响应可以由中间节点的组件发出

  • 写transaction需要及时传播到最终目的地,见A4.6。但是具体什么时候传播到最终目的地并没有定义

  • 可以从中间节点的cache中获取读数据

  • transaction是Modifiable的,见A4.3.1 Modifiable transactions

  • 读可以预取

  • 写可以合并

  • 读/写transaction需要从cache中查找数据

  • 到有重叠的地址的同ID的读/写transaction必须保序

  • No-allocate只是建议存储器系统为了提高性能不建议分配这些transaction,但是非要分配也可以

Write-through Read-allocate

除了以下两点(为了提高性能),Write-through Read-allocateWrite-through No-allocate的行为相同:

  • 建议将读transaction的数据存入cache

  • 不建议将写transaction的数据存入cache

Write-through Write-allocate

除了以下两点(为了提高性能),Write-through Write-allocateWrite-through No-allocate的行为相同:

  • 不建议将读transaction的数据存入cache

  • 建议将写transaction的数据存入cache

Write-through Read and Write-allocate

除了以下两点(为了提高性能),Write-through Read and Write-allocateWrite-through No-allocate的行为相同:

  • 建议将读transaction的数据存入cache

  • 建议将写transaction的数据存入cache

Write-through指数据写入cache的同时,也写入主存
Write-back No-allocate
  • 写响应可以由中间节点的组件发出

  • 不要求写transaction在最终目的地可见

  • 可以从中间节点的cache中获取读数据

  • transaction是Modifiable的,见A4.3.1 Modifiable transactions

  • 读可以预取

  • 写可以合并

  • 读/写transaction需要从cache中查找数据

  • 到有重叠的地址的同ID的读/写transaction必须保序

  • No-allocate只是建议存储器系统为了提高性能不建议分配这些transaction,但是非要分配也可以

Write-back Read-allocate

除了以下两点(为了提高性能),Write-back Read-allocateWrite-back No-allocate的行为相同:

  • 建议将读transaction的数据存入cache

  • 不建议将写transaction的数据存入cache

Write-back Write-allocate

除了以下两点(为了提高性能),Write-back Write-allocateWrite-back No-allocate的行为相同:

  • 不建议将读transaction的数据存入cache

  • 建议将写transaction的数据存入cache

Write-back Read and Write-allocate

除了以下两点(为了提高性能),Write-back Read and Write-allocateWrite-back No-allocate的行为相同:

  • 建议将读transaction的数据存入cache

  • 建议将写transaction的数据存入cache

Write-back指数据仅写入cache,cache中修改的数据只在被替换时写入主存

A4.5 Mismatched memory attributes

正在访问同一存储器区域的多个agent可以使用不匹配存储器属性。但是为了保证功能正确性,,必须遵守以下规则:

  • 所有访问同一存储器区域的master必须在任何层次结构级上对该存储器区域有相同的视图。即:

  • 地址区域不能Cacheable

所有的master的AxCACHE[3:2]为0

  • 地址区域Cacheable

所有的master的AxCACHE[3]或[2]为1

  • 不同的master的 AxCACHE[3:2]可以不同

  • 如果一个地址区域是Normal Non-cacheable的,任何master可以用一个Device memory的transaction访问它

  • 如果一个地址区域是Bufferable的,任何master可以用Non-bufferable的transaction访问它

例如,需要最终目的地回响应的transaction不允许 Bufferable

A4.5.1 Changing memory attributes

可以将某个存储器区域的属性改为不兼容的类型。例如,可以将属性从Write-through Cacheable改为Normal Non-cacheable。这需要一适当的操作流程进行更改。典型的操作流程如下:

  • 所有master停止访问该区域

  • 某个master执行任何需要的cache保持(cache maintenance)操作

  • 所有master使用新属性重新开始访问该存储器区域

A4.6 Transaction buffering

对于以下存储器类型不需要最终目的地回写响应,但是需要写transaction及时在最终目的地可见:

  • Device Bufferable

  • Normal Non-cacheable Bufferable

  • Write-through

对于写transaction,以下三种存储器类型需要相同的行为。对于读transaction,需要的行为如下:

  • 对于Device Bufferable,读数据必须来自最终目的地

  • 对于Normal Non-cacheable Bufferable,读数据要么来自最终目的地,要来自正在传播到最终目的地的写transaction

  • 对于Write-through,读数据可以来自中间节点的cache

中间节点的buffer除了确保写transaction及时到达最终目的地外,还必须:

  • 一个可以回写响应的中间buffer必须确保,随着时间的推移,所有Normal Non-cacheable Bufferable的读transaction都会到达它的目的地。这意味着,在转发读transaction时,不能无限期继续下一个转发,用于转发的数据也不能无限期存在。该协议没有定义任何用于确定用于转发读transaction的数据可以存在多久的机制。但是在这种机制中,读取数据时不能将数据超时周期(data timeout period)复位。

如果没有这个要求,对相同位置的持续读取可以防止buffer中保存的读数据超时,从而读transaction不能向目的地前进。

一个可以保存和合并写transaction的中间buffer必须确保transaction不会无限期保留在buffer中。例如,合并的写transaction不能将确定写何时流向最终目的地的机制进行复位。

如果没有这个要求,对相同位置的持续写入可以防止buffer中保存的写数据超时,从而写transaction不能向目的地前进。

A4.7 Access permissions

AXI提供了访问权限信号AxPROT[2:0],用于防止非法transaction,AxPROT代表ARPROTAWPROT

axi3协议,AXI,fpga开发,Powered by 金山文档

Unprivileged or privileged

AXI master可能支持多个级别的操作权限,并将此权限拓展到存储器访问。AxPROT[0]表示该访问是非特权访问还是特权访问。

有些处理器支持多个特权级别,请参阅处理器的相关文档,以确定到AXI特权级别的映射。AXI只能区别特权访问和非特权访问。

Secure or Non-secure

AXI master可能支持安全或非安全,并将此权限拓展到存储器访问。AxPROT[1]表示该访问是安全访问还是非安全访问。

AxPROT[1]为1时表示非安全,这与ARM安全扩展(ARM Security Extensions)中实现的其他信号一致。

Instruction or data

AxPROT[2]表示该访问是指令访问还是数据访问。

AxPROT[2]并不保证准确性,仅是一种提示。例如,一个transaction包含指令和数据的混合。本Spec建议master将AxPROT[2]拉低,指示是数据访问,除非明确知道是指令访问。

A4.8 Legacy considerations

AXI4引入了处理一些AxCACHE存储器属性的额外需求。在AXI4中,所有访问同一个slave的使用相同ID的Device transaction必须保序。

这并非 AXI3的明确要求。任何依赖此行为的 AXI4组件不能连接到不支持该行为的AXI3 interconnect。
ARM认为,大多数 AXI3 interconnect都支持该行为。

该Spec强烈建议任何新的AXI3设计都能实现该需求。

AXI4AxCACHE的bit名和存储器类型名称都使用了新的术语。AXI3组件可以使用AXI3AXI4的名称。

A4.9 Usage examples

A4.9.1 Use of Device memory types

该Spec支持联合使用Device Non-bufferableDevice Bufferable的存储器类型,强制写transaction到达最终目的地,并确保发出transaction的master知道transaction何时对于所有其他master可见。

Device Non-bufferable的写transaction需要及时到达最终目的地。但是可以有中间buffer回写响应。因此,发出transaction的mater不知道写transaction何时对于所有其他master可见。

如果一个master发出了1到多个Device Bufferable的写transaction,最后面跟着Device Non-bufferable的写transaction,所有的transaction使用相同的AXI ID,需要确保所有Device Bufferable的写transaction在Device Non-bufferable的写transaction收到写响应前就已经到达目的地(AXI保序要求)。因此,当收到Device Non-bufferable的写响应,意味着所有的transaction对所有的master可见。

一个 Device Non-bufferable的transaction只能保证访问相同slave的同ID的 Device Bufferable的transaction的完成。

A5: Multiple Transactions

A5.1 AXI transaction identifiers

AXI协议支持为每个transaction分配一个AXI ID(不同transaction的ID可以相同)。

所有同ID的transaction都必须保序,但是不同ID的transaction之间不需要保序。这意味一个物理接口可以映射为多个逻辑接口,从而支持out-of-order的transaction,每个逻辑接口都按顺序处理它的transaction。

通过使用AXI ID,master可以不等上一个transaction完成(回RESP)就发送下一个transaction。这将提高系统的性能,因为可以将多个transaction并行处理。

并没有要求master和slave一定要使用AXI ID。master和slave可以 一次只处理一个transaction(outstanding == 1,见下文),这意味着transaction是按照他们发布的顺序进行处理的。
slave需要根据master发的AXI ID,回相应的 BIDRID给master。

A5.2 Transaction ID

每个通道都有自己的ID。

axi3协议,AXI,fpga开发,Powered by 金山文档

WIDAXI4中删除了,见A5.4。

AXI4通过使用AXI ID来支持ordering model。见A6。

A5.3 Transaction ordering

master可以使用AWIDARID来标识顺序要求。规则如下:

  • 来自不同master的transaction间没有顺序要求;

  • 来自相同master,但是ID不同的transaction没有顺序要求;

  • 来自相同master,相同AWID/ARID的transaction,slave需要按照master发送地址的顺序回BRESP/RRESP

  • AWIDARID相同的读/写transaction没有顺序要求;

  • 可以扩展master和slave发出的ID,从而转为unique ID。

本质原因就是对于同master和同ID的transaction,如果slave回RESP时是out-of-order的,无法通过master或者AXI ID去匹配AW/AR的transaction和B/R的transaction。

A5.3.1 Read ordering

在一个master接口,相同ARID的transaction回读数据时需要保序。不同ARID的transaction回读数据时可以out-of-order和interleaving。

对于相同ARID的transaction,slave必须按master发送地址的顺序回读数据。对于不同ARID的transaction,slave可以乱序回读数据,而不用管transaction到达master的顺序。

slave必须确保返回读数据的RID与它所响应的ARID相匹配。

interconnect必须确保master按照发送地址的顺序接收同ARID的transaction的读数据。

读数据重排序深度(read data reordering depth)是slave中可以重排序的地址数。按顺序处理transaction的slave的读数据重排序深度是1。读数据重排序深度是一个静态值,必须由slave的designer制定。

没有一种机制可以让master确定slave的读数据重排序深度。

A5.3.2 Normal write ordering

AXI3中,除非master知道slave支持写数据交织,否则必须按照发送地址的顺序发出写数据。

没有一种机制让master确定slave是否支持写数据交织。 AXI4 中,不支持写数据交织。
大多数slave不支持写数据交织,因此必须按照它们接收地址的顺序接收写数据。

如果interconnect将多个master的写transaction转发给slave,必须确保按照地址顺序转发写数据。

即使写transaction有不同的AWID,即使来自不同的master,这些限制也适用。

A5.3.3 AXI3 write data interleaving

AXI4中删除了对写数据交织的支持。在 AXI4中,一个transaction的所有写数据必须连续传输(即 写不支持outstanding)。

通过写数据交织,slave的接口可以接收具有不同AWID的交织的写数据。写数据交织深度(write data interleaving depth)是slave可以接收交织数据的地址数。

当访问支持写数据交织的slave时,不能对同AWID的不同transaction的写数据进行交织。

master或者任何其他AXI组件无法确定slave是否支持写数据交织。同样地,也没有一种机制来确定slave的写交织深度。

对于支持写数据交织的slave,它接收每个transaction的第一个写数据的顺序必须与接收transaction的地址的顺序相同。

如果两个具有不同 AWID的写transaction访问相同或者有重叠的地址,那么 AXI3并没有定义这些访问的处理顺序。一个更高级别的协议必须确保transaction的处理顺序正确。
使用同 AWID生成写数据的master接口按照发送地址的顺序发出写数据。但是,如果slave的写数据交织深度大于1,则master接口可以使用不同 WID交织写数据。

为了避免死锁,支持写数据交织的slave接口必须连续接收交织写数据。在试图更改写数据的顺序时,绝不能停止接收写数据。

Usage models for write data interleaving

当interconnect转发多个master的写数据流给slave时,写数据交织可以防止流的停止。例如,interconnect可以将来自slow source的写数据流与来自fast source的另一个写数据流交织起来。通过交织使用这两个写数据流,interconnect可以提高系统性能。

对于大多数可以控制写数据的发送的master来说,不需要写数据交织。这样的master可以按照其发送地址的顺序来发送写数据。但是,从具有不同速度的不同source传输写数据的master接口可能会交织这些source,以最大限度地利用interconnect。

A5.3.4 Read and write interaction

AXI在读transaction和写transaction之间没有顺序要求。

如果master需要读transaction和写transaction给定关系,那么他必须在发出后续transaction前确保之前的transaction已经完成。master通过以下两种情况判断transaction是否完成:

  • 对于读transaction,收到最后一笔读数据

  • 对于写transaction,收到写响应

发送写transaction的所有的写数据不能指示transaction的完成。

通常,当写入外设时,master必须等待之前的transaction已完成,然后切换保序的读transaction和写transaction。

对于memory的读/写,master可以对完成的transaction进行地址检查,以确定新transaction是不是与之前的transaction地址相同或者有重叠。如果读/写transaction的地址不重叠,则mater可以发出新的transaction,而不用等待之前的transaction的完成。

A5.3.5 Interconnect use of transaction identifiers

当master连接到interconnect时,interconnect会将ARIDAWIDWID的高位前添加1至多个bit(master ID),从而不同master间ID不同。这有两个影响:

  • master不需要知道其他master使用什么ID,因为interconnect将master ID添加到ARIDAWIDWID的最高位前,从而不同master间ID不同;

  • slave接口的ID位宽大于master接口ID位宽

对于读数据,interconnect使用master ID标识读数据指向哪个master端口。在interconnect将RID送给相应的master前会把master_id删掉。

对于写响应,interconnect使用master ID标识写响应指向哪个master端口。在interconnect将BID送给相应的master前会把master_id删掉。

即master:raw_ar/aw/wid --interconnect--> slave:{master_id, raw_ar/aw/wid}
slave:{master_id, raw_r/bid} --interconnect--> master:raw_r/bid

A5.3.6 Width of transaction ID fields

ID的位宽由IMPLEMENTATION DEFINED。但是Spec建议使用以下ID位宽:

  • 对于master,ID位宽不大于4

  • 对于interconnect中有多个master时,master ID位宽不大于4

  • 对于slave,ID位宽不大于8

对于只支持一个保序接口的master(outstanding == 1),可以将ID设为常数,如0。

对于不使用排序信息,且按照顺序处理所有transaction的slave,可以添加ID功能,而不改变slave的基本功能。

A5.4 Removal of write interleaving support

AXI4删除了对写数据交织的支持。在AXI4中,一个transaction的所有写数据必须在写数据通道上连续传输。

这意味着AXI4中不支持WID

A5.4.1 Removal of WID

因为不再支持写数据交织,每个写数据都与AWID相对应,WID没有用处,成为了冗余信号。

AXI4删除了WID信号,从而减少接口数量。

A5.4.2 Legacy considerations

大多数AXI3 master不支持写数据交织,因此天然满足AXI4对写数据不交织的要求。

任何支持写数据交织的AXI3 master,必须已经支持将写数据交织深度设置为1,以适配不支持写数据交织的slave。任何这样的AXI3 master必须将写数据交织深度设置为1,才能与AXI4兼容。

任何AXI3 slave都可以接收不交织的写数据,因此AXI3 slave没有遗留问题。

任何需要 WIDAXI3组件都可以根据 AWID生成 WID

A6: AXI4 Ordering Model

A6.1 Definition of the ordering model

AXI4协议使用基于AXI ID的排序模型(ordering model)。

对于同ID的transaction间:

  • 发送到任何一个外设的transaction,不管transaction地址如何,必须按照他们发送时的顺序到达外设;

  • 使用相同或者有重叠地址的memory transaction,必须按照他们发送时的顺序到达;

在一个有多个master的AXI系统中,用于排序模型的AXI IDs包含了用于标识每个master的infrastructure IDs(或者称为master ID)。这意味着排序模型将独立地应用于系统的每个master间(因为不同ID间不需要保序)。

AXI排序模型还要求所有同ID的同方向的transaction必须按照其发送地址的顺序收到响应。

同方向指写通道间,或者读通道间。

因为读/写地址通道独立,如果不同方向的同ID的两个transaction间需要排序,则master必须等待在发出第1个transaction之前接收第1个transaction的响应。

如果master在收到之前某个方向transaction的响应前,就发出了另一个方向的transaction,则说明这两个transaction没有保证顺序的正确性。

如果需要之前的transaction回响应以确保顺序的正确性,则master必须确保响应是来自系统中最终目的地。因为来自中间AXI组件的响应不能保证在之后的组件的排序。见A4.9.1。

A6.2 Master ordering

同ID的同方向的transaction,需要这些transaction有以下的顺序保证:

  • master收到响应的顺序必须与发送地址时的顺序相同;

  • 访问Device memory的transaction,到达的顺序必须与master发送时的顺序相同;

  • 访问相同或者有重叠地址的Normal memory的transaction,必须与master发送时的顺序相同。这也适用于Cacheable memory。也就是说,它适用于所有AxCACHE[3:1]不是0b000的有效transaction

同方向指写通道间,或者读通道间。

访问相同或者重叠地址的两个transaction的定义是,这两个transaction都可以访问同一个单拷贝原子地址范围(single-copy atomic address range)至少一个字节的数据。见A7.1。至少一个字节的原因是AXI协议中地址以字节对齐。

A6.3 Interconnect ordering

为了满足排序模型的要求,interconnect必须确保:

  • 保存访问Device memory的同ID、同方向的transaction间的顺序;

  • 保存访问相同或重叠地址的同ID、同方向的transaction间的顺序;

  • 保留同ID的写响应的顺序;

  • 保留同ID的读响应的顺序;

  • 对于transaction的AXI ID的任何操作,都必须确保保持原始ID的排序要求;

  • 对于在transaction到达最终目的地前就给出响应的中间组件,必须确保保持排序要求,直到transaction到达最终目的地,见A6.5;

同方向指写通道间,或者读通道间。

A6.4 Slave ordering

为了满足排序模型的要求,slave必须确保:

  • 不论ID,任何后续的写/读transaction都必须遵守slave已回响应的写transaction;

  • 访问Device memory的同ID的写transaction中,后续的transaction必须观测之前的transaction,即使之前的transaction还未回响应;

  • 访问Normal memory的同ID的写transaction中,如果访问的地址是相同的或者有重叠的,后续的transaction必须观测之前的transaction,即使之前的transaction还未回响应。这也适用于Cacheable memory。也就是说,它适用于所有AxCACHE[3:1]不是0b000的有效写transaction

  • 同ID的多个写transaction的响应必须按照transaction到达slave的顺序发出;

  • 不同ID的多个写transaction的响应可以按任何顺序发出;

  • 不论ID,任何后续的写/读transaction都必须遵守slave已回响应的读transaction;

  • 访问Device memory的同ID的读transaction中,后续的transaction必须观测之前的transaction,即使之前的transaction还未回响应;

  • 同ID的多个读transaction的响应必须按照transaction到达slave的顺序发出;

  • 不同ID的多个读transaction的响应可以按任何顺序发出;

A6.5 Response before final destination

在transaction到达最终目的地前,回响应给master的任何中间组件,都必须确保transaction对来自任何上游master的可见性:

  • 不论访问什么存储器类型,访问相同或者有重叠地址transaction中,如果之前的transaction是由中间组件回响应,则后续的transaction必须观测;

  • 访问Device memory时,对于访问同slave的同ID的transaction,中间组件必须维护由它回响应的transaction和后续transaction的顺序关系;

上游master(upstream master)是指通过该组件上的slave侧接口访问中间组件的任何设备。

只有当AxCACHE表明允许这样做时,才能从中间节点回transaction的响应。

AXI协议要求访问Device memory时的排序保证是访问Normal memory时的超集。这确保了任何标记为“Normal“的transaction,都可以在不删除任何原始排序保证的前提下转换为“Device”。为了满足此要求,访问相同或者有重叠的地址时,不管ID是否相同,访问Device memory的行为要与访问Normal memory的行为一致。

下表展示了存储器类型、transaction IDs和是否访问相同或有重叠的地址时,是否有排序要求。

axi3协议,AXI,fpga开发,Powered by 金山文档

上表中,适用于Normal memory的同样适用于Cacheable memory。也就说,它们适用于所有AxCACHE[3:1]不是0b000的有效transaction

A6.6 Ordered write observation

为了提高与支持不同排序模型的接口协议的兼容性,定义了Ordered_Write_Observation属性,每个接口的Ordered_Write_Observation可以定义为True或False。

如果Ordered_Write_Observation被设为True,则接口被定义为具有此属性。

不支持Ordered_Write_Observation属性的接口默认将Ordered_Write_Observation设为False。

支持Ordered_Write_Observation属性的接口可以支持具有更好性能的生产/消费者排序模型(Producer/Consumer ordering model)。

如果系统中的所有其他agent按照发出transaction的相同顺序观测到两个同ID的写他那从,则可以将接口声明为提供Ordered_Write_Observation属性。

如果一个接口没有Ordered_Write_Observation属性,那么只保证访问同一个外设的同ID的一系列写transaction的观测顺序。要支持没有Ordered_Write_Observation的生产/消费者排序模型,在向另一个外设发出后续transaction前,之前的写transaction必须写入外设,并回BRESP

A7: Atomic Accesses

A7.1 Single-copy atomicity size

AXI4协定义了单拷贝原子性大小(single-copy atomicity size)的概念,它定义了一个transaction原子更新的最小字节数。因为块的大小最小为单拷贝原子性大小,AXI4协议需要一个大于单拷贝原子性大小的transaction更新块中的内存。

原子性并不能定义数据更新时的确切时间。必须确保的是,没有一个master能够观测到原子数据的部分更新形式。例如,在许多系统中,诸如链表等数据结构是由32bit原子元素组成的。针对这些元素的原子更新操作必须同时更新整个32bit的值。没有master可以接收一次只观测16bit的更新,然后在以后再观测其他16bit的更新。
即:以32bit为最小粒度,假如想更新8bit的数据,也必须读出完整的32bit,更新8bit数据,再将32bit数据存回内存,这就是“ 读 --> 改 --> 写”的过程。需要保证“读改写“为同一个master操作,即后面提到的独占访问或锁访问。

更复杂的系统需要支持更大的原子元素,特别是64bit的原子元素,因此master可以使用基于这些较大的原子元素的数据结构进行通信。

系统中支持的单拷贝原子性大小很重要,因为给定通信中涉及的所有组件都必须支持所需原子元素大小。如果两个master通过一个interconnect和一个slave进行通信,那么所涉及的所有组件都必须确保所需大小的访问被原子处理。

AXI4协议不需要特定的单拷贝原子性大小,系统可以被设计为支持不同的单拷贝原子性大小。

不同的组件组(components groups)可以有不同的单拷贝原子性大小,用于组内的通信。在AXI4中,单拷贝原子组(single-copy atomic group)描述了一组可以在特定原子性下进行通信的组件。例如,图A7-1展示了一个系统,其中:

  • 处理器、数字信号处理器(DSP)、DRAM控制器、DMA控制器、外设、SRAM和相关的interconnect,都在一个32bit的单拷贝原子组中

  • 处理器、DSP、DRAM控制器和相关的interconnect也都在一个64bit的单拷贝原子组中

axi3协议,AXI,fpga开发,Powered by 金山文档

图A7-1 Example system with different single-copy atomic groups

transaction的原子性只有在它的起始地址正确对齐时才能得到保证。例如,64bit单拷贝原子组中,如果一个burst没有对齐到8byte边界,那么该transaction没有任何64bit单拷贝原子保证。

字节选通信号不会影响单拷贝原子性大小。

A7.1.1 Multi-copy write atomicity

要指定一个系统提供多拷贝原子性(multi-copy atomicity),必须定义Multi_Copy_Atomicity属性。

如果Multi_Copy_Atomicity属性被设置为True,则该系统拥有这个能力,否则该系统不拥有这个能力。

如果以下条件满足,则可以说明一个系统具有多拷贝原子性:

  • 针对同一个位置的写操作可以被所有的agent以相同的顺序观测到;

  • 其它agent可以观测到某个agent发出的写操作;

多拷贝原子性可以通过如下手段来保证:

  • 对于一个给定的地址使用单点序列化(Point of Serialization,POS),这样针对相同位置的全部访问都可以顺序处理,必须确保在该位置的新值对任何agent都可见之前,一个位置的一致性cache拷贝都已无效;

  • 避免在agent的上游使用向前buffer,这可以避免一个buffer写操作在对全部agent可见前就对某些agent可见;

注意:如果一个系统使用了ARM v8架构处理器,则该系统必须拥有Multi_Copy_Atomicity属性。该属性用来支持“加载与获取”和“存储与释放”指令,“存储与释放”指令要求存储操作是多拷贝原子性的。

A7.2 Exclusive accesses

独占访问机制可以提供信号量类型(semaphore-type)的操作,不需要在整个访问周期内让总线被一个master所独占。这意味着信号量类型的操作不会影响总线访问延迟或最大可实现的带宽。

AxLOCK信号选择独占访问,RRESPBRESP信号分别表示独占读访问和独占写访问是否成功。

slave需要额外的逻辑来支持独占访问。当master访问一个不支持独占访问的slave时,AXI协议提供了种机制来通知该master其访问的slave不支持独占访问操作。

A7.2.1 Exclusive access process

独占访问的基本机制是:

  1. master在给定地址上执行独占读访问;

  1. 过一段时间后,master尝试在相同的地址上执行独占写访问,从而完成独占访问。访问相同地址的独占写访问的AWID与独占读访问的ARID必须相同。

  1. 此独占写访问表示为:

  • 如果从执行独占读访问开始没有其它master写相同的位置,表明独占访问成功,独占写访问将会更新存储器,并返回成功信号(EXOKAY);

  • 如果从执行独占读访问开始有其它master写相同的位置,表明独占访问失败,不会更新存储器,返回失败信号(OKAY);

master或许不会完成独占写访问,独占访问的监视硬件(monitor hardware)对于每一个ID只会监视一个地址。如果一个master没有完成独占写访问,接下来这个master又以相同的ID对另一个地址发起了独占读访问,则独占访问监视的地址就会被改变。

A7.2.2 Exclusive access from the perSpective of the master

一个master通过执行一个独占读访问的方式开始一个独占操作,如果访问成功,slave就会返回EXOKAY响应,表示slave已经记录了要监视的地址。

如果master尝试向不支持独占访问的slave发出独占读访问请求,slave会返回OKAY响应而不是EXOKAY响应。

master可以将 OKAY响应作为独占访问不支持的错误响应看待,Spec推荐master接下来不要执行独占写访问。

在独占读访问之后的一段时间后,master尝试对相同位置发起独占写访问,如果从独占读访问开始时到现在对应地址的内容始终没有发生改变,独占写访问就会成功,slave返回EXOKAY响应,并更新对应的存储器位置,否则,独占写访问就会失败,slave返回OKAY响应而不是EXOKAY响应,独占写访问不会更新对应的存储器位置。

master或许不会完成独占写访问,如果发生了这种情况,slave将会继续监视独占访问的地址,直到另一个独占读访问启动一个新的独占访问序列。

master在独占读访问完成后才会开始独占写访问。

A7.2.3 Exclusive access from the perSpective of the slave

不支持独占访问的slave可以忽略AxLOCK信号,这样的slave对于常规访问和独占访问都必须提供OKAY响应信号。

支持独占访问的slave必须拥有监视硬件(monitor hardware),Spec推荐对于每一个支持独占的ID都准备一个监视单元。ARM架构参考手册,ARMv7-A和ARMv7-R版本定义了一种独占访问监视器,一个单端口的slave可以使用一个外接的独占访问监视器,而一个多端口的slave则或许需要实现内部监视器。

独占访问监视器需要记录任何独占读访问的地址和ARID,然后需要监视该地址,直到该地址的独占写访问发生,或者使用相同ARID的另一个独占读访问更新需监视的地址。

当slave接收到一个独占写访问时,监视器就会根据给定的AWID检查指定的地址是否被监视,如果是,这表示从独占读访问访问开始以来没有发生写操作,然后就会处理写操作并完成整个独占访问过程,返回EXOKAY响应,并更新存储器。

如果在进行独占写访问时,AWID所对应的地址不是监视的地址,则表明发生了下列情况之一:

  • 在独占读访问transaction发起之后,该地址对应的数据被其他master写过;

  • 监视器的地址被另一个独占读访问修改;

在以上两种情况中,独占写访问都不会更新存储器对应地址的数据,slave必须返回OKAY而不是EXOKAY响应。

A7.2.4 Exclusive access restrictions

独占访问存在以下限制:

  • 独占写访问的burst_size和burst_length必须与其对应的独占读访问一致;

  • 独占访问的地址必须对齐到transaction的总字节数,也就是burst_size × burst_length;

  • 独占读与独占写访问的地址必须一致;

  • 独占读访问的ARID必须与独占写访问的AWID一致;

  • 独占读和独占写访问的控制信号必须一致;

  • 独占访问burst传输的字节数必须是2的n次幂,即1/2/4/8/16/32/64/128字节;

  • 独占访问burst传输的最大字节数为128字节;

  • AXI4中,独占访问的burst_length不能超过16;

  • AxCACHE必须保证监视独占访问的slave可以看到transaction。例如,独占访问一定不能有表示transaction是cacheable的AxCACHE

不遵守这些限制的话,会导致不可预测(UNPREDICTABLE)的行为。

在独占操作过程中监视的最小字节数由transaction的burst_length和burst_size所定义,而slave可以选择监视更大的字节数(最大不超过128字节,即独占访问的最大大小),但当相邻的字节被更新时,这会导致本应成功的独占访问操作变为失败状态。

A7.2.5 Slaves that do not support exclusive access

RRESPBRESP在表示常规访问成功时使用OKAY信号,而在表示独占访问成功时使用EXOKAY信号,这意味着不支持独占访问的slave会使用OKAY信号表示独占访问操作的失败。

对不支持独占访问slave的独占写访问总会更新存储器。
对支持独占访问slave的独占写访问只有在独占写操作成功时才会更新存储器。

A7.3 Locked accesses

AXI4不支持锁transaction。AXI3必须支持锁transaction。

AXI4由于以下原因移除了锁transaction的支持:
(1)大多数组件不需要锁transaction;
(2)锁transaction的实现会对interconnect的复杂度以及QoS保证能力造成显著的影响。

AxLOCK表示ARLOCKAWLOCK

当master使用AxLOCK信号表示当前transaction是一个锁transaction时,interconnect就必须确保只有当前master可以访问目标slave区域,直到该master发出解锁transaction为止,interconnect的仲裁器必须强制执行此限制。

在master开始读的锁transaction或写的锁transaction,该master必须确保之前的transaction都已经完成。

任何锁transaction会强制interconnect锁定接下来的所有transaction,因此,一个锁序列只有当master发出解锁transaction时才会终止,即在最后一个锁transaction进行解锁。

在即将完成锁序列时,必须首先确保所有的锁transaction都已经完成,然后才能发出最后一个transaction(用于解锁),并必须确保在最后一个锁transaction完成之前不能发起新的transaction。

master必须确保一个锁序列中的全部transaction都拥有相同的AxID值。

锁访问需要interconnect在锁序列进行中时避免任何其它的transaction发生,这会 对interconnect的效率产生影响,因此,Spec推荐锁访问只用于支持旧版本( AXI3)的设备。

Spec推荐以下限制(非强制):

  • 一个锁序列的地址不跨4KB;

  • 将任何序列限制为两个transaction;

A7.4 Atomic access signaling

AXI3中,AxLOCK[1:0]用于表示:常规访问、独占访问、锁访问。

axi3协议,AXI,fpga开发,Powered by 金山文档

AXI4中,移除了锁访问,使用1bit的AxLOCK表示常规访问还是独占访问。

axi3协议,AXI,fpga开发,Powered by 金山文档

A7.4.1 Legacy considerations

AXI4中,任何AXI3锁transaction可以按照下列方式被转换:

  • AWLOCK[1:0] = 0'b10被转换为常规写transaction,AWLOCK = 0'b0。

  • ARLOCK[1:0] = 0'b10被转换为常规读transaction,ARLOCK = 0'b0。

Spec推荐任何组件执行这样的转换,通常是interconnect,可以包含一个可选的机制用于检测和标记发生了这样的转换。

如果某些组件执行了转换后不能正确工作,则这样的组件不能在AXI4中使用。

对于许多之前使用锁transaction的遗留情况,例如 SWP指令的执行,或许需要修改软件来避免使用强制使用锁transaction的指令。

A8: AXI4 Additional Signaling

A8.1 QoS signaling

QoS:Quality of Service

A8.1.1 QoS interface signals

Signal

Description

AWQOS[3:0]

每次写transaction中由写地址通道发送。

ARQOS[3:0]

每次读transaction中由读地址通道发送。

AxQOS表示ARQOSAWQOS

协议并没有指定QoS标识符的确切使用方法,Spec推荐AxQOS的值用于指定读transaction或写transaction的优先级。值越大表示transaction优先级越高

当使用默认值0'b0000时表示接口没有QoS方案。

QoS可以有其他解释。

A8.1.2 Master considerations

一个master可以产生自己的AxQOS,如果它可以产生多个传输流,则可以为这些流分配不同的QoS值。

为了支持QoS,需要对正在使用的QoS方案有系统级的理解,同时需要全部的组件之间互相配合,因此,Spec推荐master组件支持可编程性,可以用于控制用于任何给定的场景的精确QoS值。

如果master组件不支持任何可编程的QoS方案,则它可以使用QoS值代表transaction的相对优先级,然后可以将这些值映射到备用的系统级QoS值。

不能产生AxQOS值的master必须使用默认值。

Spec期望很多interconnect组件实现一些可编程寄存器,这些寄存器可以用于分配QoS值到与interconnect互连的master,覆盖掉master原先的QoS值。

A8.1.3 System considerations

AXI4中定义的QoS信号可以用于任何兼容的系统级方案。

QoS默认的系统级实现是,任何可以选择处理多个transaction的组件,都会选择QoS值较高的transaction优先处理。这个选择只有当没有要求按特定顺序处理transaction时才会发生。

这意味着AXI顺序规则优先于QoS。

可以实现兼容默认方案的更复杂的QoS方案。

A8.2 Multiple region signaling

AXI4支持多区域接口。

A8.2.1 Additional interface signals

Signal

Description

AWREGION[3:0]

每次写transaction中由写地址通道发送。

ARREGION[3:0]

每次读transaction中由读地址通道发送。

AxREGION表示ARREGIONAWREGION

4bit区域标识符可以用于唯一地标识最多16个不同的区域,区域标识符可以提供更高阶的地址位的译码,但在任何4KB地址空间内必须保持不变。

区域标识符的使用意味着slave的单个物理接口可以提供多个逻辑接口,每一个逻辑接口在系统地址映射中具有不同的位置,区域标识符的使用也意味着slave不需要支持不同逻辑接口间的地址译码。

这个协议期望interconnect在为拥有多个逻辑接口的单个slave执行地址译码功能时产生AxREGION信号,如果一个slave在系统地址映射中只有一个物理接口,则interconnect必须使用默认的AxREGION值,见A10。

区域标识符有许多使用模型,包括但不限于以下内容:

  • 地址映射中外设的主数据通路和控制寄存器可以在不同位置,并且不需要slave执行地址解码就可以通过单个接口进行访问。

  • 一个slave可以在不同的存储区域中表现出不同的行为。例如,slave可能在一个区域提供读写访问,但在另一个区域提供只读访问。

slave必须确保两个位于不同区域但拥有相同的AXI ID的transaction以正确的顺序响应。

如果slave实现的区域少于16个时,slave必须确保在任何master尝试访问不支持的区域时给出正确的协议信号,而这需要IMMPLEMENTATION DEFINED,例如,slave或许需要通过下列方式来确保上述事宜:

  • 对于任何访问不支持区域的transaction提供一个错误响应;

  • 为所有不支持的区域分配支持区域的别名,以确保所有访问的响应符合协议;

AxREGION信号仅提供了对slave可使用的现存地址空间的地址译码功能,以消除对地址译码功能的需求,这个信号并没有创建新的独立地址空间。

AxREGION只能出现在地址译码功能的下游接口上。

A8.3 User-defined signaling

在每个AXI4通道都可以定义用户定义信号。

一般情况下,Spec推荐用户不使用用户信号,因为AXI协议并没有定义这些信号的功能,贸然使用可能会导致两个组件之间出现互操作性的问题,因为两个组件可能以不兼容的方法使用了相同的用户信号。

A8.3.1 Signal naming

Signal

Description

AWUSER

写地址通道用户信号

ARUSER

读地址通道用户信号

WUSER

写数据通道用户信号

RUSER

读数据通道用户信号

BUESR

写响应通道用户信号

A8.3.2 Usage considerations

协议并不要求所有通道都支持用户信号。

Spec推荐interconnect包含用户信号,然而,并没有要求master和slave包含用户信号。

Spec推荐interconnect组件包含用户信号的支持,以便interconnect组件可以将用户信号在master和slave之间传送,用户定义信号的宽度是IMPLEMENTATION DEFINED的,对于每个通道都可以不同。

A9: Low-power Interface

A9.1 About the low-power interface

低功耗接口是AXI协议的可选扩展,适用于如下两类外设:

  • 任何没有下电序列且可以指定其时钟何时被关闭的外设;

  • 任何要求下电序列,且只有在进入低功耗状态后才能停止时钟的外设,这样的外设要求系统时钟控制器指定其何时开始下电序列,并且外设在进入低功耗状态后必须发出通知;

A9.2 Low-power clock control

低功耗时钟控制接口包含如下信号:

  • 一个来自外设的信号,用于指定其时钟何时可以被开启/关闭;

  • 两个系统时钟控制器的握手信号,用于请求进入或退出低功耗状态;

A9.2.1 Peripheral clock required

CACTIVE信号表示外设是否需要时钟信号。当外设需要使能时钟的时候就会拉高CACTIVE,此时系统时钟控制器就必须立即使能时钟。当外设不需要时钟的时候就会拉低CACTIVE,系统时钟控制器可以关闭该时钟(非强制)。

一个可以在任何时候启用或禁用其时钟的外设,则可以永久拉低CACTIVE;必须始终启用其时钟的外设,必须永久拉高CACTIVE

CACTIVE是没有下电序列(power-down sequence)或上电序列(power-up sequence)的某些外设的唯一时钟控制信号。

A9.2.2 Power-down or power-up handshake

对于一个有下电序列或上电序列的外设而言,只有在系统时钟控制器发出请求之后外设才会进入低功耗状态,AXI协议提供了请求/应答(request/acknowledge)握手信号用于支持这个功能:

CSYSREQ 系统时钟控制器使用CSYSREQ去请求:

  • 外设进入低功耗状态。系统时钟控制器拉低CSYSREQ

  • 外设退出低功耗状态。系统时钟控制器拉高CSYSREQ

CSYSACK 外设使用CSYSACK去应答:

  • 进入低功耗状态请求。外设在识别到CSYSREQ拉低后可以拉低CSYSACK

  • 退出低功耗状态请求。外设在识别到CSYSREQ拉高后可以拉高CSYSACK

图A9-1展示了CSYSREQCSYSACK的关系。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-1 CSYSREQ and CSYSACK handshake

在序列开始时,CSYSREQCSYSACK都为高电平;在T1时刻,系统时钟控制器拉低CSYSREQ表示请求外设进入低功耗状态;外设在T2时刻拉低CSYSACK应答请求;在T3时刻,系统时钟控制器拉高CSYSREQ请求外设退出低功耗状态;在T4时刻,外设拉高CSYSACK应答请求。

外设可以接收或拒绝系统时钟控制器进入低功耗状态的请求,在外设应答请求的时候通过将CACTIVE拉低或拉高来表示接收或拒绝请求。

A9.2.3 Acceptance of low-power request

图A9-2展示了外设接收系统低功耗请求的波形。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-2 Acceptance of a low-power request

在T1时刻,系统时钟控制器拉低CSYSREQ以请求外设进入低功耗状态;在外设识别到这个请求后,执行了自己的下电序列,并在T2时刻拉低了CACTIVE用来表示时钟信号可以被移除;在T3时刻,外设拉低CSYSACK通知系统时钟控制器该外设已进入低功耗模式,

外设只有在拉低CACTIVE后至少一个时钟之后才能拉低CSYSACK

A9.2.4 Denial of a low-power request

图A9-3展示了外设拒绝系统低功耗请求的波形。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-3 Denial of a low-power request

在T1时刻,系统时钟控制器拉低CSYSREQ以请求外设进入低功耗状态;在T2时刻外设拉低CSYSACK应答该请求,但通过保持CACTIVE为高拒绝低功耗请求,因此系统时钟控制器必须维持时钟,并且在执行了低功耗状态退出序列后才能发起另一个低功耗请求;在T3时刻,系统时钟控制器通过拉高CSYSREQ开始了低功耗状态退出序列;在T4时刻,外设拉高CSYSACK表示完成了低功耗状态退出序列。

A9.2.5 Exiting a low-power state

无论是系统时钟控制器还是外设都可以请求退出低功耗状态,外设要求CACTIVECSYSREQ在整个低功耗状态期间保持为低电平,这两个信号之一变为高电平都会触发低功耗状态退出序列的启动。

System clock controller initiated exit

图A9-4展示了系统时钟控制器开启退出低功耗状态。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-4 System clock controller initiated exit from low-power state

在T1时刻,系统时钟控制器拉高CSYSREQ以请求退出低功耗状态,然后使能时钟;外设识别到CSYSREQ为高电平后开始执行上电序列,并在T2时刻拉高CACTIVE表示它需要时钟信号;然后外设在T3时刻拉高CSYSACK完成退出序列。

Peripheral initiated exit

图A9-5展示了外设开启退出低功耗状态。

axi3协议,AXI,fpga开发,Powered by 金山文档

图A9-5 Peripheral initiated exit from low-power state

在T1时刻外设拉高CACTIVE表示需要时钟信号,然后系统时钟控制器必须恢复时钟;在T2时刻系统时钟控制器拉高CSYSREQ,外设接下来会拉高CSYSACK完成退出序列。

外设可以让 CSYSACK保持数个周期的低电平以完成退出序列。

A9.2.6 Clock control sequence summary

图A9-6展示了请求进入低功耗状态的典型流程。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-6 Requesting entry to low-power state

图A9-7展示了从低功耗状态退出的典型流程。

axi3协议,AXI,fpga开发,Powered by 金山文档

图 A9-7 Exit from low-power state

A9.2.7 Combining peripherals in a low-power domain

系统时钟控制器可以将一些不同的外设组合到一个相同的低功耗时钟域中,若符合下面的规则,可以将时钟域内的所有外设看作一个单独的外设:

  • 时钟域的CACTIVE是时钟域中所有外设CACTIVE的逻辑或,这意味着系统时钟控制器只有当所有外设都表示其时钟可以被关闭时才可以关闭时钟;

  • 系统控制器必须使用一个CSYSREQ,并路由到时钟域中的全部外设;

  • 时钟域CSYSACK通过下述方法生成:

  • 只有当时钟域中的最后一个外设拉低CSYSACK时才会拉低总的CSYSACK

  • 只有当时钟域中的最后一个外设拉高CSYSACK时才会拉高总的CSYSACK文章来源地址https://www.toymoban.com/news/detail-672727.html

A10: Default Signaling and Interoperability

A10.1 Interoperability principles

A10.2 Major interface categories

A10.2.1 Read/write interface

A10.2.2 Read-only interface

A10.2.3 Write-only interface

A10.2.4 Memory slaves and peripheral slaves

A10.3 Default signal values

A10.3.1 Master addresses

A10.3.2 Slave addresses

A10.3.3 Memory slaves

A10.3.4 Write transactions

A10.3.5 Read transactions

A10.3.6 Response signaling

A10.3.7 Non-secure and Secure accesses

到了这里,关于AXI3/4协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】 xilinx vivado中AXI4通信协议详解

    AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。AXI 4总线和别的总线一样,都用来传输bits信息 (包含了数据或者地址) 。AXI4总线有三种类型,分别是AXI4、AXI4-Lite、AXI4-Stream AXI4:主要面向高性能

    2024年04月28日
    浏览(42)
  • FPGA-AMBA协议、APB协议、AHB规范、AXI4协议规范概述及它们之间的关系

    笔记记录,AMBA协议、APB协议、AHB规范、AXI4协议规范概述,只是概述描述,具体详细的协议地址传输、数据传输等内容将在下一章节详细说明。 AMBA(Advanced Microcontroller Bus Architecture)是一种由ARM公司提出的处理器总线架构,它定义了处理器、内存和外设之间的通信标准 。

    2024年02月04日
    浏览(34)
  • 紫光FPGA DDR3 IP使用和注意事项(axi4协议)

    紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册: 1、注意:对于写地址通道,axi_awvalid要一直拉高,axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676,不同的型号IP核接口和axi的握手协议也不一样(一定要注意),这点要注意,这也给我挖了一个很大的

    2024年04月12日
    浏览(50)
  • FPGA----UltraScale+系列的PS侧与PL侧通过AXI-HP交互(全网唯一最详)附带AXI4协议校验IP使用方法

    1、之前写过一篇关于ZYNQ系列通用的PS侧与PL侧通过AXI-HP通道的文档,下面是链接。 FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)_zcu106调试_发光的沙子的博客-CSDN博客 大家好,今天给大家带来的内容是,基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧(PS侧数

    2024年02月13日
    浏览(49)
  • 【AXI】解读AXI协议双向握手机制的原理

    AXI协议 相较于UART,SPI,I2C来说,无论是 内容还是难度都上了一个层级 ,放在一篇文章中进行解读未免 篇幅过长 ,因此, 有关AXI一些共性的、通用的问题,作者单独以前缀为【AXI】的标题进行小范围的串联 ,最终再汇总为 深入浅出解读AXI协议 ,与 从零开始的Verilog AXI协议

    2023年04月08日
    浏览(42)
  • 【AXI】解读AXI协议中的burst突发传输机制

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区 联合力荐 !近500篇 数字IC精品文章收录 ! 【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍 AXI协议 相较于

    2024年02月02日
    浏览(38)
  • 【FPGA】AXI学习

    1.什么是AXI?        AXI是ARM AMBA的一部分,AMBA是1996年首次推出的微控制器总线系列。AXI的第一个版本首次包含在2003年发布的AMBA 3.0中。发布与2010的AMBA4.0包含了AXI的第二个主要版本,AXI4。        这儿有3种AXI4接口: AXI:用于高性能存储映射需求。 AXI4-Lite:用于简单,低

    2024年02月20日
    浏览(35)
  • AMBA协议AXI-Lite(AXI-Lite介绍)

    AXI_Lite顾名思义即简化版的AXI协议,是对完整的AXI协议裁剪后的AXI协议; 特点: 突发长度永远是1,即只能单次读写,无法连续读写,常用于配置寄存器; 由于删减了逻辑,其资源也消耗较少; 地址映射,相较于AXI-Stream,AXI-Lite的每个数据读写都需要对应的地址; AXI_Lite的系

    2024年02月13日
    浏览(56)
  • 【ARM AMBA AXI 入门 3 - AXI 协议中的 Outstanding transfer 】

    请阅读 【ARM AMBA AXI 总线 文章专栏导读】 上篇文章:ARM AMBA AXI 入门 2 - AXI协议中的BURST 下篇文章:ARM AMBA AXI 入门 4 - AXI 协议中的 Out-of-Order transfer and interleave 介绍

    2024年02月16日
    浏览(45)
  • 【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】

    请阅读 【ARM AMBA AXI 总线 文章专栏导读】 在 AXI (Advanced eXtensible Interface) 协议中, RRESP 信号用来表示读取事务的响应状态,它由从设备(Slave)发往主设备(Master)来通知读取操作的完成情况。 RRESP 信号是一个 2 位的编码字段,用于指示读取操作是否成功完成,或者在操作过

    2024年02月04日
    浏览(175)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包