热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AXI4接口读写时序分析与猝发地址选择详解

在AXI4接口的读操作中,主设备通过读地址通道向从设备发送读请求,指定所需数据的地址及相关控制信号。随后,从设备通过读数据通道将指定地址上的数据传输回主设备。这一过程确保了高效的数据读取和传输,适用于多种高性能系统设计。

AXI4读操作

图 4‑15 读通道架构

如上图所示,主设备向从设备通过读地址通道指定读数据地址及控制信号,从设备通过读数据通道将指定地址上的数据传输给主设备。

图4‑16 Read Burst 流程

1、当状态机的当前状态为WAIT_START时,master将ARVALID拉高。

2、slave收到ARVALID信号后,将ARREADY拉高,持续到一次burst_len传完为止。master收到ARREADY拉高的信号后,将ARVALID拉低。

3、ARADDR在ARVALID为高时给定对应地址。

4、RREADY信号在收到RVALID信号为高时拉高,保持一个周期,读取出数据。

5、RVALID信号由slave控制,具体控制模式参考slave模块的设计。

6、当一次读取的最后一个数据包读取时将RLAST拉高,表示一次Burst读取完毕。

图4‑17 读操作信号依赖

如图可知,读操作的两个channel之间存在如下的依赖关系:必须等到ARVALID和ARREADY同时为High后,RVALID才能拉高。

AXI4写操作:

图4‑18 写通道架构

如上图所示,主设备向从设备通过写地址通道指定写数据地址及控制信号,从设备通过写数据通道将指定数据写到从设备的指定地址上。待数据写入完成后,从设备通过写响应通道向主设备传递写响应信号,表明写入完成。

图4‑19 Write Burst 流程

1、当状态机的当前状态为WAIT_START时,master将AWVALID拉高。

2、slave收到AWVALID信号后,将AWREADY拉高,持续到一次burst_len写完为止.master收到AWREADY拉高的信号后,将AWVALID拉低。

3、AWADDR在AWVALID为高时给定对应地址。

4、WREADY信号在收到WVALID信号为高时拉高,保持一个周期,写入数据。

5、WVALID信号由slave控制,具体控制模式参考slave模块说明。

6、当一次写入的最后一个数据包读取时将WLAST拉高,表示一次写入完毕。

7、BRESP和BVALID都由slave控制,当收到WLAST信号时,BVALID拉高。

8、BREADY可以一直拉高,也可以在AWREADY信号拉高后保持拉高。直到BVALID信号拉高时将其拉低即可。

其中写操作的信号依赖关系如下:

图4‑20 写操作依赖

如图可知,ADDR和DATA两个channel之间不存在依赖关系,需要满足的是必须等到WVALID和WREADY同时为High,且最后一次传输完成后,BVALID才能拉高,表明写操作结束。

通道握手信号之间的依赖关系

为了对VALID和READY之间的关系有更深刻理解,下面在展开说明一下。

为了防止发生死锁,必须重视握手信号之间的依赖关系。

任何交易中:

l一个 AXI 模块的VALID 信号不能依赖于另一个模块的READY 信号

lREADY 信号可以等待VALID 信号使能

-------------------注意---------------------------------------------

可以在使能 VALID 信号之后使能READY,也可以在使能VALID 信号之前将

READY 信号使能为默认值,这样设计更高效。.

--------------------------------------------------------------------

图4‑21和图4‑22为各握手信号之间的依赖关系图。单箭头指向的信号可以在指向它的信号未使能或使能后,它再使能;双箭头向的信号,必须在指向它的信号全都使能后,它再使能。

图4‑21中所示,在一次读交易中:

l从设备使能ARREADY 信号之前,可以在等待 ARVALID 信号被使能。

l从设备必须等待ARVALID 和ARREADY信号都有效后,再去使能RVALID 信号以返回读数据

图4‑21 读交易中握手信号的依赖关系

图4‑22中所示,在一次写交易中:

l主设备必须等待从设备使能AWVALID 、WVALID信号之后,主设备再去使能AWREADY 、WREADY信号。

l从设备可以等待使能AWREADY、WVALID信号或者同时使能俩个信号后,再去使能AWREADY。

l从设备可以等待使能AWREADY、WVALID信号或者同时使能俩个信号后,再去使能AWREADY。

