不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

AXI总线介绍

一、AXI总线概述

在Xilinx系列FPGA及其有关IP核中,经常见到AXI总线接口,AXI总线又分为三种:

AXI-Lite,AXI-Full以及AXI-Stream,其中AXI-Lite和AXI-Full都是基于memory map的形式实现数据传输(即包括地址总线),而AXI-Stream是以数据流的形式传输,无地址。

其中AXI-Lite是AXI-Full的简化版,适合小批量的数据传输,常用来进行命令的传输,IP核的初始化等。

AXI-Full则适用于大批量,高性能的数据传输。

文章将对AXI-Full和AXI-Lite进行一个简单介绍,如果需要更进一步了解可以去arm官网下载手册阅读:https://www.arm.com/architecture/system-architectures/amba/amba-specifications

二、AXI总线通道

CH1 时钟和复位(Global signals)

信号

方向

描述

ACLK

时钟源

全局时钟信号,上升沿有效

ARESETn

复位源

全局复位,低有效,(只有在ACLK上升沿拉低才有效)

CH2 写地址通道(Write address channel signals)

信号

方向

描述

AWID

M -> S

写地址ID,用来识别一组写地址信号

AWADDR

M -> S

写地址,给出一次突发传输的首地址,(余下地址由Slave端自己计算,每次传输地址不能超过4KB)

AWLEN

M -> S

突发长度,一次突发传输中的长度,该信息决定了与地址相关的数据个数。在AXI3中只支持1-16个传输长度的突发(Burst_Length = AxLEN[3:0] + 1),在AXI4的INCR突发类型下,允许1-256个长度的突发,对于其他的传输类型依然保持1-16次突发传输(Burst_Length=AxLEN[7:0]+1)。

AXI突发事件有如下规则:

  • 对于wrapping burst,突发长度必须是 2, 4, 8, or 16;
  • 不能跨过4KB的地址边界;
  • 不支持中途停止传输

AWSIZE

M -> S

突发大小,给出每次传输的字节数,支持1、2、4、8、16、32、64、128

AWBURST

M -> S

突发类型,突发类型和突发大小决定slave端地址的计算。

0b00 FIXED:地址不变,常用于加载或清空FIFO

0b01 INCR:地址递增,增加的大小取决于AxSIZE的值

0b10 WRAP:回环突发,与INCR类似,但会在增加到特定的地址后回到低地址。传输的起始地址必须和每次传输的大小对齐;传输的长度只能是2、4、8、16。回环的边界=AxSIZE*AxLEN,如果在一次传输中地址超过了边界,就会进行回环;第一次传输的地址可以高于回环地址。

0b11 Reserved

AWLOCK

M -> S

AXI4不支持,AXI3必须支持

AWCACHE

M -> S

内存类型,表明一次传输是怎么通过系统的。AXI3与AXI4编码不同。

AWPROT

M -> S

保护类型,传输的特权级别、安全等级,是指令传输还是数据传输。

AWPROT[0]   0:unprivileged access

1:privileged access

AWPROT[1]   0:secure access

1:non-secure access

AWPROT[2]   0:data access;

1:instruction access

AWQOS

M -> S

服务质量,只在AXI4中有

AWREGION

M -> S

区域标识,允许一个物理接口用于多个逻辑接口,只在AXI4中有

AWUSER

M -> S

用户在写的过程中自定义的信号,

AWVALID

M -> S

有效信号,表明Master准备发送写地址或信息了

AWREADY

S -> M

就绪,表明Slave准备好接收发送的信息了。

CH3 写数据通道(Write data channel signals)

信号

方向

描述

WID

M -> S

写ID标签,只在AXI3中有

WDATA

M -> S

写数据

WSTRB

M -> S

表明哪个字节通道写入数据。WSTRB[n:0]表明哪一个通道有效,WSTRB[n]对应WDATA[8n+7:8n],当数据有效时,WSTRB必须为高,WVALID为低时,可以为任意值。

WLAST

M -> S

表明该次突发传输中的最后一次传输

WUSER

M -> S

用户在写数据过程中自定义的信号

WVALID

M -> S

有效信号,表明此次写有效

WREADY

S -> M

就绪,表明Slave准备好接收数据了。

CH4 写响应通道(Write response channel signals)

信号

方向

描述

BID

S -> M

响应ID标签,

