Created: July 11
Tags: ARM
amba_axi_protocol_spec.pdf
AMBA_axi.pdf
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 开头。
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。
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 | 读响应信号,表明读传输的状态 |
BID | 写响应ID tag |
---|---|
BRESP | 写响应,表明写传输状态 |
BUSER | 用户自定义 |
BVALID | 写响应有效 |
BREADY | 表明主机能够接收写响应 |
写通道分为写地址,写数据,写应答三个通道,三个通道数据互不干扰,但有一定的先后顺序。
下图单箭头表示无先后依赖关系,双箭头表示有先后依赖关系。
读架构没有读响应信息,读响应信息指明读事务的完成。读取每个数据过后均会进行读回应。写传输过程中只会在一个Burst完成的时候进行写回应。写应答与谢写数据流相反,读应答与读数据流同相。
同写数据通道一样。读地址通道和读数据通道的valid和ready也没有先后关系,但是读地址和读数据有先后关系(废话)读数据操作需要在给出读地址操作之后才能执行,但读数据通道与读地址通道中的握手信号无规定的先后顺序。设备必须等待ARVALID和ARREADY信号都有效才能给出RVALID信号,开始数据传输。
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的读写地址和读写数据是如何关联的?
AR总线和AW总线是独立的,不管读写请求的地址是否顺序发出的,响应的数据都可能是无序的,他们之间是通过awid和arid对应配对的(axi3)axi4去掉了wid,所以写通道的写顺序必须与写地址通道保持一致