l从设备可以等待使能AWREADY、WVALID信号或者同时使能俩个信号后,再去使能AWREADY。

图4‑22 写交易握手信号依赖关系

注意:

在一次写交易中,主设备不必等AWREADY 有效之后去发送WVALID ,这一点是很重要的。如果主设备在发送WVALID 信号之前,必定不会等待使能AWREADY 信号,反过来如果从设备在等待使能WVALID 信号,再去使能AWREADY则这样就会造成死锁状况。

AXI协议中的基本交易

本部分给出基于 AXI协议的基本交易的示例。每个示例都使用了VALID 和READY握手机制。地址信息及数据的传输都是在VALID 和READY 信号同时为高的时候传输。示例下面几部分介绍:

Ø读猝发示例

Ø连续的读猝发示例

Ø写猝发示例

本部分也介绍了交易顺序。

读猝发示例

图4‑23为一个4 拍的读猝发 交易的时序图。在这个例子中,主设备发送地址,一个周期后从设备接收。

主设备在发送地址的同时也发送了一些控制信息,用于记录猝发的类型和长度,为了保持图的清晰性,在此省略这些信号。

地址总线上出现地址之后,在读数据通道上发生数据的传输。从设备一直保持

VALID 信号为低,直到读数据准备好。从设备发送RLAST 信号标志着此次猝发交易中这是最后一个数据的传输。

图4‑23 读猝发交易

交叠读猝发示例

图4‑24为主设备在从设备接收第一个猝发交易的地址后发送另一个猝发交易的地址的时序图。这样可以保证一个从设备在完成第一个猝发交易的同时可以开始处理第二个猝发 交易的数据。

图4‑24 交叠读猝发交易

写猝发示例

图4‑25为一次写交易的时序图。当主设备发送地址和控制信息到写地址通道之后,交易过程开始。然后主设备通过写数据通道发送每一个写数据,当为最后一个需要发送的数据时,主设备将WLAST 信号置高。当从设备接收完所有的数据时,从设备返回给主设备一个写响应信号标志本次写交易的结束。

图4‑25 写猝发交易

信号描述

定义了AXI协议中使用的信号。虽然总线宽度和交易ID的宽度都是需要具体说明的,但在本章的表中先显示32位的数据总线,一个4位的写入数据选通,和4位的ID域。本章包含以下几个部分:

l全局信号

l写地址通道信号

l写数据通道信号

l写响应通道信号

l读地址通道信号

l读数据通道信号

l低功耗接口信号

全局信号

表4‑12 AXI全局信号

信号名

AXI4

AXI4-Lit

ACLK

全局时钟。所有的信号在全局时钟的上升沿采样

ARESETN

全局复位,低有效。

写地址通道信号

表4‑13 写地址通道信号

信号名

AXI4

AXI4-Lit

AWID

写地址ID。这个信号用于写地址信号组的标记。

不支持

AWADDR

写地址。写地址给出突发数据传输的第一个传输地址。

AWLEN

突发长度。给出突发传输中准确的传输个数。支持INCR和WRAP传输模式。

不支持

AWSIZE

突发大小。这个信号用于确定突发传输中每个传输的大小。

不支持

AWBURST

突发类型。该信息与突发大小信息一起,表示在突发过程中,地址如何应用于每个传输。支持INCR和WRAP传输模式。

不支持

AWLOCK

锁类型。该信号提供了关于传输原子特性的额外信息(普通或互斥访问)。

不支持

AWCACHE

缓存类型,建议值为0011。

AWPROT

保护类型,建议值为000。

AWQOS

QoS标识符,xilinx AXI4不支持。

不支持

AWREGION

用于每个写操作的地址通道上的域标识符。

不支持

AWUSER

xilinx AXI4不支持。

不支持

AWVALID

写地址有效信号。为高指示地址有效。

AWREADY

写地址准备信号。为高表示从设备空闲,准备接收地址;为低表示从设备忙。

写数据通道信号

表4‑14 写数据通道信号

信号名

AXI4

AXI-Lite

WDATA

写数据,32位到1024位宽

只支持32位宽

WSTRB

写字节选通,用于表示更新存储器的字节通道,对于数据总线的每8位数据有一位写选通信号。

从设备端可选择忽略。

WLAST

写最后一个数据指示信号。表示突发传输中的最后一个数据。

