软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA
登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!
1概述
起初SoC片上总线处于发展阶段,不像微机总线那样成熟,目前还没有统一的标准,因此各大厂商和组织纷纷推出自己的标准,以便在未来的SoC片上总线标准中占有一席之地。ARM公司就在1995年推出了自己的总线——AMBA(Advanced Microcontroller Bus Architecture,高级微处理器总线架构)。它独立于处理器和制造工艺技术,增强了各种应用中的外设和系统宏单元的可重用性,非常适合于现代大规模集成电路设计自动化的要求。
AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。它是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。AXI 是AMBA 中一个新的高性能协议。AXI 技术丰富了现有的AMBA 标准内容,满足超高性能和复杂的SoC设计的需求。
2 AXI总线协议介绍
2.1 AXI总线概述
在XIINX FPGA的软件工具vivado以及相关IP中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。其中三种AXI总线分别为:
AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;
AXI4-Lite:(For simple, low-throughput memory-mapped communication )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。
AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。
由于AXI4和AXI4-Lite信号大部分一样,以下只介绍AXI4信号.另外对于AXI4-Stream协议不再本文中接收,后面有单独介绍的文章。
2.2 AXI协议特点
AMBA AXI 协议支持支持高性能、高频率系统设计。
- 适合高带宽低延时设计
- 无需复杂的桥就能实现高频操作
- 能满足大部分器件的接口要求
- 适合高初始延时的存储控制器
- 提供互联架构的灵活性与独立性
- 向下兼容已有的AHB和APB接口
关键特性:
- 分离的地址/控制、数据相位
- 使用字节选通,支持非对齐的数据传输
- 基于 burst 传输,只需传输首地址
- 读写数据通道分离,能提供低功耗 DMA
- 支持多种寻址方式
- 支持乱序传输
- 易于添加寄存器级来进行时序收敛
2.3 AXI 读写架构
AXI协议是基于 burst 的传输,并且定义了以下5个独立的传输通道:
- 读地址通道;
- 读数据通道;
- 写地址通道;
- 写数据通;
- 写响应通道;
地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。
AXI总线由5个通道构成,读写地址和数据总线都分开;
通道名称
通道功能
数据流向
read address
读地址通道
主机->从机
read data
读数据通道(包括数据通道和读响应通道)
从机->主机
write address
写地址通道
主机->从机
write data
写数据通道(包括数据通道和每8bit一个byte的写数据有效信号)
主机->从机
write response
写响应通道
从机->主机
2.4 AXI-4总线信号功能
1:时钟和复位
信号
方向
描述
ACLK
时钟源
全局时钟信号
ARESETn
复位源
全局复位信号,低有效
2:读地址通道信号
信号
方向
描述
ARID
主机to从机
读地址ID,用来标志一组写信号
ARADDR
主机to从机
读地址,给出一次读突发传输的读地址
ARLEN
主机to从机
ARLEN[7:0]决定读传输的突发长度。AXI3只支持1~16次的突发传输(Burst_length=AxLEN[3:0]+1),AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)。
burst传输具有如下规则:
wraping burst ,burst长度必须是2,4,8,16
burst不能跨4KB边界
不支持提前终止burst传输
ARSIZE
主机to从机
读突发大小,给出每次突发传输的字节数支持1、2、4、8、16、32、64、128
ARBURST
主机to从机
突发类型:
2'b00 FIXED:突发传输过程中地址固定,用于FIFO访问
2'b01 INCR :增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
2'b10 WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)
2'b11 Reserved
ARLOCK
主机to从机
总线锁信号,可提供操作的原子性
ARCACHE
主机to从机
内存类型,表明一次传输是怎样通过系统
ARPROT
主机to从机
保护类型,表明一次传输的特权级及安全等级
ARQOS
主机to从机
质量服务QoS
ARREGION
主机to从机
区域标志,能实现单一物理接口对应的多个逻辑接口
ARUSER
主机to从机
用户自定义信号
ARVALID
主机to从机
有效信号,表明此通道的地址控制信号有效
ARREADY
从机to主机
表明"从"可以接收地址和对应的控制信号
3:读数据通道信号
信号名
方向
描述
RID
从机to主机
一次读传输的ID tag
RDATA
从机to主机
读数据
RRESP
从机to主机
读响应,表明读传输的状态
RLAST
从机to主机
表明此次传输是最后一个突发传输
RUSER
从机to主机
用户自定义信号
RVALID
从机to主机
写有效,表明此次写有效
RREADY
主机to从机
表明从机可以接收写数据
4:写地址通道信号
信号
方向
描述
AWID
主机to从机
写地址ID,用来标志一组写信号
AWADDR
主机to从机
写地址,给出一次写突发传输的写地址
AWLEN
主机to从机
AWLEN[7:0]决定写传输的突发长度。AXI3只支持1~16次的突发传输(Burst_length=AxLEN[3:0]+1),AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)。
burst传输具有如下规则:
wraping burst ,burst长度必须是2,4,8,16
burst不能跨4KB边界
不支持提前终止burst传输
AWSIZE
主机to从机
写突发大小,给出每次突发传输的字节数支持1、2、4、8、16、32、64、128
AWBURST
主机to从机
突发类型:
2'b00 FIXED:突发传输过程中地址固定,用于FIFO访问
2'b01 INCR :增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
2'b10 WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)
2'b11 Reserved
AWLOCK
主机to从机
总线锁信号,可提供操作的原子性
AWCACHE
主机to从机
内存类型,表明一次传输是怎样通过系统的
AWPROT
主机to从机
保护类型,表明一次传输的特权级及安全等级
AWQOS
主机to从机
质量服务QoS
AWREGION
主机to从机
区域标志,能实现单一物理接口对应的多个逻辑接口
AWUSER
主机to从机
用户自定义信号
AWVALID
主机to从机
有效信号,表明此通道的地址控制信号有效
AWREADY
从机to主机
表明"从"可以接收地址和对应的控制信号
5:写数据通道信号
信号名
方向
描述
WID
主机to从机
一次写传输的ID tag
WDATA
主机to从机
写数据
WSTRB
主机to从机
WSTRB[n:0]对应于对应的写字节,WSTRB[n]对应WDATA[8n+7:8n]。WVALID为低时,WSTRB可以为任意值,WVALID为高时,WSTRB为高的字节线必须指示有效的数据。
WLAST
主机to从机
表明此次传输是最后一个突发传输
WUSER
主机to从机
用户自定义信号
WVALID
主机to从机
写有效,表明此次写有效
WREADY
从机to主机
表明从机可以接收写数据
6:写响应信号
信号名
方向
描述
BID
从机to主机
写响应ID tag
BRESP
从机to主机
写响应,表明写传输的状态
BUSER
从机to主机
用户自定义
BVALID
从机to主机
写响应有效
BREADY
主机to从机
表明主机能够接收写响应
2.5数据有效的情况
AXI4所采用的是一种READY,VALID握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。传输源产生VLAID信号来指明何时数据或控制信息有效。而目地源产生READY信号来指明已经准备好接受数据或控制信息。传输发生在VALID和READY信号同时为高的时候。VALID和READY信号的出现有三种关系。
VALID先变高READY后变高。时序图如下:
在箭头处信息传输发生。
READY先变高VALID后变高。时序图如下:
同样在箭头处信息传输发生。
VALID和READY信号同时变高。时序图如下:
在这种情况下,信息传输立马发生,如图箭头处指明信息传输发生。
需要注意的是允许 READY 信号等待 VALID 信号再有效,即使从机准备好,也可以不提供READY信号,等到主机发送VALID信号再提供READY信号。对应的VALID信号不允许等待READY信号,即不允许VALID等待READY信号拉高后再拉高,否则容易产生死锁现象。
2.6 通道信号要求
通道握手信号:每个通道有自己的xVALID/xREADY握手信号对。
写地址通道:当主机驱动有效的地址和控制信号时,主机可以断言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 协议要求通道间满足如下关系:
- 写响应必须跟随最后一次burst的的写传输
- 读数据必须跟随数据对应的地址
- 通道握手信号需要确认一些依耐关系
2.7 传输结构
3.4.1 地址结构
AXI 协议是基于 burst 的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。
3.4.2 突发长度(AxLEN)
- 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)。
- wraping burst ,burst长度必须是2,4,8,16
- burst不能跨4KB边界
- 不支持提前终止burst传输
Notes:对于 FIFO,忽略后续读数据可能导致数据丢失,必须保证突发传输长度和要求的数据传输大小匹配。
3.4.3 突发大小(AxSIZE)
ARSIZE[2:0],读突发传输;AWSIZE[2:0],写突发传输。
AxSIZE[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 突发类型(AxBURST)
INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
AxBURST[1:0]
Burst Type
Descriptions
2'b00
FIXED
FIXED:突发传输过程中地址固定,用于 FIFO 访问。
2'b01
INCR
INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
2'b10
WRAP
WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。
2'b11
Reserved
3.4.5 突发传输地址
Aligned_Addr = (INT(Start_Address / Number_Bytes)) x Number_Bytes。//INT表示向下取整。
对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:
Address_N = Aligned_Address + (N-1) x Number_Bytes
Wrap_Boundary=(INT(Start_Address / (Number_Bytes x Burst_Length))) x (Number_Bytes x Burst_Length)
2.5突发式读写
1:突发式写时序图
2:突发式读的时序图
当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。