第四章 地址选择
本章主要描述AXI猝发类型、在一次猝发过程中如何计算地址以及字节传输的通道。包含章节如下:
●关于地址选择 ●猝发长度 ●猝发大小 ●猝发类型 ●猝发地址
4.1关于地址选择
AXI协议是基于猝发方式,主设备开始每次的猝发,是通过发送传输所需
的控制信息和传输过程中所需的首字节地址的方式,随着猝发交易进行,从设备负责计算接下来的传输所需要的地址。
猝发数不能超过4KB临界值,这是为了防止猝发长度在从设备之间出现交叉现象,同时也限制了从设备需要地址增量的大小。
4.2猝发长度
AWLEN 或ARLEN信号说明每次猝发传输开始时,数据传输的个数,如表 4-1 所示,每猝发可以传输长1-16个数据。
对于循回猝发方式来讲,猝发的长度必须是2,4,8,或16。
每次交易进行时,必须通过设置AWLEN 或ARLEN信号来确定传输长度,任何器件都不能通过尽早地终止猝发的方式去减少数据传输个数。在一次写猝发的过程中,主设备通过禁止写选通信号的方式终止进一步的写操作,但是它必须完成本次猝发中剩下数据传输。在一次读猝发过程中,主设备能丢弃进一步的读到数据,但是它必须完成在本次猝发中剩下的数据传输。
-------------------注意--------------------------------------------- 当访问一个读敏感设备例如FIFO时,抛弃不需要的读数据会导致丢失数据。主设
16
备不会来访问这样一种设备,它使用的猝发长度比自身需要的还长。
--------------------------------------------------------------------
4.3猝发大小
如表4-2中显示, 通过ARSIZE 或AWSIZE信号设定了,在一次猝发中,每一时钟节拍内传输数据字节的最大字节数,或数据传输的最大字节数。
AXI协议通过传输地址来决定使用哪一个数据总线上的字节通道进行传输。
对于地址递增或地址循回的猝发,并且要求传输数据的宽度比数据总线上的要窄,这中猝发过程中,每次数据传输,使用不同的字节通道,这些通道对应于猝发中每一个时钟节拍。一个固定格式的猝发,其地址保持不变,每拍数据传输都使用相同的字节通道。
任何数据传输的宽度都不能超过交易中期间的数据总线宽度。
4.4猝发类型
AXI 协议定义了三种猝发类型: ●地址固定的猝发 ●地址递增的猝发 ●地址循回的猝发
表 4-3 显示了如何通过ARBURST 或 AWBURST信号选择猝发类型。
17
4.4.1地址固定的猝发
在固定猝发类型中,猝发过程中,每次传输地址保持一样。如当加
载或者清空一个FIFO外设时,使用这种类型可以重复访问同一个位置。
4.4.2地址递增的猝发
在地址递增的猝发类型中,猝发中每次传输所需的地址是通过增加前
一个传输地址来得到。增加的值取决于传输量的大小。例如:一次猝发中,每次传输所需的地址为四个字节,那么这个地址就是有前一个地址值加四得到的。
4.4.3地址循回的猝发
地址循回的猝发类型类似于地址递增猝发类型,在地址递增猝发类
型中,每次传输所需的地址值是前一次传输地址的递增,而在地址循回猝发类型中,当到达循回的边界时,地址再次回到低地址。循回的边界是指,每次猝发的大小乘以该猝发过程的传输总量。
对于地址循回的猝发有两个限制: ●起始地址必须与数据的大小对齐 ●猝发的长度必须为 2,4,8 或16
4.5猝发地址
这一节提供一些简单的公式,在猝发过程中,用于确定地址和传输字节
通道。公式中使用到的变量如下:
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四舍五入后的值
使用如下公式确定猝发过程中的传输地址 :
18
● 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)].
第五章 附加的控制信息
这章主要讲AXI协议支持系统级高速缓存和保护单元。包含章节如下: ●缓存的支持
●保护单元的支持 5.1缓存的支持
支持系统级高速缓存和增强器件执行能力,都是通过使用缓存信息信号,ARCACHE和AWCACHE信号实现的。这些信号提供了关于交易如何被处理的额外信息。
ARCACHE[3:0] 或者AWCACHE[3:0] 通过提供可缓冲,高速缓存,并分配交易属性的方式支持系统级高速缓存。
5.2保护单元的支持
第六章 自动访问
19
本章主要讲互斥访问和锁定访问
第七章 反应的信号
主要讲 AXI从模块的四种交易反应。
第八章 模式调整
主要讲 AXI协议如何使用ID 标签去进行无序交易。
第九章 数据总线
主要讲在AXI读和写数据线上,如何交易大小可变的数据,以及如何用字节固定端的方式去处理混合端类型数据。
第十章 非对齐传输
主要讲如何使用AXI协议处理非对齐传输。
第十一章 时钟和复字节
主要讲述 AXI时钟和复字节信号的时序。
第十二章 低功耗接口
主要讲如何使用AXI时钟控制接口,进入或者跳出一种低功耗的模式。
第十三章 AXI4
主要描述AXI协议中AXI3版本和AXI4版本技术上的不同。
第十四章 AXI4-Lite
主要 讲述AXI4-Lite接口,它是一种简单控制寄存器类型的接口,当不需要全部的AXI4功能的时候使用。
20