不支持

WUSER

xilinx AXI4不支持。

不支持

WVALID

写有效。为高指示数据有效。

WREADY

写准备。为高表示从设备空闲,准备接收数据;为低表示从设备忙。

写响应通道信号

表4‑15 写响应通道信号

信号名

AXI4

AXI-Lite

BID

响应ID。写响应识别标记,BID值必须匹配AWID值。

不支持

BRESP

写响应。该信号表示写状态,可允许相应的表示为OKAYEXOKAYSLVERRDECERR。

EXOKAY状态不支持

BUSER

xilinx AXI4不支持。

不支持

BVALID

写响应有效。为高指示响应数据有效。

BREADY

写响应准备。为高表示主设备空闲,准备接收写响应;为低表示主设备忙。

读地址通道信号

表4‑16 读地址通道信号

信号名

AXI4

AXI-Lite

ARID

读地址ID。这个信号用于读地址信号组的标记。

不支持

ARADDR

读地址。读地址给出突发数据传输的第一个传输地址。

ARLEN

突发长度。给出突发传输中准确的传输个数。支持INCR和WRAP传输模式。

不支持

ARSIZE

突发大小。这个信号用于确定突发传输中每个传输的大小。

不支持

ARBURST

突发类型。该信息与突发大小信息一起,表示在突发过程中,地址如何应用于每个传输。支持INCR和WRAP传输模式。

不支持

ARLOCK

锁类型。该信号提供了关于传输原子特性的额外信息(普通或互斥访问)。

不支持

ARCACHE

缓存类型,建议值为0011。

ARPROT

保护类型,建议值为000。

ARQOS

QoS标识符,xilinx AXI4不支持。

不支持

ARREGION

用于每个读操作的地址通道上的域标识符。

不支持

ARUSER

xilinx AXI4不支持。

不支持

ARVALID

读地址有效信号。为高指示地址有效。

ARREADY

读地址准备信号。为高表示从设备空闲,准备接收地址;为低表示从设备忙。

读数据通道信号

表4‑17 读数据通道信号

信号名

AXI4

AXI-Lite

RID

读ID标记,该信号是读数据信号组标记,由从设备产生RID,RID必须和读交易中的ARID匹配。

不支持

RDATA

读数据。32位到1024位宽

只支持32位宽

RRESP

读响应。该信号表示读状态,可允许相应的表示为OKAYEXOKAYSLVERRDECERR。

EXOKAY状态不支持

RLAST

读最后一个数据指示信号。表示突发传输中的最后一个数据。

不支持

RUSER

xilinx AXI4不支持。

不支持

RVALID

读有效。为高指示数据有效。

RREADY

读准备。为高表示主设备空闲,准备接收数据;为低表示主设备忙。

AXI4-Stream信号

信号名

默认值

功能

TVALID

No

N/A

Stream读写数据有效。为高指示数据有效。

TREADY

Yes

1

Stream读写读准备。为高表示对端设备空闲,准备接收数据;为低表示对端设备忙。

TDATA

Yes

0

Stream读写数据,8到4096位宽。

TSTRB

Yes

同TKEEP,否则为1

字节选通信号。用于表示更新存储器的字节通道,对于数据总线的每8位数据有一位选通信号。

TKEEP

Yes

1

字节选通信号。TKEEP未被确认的那些相关的字节是空字节,可以从数据流中去除。

TLAST

Yes

0

表明包的边界。

Yes

0

数据流标识符。

TDEST

Yes

0

数据流路由信息。

TUSER

Yes

0

用户定义的边带信息,这些信息能伴随数据流进行发送。

低功耗接口信号

表4‑18 低功耗接口信号

AXI4猝发地址及选择

地址选择

主要描述AXI猝发类型、在一次猝发过程中如何计算地址以及字节传输的通道。包含章节如下:

●关于地址选择

●猝发长度

●猝发大小

●猝发类型

●猝发地址

关于地址选择

AXI协议是基于猝发方式,主设备开始每次的猝发,是通过发送传输所需的控制信息和传输过程中所需的首字节地址的方式,随着猝发交易进行,从设备负责计算接下来的传输所需要的地址。

猝发数不能超过4KB临界值,这是为了防止猝发长度在从设备之间出现交叉现象,同时也限制了从设备需要地址增量的大小。

猝发长度