BRESP

S -> M

写响应,表明写传输的状态

OKAY:成功

EXOKAY:表明单独的一次进程成功

SLVERR:Slave error

DECERR:Decode error

BUSER

S -> M

用户自定义信号,只在AXI4中有

BVALID

S -> M

写响应有效,在一次突发传输的最后拉高一次

BREADY

M -> S

Master能接收到写响应,与BVALID状态有关

CH5 读地址通道(Read address channel signals)

信号

方向

描述

ARID

M -> S

读地址ID

ARADDR

M -> S

读地址,给出一次突发读取传输的首地址

ARLEN

M -> S

突发长度,一次突发传输中的长度,该信息决定了与地址相关的数据个数。在AXI3中只支持1-16个传输长度的突发(Burst_Length = AxLEN[3:0] + 1),在AXI4的INCR突发类型下,允许1-256个长度的突发,对于其他的传输类型依然保持1-16次突发传输(Burst_Length=AxLEN[7:0]+1)。

AXI突发事件有如下规则:

  • 对于wrapping burst,突发长度必须是 2, 4, 8, or 16;
  • 不能跨过4KB的地址边界;
  • 不支持中途停止传输

ARSIZE

M -> S

突发大小,给出每次传输的字节数,支持1、2、4、8、16、32、64、128

ARBURST

M -> S

突发类型,突发类型和突发大小决定slave端地址的计算。

0b00 FIXED:地址不变,常用于加载或清空FIFO

0b01 INCR:地址递增,增加的大小取决于AxSIZE的值

0b10 WRAP:回环突发,与INCR类似,但会在增加到特定的地址后回到低地址。传输的起始地址必须和每次传输的大小对齐;传输的长度只能是2、4、8、16。回环的边界=AxSIZE*AxLEN,如果在一次传输中地址超过了边界,就会进行回环;第一次传输的地址可以高于回环地址。

0b11 Reserved

ARLOCK

M -> S

AXI4不支持,AXI3必须支持

ARCACHE

M -> S

内存类型,表明一次传输是怎么通过系统的。AXI3与AXI4编码不同。

ARPROT

M -> S

保护类型,传输的特权级别、安全等级,是指令传输还是数据传输。

AWPROT[0]   0:unprivileged access

1:privileged access

AWPROT[1]   0:secure access

1:non-secure access

AWPROT[2]   0:data access;

1:instruction access

ARQOS

M -> S

服务质量,只在AXI4中有

ARREGION

M -> S

区域标识,允许一个物理接口用于多个逻辑接口,只在AXI4中有

ARUSER

M -> S

用户在写的过程中自定义的信号,

ARVALID

M -> S

有效信号,表明Master准备发送写地址或信息了

ARREADY

S -> M

就绪,表明Slave准备好接收发送的信息了。

CH6 读数据通道(Read data channel signals)

信号

方向

描述

RID

S -> M

读ID标签,只在AXI3中有

RDATA

S -> M

读数据

RRESP

S -> M

读响应,表明写传输的状态

OKAY:成功

EXOKAY:表明单独的一次进程成功

SLVERR:Slave error

DECERR:Decode error。

RLAST

S -> M

表明该次突发传输中的最后一次传输

RUSER

S -> M

用户在写数据过程中自定义的信号

RVALID

S -> M

有效信号,表明该通道需要读取数据

RREADY

M -> S

就绪,表明Master准备好接收数据了。

AXI总线的握手机制

AXI总线的五个通道都使用的是相同的VALID和READY握手,发送端发送的VALID信号表明此时发送出去的信息有效,接收端发出的READY信号表明此时接收端已经准备好了接收信息,该握手机制存在三种情况:

发送端准备好了信息,发送VALID信号,此时接收端还未准备好接收,如果在下一个时钟周期接收端准备好了,就会把READY拉高。此时VALID和READY都为高,完成一次传输。

接收端处于准备接收的状态,READY为高,一旦发送端准备好了信息,发送VALID信号,此时接收端在时钟上升沿直接接收,完成一次传输。

发送端准备好了信息,发送VALID信号,此时接收端也准备好接收,READY为高,完成一次传输。

VALID信号和READY信号的拉高不分先后,只要同时为高,就完成了一次握手,

posted on 2022-11-09 13:38  皮皮祥  阅读(557)  评论(0编辑  收藏  举报