AMBA系列 -- AXI 总线
0.绪论
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。
AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。AXI4.0-Lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-Stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。
1.简介
1.1 AXI协议特点
AMBA AXI 协议支持支持高性能、高频率系统设计。
- 适合高带宽低延时设计
- 无需复杂的桥就能实现高频操作
- 能满足大部分器件的接口要求
- 适合高初始延时的存储控制器
- 提供互联架构的灵活性与独立性
- 向下兼容已有的AHB和APB接口
关键特性:
- 分离的地址/控制、数据相位
- 使用字节选通,支持非对齐的数据传输
- 基于 burst 传输,只需传输首地址
- 读写数据通道分离,能提供低功耗 DMA
- 支持多种寻址方式
- 支持乱序传输
- 易于添加寄存器级来进行时序收敛
1.2 AXI 读写架构
AXI协议是**基于 burst **的传输,并且定义了以下5个独立的传输通道:
读地址通道;
读数据通道;
写地址通道;
写数据通;
写响应通道;’
地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。
AXI总线由5个通道构成:
通道名称 | 通道功能 | 数据流向 |
---|---|---|
read address | 读地址通道 | 主机->从机 |
read data | 读数据通道(包括数据通道和读响应通道) | 从机->主机 |
write address | 写地址通道 | 主机->从机 |
write data | 写数据通道(包括数据通道和每8bit一个byte的写数据有效信号) | 主机->从机 |
write response | 写响应通道 | 从机->主机 |
读写地址和数据总线都分开;
读架构:
写架构:
AXI使用基于 VALID / READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。后面详细讨论这种握手机制;
- 读/写地址通道: 读、写传输每个都有自己的地址通道,对应的地址通道承载着对应传输的地址控制信息。
- 读数据通道: 读数据通道承载着读数据和读响应信号包括数据总线(8/16/32/64/128/256/512/1024 bit)和指示读传输完成的读响应信号。
- 写数据通道: 写数据通道的数据信息被认为是缓冲(buffered)了的,master无需等待slave对上次写传输的确认即可发起一次新的写传输。写通道包括数据总线(8/16...1024 bit)和字节线(用于指示8 bit 数据信号的有效性)。
- 写响应通道: slave使用写响应通道对写传输进行响应。所有的写传输需要写响应通道的完成信号。
1.3 接口和互联
AXI协议提供单一的接口定义,能用在下述三种接口之间:master/interconnect、slave/interconnect、master/slave。 可以使用以下几种典型的系统拓扑架构:
-
共享地址与数据总线
-
共享地址总线,多数据总线
-
multilayer多层,多地址总线,多数据总线
在大多数系统中,地址通道的带宽要求没有数据通道高,因此可以使用共享地址总线,多数据总线结构来对系统性能和互联复杂度进行平衡。
1.4 复位
复位信号可以异步复位,但必须 同步释放 ,复位时,信号要求如下:
- 主机驱动的所有VALID信号(ARVALID, AWVALID和WVALID)必须被拉低
- 从机驱动的所有VALID信号(RVALID和BVALID)必须被拉低
- 其他信号无要求
2. 信号描述
2.1 全局信号
信号名 | 源 | 描述 |
---|---|---|
ACLK | 时钟源 | 全局时钟信号 |
ARESETn | 复位源 | 全局复位信号,低有效 |
2.2 写地址通道信号
信号名 | 源 | 描述 |
---|---|---|
AWID | 主机 | 写地址ID,用来标志一组写信号 |
AWADDR | 主机 | 写地址,给出一次写突发传输的写地址 |
AWLEN | 主机 | 突发长度,给出突发传输的次数 |
AWSIZE | 主机 | 突发大小,给出每次突发传输的字节数 |
AWBURST | 主机 | 突发类型,FIXED,INCR,WRAP |
AWLOCK | 主机 | 总线锁信号,可提供操作的原子性,normal, exclusive, locked |
AWCACHE | 主机 | 内存Cache类型,表明一次传输是怎样通过系统的 bufferable, cacheable, read-allocate, write-allocate |
AWPROT | 主机 | 保护类型,表明一次传输的特权级及安全等级 |
AWQOS | 主机 | 质量服务QoS,可作为安全级标志 |
AWREGION | 主机 | 区域标志,能实现单一物理接口对应的多个逻辑接口,也可以对某些地址进行保护 |
AWUSER | 主机 | 用户自定义信号 |
AWVALID | 主机 | 有效信号,表明此通道的地址控制信号有效1 = 地址和控制信息有效0 = 地址和控制信息无效这个信号会一直保持,直到AWREADY变为高 |
AWREADY | 从机 | 表明从设备可以接收地址和对应的控制信号写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。1 = 设备准备好0 = 设备没准备好 |
2.3 写数据通道信号
信号名 | 源 | 描述 |
---|---|---|
WID | 主机 | 一次写传输的ID |
WDATA | 主机 | 写数据 |
WSTRB | 主机 | 写数据有效的字节线,用来表明哪 8bits 数据是有效的 |
WLAST | 主机 | 表明此次传输是最后一个突发传输 |
WUSER | 主机 | 用户自定义信号 |
WVALID | 主机 | 写有效,表明此次写有效 |
WREADY | 从机 | 表明从机可以接收写数据 |
2.4 写响应通道信号
信号名 | 源 | 描述 |
---|---|---|
BID | 从机 | 写响应ID |
BRESP | 从机 | 写响应,表明写传输的状态,OKAY,EXOKAY,SLVERR,DECERR |
BUSER | 从机 | 用户自定义 |
BVALID | 从机 | 写响应有效 |
BREADY | 主机 | 表明主机能够接收写响应 |
2.5 读地址通道信号
信号名 | 源 | 描述 |
---|---|---|
ARID | 主机 | 读地址ID,用来标志一组写信号 |
ARADDR | 主机 | 读地址,一次突发读的首地址 |
ARLEN | 主机 | 突发长度,给出突发传输的次数 |
ARSIZE | 主机 | 突发大小,给出每次突发传输的字节数 |
ARBURST | 主机 | 突发类型,FIXED,INCR,WRAP |
ARLOCK | 主机 | 总线锁信号,可提供操作的原子性,normal, exclusive, locked |
ARCACHE | 主机 | 内存Cache类型,表明一次传输是怎样通过系统的 bufferable, cacheable, read-allocate, write-allocate |
ARPROT | 主机 | 保护类型,表明一次传输的特权级及安全等级 |
ARQOS | 主机 | 质量服务QoS,可作为安全级标志 |
ARREGION | 主机 | 区域标志,能实现单一物理接口对应的多个逻辑接口,也可以对某些地址进行保护 |
ARUSER | 主机 | 用户自定义信号 |
ARVALID | 主机 | 有效信号,表明此通道的地址控制信号有效 |
ARREADY | 从机 | 表明从设备可以接收地址和对应的控制信号 |
2.6 读数据通道信号
信号名 | 源 | 描述 |
---|---|---|
RID | 从机 | 一次读传输的ID |
RDATA | 从机 | 读数据 |
RRESP | 从机 | 读响应,表明读传输的状态 |
RLAST | 从机 | 表明读突发的最后一次传输 |
RUSER | 从机 | 用户自定义 |
RVALID | 从机 | 表明此通道信号有效 |
RREADY | 主机 | 表明主机能够接收读数据和响应信息 |
2.7 低功耗接口信号
信号名 | 源 | 描述 |
---|---|---|
CSYSREQ | 时钟控制器 | 系统低功耗请求,此信号从“时钟控制器”到“外设”,使外围设备进入低功耗状态 |
CSYSACK | 外设 | 低功耗请求应答 |
CACTIVE | 外设 | Clock active1 = 外围设备时钟请求0 = 外围设备时钟无请求 |
每个数据通道有独立的xVALID/xREADY握手信号对。
3. 读写传输
3.1 握手过程
5个传输通道均使用 **VALID ** / **READY 信号对传输过程的地址、数据、控制信号进行握手。使用双向握手机制,传输仅仅发生在 VALID 、READY **同时有效的时候。
source 方,产生 VALID 信号,代表其的 address,data 和 control 信息已经准备好,并有效;
destination 方,产生 **READY **信号,代表其可以进行交互;
当 **VALID ** / **READY **信号同时为高,传输开始
下图是几种握手机制:
VALID先有效,等待READY有效后完成传输(VALID一旦有效后在传输完成前不可取消)
T3 时刻开始传输;
READY先有效,等待 VALID 有效后完成传输(READY可以在VALID有效前撤销)
T3 时刻开始传输;
VALID和READY同时有效,立刻完成传输
T2 开始传输;
需要注意的是允许 READY 信号等待 VALID 信号再有效,即使从机准备好,也可以不提供READY信号,等到主机发送VALID信号再提供READY信号。对应的VALID信号不允许等待READY信号,即不允许VALID等待READY信号拉高后再拉高,否则容易产生死锁现象。
3.2 通道信号要求
通道握手信号:每个通道有自己的 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的的写传输
- 读数据必须跟随数据对应的地址
- 通道握手信号需要确认一些依耐关系
3.3 通道之间握手信号的依赖关系(不同通道之间)
为防止死锁,通道握手信号需要遵循一定的依赖关系。
3.3.1 同一组通道内的要求
(1)VALID信号不能依赖 READY 信号。
(2)AXI接口可以等到检测到 VALID 才断言对应的 READY,也可以检测到 VALID 之前就断言 READY。
3.3.2 不同通道组依赖关系
下文中会使用一些图描述依赖关系。图表中,单箭头表示可以等待有效再置位,双重箭头表示必须等待有效再置位
3.3.2.1 读操作握手依赖
上图为读操作的依赖关系,其中:
ARREADY 和 ARVALID 信号是读的地址信号;
RREADY 和 RVALID 是读数据信号;
官方针对这部分的说明为:
1、Master 提供的 ARVALID 信号必须不等待 Slave 的 ARREADY 信号(翻译:Master 准备好了就发送 ARVALID 信号,这个信号不能够去依赖 Slave 的 ARREADY,换句话说,也就是一旦 Master 准备好,就发 ARVALID);
2、Slave 可以等待 Master 的 ARVALID 信号,并且决定要不要发送 ARREADY;(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
3、Slave 可以在 Master 发送 ARVALID 信号之前,自己一切准备就绪的时候,发送 ARREADY;(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
4、Slave 在发送 RVALID 之前,必须等待 ARVALID 和 ARREADY(翻译:在数据阶段握手之前,必须等待地址阶段的握手完毕,地址阶段握手信息由 ARVALID 和 ARREADY 提供,当这个阶段完成后,Slave 方可提供 RVALID 信号,来表示 Slave 已经准备好)
5、Slave 的 RVALID 必须不等待 Master 发送 RREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
6、Master 可以等待 Slave 发送 RVALID 之后在发送 RREADY (翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
7、Master 也可以在自己准备好之后,在 Slave 提供 RVALID 之前,就提供 RREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
简单的说:
所以针对读操作,AXI Spec 要求读 Data 信号组的握手信号必须出现在读 Addr 信号组握手之后,即必须等到 ARVALID 的ARREADY 同时为 High 后,RVALID 才能拉高;
同时,一个通道内,xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID;
先是 Master 端提供 ARVALID 和相关的控制信息,进行地址阶段的握手;这部分完成后,再由 Slave 发送 RVALID 信号,并进行握手;
3.3.2.2 写操作握手依赖
图为写操作的依赖关系,其中:
AXI 中写操作中唯一的强依赖关系是写响应通道 BVALID,仅当 WVALID 和 WREADY 信号同时有效(数据传输完成)且WLAST 信号有效(突发传输的最后一个数据传输完成)后才会被置位。
上图为读操作的依赖关系,其中:
AWVALID 和 AWREADY:是写地址通道的信号;
WVALID 和 WREADY:是写数据通道的信号;
BVALID 和 BREADY:是写响应通道的信号;
官方针对这部分的说明为:
1、Master 在提供 AWVALID 或者 WVALID 信号,必须不等待 Slave提供 AWREADY 或者 WREADY 信号(翻译:一旦 Master准备好,那么立即提供 AWVALID 或者 WVALID,也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
2、Slave 可以等待 Master 的 AWVALID 或者 WVALID 或者两个,然后在提供 AWREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
3、Slave 也可以不等待 Master 的 AWVALID 或者 WVALID 或者两个,一旦 Slave 端准备好,就立即提供 AWREADY 信号
4、Slave 可以等待 Master 的 AWVALID 或者 WVALID 或者两个,然后在提供 WREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
5、Slave 也可以不等待 Master 的 AWVALID 或者 WVALID 或者两个,一旦 Slave 端准备好,就立即提供 WREADY 信号
6、Slave 端必须等待 WVALID 和 WREADY 信号,然后在去发送 BVALID 信号(翻译:必须在写流程握手完毕之后,Slave 才能够去进行写响应通道的握手,即提供 BVALID 信号)
7、Slave 端也必须等待 WLAST 信号之后,再去提供 BVALID 信号,因为写响应信号 BRESP 必须只在写传输的最后一个数据传输完成后被设置;(翻译:Slave 提供的 BVALID 信号之前,必须还要等 WLAST 信号)
8、Slave 必须不等待 BREADY 信号,一旦 Slave 准备好,立即发送 BVALID 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
9、Master 可以等待 Slave 发送 BVALID 之后在发送 BREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
10、Master 也可以先提供 BREADY 信号(翻译:也就是 xVALID 信号不等待 xREADY 信号,xREADY 可以等待 xVALID)
3.3.2.3 写响应操作握手依赖
图为写响应操作的依赖关系,其中:
AWVALID 和 AWREADY:是写地址通道的信号;
WVALID 和 WREADY:是写数据通道的信号;
BVALID 和 BREADY:是写响应通道的信号;
不在多说了,在AXI4中,定义了额外的依赖关系,即BVALID必须依赖AWVALID、AWREADY、WVALID和WREADY信号
3.4 传输结构
3.4.1 地址结构
AXI 协议是基于 burst 的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。
3.4.2 突发长度(AxLEN)
突发长度为每次突发传输的传输次数(transfers 的次数),AXI3 范围限制1~16(AXI4 增量模式1~256)且不能跨越4kb的地址空间,每次突发传输不允许提前终止(可以通过关闭所有数据字段的方式使一段传输数据无效,但传输行为必须完成)。
ARLEN[7:0] 决定读传输的突发长度;
AWLEN[7:0] 决定写传输的突发长度;
AXI3 只支持 1~16 次的突发传输(Burst_length=AxLEN[3:0]+1)
AXI4 扩展突发长度支持 INCR 突发类型为1256次传输,对于其他的传输类型依然保持116次突发传输(Burst_Length=AxLEN[7:0]+1)。
AXI burst 传输具有如下规则:
- wraping burst ,burst长度必须是2,4,8,16
- burst不能跨4KB边界
- 不支持提前终止burst传输
所有的组件都不能提前终止一次 burst 传输。然而,主机可以通过解断言所有的写的strobes来使非所有的写字节来减少写传输的数量。读burst中,主机可以忽略后续的读数据来减少读个数。也就是说,不管怎样,都必须完成所有的burst传输。
Notes:对于 FIFO,忽略后续读数据可能导致数据丢失,必须保证突发传输长度和要求的数据传输大小匹配。
3.4.3 突发大小(AxSIZE)
AxSIZE 定义了每次突发 transfers 的字节数
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)
FIXED:突发传输过程中地址固定,用于 FIFO 访问。
INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。
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 突发传输地址
Start_Address = AxADDR
Number_Bytes = 2 ^ AxSIZE
Burst_Length = AxLEN + 1
Aligned_Addr = (INT(Start_Address / Number_Bytes)) x Number_Bytes。//INT表示向下取整。
对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:
Address_N = Aligned_Address + (N-1) x Number_Bytes
WRAP突发,突发边界:
Wrap_Boundary =(INT(Start_Address / (Number_Bytes x Burst_Length))) x (Number_Bytes x Burst_Length)
3.4.6 写数据选通(WSTRB)
WSTRB 的每一位对应数据中的 8 位(1字节),用于标志数据中的对应字节是否有效。即当 WSTRB[n] = 1 时,标志数据中**WDATA[(8n)+7: (8n)] **部分有效。
3.4.7 读写数据结构(xDATA)
3.4.7.1 窄带传输(Narrow transfers)
当传输的数据位宽小于 xDATA 总线带宽时,为窄带传输,每次使用的数据位数不同:
- 固定地址的突发下,使用同一段数据信号线
- 在递增地址和环回地址的突发下,使用不同段信号线
Spec 说的比较晦涩难懂,所以 Spec 给了一个例子:
例子 1:
1、burst 传输包含 5 个 transfer
2、从 0 地址开始
3、每一个 transfer 都是 8 bits
4、transfer 在 32bits 的 bus
5、burst 模式为增量模式
上图为地址递增突发下,在32位数据信号下使用8bit传输的窄带传输使用的位数图。第一次传输使用07位,第二次使用815位,依次递增;在第五次传输时回到开头使用0~7位;
3.4.7.2 非对齐传输(Unaligned transfers)
AXI 总线支持非对齐的传输,当传输位宽超过1byte,起始地址不为数据总线硬件带宽(byte单位)整数倍时,为不对齐传输。不对齐传输的时候需要配合数据选通在第一次传输时将某几个byte置为无效,使第二次突发传输的起始地址(从机自动计算)为突发尺寸的整数倍。
如图,突发尺寸为4byte,若要对齐传输,起始地址要为4的整数倍。图中起始地址为0x07,因此为非对齐传输。第一次传输时,前3个数据为无效字段,可以使用数据选通WSTRB将前3个byte置为无效。(深色部分为无效数据)
下图是在窄带传输下的对齐和非对齐传输启动写数据总线 64 bits。传输 32bit 数据,是窄带传输,
第一个图对齐访问的情况下每次交替使用低字节和高字节。(深色部分为无效数据)
第二个图,非对齐访问由于启动地址为 0x07,而硬件带宽为 64 bit,则必须由地址0启动,设置前7个字段为无效,后面使用对齐传输。(深色部分为无效数据)
3.4.8 应答通道数据结构
3.4.8.1 响应信号(*RESP)
针对读和写均有响应的响应信号:
- **BRESP[1:0] **写响应信号,每次突发传输完成后
- **RRESP[1:0] **读响应信号(位于读数据通道)
响应信号含义如下:
- OKAY(2'b00):正常访问正确/特权访问失败/不支持特权访问
- EXOKAY(2'b01):特权访问成功
- SLVERR(2'b10):从机错误,传输失败
- DECERR(2'b11):互连解码错误,传输失败
4.传输特性
AXI从机分为两种:
- 存储器从机(Memory Slave):需要支持所有传输特性
- 外设从机(Peripheral Slave):仅需要支持指定的操作,但是可以保证所有类型的传输完成(不要求非指定的操作响应正确)
**AxCACHE **用于指定传输特性,传输特性用于标定传输如何在系统中进行和系统级缓存如何处理传输。
4.1.存储器特性
存储器特性包括4个位,如下所示:
-
AxCACHE[0] (Bufferable):AxCACHE[0]表示传输过程中是否有缓存,当该位置为1时,表示表示传输路径上具有buffer(可延迟transaction到达最终点的时间)
-
AxCACHE[1] (Modifiable):标记传输是否可以被修改/优化,当其置0时,每个传输将不会被更改,具体来说,AxADDR、AxSIZE、AxLEN、AxBURST、AxLOCK和AxPROT信号不会被修改(地址,突发传输信息,传输隐私信息不被修改)。但是AxCACHE[0]、ID和QoS可能被修改,同时,一个突发长度长于16的突发传输可能被切开,但是保证传输效果相同。当该位置1时,AxLOCK和AxPROT信号不会被修改,以上其他AxADDR、AxSIZE、AxLEN、AxBURST可能发生的改变,另外:
- 多个传输可能被合并为一个传输,一个传输可能被切分为多个传输
- 读传输在从机端读出的数据可能多于主机的请求(多的数据被保存在cache中用于优化数据访问)
- 写传输可能访问到超过主机请求的地址范围,妥善使用 WSTRB 保证仅有需要的地址被覆盖
另外,AxLOCK和AxPROT信号仍然不能被改变,同时需要注意的是:AxCACHE[0]=0,具有相同的AXI ID和指向相同的从机的一系列传输的顺序不能改变。
-
AxCACHE[2] (Read-allocate)
-
AxCACHE[3] (Write-allocate):读写操作前是否检查缓存以优化传输
4.2.存储器类型
AXI4可支持不同的存储类型,**AxCACHE[3:0] **用于描述不同的存储类型,如下图所示
5. 典型读写时序
5.1 AXI 突发读时序
当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。
设备会在第一次突发式读完成后处理第二次突发式读数据。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后才开始处理第二个地址的数据。
5.2 AXI 突发写时序
这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成
6. 低功耗
A. 低功耗时钟控制接口包括下面两个信号:
(1) 来自外围设备的信号,用于指明什么时候时钟使能能或者禁能。
(2) 两个握手信号用于系统时钟控制器请求退出或者进入低功耗状态。
B. 时钟控制接口的一个主要信号时CACTIVE,外围设备用这个信号来指明请求时钟使能。外围设备置CACTIVE有效去请求时钟,系统时钟控制器必须马上使能时钟。如果外围设备将 CACTIVE 置为无效,则系统时钟控制器将自己决定是否使能或者禁能外围设备时钟。
C. AXI协议提供双线 Request/Acknowledge 握手来支持请求
(1)CSYSREQ 当外围设备请求进入低功耗状态时,系统时钟控制器将CSYSREQ置低,平时CSYSREQ都是置高的。
(2)CSYSACK 外围设备用CSYSACK信号作为进入低功耗状态和离开低功耗状态的应答信号。
下面是CSYSREQ和CSYSACK信号之间的时序图:
系统时钟控制器在T1时刻发出请求,外围设备在T2时刻给予应答,此时进入低功耗状态。在T3时刻,CSYSREQ变高,请求离开低功耗状态,在T4时刻得到应答,此时离开低功耗状态进入正常模式。
D. 外围设备可以选择接受请求也可以选择不接受请求。主要通过信号CACTIVE来决定。
既可以通过系统也可以通过外围设备来退出低功耗状态。只要置信号CACTIVE和CSYSREQ这两个信号中的一个为高就可以退出低功耗模式。
而系统可以通过置CSYSREQ为高来退出低功耗模式。
7. 多地址和乱序传输
下面描述 AXI 协议用事务IDtags来处理多地址和乱序传输。
1、下面介绍5中事务IDs:
(1)AWID 这个IDtag是写地址群组信号。
(2)WID 这个是写IDtag在写事务中,与写数据在一起,主机传送一个WID去匹配与地址相一致的AWID。
(3)BID 这个IDtag是写响应事务中。设备会传送BID去匹配与AWID和WID相一致的事务。
(4)ARID 这个IDtag是读地址群组信号。
(5)RID 这个IDtag是在读事务中。设备传送RID去匹配与ARID相一致的事务。
2、主机可以使用一个事务的ARID或者AWID段提供的附加信息排序主机的需要。事务序列规则如下:
(1) 从不同主机传输的事务没有先后顺序限制。他们可以以任意顺序完成。
(2) 从同一个主机传输的不同ID事务,也没有先后顺序限制。他们可以以任意顺序完成。
(3) 相同数值的AWID写事务数据序列必须按照顺序依次写入主机发送的地址内。
(4) 相同数值的ARID读事务数据序列必须遵循下面的顺序:
当从相同设备读相同的ARID时,设备必须确保读数据按照相同的地址顺序接受。
当从不同的设备读相同的ARID时,接口处必须确保读数据按照主机发送的相同的地址顺序。
(5) 在相同的AWID和ARID的读事务和写事务之间没有先后顺序限制。如果主机要求有顺序限制,那么必须确保第一次事务完全完成后才开始执行第二个事务。
3、当一个主机接口与interconnect相连时,interconnect会在信号ARID、AWID、WID段添加一位,每一个主机端口都是独一无二的。
这样做有两个影响:
(1)主机不需要去知道其他主机的ID数值,因为interconnect是ID值是唯一的,当将主机number添加到段中。
(2)在设备接口处的ID段的宽度要比主机接口处的ID段宽。
对于读数据,interconnect 附加一位到RID段中,用来判断哪个主机端口读取数据。Interconnect会移除RID段中的这一位在将RID的值送往正确的主机端口之前。
参考文档:
https://www.cnblogs.com/uiojhi/p/9366884.html
https://blog.csdn.net/ivy_reny/article/details/56274238
https://blog.csdn.net/cy413026/article/details/90751756
https://qiankun214.github.io/2018/11/18/AXI%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-1/
https://blog.csdn.net/qq_33486907/article/details/88293312
https://www.zhihu.com/people/ljgibbs/posts
http://home.eeworld.com.cn/my/space-uid-441470-blogid-242821.html
https://blog.csdn.net/tristan_tian/article/details/89393045
https://blog.csdn.net/weixin_44139386/article/details/124596854
官方协议下载链接:
https://developer.arm.com/architectures/system-architectures/amba/specifications
本文来自博客园,作者:Thisway2014,转载请注明原文链接:https://www.cnblogs.com/thisway2014/p/16391836.html