AWLEN 或ARLEN信号说明每次猝发传输开始时,数据传输的个数,如下图所示,每猝发可以传输长1-16个数据。

图4‑26 每猝发可以传输长1-16个数据

对于循回猝发方式来讲,猝发的长度必须是2,4,8,或16。

每次交易进行时,必须通过设置AWLEN 或ARLEN信号来确定传输长度,任何器件都不能通过尽早地终止猝发的方式去减少数据传输个数。在一次写猝发的过程中,主设备通过禁止写选通信号的方式终止进一步的写操作,但是它必须完成本次猝发中剩下数据传输。在一次读猝发过程中,主设备能丢弃进一步的读到数据,但是它必须完成在本次猝发中剩下的数据传输。

-------------------注意---------------------------------------------

当访问一个读敏感设备例如FIFO时,抛弃不需要的读数据会导致丢失数据。主设备不会来访问这样一种设备,它使用的猝发长度比自身需要的还长。--------------------------------------------------------------------

猝发大小

下图中显示, 通过ARSIZE 或AWSIZE信号设定了,在一次猝发中,每一时钟节拍内传输数据字节的最大字节数,或数据传输的最大字节数。

图4‑27 burst大小译码表

AXI协议通过传输地址来决定使用哪一个数据总线上的字节通道进行传输。

对于地址递增或地址循回的猝发,并且要求传输数据的宽度比数据总线上的要窄,这中猝发过程中,每次数据传输,使用不同的字节通道,这些通道对应于猝发中每一个时钟节拍。一个固定格式的猝发,其地址保持不变,每拍数据传输都使用相同的字节通道。

任何数据传输的宽度都不能超过交易中期间的数据总线宽度。

猝发类型

AXI 协议定义了三种猝发类型:

●地址固定的猝发

●地址递增的猝发

●地址循回的猝发

下图显示了如何通过ARBURST 或 AWBURST信号选择猝发类型。

图4‑28 burst类型译码表

地址固定的猝发

在固定猝发类型中,猝发过程中,每次传输地址保持一样。如当加载或者清空一个FIFO外设时,使用这种类型可以重复访问同一个位置。

地址递增的猝发

在地址递增的猝发类型中,猝发中每次传输所需的地址是通过增加前一个传输地址来得到。增加的值取决于传输量的大小。例如:一次猝发中,每次传输所需的地址为四个字节,那么这个地址就是有前一个地址值加四得到的。

地址循回的猝发

地址循回的猝发类型类似于地址递增猝发类型,在地址递增猝发类型中,每次传输所需的地址值是前一次传输地址的递增,而在地址循回猝发类型中,当到达循回的边界时,地址再次回到低地址。循回的边界是指,每次猝发的大小乘以该猝发过程的传输总量。

对于地址循回的猝发有两个限制:

●起始地址必须与数据的大小对齐

●猝发的长度必须为 2,4,8 或16

猝发地址

这一节提供一些简单的公式,在猝发过程中,用于确定地址和传输字节通道。公式中使用到的变量如下:

Start_Address  主设备发起的起始地址

Number_Bytes 每次数据传输中允许的最大的字节数

Data_Bus_Bytes 数据总线上的字节通道数

Aligned_Address  与起始地址对齐的类型

Burst_Length   一次猝发中数据传输的总量

Address_N     猝发中传输N的地址,N是2-16之间的一个整数。

Wrap_Boundary  一次循回猝发中的最低地址

Lower_Byte_Lane 一次传输中最低地址对应的字节通道

Upper_Byte_Lane  一次传输中最高地址对应的字节通道

INT(x)        x四舍五入后的值

使用如下公式确定猝发过程中的传输地址 :

●  Start_Address = ADDR

●   Number_Bytes=2SIZE

●   Burst_Length= LEN+1

●Aligned_Address=(INT(Start_Address / Number_Bytes))x Number_Bytes

使用如下公式确定猝发中首次传输所需的地址

●Address_1 = Start_Address .

使用如下公式确定猝发中首次传输后任何传输所需的地址

●Address_N = Aligned_Address+(N–1) x Number_Bytes.

对于循回猝发方式,Wrap_Boundary这个变量用于记录循回的边界:

●Wrap_Boundary =(INT (Start_Address /( Number_Bytesx Burst_Length)))

