AXI4、AXI-lite、AXI-Stream总线协议学习笔记

关于AXI4协议在VIVADO中随处可见,要想用好VIVADO中的IP核,必须要好好学习一下AXI4总线,网上关于AXI4的笔记资料有很多,我也只是拿过来总结一下,算是转载吧

  1. AXI总线和AXI接口以及AXI协议
    总线、接口和协议,这三个词常常被联系在一起。总线是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由由数据线、地址线、控制线等构成。接口是一种连接标准,又常常被称之为物理接口。协议就是传输数据的规则。

  2. AXI总线介绍
    AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。
    AXI4:主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;
    AXI4-Lite:是一个简单地吞吐量地址映射性通信总线,占用很少的逻辑单元;
    AXI4-Stream:面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模;
    AXI4总线分为主、从两端,两者间可以连续的进行通信。
    ISE从12.3版本,Virtex6,Spartan6芯片开始对AXI4总线提供支持,并且随着Xilinx与ARM的合作面逐渐展开而得到大力推广。

  3. AXI4总线和AXI4-Lite总线具有相同的组成部分:
    (1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;
    (2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
    (3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;
    (4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
    (5)写应答通道,包含BVALID, BRESP, BREADY信号;
    (6)系统通道,包含:ACLK,ARESETN信号。

  4. AXI4总线和AXI4-Lite总线的信号也有他的命名特点:
    读地址信号都是以AR开头(A:address;R:read)
    写地址信号都是以AW开头(A:address;W:write)
    读数据信号都是以R开头(R:read)
    写数据信号都是以W开头(W:write)
    应答型号都是以B开头(B:back(answer back))

  5. AXI4-Stream总线的组成有:
    (1)ACLK信号:总线时钟,上升沿有效;
    (2)ARESETN信号:总线复位,低电平有效
    (3)TREADY信号:从机告诉主机做好传输准备;
    (4)TDATA信号:数据,可选宽度32,64,128,256bit
    (5)TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8
    (6)TLAST信号:主机告诉从机该次传输为突发传输的结尾;
    (7)TVALID信号:主机告诉从机数据本次传输有效;
    (8)TUSER信号 :用户定义信号,宽度为128bit。
    对于AXI4-Stream总线命名而言,除了总线时钟和总线复位,其他的信号线都是以T字母开头,后面跟上一个有意义的单词
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第1张图片

  6. AXI4总线组成:
    全局信号:
    ACLK :全局时钟信号
    ARESETn : 全局复位信号,低电平有效

写地址通道信号
AWID[3:0]:写地址ID,这个信号是写地址信号组的ID tag。
AWADDR[31:0]:写地址。
AWLEN[3:0]:突发式写的长度。此长度决定突发式写所传输的数据的个数。
AWSIZE[2:0]:突发式写的大小。
AWBURST[1:0]:突发式写的类型。
AWLOCK[1:0]:锁类型。
AWCACHE[3:0]:Cache类型。这信号指明事务的bufferable、cacheable、write-through、write-back、allocate attributes信息。
AWPROT[2:0]:保护类型。
AWVALID:写地址有效,1 = 地址和控制信息有效,0 = 地址和控制信息无效,这个信号会一直保持,直到AWREADY变为高。
AWREADY 设备 写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。1 = 设备准备好,0 = 设备没准备好

写数据通道信号
WID[3:0]:写ID tag,WID的值必须与AWID的值匹配
WDATA[31:0]:写的数据。
WSTRB[3:0]:写阀门,WSTRB[n]标示的区间为WDATA[(8n)+7:(8n)]
WLAST:写的最后一个数据。
WVALID:写有效,1 = 写数据和阀门有效,0 = 写数据和阀门无效
WREADY:写就绪。指明设备已经准备好接受数据了,1 = 设备就绪,0 = 设备未就绪

写响应通道信号
BID[3:0]:响应ID , 这个数值必须与AWID的数值匹配。
BRESP[1:0] :写响应。这个信号指明写事务的状态。可能有的响应:OKAY、EXOKAY、SLVERR、DECERR。
BVALID:写响应有效,1 = 写响应有效,0 = 写响应无效
BREADY 主机 接受响应就绪。该信号表示主机已经能够接受响应信息,1 = 主机就绪,0 = 主机未就绪

读地址通道信号
ARID[3:0]: 读地址ID。
ARADDR[31:0]:读地址。
ARLEN[3:0]: 突发式读长度。
ARSIZE[2:0]:突发式读大小。
ARBURST[1:0]:突发式读类型。
ARLOCK[1:0]:锁类型。
ARCACHE[3:0]:Cache类型。
ARPROT[2:0]:保护类型。
ARVALID: 读地址有效。信号一直保持,直到ARREADY为高,1 = 地址和控制信息有效,0 = 地址和控制信息无效
ARREADY 设备 读地址就绪。指明设备已经准备好接受数据了,1 = 设备就绪,0 = 设备未就绪

读数据通道信号
RID[3:0]:读ID tag。RID的数值必须与ARID的数值匹配。
RDATA[31:0]:读数据。
RRESP[1:0]:读响应。这个信号指明读传输的状态:OKAY、EXOKAY、SLVERR、DECERR。
RLAST:读事务传送的最后一个数据。
RVALID:读数据有效。1 = 读数据有效。0 = 读数据无效。
RREADY 主机 读数据就绪。1 = 主机就绪,0 = 主机未就绪

低功耗接口信号
CSYSREQ:系统低功耗请求。此信号来自系统时钟控制器,使外围设备进入低功耗状态。
CSYSACK:低功耗请求应答。
CACTIVE:Clock active ,1 = 外围设备时钟请求,0 = 外围设备时钟无请求

  1. 突发式读的时序图如下:
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第2张图片
    当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。

  2. 重叠突发式读时序图如下:
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第3张图片
    设备会在第一次突发式读完成后处理第二次突发式读数据。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后才开始处理第二个地址的数据。

  3. 突发式写时序图如下:
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第4张图片
    这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

  4. 全部5个通道使用相同的VALID/READY握手机制传输数据及控制信息。传输源产生VLAID信号来指明何时数据或控制信息有效。而目地源产生READY信号来指明已经准备好接受数据或控制信息。传输发生在VALID和READY信号同时为高的时候。VALID和READY信号的出现有三种关系
    (1) VALID先变高READY后变高,在箭头处信息传输数据:
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第5张图片
    (2) READY先变高VALID后变高,在箭头处信息传输数据:
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第6张图片
    (3) VALID和READY信号同时变高,在这种情况下,数据立马传输
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第7张图片

  5. AXI协议支持乱序传输。他给每一个通过接口的事务一个IDtag。协议要求相同ID tag的事务必须有序完成,而不同ID tag可以乱序完成。(暂时我还不知道这个什么意思,但是我想等以后我用到了,我就知道了)

  6. 通道之间的关系
    地址、读、写和写响应通道之间的关系是灵活的。
    例如,写数据可以出现在接口上早于与其相关联的写地址。也有可能写数据与写地址在一个周期中出现。
    两种关系必须被保持:
    (1)读数据必须总是跟在与其数据相关联的地址之后。
    (2)写响应必须总是跟在与其相关联的写事务的最后出现。

  7. 通道握手信号之间的依赖性
    读事务握手依赖关系如图:
    (1)设备可以在ARVALID出现的时候在给出ARREADY信号,也可以先给出ARREADY信号,再等待ARVALID信号。
    (2)但是设备必须等待ARVALID和ARREADY信号都有效才能给出RVALID信号,开始数据传输。
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第8张图片
    写事务握手依赖关系如图:
    (1)主机不一定得等待设备先给出AWREADY或WREADY信号信号后再给出信号AWVALID或WVLAID。
    (2)设备可以等待信号AWVALID或WVALID信号有效或者两个都有效之后再给出AWREADY信号。
    (3)设备可以等待AWVALID或WVALID信号有效或者两个信号都有效之后再给出WREADY信号。
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第9张图片

  8. 突发式读写的地址必须以4KB对齐,信号AWLEN或信号ARLEN指定每一次突发式读写所传输的数据的个数, ARSIZE信号或AWSIZE信号指定每一个时钟节拍所传输的数据的最大位数。需要注意的是任何传输的SIZE都不能超过数据总线的宽度
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第10张图片AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第11张图片

  9. AXI协议定义了三种突发式读写的类型:固定式的突发读写、增值式突发读写、包装式突发读写。用信号ARBURST或AWBURST来选择突发式读写的类型。
    (1)固定式突发读写是指地址是固定的,每一次传输的地址都不变。这样的突发式读写是重复的对一个相同的位置进行存取。例如FIFO。
    (2)增值式突发读写是指每一次读写的地址都比上一次的地址增加一个固定的值。
    (3)包装式突发读写跟增值式突发读写类似。包装式突发读写的地址是包数据的低地址当到达一个包边界。
    包装式突发读写有两个限制:
    ◇起始地址必须以传输的size对齐。
    ◇突发式读写的长度必须是2、4、8或者16。
    AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第12张图片

  10. 关于一些地址的计算公式。
    Start_Address 主机发送的起始地址
    Number_Bytes 每一次数据传输所能传输的数据byte的最大数量
    Data_Bus_Bytes 数据总线上面byte lanes的数量
    Aligned_Address 对齐版本的起始地址
    Burst_Length 一次突发式读写所传输的数据的个数
    Address_N 每一次突发式读写所传输的地址数量,范围是2-16
    Wrap_Boundary 包装式突发读写的最低地址
    Lower_Byte_Lane 传输的最低地址的byte lane
    Upper_Byte_Lane 传输的最高地址的byte lane
    INT(x) 对x进行向下取整
    下面是计算公式:
    Start_Address = ADDR
    Number_Bytes = 2SIZE
    Burst_Length = LEN + 1
    Aligned_Address = (INT(Start_Address / Number_Bytes) ) *Number_Bytes
    Address_1 = Start_Address
    Address_N = Aligned_Address + (N – 1) * Number_Bytes
    Wrap_Boundary = (INT(Start_Address / (Number_Bytes x Burst_Length))) * (Number_Bytes x Burst_Length)
    如果有Address_N = Wrap_Boundary + (Number_Bytes x Burst_Length),则后面的公式成立Address_N =Wrap_Boundary。
    第一次突发式读写:
    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 – 1DATA[(8 x Upper_Byte_Lane) + 7 : (8 x Lower_Byte_Lane)]。

17.关于总线复位
在复位期间,以下接口必须遵循:
(1)主机接口必须将ARVALID、AWVALID、WVALID信号置低。
(2)设备接口必须将RVALID、BVALID信号置低。
(3)所有其它信号可以为任意值。
主机接口必须开始将ARVALID、AWVLAID或WVALID置高仅仅在ARESETn信号变高后的ACK的第一个上升沿。具体情况如下图:
AXI4、AXI-lite、AXI-Stream总线协议学习笔记_第13张图片

你可能感兴趣的:(AXI4、AXI-lite、AXI-Stream总线协议学习笔记)