AXI协议详解
Created: July 11
Tags: ARM
amba_axi_protocol_spec.pdf
AMBA_axi.pdf
AXI基础简介
AXI总共分为5个通道,写地址,写数据,写应答,读地址,读数据(读应答在读数据中体现)
特点:独立的地址数据通道,通道传输为单方向。可同时做数据读写。
有三种传输模式,地址固定(fixed),地址等量增加(incr),地址等量增加循环(wrap),
每个AXI组件使用一个时钟信号ACLK,所有输入信号在ACLK上升沿采样,所有输出信号必须在ACLK上升沿后发生。
AXI使用一个低电平有效的复位信号ARESETn,复位信号是异步复位,同步释放。
-
什么是burst传输的意思?
突发传输。连续传输
-
FIXED模式下传输首地址后就可以不停传输数据吗?
是的,在配合每次传输的byte数,就可以确定下一个传输的地址。
-
突发传输不能跨4KB边界?
因为AXI4协议规定主机上寄存器块的最小分块单元为4K Byte,每个从机的开始映射地址都是4KB的边界。这也影响了AXI4的一个读写规则,那就是一个burst传输不能跨越4KB的界限,否则就会引入将数据错误写入其他从机的风险。注意这个4KB的界限指的是MASTER的地址界限,例如一个burst中不能越过0xXXXX_X000的地址位。FFF=4095,
就是1024个寄存器,*4byte =4KB。
-
非对齐传输。
非对其传输指当传输的目标地址(byte)与寄存器的边界(word对齐)未对齐时,可以使用非对齐传输,例如一个传输在0x3地址开始,而不是0x0或者0x4,非对其传输只会影响一个burst传输中的第一笔数据,可采用WSTRB信号来表示第一个data中的哪几个byte是有效的,其余的数据还是正常的burst传输。
-
复位期间对接口有如下要求:valid(表示地址/数据/应答输出有效信号)驱动到低电平
①主机ARVALID,AWVALID,WVALID为低电平;
② 从机接口必须驱动RVALID,BVALID为低电平;
③ 所有其他信号可以被驱动到任意值。
在复位后,主机可以在时钟上升沿驱动ARVALID,AWVALID,WVALID为高电平
• 读取地址,其信号名称以AR 开头。
• 读取信号名称以 R 开头的数据。
• 写入地址,信号名称以AW 开头。
• 写入信号名称以 W 开头的数据。
• 写入响应,其信号名称以 B 开头。
Write/Read address signal (功能信号都相似,可放在一起讨论)
awid/arid | 写地址ID. |
---|---|
awaddr/araddr | 写地址,给出一次突发传输的写地址 |
awready/aready | 从对主的写地址做出有效应答,表示已准备好可接收数据 |
awvalid/arvalid | 有效信号,表示当前传输的地址控制信号有效 |
awsize/arzize | 该信号指示每次Burst传输的byte大小。就是数据位宽,如011=8*8byte=64 bit |
awlen/arlen | 一次传输任务中的传输数据包个数,在INCR传输类型下可以传输1至256个数据包,在其他传输类型下只能传输1-16个数据包,特别地,WRAP传输类型下只能传输2,4,8或16个固定的数据包个数。因此AWLEN与ARLEN的位宽为8位,其中LEN=0代表传输一个数据包, |
eg: len = ed = 238个数据包,size = 0,就是1byte。则这次总共需要传输数据个数为 238 *1byte | |
awburst/arburst | 突发类型 |
awlock/arlock | 总线锁信号。AXI3协议中用于锁定从机,占用总线,AXI4中取消了相关支持,留下一位信号用作指示传输为正常传输(1’b0)还是独有传输(1’b1) |
awcache/arcache | 内存类型,表明一次传输是怎样通过系统的。 |
awprot/arprot | 保护类型,表明一次传输的特权等级和安全等级。 |
AWSIZE/ARSIZE:传输数据包大小,位宽为3位,(Bytes=2^Burst_size):
AxSIZE | 传输字节数 | AxSIZE | AxSIZE |
---|---|---|---|
3’b000 | 1 | 3’b100 | 16 |
3’b001 | 2 | 3’b101 | 32 |
3’b010 | 4 | 3’b110 | 64 |
3’b011 | 8 | 3’b111 | 128 |
AWBURST/ARBURST: 传输类型,位宽为2位,具体含义如下
AxBURST | 传输类型 |
---|---|
2’b00 | 固定(FIXED) |
2’b01 | 递增(INCR) |
2’b10 | 回环(WRAP) |
2’b11 | 未定义 |
FIXED传输为地址固定传输,所有传输都会写在同一个地址中。主要应用在FIFO的传输中,因为FIFO为先入先出,只需要往同一个地址写数据即可。
INCR传输为地址递增传输,可根据具体的配置有固定长度递增和非定长递增。大部分的数据传输都是使用这种方式,尤其是在内存访问中,可以大大提高效率。
WRAP传输为地址环回传输,在一定长度后会回环到起始地址。主要应用在Cache操作中,因为cache是按照cache line进行操作,采用wrap传输可以方便的实现从内存中取回整个cache line。
AWLOCK/ARLOCK:这个信号在AXI3协议中用于锁定从机,占用总线,但在AXI4中取消了相关支持,仅留下一位信号用作指示传输为正常传输(1’b0)还是独有传输(1’b1)。
AWPROT/ARPROT:指明访问是否被允许,位宽为3位,与slave相关,不同的访问回产生不同的Respect。
AxPROT | 值 | 功能 |
---|---|---|
AxPROT[0] | 0/1 | 非优先访问/优先访问 |
AxPROT[1] | 0/1 | 安全访问/非安全访问 |
AxPROT[2] | 0/1 | 数据访问/指令访问 |
AWCACHE/ARCACHE:该信号指明了总线中的存储类型,信号位宽为4位
AWQoS/ARQoS:Quality of Service, 位宽为4位,手册中并没有固定该信号的确切用途,但是建议将该信号用于优先级声明信号,值越高代表优先级越高。
**AWREGION/ARREGION:**区域标记,位宽为4位。4位的区域标记信号可以标记16个区域。当从机有很多分离的地址空间时,使用这个信号可以仅仅使用一个物理总线就能实现多个逻辑总线的功能。经典的应用是一个外设控制寄存器与数据寄存器分离的时候,使用该信号可以在不对地址解码的情况下访问到两块地址空间
例如,当一个外设控制寄存器的地址空间为0x0000 - 0x00FF,数据寄存器的地址空间为0x1000 - 0x1FFF,就可以将地址位设置为12位(0x000-0xFFF),控制寄存器的区域标记为4’b0000,数据寄存器的区域标记为4’b0001,实际寻址的地址为区域标记+地址位,其中区域标记位作为高位加在地址位前就可以了,可理解为优先级更高的ID。
Writer/Read data signal
rid | 一次传输的id tag. AXI4取消了对Wid的支持,所以写通道的写顺序必须与写地址通道保持一致 |
---|---|
wdata/rdata | 读写数据 |
wuser/ruser | 用户自定义信号 |
wvalid/rvalid | 有效信号,表明通道传输数据有效 |
wready/rready | 表明从机可以接收写数据/读数据和响应信号 |
wlast/rlast | 表示此次传输是最后一个突发传输 |
写事务传输的最后一个数据。与最后一个写数据的WVALID信号同步拉高。只有当WLAST由高变为低,一个传输任务才完成。在此之前无法中断传输过程。RLAST信号也类似。 | |
wstrb | WSTRB为写选通信号,指示当前传输的有效数据段。有效数据段单位是8bit,也就是32bit数据位宽的总线的WSTRB信号会有4位,WSTRB[3]指示WDATA[31:24]的有效性。 |
rresp | 读响应信号,表明读传输的状态 |
Writer resp signal
BID | 写响应ID tag |
---|---|
BRESP | 写响应,表明写传输状态 |
BUSER | 用户自定义 |
BVALID | 写响应有效 |
BREADY | 表明主机能够接收写响应 |
AXI_Write
写通道分为写地址,写数据,写应答三个通道,三个通道数据互不干扰,但有一定的先后顺序。
下图单箭头表示无先后依赖关系,双箭头表示有先后依赖关系。
- 三个通道的vaild和ready信号没有先后关系,vaild可以先于或晚于或同时与ready信号拉高。
- 写数据通道的数据可以先于写地址通道数据出现在总线上。
- 写通道的写顺序必须与写地址通道保持一致
- 因为axi通道分离,所以可支持outstanding操作,即不需要等待前一笔传输完成就可以发送下一笔操作。master不需要等待前一笔操作A响应完成就可以发送下一笔操作请求B,这样可以有效提升通路利用率,提升系统性能
- 传输地址和传输数据都是在valid和ready信号同时为高时传输。
下面来分析一笔axi 写传输操作:
- T0时刻:mst发出写地址信号,同时vaild信号拉高。但ready信号并没有拉高(这时候允许ready信号为高)
- T1时刻:slv采样到写地址和vaild信号,将ready信号拉高,对写地址通道做一次握手。
- T2时刻。mst采样到slv的ready信号为高。握手成功。并驱动写数据通道传输数据。同时vaild拉高。表示数据有效。开始一次burst传输。
- T3时刻slv开始采样mst传输的数据。只有在valid和ready同时为高的时候采样数据才有效。
- T8时刻mst发送最后一笔burst出书的数据,同时WLAST信号拉高,表示此次Burst发送数据完成
- T9时刻,mst采样到所有数据和WLAST信号,并给出resp信号,同时拉高valid信号。READY信号早已拉起
- T10,slcv采样到resp并valid ready信号有效,一次burst传输完成。
注意项:
- 写数据通道的数据信息被认为是缓冲(buffered)了的,“主”无需等待“从”对上次写传输的确认即可发起一次新的写传输。写通道包括数据总线(8/16…1024bit)和字节线(用于指示8bit 数据信号的有效性)
- Burst传输:多个数据传输,一个burst内部可以被打断的。 Valid信号是源,一个数据传输,一旦valid信号为高就不能拉低,直到此次传输完成。slave的ready信号可以中断,但是最终还是要高起来传完一个burst. 对于master来说,一旦开始传数,一个burst之间的valid应该是不会低的
- READY 信号很自由,可以等待 VALID 信号到来再做响应,但也完全可以在 VALID 信号到来前就置高,表示接收端已经做好准备了。READY 信号与 VALID 不同,接收方可以置起 READY 之后发现:其实我好像还挺忙,然后拉低 READY 信号。只要此时 VALID 信号没有置起,这种操作是完全可以。
- 上图写时序中,Wdata可以早于Awaddr出现在接口上。写响应信号必须出现在与其相关联的写事务最后
- 在写回应BVALID有效前,必须要使得写地址通道与写数据通道的握手信号均有效,且写数据通道的WVALID信号必须为最后一个写入数据的有效信号。BREADY信号可在BVALID信号前后有效。而写地址通道与写数据通道的四个握手信号之间无必须要求的时间前后关系。
AXI_Read
读架构没有读响应信息,读响应信息指明读事务的完成。读取每个数据过后均会进行读回应。写传输过程中只会在一个Burst完成的时候进行写回应。写应答与谢写数据流相反,读应答与读数据流同相。
同写数据通道一样。读地址通道和读数据通道的valid和ready也没有先后关系,但是读地址和读数据有先后关系(废话)读数据操作需要在给出读地址操作之后才能执行,但读数据通道与读地址通道中的握手信号无规定的先后顺序。设备必须等待ARVALID和ARREADY信号都有效才能给出RVALID信号,开始数据传输。
- T0时刻:mst读地址通道给出读地址并将valid拉高。
- T1时刻:slv检测到读地址和vaild信号,将ready信号拉高。
- T2时刻:mst采样到valid和ready信号同时为高,第一笔读地址通道握手完成。同时mst驱动第二笔读地址到读地址通道总线上。
- T3时刻:slv读出第一笔读地址burst传输的读数据驱动到总线,同时拉高RVALID信号,等待mst接收并完成握手。同时slv读地址通道采样到第二笔读地址总线数据,拉高ARREADY信号。等待mst握手。
- T4时刻:mst采样到AREADY和ARVALID信号同时为高,第二笔读地址传输完成。等待
- T8时刻:完成第一次burst读数据的最后一笔数据,并拉高Rlast信号,表示第一笔读Burst完成。
:Q&A
-
AXI3与AXI4之间的区别是什么?
1、AXI3只支持多达16拍的burst 。而AXI4支持高达256拍的burst 。
2、AXI3支持write interleave。AXI4不支持write interleave(去掉了wid)
3、AXI3支持locked 传输,AXI4不支持locked 传输
4、AXI4支持QoS,AXI3不支持QoS。
-
为什么没有单独的read 响应通道?
VALID/READY握手机制只允许一个方向的数据流,所以对于读事务,数据(data和resp)从slave流向master,而对于写事务,数据从master流向slave,所以就需要单独的响应通道
-
为什么在burst 写中,不是每拍都有写响应。但是在burst 读中,每拍都有一个单独的读响应?
所有的AXI信道只在1个方向传递信息 ,所以才需要一个单独的写响应通道。在大多数应用中不管slave能不能接受完整的数据这个burst传输都会执行完成,slave无需在每一拍都返回ERROR响应
-
如何终止burst 传输?
不能。AXI不能够提前终止burst传输。对于写事务,master可以完成burst 传输,通过WSTRB信号丢弃掉无效数据即可,对于读事务同样也可以将读回的数据丢弃。
-
master 可以在burst 传输中间给WLAST吗?
不行。只有在burst 传输的最后一拍才能拉高WLAST,在burst传输的中间拉高WLAST是违反协议的行为。此外,许多slave设计不会使用WLAST信号,而是自己计数,所以master拉高WLAST也不会提前终止burst传输。
-
Slave能在burst传输完成之前置起rlast么?
和上题一样,slave在burst传输的未完成就拉起RLAST是违反协议的行为。master同样也有可能不依赖RLAST
-
既然WLAST和RLAST可能不被使用,那为什么需要支持这两个信号?
为了支持所有的master和slave,无论其是否依赖这两个信号传输数据。
-
Exclusive 读写事务是什么?在哪里使用?
如果一个内存区域被多个master共享,某个master需要希望确保在没有其他master更改共享内存的情况下完成读然后写的序列,就可以使用Exclusive 传输
-
读取事务是否有可能在一个周期内完成?
需要至少1个时钟周期传递地址(从master到slave),然后至少1个时钟周期传递数据(从slave到master)。
-
axi slave是如何支持Exclusive 访问的?
假设 AXI Master1(M1)已经启动了对地址位置12h100到12h10F的exclusive 读写。那么相应的salve将开始监视由M1给出的这些地址。如果此时该地址被其他master执行写操作,此时会返回Exclusive error
-
发送给slave的读写地址和读写数据是如何关联的?文章来源:https://www.toymoban.com/news/detail-406890.html
AR总线和AW总线是独立的,不管读写请求的地址是否顺序发出的,响应的数据都可能是无序的,他们之间是通过awid和arid对应配对的(axi3)axi4去掉了wid,所以写通道的写顺序必须与写地址通道保持一致文章来源地址https://www.toymoban.com/news/detail-406890.html
到了这里,关于AXI协议详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!