x(Number_Bytesx Burst_Length).

如果Address_N = Wrap_Boundary +(Number_Bytesx Burst_Length),使用以下公式:

●Address_N = Wrap_Boundary .

计算完循回边界后使用如下公式:

●Address_N = Start_Address +((N–1)x Number_Bytes) - ( Number_Bytesx Burst_Length).

通过使用以下方程可以确定一次猝发中,哪个字节通道用于首次传输

●Lower_Byte_Lane=Start_Address-(INT(Start_Address/ Data_Bus_Bytes))

x Data_Bus_Bytes

●Upper_Byte_Lane=Aligned_Address+(Number_Bytes-1)-(INT ( Start_Address / Data_Bus_Bytes)) x Data_Bus_Bytes.

使用如下公式可以确定一次猝发中,首次传输之后,所有传输都使用了哪些字节通道

●Lower_Byte_Lane= Address_N –(INT ( Address_N / Data_Bus_Bytes)) x Data_Bus_Bytes

●Upper_Byte_Lane= Lower_Byte_Lane+ Number_Bytes–1.

传输的数据公式如下:

●DATA[(8xUpper_Byte_Lane)+7:(8xLower_Byte_Lane)].



推荐阅读
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 根据 Laravel 官方文档,视图文件在首次加载时会被编译成普通的 PHP 代码并存储在缓存中。当视图文件发生更改时,系统会自动检测到这些变化并重新编译和缓存新的版本,以确保用户始终看到最新的内容。这一机制显著提高了应用的性能和响应速度。 ... [详细]
  • 深入理解Spark框架:RDD核心概念与操作详解
    RDD是Spark框架的核心计算模型,全称为弹性分布式数据集(Resilient Distributed Dataset)。本文详细解析了RDD的基本概念、特性及其在Spark中的关键操作,包括创建、转换和行动操作等,帮助读者深入理解Spark的工作原理和优化策略。通过具体示例和代码片段,进一步阐述了如何高效利用RDD进行大数据处理。 ... [详细]
  • NVIDIA最新推出的Ampere架构标志着显卡技术的一次重大突破,不仅在性能上实现了显著提升,还在能效比方面进行了深度优化。该架构融合了创新设计与技术改进,为用户带来更加流畅的图形处理体验,同时降低了功耗,提升了计算效率。 ... [详细]
  • 使用Boost.Asio进行异步数据处理的应用程序主要依赖于两个核心概念:I/O服务和I/O对象。I/O服务抽象了操作系统接口,使得异步操作能够高效地执行。I/O对象则代表了具体的网络资源,如套接字和文件描述符,通过这些对象可以实现数据的读写操作。本文详细介绍了这两个概念在Boost.Asio中的应用及其在网络编程中的重要性。 ... [详细]
  • 利用Redis HyperLogLog高效统计微博日活跃和月活跃用户数
    本文探讨了如何利用Redis的HyperLogLog数据结构高效地统计微博平台的日活跃用户(DAU)和月活跃用户(MAU)数量。通过HyperLogLog的高精度和低内存消耗特性,可以实现对大规模用户数据的实时统计与分析,为平台运营提供有力的数据支持。 ... [详细]
  • 在iOS平台上,应用的流畅操作体验一直备受赞誉。然而,过去开发者往往将更多精力集中在功能实现上,而对性能优化的关注相对较少。本文深入探讨了iOS应用性能优化的关键要点与实践方法,旨在帮助开发者提升应用的响应速度、降低功耗,并改善整体用户体验。通过具体案例分析和技术解析,文章提供了实用的优化策略,包括代码层面的改进、资源管理优化以及界面渲染效率的提升等。 ... [详细]
  • 深入解析Spring框架中的双亲委派机制突破方法
    在探讨Spring框架中突破双亲委派机制的方法之前,首先需要了解类加载器的基本概念。类加载器负责将类的全限定名转换为对应的二进制字节流。每个类在被特定的类加载器加载后,其唯一性得到保证。然而,这种机制在某些场景下可能会限制灵活性,因此Spring框架提供了一些策略来突破这一限制,以实现更加动态和灵活的类加载。这些策略不仅能够提升系统的可扩展性,还能在复杂的运行环境中确保类的正确加载和管理。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 类型封装器详解与应用 ... [详细]
author-avatar
swaimprichett_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有