3.读写传输
3.1握手过程
5个传输通道均使用VALID/READY信号对传输过程的地址、数据、控制信号进行握手。使用双向握手机制,传输仅仅发生在VALID、READY同时有效的时候。
Source方,产生VALID信号,代表其的address,data和control信息已经准备好,并有效; Destination方,产生READY信号,代表其可以进行交互; 当VALID/READY信号同时为高,传输开始 |
3.2通道信号要求
写地址通道:当主机驱动有效的地址和控制信号时,主机可以断言AWVALID,一旦断言,需要保持AWVALID的断言状态,直到时钟上升沿采样到从机的AWREADY。AWREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言AWVALID,一个用来断言AWREADY);当AWREADY为高时,从机必须能够接受提供给它的有效地址。
写数据通道:在写突发传输过程中,主机只能在它提供有效的写数据时断言WVALID,一旦断言,需要保持断言状态,直到时钟上升沿采样到从机的WREADY。WREADY默认值可以为高,这要求从机总能够在单个周期内接受写数据。主机在驱动最后一次写突发传输是需要断言WLAST信号。
写响应通道:从机只能它在驱动有效的写响应时断言BVALID,一旦断言需要保持,直到时钟上升沿采样到主机的BREADY信号。当主机总能在一个周期内接受写响应信号时,可以将BREADY默认值设为高。
读地址通道:当主机驱动有效的地址和控制信号时,主机可以断言ARVALID,一旦断言,需要保持ARVALID的断言状态,直到时钟上升沿采样到从机的ARREADY。ARREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言ARVALID一个用来断言ARREADY);当ARREADY为高时,从机必须能够接受提供给它的有效地址。
读数据通道:只有当从机驱动有效的读数据时从机才可以断言RVALID,一旦断言需要保持直到时钟上升沿采样到主机的BREADY。BREADY默认值可以为高,此时需要主机任何时候一旦开始读传输就能立马接收读数据。当最后一次突发读传输时,从机需要断言RLAST。
AXI协议要求通道间满足如下关系:
·写响应必须跟随最后一次brust的写传输 ·读数据必须跟随数据对应的地址 ·通道握手信号需要确认一些依赖关系 |
3.3通道之间握手信号的依赖关系(不同通道之间)
为防止死锁,通道握手信号需要遵循一定的依赖关系。
3.3.1同一通道内的要求
|
3.3.2不同通道组依赖关系
下文会使用一些图描述依赖关系。图表中,单箭头表示可以等待有效再置位,双重箭头表示必须等待有效再置位。
下文会使用一些图描述依赖关系。图表中,单箭头表示可以等待有效再置位,双重箭头表示必须等待有效再置位。
3.3.2.1读操作握手依赖
上图为读操作的依赖关系,其中:
ARREADY和ARVALID信号是读的地址信号; RREADY和RVALID是读数据信号; |
官方针对这部分的说明为:
简单地说:
所以针对读操作,AXI Spec要求读Data信号组的握手信号必须在读Addr信号组握手之后,即必须等到ARVALID的ARREADY同时为高后,RVALID才能拉高;
|
同时,一个通道内,xVALID信号不等待xREADY信号,xREADY可以等待xVALID;
先是Master端提供ARVALID和相关的控制信息,进行地址阶段的握手;这部分完成后,再有Slave发送RVALID信号,并进行握手。
3.3.2.2写操作握手依赖
图为写操作的依赖关系,其中:
AXI中写操作中唯一地强依赖关系是写响应通道BVALID,仅当WVALID和WREADY信号同时有效(数据传输完成)且WLAST信号有效(突发传输的最后一个数据传输完成)后才会被置位。
上图为读操作的依赖关系,其中:
AWVALID和AWREADY:写地址通道的信号
WVALID和WREADY:写数据通道的信号
BVALID和BREADY:写响应通道的信号
官方针对这部分的说明为:
- Master在提供AWVALID或者WVALID信号,必须不等待Slave提供AWREADY或者WREADY信号;
- Slave可以等待Master的AWVALID或者WVALID或者两个,然后在提供AWREADY信号;
- Slave也可以不等待Master的AWVALID或者WVALID或者两个,一旦Slave段准备好,就立即提供AWREADY信号;
- Slave可以等待Master的AWVALID或者WVALID或者两个,然后再提供WREADY信号;
- Slave也可以不等待Master的AWVALID或者WVALID或者两个,一旦Slave段准备好,就立即提供WREADY信号;
- Slave端必须等待WVALID和WREADY信号,然后再去发送BVALID信号;
- Slave端也必须等待WLAST信号之后,再去提供BVALID信号,因为写响应信号BRESP必须只在写传输的最后一个数据传输完后被设置;
- Slave必须不等待BREADY信号,一旦Slave段准备好,就立即提供BVALID信号;
- Master可以等待Slave发送BVALID之后再发送BREADY;
10、Master也可以提供BREADY信号
3.3.2.3写响应操作握手依赖
图为写响应操作的依赖关系,其中:
AWVALID和AWREADY:写地址通道信号
WVALID和WREADY:写数据通道的信号
BVALID和BREADY:写响应通道的信号
3.4传输结构
3.4.1地址结构
AXI协议是基于burst的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。
3.4.2突发长度(AxLEN)
突发长度为每次突发传输的传输次数(transfers的次数),AXI3范围限制1~16(AXI4增量模式1~256)且不能跨越4kb的地址空间,每次突发传输不允许提前终止(可以通过关闭所有数据字段的方式使一段传输数据无效,但传输行为必须完成)。
ARLEN[7:0]决定读传输的突发长度;
AWLEN[7:0]决定写传输的突发长度;
AXI3只支持1~16次的突发传输(Burst_length=AxLEN[3:0]+1)
AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_length=AxLEN[7:0]+1)
AXI burst拆散农户具有如下规则:
·wraping,burst,burst长度必须是2,4,8,16
·burst不能跨4KB边界
·不支持提前终止burst传输
所有的组件都不能提前终止一次burst传输。然而,主机可以通过借断言所有的写的strobes来使非所有的写字节来减少写传输的数量。读burst中,主机可以忽略后续的读数据来减少读个数。也就是说,不管怎样 ,都必须完成所有的burst传输的数量。读burst中,主机可以忽略后续的读数据来减少读个数。也就是说,不管怎样,都必须完成所有的burst传输。
3.4.3突发大小(A×SIZE)
A×SIZE定义了每次突发transfers的字节数
ARSIZE[2:0],读突发传输;AWSIZE[2:0],写突发传输。
A×SIZE[2:0] | Bytes in transfer |
3’b000 | 1 |
3’b001 | 2 |
3’b010 | 4 |
3’b011 | 8 |
3’b100 | 16 |
3’b101 | 32 |
3’b110 | 64 |
3’b111 | 128 |
3.4.4突发类型(A×BURST)
FIXED:突发传输过程中地址固定,用于FIFO访问
INCR:增量突发,传输过程中,地址递增。增加量取决于A×SIZE的值
WRAP:回环突发,和增量突发类似,但会在特定高地址的边界出回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。回环边界等于(A×SIZE*A×LEN)。
A×BURST[1:0] | Burst Type | Descriptions |
2’b00 | FIXED | FIXED:突发传输过程中地址固定,用于FIFO访问 |
2’b01 | INCR | INCR:增量突发,传输过程中,地址递增。增加量取决于A×SIZE的值 |
2’b10 | WRAP | WRAP:回环突发,和增量突发类似,但会在特定高地址的边界出回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。回环边界等于(A×SIZE*A×LEN)。 |
2’b11 | Reserved |
3.4.5突发传输地址
Start_Address=A×ADDR
Number_Bytes=2^A×SIZE
Burst_Length=A×LEN+1
Aligned_Addr=(INT(Start_Address/Number_Bytes)) ×Number_Bytes。//表示向下取整
对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:
Address_N=Algned_Address+(N-1) ×Number_Bytes
WRAP突发,突发边界:
Wrap_Boundary=(INT(Start_Address/(Number_Bytes×Burst_Length))) ×(Number_Bytes×Burst_Length)
3.4.6写数据选通(WSTRB)
WSTRB的每一位对应数据中的8位(1字节),用于标志数据中的对应字节是否有效。即当WSTRB[n]=1时,标志数据中WDATA[(8n)+7(8n)]]部分有效。
3.4.7读写数据结构(xDATA)
3.4.7.1窄带传输(Narrow transfes)
当传输的数据位宽小于Xdata总线带宽时,为窄带传输,每次使用的数据位数不同:
·固定地址的突发下,使用同一段数据信号线
·在递增地址和环回地址的突发下,使用不同段信号线
Spec说的比较晦涩难懂,所以Spec给了一个例子:
例子1:
- burst传输包含5个transfer
- 从0地址开始
- 每一个transfer都是8bits
- Transfer在32bits的bus
- Burst模式为增量模式
上图为地址递增突发下,在32位数据信号下的使用8bit传输的窄带传输使用的位数图。第一次传输使用0~7位,第二次使用8~15位,依次递增;在第五次传输时回到开头使用0~7位。
3.4.7.2非对齐传输(Unaligned transfers)
AXi总线支持非对齐的传输,当传输位宽超过1byte,起始地址不为数据总线硬件带宽(byte单位)整数倍时,为不对齐传输。不对齐传输的时候需要配合数据选通在第一次传输时将某几个byte置位无效,使第二次突发传输的起始地址(从机自动计算)为突发尺寸的整数倍。
如图,突发尺寸为4byte,若要对齐传输,起始地址要为4的整数倍。图中起始地址为0×07,因此为非对齐传输。第一次传输时,前3个数据为无效字段,可以使用数据选通WSTRB将前3个byte置为无效。(深色部分为无效数据)
下图是在窄带传输下的对齐和非对齐传输启动写数据总线64bits。传输32bit数据,是窄带传输,第一个图对齐访问的情况下每次交替使用低字节和高字节。(深色部分为无效数据)
第一个图对齐访问的情况下每次交替使用低字节和高字节。(深色部分为无效数据)
第二个图,非对齐访问由于启动地址为0×07,二硬件带宽为64bit,则必须由地址0启动,设置前7个字段为无效,后面使用对齐传输。(深色部分为无效数据)
3.4.8应答通道数据结构
3.4.8.1响应信号(*RESP)
针对读和写均有响应的响应信号:
·BRESP[1:0]写响应信号,每次突发传输完成后
·RRESP[1:0]读响应信号(位于读数据通道)
响应信号含义如下:
·OKAY(2’b00):正常访问正确/特权访问失败/不支持特权访问
·EXOKAY(2’b01):特权访问成功
·SLAVER(2’b10):从机错误,传输失败
·DECERR(2’b11):互连解码错误,传输失败
4.传输特性
AXI从机分为两种:
·存储器从机(Memory Slave):需要支持所有传输特性
·外设从机(Peripheral Slave):仅需要支持特定的操作,但是可以保证所有类型的传输完成(不要求非特定的操作响应正确)
A×CACHE用于指定传输特性,传输特性用于标定传输如何在系统中进行和系统级缓存如何处理传输。
4.1存储器特性
存储器特性包括4个位,如下所示:
A×CACHE[0](Bufferable):表示传输过程中是否有缓存,当该位置为1时,表示传输路径上具有buffer(可延迟transaction到达最终点的时间)
A×CACHE[1](Modifiable):标记传输是否可以被修改/优化,当其置0时,每个传输将不会被更改,具体来说,A×DDR、A×SIZE、A×LEN、A×BURST、A×LOCK和A×PROT信号不会被修改(地址,突发传输信息,传输隐私信息不被修改)。但是A×CACHE[0]、ID和QoS可能被修改,同时,一个突发长度长于16的突发传输可能被切开,但是保证传输效果相同。当该位置1时,A×LOCK和A×PROT信号不会被修改,以上其他的A×DDR、A×SIZE、A×LEN、A×BURST可能发生的改变,另外:
·多个传输可能被合并为一个传输,一个传输可能被切分为多个传输
·读传输在从机端读出的数据可能多于主机的请求(多的数据被保存在cache中用于优化数据访问)
·写传输可能访问到超过主机请求的地址范围,妥善使用WSTRB保证仅有需要的地址被覆盖
另外,A×LOCK和A×PROT信号仍然不能被改变,同时需要注意的是:A×CACHE[0]=0,具有相同的AXI ID和指向相同的从机的一系列传输的顺序不能改变。
A×CACHE[2](Read-allocate)
A×CACHE[3](Write-allocate):读写操作前是否检查缓存以优化传输
4.2存储器类型
AXI4可支持不同的存储类型,A×CACHE[3:0]用于描述不同的存储类型,如下图所示
5.典型读写时序
5.1 AXI突发读时序
当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。
设备会在第一次突发式读完成后处理第二次突发式读数据。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后才开始处理第二个地址的数据。
5.2 AXI突发写时序
这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中,当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。
6.低功耗
A.低功耗时钟控制接口包括下面两个信号;
(1)来自外围设备的信号,用于指明什么时候时钟使能或者禁能。
(2)两个握手信号用于系统时钟控制器请求退出或者进入低功耗状态。
B.时钟控制接口的一个主要信号时CACTIVE,外围设备用这个信号来指明请求时钟使能。外围设备置CACTIVE有效去请求时钟,系统时钟控制器必须马上使能时钟。如果外围设备将CACTIVE置为无效,则系统时钟控制器将自己决定是否使能或者禁能外围设备时钟。
C.AXI协议提供双线Request/Acknowledge握手来支持请求
(1)CSYSREQ当外围设备请求进入低功耗状态时,系统时钟控制器将CSYSREQ置低,平时CSYSREQ都是置高的。
(2)CSYSACK外围设备用CSYSACK信号作为进入低功耗状态和离开低功耗状态的应答信号。
系统时钟控制器在T1时刻发出请求,外围设备在T2时刻给予应答,此时进入低功耗状态。在T3时刻,CSYSREQ变高,请求离开低功耗状态,在T4时刻得到应答,此时离开低功耗状态进入正常模式。
D.外围设备可以选择接受请求也可以选择不接受请求。主要通过信号CACTIVE来决定。
既可以通过系统也可以通过外围设备来退出低功耗状态。只要置信号CACTIVE和CSYSREQ这两个信号中的一个为高就可以退出低功耗模式。
而系统可以通过置CSYSREQ为高来退出低功耗模式。
7.多地址和乱序传输
下面描述AXI协议用事务IDtags来处理多地址和乱序传输。
- 下面介绍5种事务ID:
- AWID 这个IDtag是写地址群组信号。
- WID 这个是写IDtag在写事务中,与写数据在一起,主机传送一个WID去匹配与地址相一致的AWID。
- BID 这个IDtag是写响应事务中,设备会传送BID去匹配与AWID和WID相一致的事务。
- ARID 这个IDtag是读地址群组信号。
- RID 这个IDtag是在读事务中。设备传送RID去匹配与ARID相一致的事务。
- 主机可以使用一个事务的ARID或者AWID段提供的附加信息排序主机的需要。事务序列规则如下:
(1)从不同主机传输的事务没有先后顺序限制。他们可以以任意顺序完成。
(2)从同一个主机传输的不同ID事务,也没有先后顺序限制。他们可以以任意顺序完成。
(3)相同数值的ARID写事务数据序列必须按照顺序依次写入主机发送的地址内。
(4)相同数值的ARID读事务数据序列必须遵循下面的顺序:
·当从相同设备读相同的ARID时,设备必须确保读数据按照相同的地址顺序接受。
·当从不同的设备读相同的ARID时,接口处必须确保读数据按照主机发送的相同的地址时序。
(5)在相同的AWID和ARID的读事务和写事务之间没有先后顺序限制。如果主机要求有顺序限制,那么必须确保第一次事务完全完成后才开始执行第二个事务。
- 当一个主机接口与interconnect相连时,interconnect会在信号ARID、AWID、WID段添加一位,每一个主机端口都是独一无二的。
这样做有两个影响:
-
- 主机不需要去知道其他主机的ID数值,因为interconnect是ID值是唯一的,当将主机number添加到段中。
- 在设备接口处的ID段的宽度要比主机接口处的ID段宽。
对于读数据,interconnect附加一位到RID段中,用来判断哪个主机端口读取数据。
Interconnect会移除RID段中的这一位在将RID的值送往正确的主机端口之前。