目录
1 综述
2 AXI通道概述
2.1 综述
2.2 读地址与写地址通道
2.3 读数据通道
2.4 写数据通道
2.5 写响应通道
3 AXI互联结构
4 AXI中使用寄存器切片
5 AXI术语
5.1 AXI组件与拓扑
5.2 AXI传输与存储器类型
6 AXI信号描述
6.1 公共信号
6.2 写地址通道信号
6.3 写数据通道信号
6.4 写响应通道信号
6.5 读地址通道信号
6.6 读数据通道信号
6.7 低功耗接口信号
7 单接口需求
7.1 时钟
7.2 复位
7.3 基本读写事务
7.4 通道间的关系
7.5 通道握手信号依赖关系
7.6 事务结构
8 事务属性
8.1 事务类型和属性
8.2 AXI3存储器属性信号
8.3 AXI4对存储器属性信号的变更
8.4 存储器类型
8.5 不同的存储器属性
8.6 访问权限
8.7 遗留问题
9 多事务
9.1 AXI事务标识符
9.2 事务ID
9.3 事务顺序
10 AXI4顺序模型
10.1 顺序模型的定义
10.2 主设备顺序
10.3 互联器顺序
10.4 从设备顺序
10.5 在目的端之前发出响应
10.6 观察顺序
11 原子访问
11.1 单拷贝原子大小
11.2 独占访问
11.3 锁定访问
12 AXI4附加信号
12.1 QoS信号
12.2 多区域信号
12.3 用户定义信号
13 低功耗接口
13.1 关于低功耗接口
13.2 低功耗时钟控制
14 默认信号和互操作性
14.1 互操作性原则
14.2 主要接口类别
14.3 默认信号值
来源:https://github.com/lizhirui/AXI_spec_chinese
本文参考分析整理总结了AMBA AXI and ACE Protocol Specification文档的AXI总线协议规范部分,错误之处欢迎指出。
AMBA- AXI协议支持高性能高频的系统设计,该协议拥有以下优点:
同时,该协议还拥有以下特点:
AXI协议同时包含了低功耗操作所需的信号扩展,也包含了AXI4-Lite协议,该协议是AXI4的子集,有着更简单的控制寄存器接口和组件。
AXI协议基于突发传输,定义了下列独立事务(一个事务可能包含多次传输)通道:
地址通道携带描述被传输数据性质的控制信息,数据在主设备和从设备间通过以下方式传输:
写数据的过程如下图所示:
读数据的过程如下图所示:
每一个通道都拥有自己的VALID与READY信号用于实现握手,其中VALID信号表示通道的地址、数据或控制信息已经可用,而READY信号则表示接收方已准备好接收信息,其中,读数据和写数据通道还拥有LAST信号,该信号用于指示当前传输是否为当前事务中的最后一次传输。
读事务与写事务都拥有其自己的地址通道,对应的地址通道会携带一次事务所需的全部地址和控制信息。
读数据通道携带从设备传送给主设备的数据和响应信息,该通道包括两部分:
写数据通道携带主设备传送给从设备的数据,该通道包括两部分:
写数据通道总是被buffer的,因此主设备可以在未收到前一次写事务的从设备响应消息时再次执行写操作。
从设备使用写响应通道回应写事务,全部的写事务都需要写响应通道的完成信号,并且完成信号仅在一个写事务彻底完成时才产生,而并不会在每次数据传输时都产生。
一个典型的AXI系统结构如下:
AXI协议为以下接口提供了单一的接口定义:
该接口定义支持不同的互联器实现,设备之间的互联器等效于另一个拥有对称主端口和从端口的设备,真正的主设备和从设备可以连接到对应的端口。
大多数的系统使用如下三种互联拓扑之一:
在大多数的系统中,地址通道带宽需求远小于数据通道带宽需求。使用共享总线以及多条数据总线的拓扑结构实现并行数据传输时,可以在系统效率和互联复杂性间取得平衡。
每一个AXI通道都只能单项传输信息,并且架构并没有要求各个通道间具有固定的时序依赖要求。因此,寄存器切片可以插入到任何通道的任何位置,不过这会带来额外的延迟(Latency)。
以下两点是可能的:
下列术语描述了AXI组件:
对于特定的AXI传输,上游(Upstream)与下游(Downstream)指代AXI拓扑中AXI组件的相对位置。
当AXI主设备发起AXI操作时,对于AXI从设备:
下列信号被用于AXI3和AXI4。
信号名 | 来源 | 描述 |
---|---|---|
ACLK | 时钟源 | 公共时钟信号 |
ARESETn | 复位源 | 公共复位信号,低有效 |
所有信号都在公共时钟的上升沿被采样。
信号名 | 来源 | 描述 |
---|---|---|
AWID | 主设备 | 写地址ID,该信号用于标识写地址组 |
AWADDR | 主设备 | 写地址,写突发操作中第一次数据传输的地址 |
AWLEN | 主设备 | 突发长度,这个字段标识每次突发传输的传输次数 |
AWSIZE | 主设备 | 突发大小,这个字段表示每次突发传输的大小 |
AWBURST | 主设备 | 突发类型,包括突发类型和突发大小信息,该字段决定了每次突发传输时地址的计算方法 |
AWLOCK | 主设备 | 锁定类型,提供关于传输时原子特性的额外信息 |
AWCACHE | 主设备 | 存储器类型 |
AWPROT | 主设备 | 保护类型 |
AWQOS | 主设备 | 服务质量,即每次写传输的QoS标识符,仅AXI4支持 |
AWREGION | 主设备 | 区域标识符,允许一个从设备的单个物理接口用作多个逻辑接口,仅AXI4支持 |
AWUSER | 主设备 | 用户定义信号,可选 |
AWVALID | 主设备 | 主设备给出的地址和相关控制信号有效 |
AWREADY | 从设备 | 从设备已准备好接收地址和相关的控制信号 |
信号名 | 来源 | 描述 |
---|---|---|
WID | 主设备 | 写数据ID,该信号用于标识写数据传输,仅AXI3支持 |
WDATA | 主设备 | 写出的数据 |
WSTRB | 主设备 | 数据的字节选通,数据中每8bit对应这里的1bit |
WLAST | 主设备 | 该信号用于标识当前传输是否为突发传输中的最后一次传输 |
WUSER | 主设备 | 用户定义信号,可选 |
WVALID | 主设备 | 主设备给出的数据和字节选通信号有效 |
WREADY | 从设备 | 从设备已准备好接收数据选通信号 |
信号名 | 来源 | 描述 |
---|---|---|
BID | 从设备 | 写响应ID,该信号用于标识写响应传输 |
BRESP | 从设备 | 写响应,该信号表示写传输的状态 |
BUSER | 从设备 | 用户定义信号,可选 |
BVALID | 从设备 | 从设备给出的写响应信号有效 |
BREADY | 主设备 | 主设备已准备好接收写响应信号 |
信号名 | 来源 | 描述 |
---|---|---|
ARID | 主设备 | 读地址ID,该信号用于标识读地址组 |
ARADDR | 主设备 | 读地址,读突发操作中第一次数据传输的地址 |
ARLEN | 主设备 | 突发长度,这个字段标识每次突发传输的传输次数 |
ARSIZE | 主设备 | 突发大小,这个字段表示每次突发传输的大小 |
ARBURST | 主设备 | 突发类型,包括突发类型和突发大小信息,该字段决定了每次突发传输时地址的计算方法 |
ARLOCK | 主设备 | 锁定类型,提供关于传输时原子特性的额外信息 |
ARCACHE | 主设备 | 存储器类型 |
ARPROT | 主设备 | 保护类型 |
ARQOS | 主设备 | 服务质量,即每次读传输的QoS标识符,仅AXI4支持 |
ARREGION | 主设备 | 区域标识符,允许一个从设备的单个物理接口用作多个逻辑接口,仅AXI4支持 |
ARUSER | 主设备 | 用户定义信号,可选 |
ARVALID | 主设备 | 主设备给出的地址和相关控制信号有效 |
ARREADY | 从设备 | 从设备已准备好接收地址和相关的控制信号 |
信号名 | 来源 | 描述 |
---|---|---|
RID | 从设备 | 读数据ID,该信号用于标识读数据传输 |
RDATA | 从设备 | 读出的数据 |
RRESP | 从设备 | 读响应,这信号表示读传输的状态 |
RLAST | 从设备 | 该信号用于标识当前传输是否为突发传输中的最后一次传输 |
RUSER | 从设备 | 用户定义信号,可选 |
RVALID | 从设备 | 从设备给出的数据和响应信息有效 |
RREADY | 主设备 | 主设备已准备好接收读取的数据和响应信息 |
信号名 | 来源 | 描述 |
---|---|---|
CSYSREQ | 时钟控制器 | 系统退出低功耗状态请求,外设的系统时钟控制器通过该信号发出请求用于离开低功耗状态 |
CSYSACK | 外设 | 退出低功耗状态响应,外设响应系统低功耗状态退出请求时使用的信号 |
CACTIVE | 外设 | 时钟激活,该信号表示外设需要时钟信号 |
这一部分描述了单个主设备和单个从设备之间的基本AXI协议事务需求。
每个AXI组件都需要一个时钟信号ACLK,全部的信号都在ACLK的上升沿被采样,一切输出信号都必须在ACLK的上升沿之后发生改变。
在主从接口之间的输入输出信号间不能有组合路径。
AXI协议使用低有效复位信号ARESETn,该信号是可以异步拉低,但必须在ACLK的上升沿同步释放。
在复位期间,下列信号需要遵循特定的要求:
在ARESETn被释放后的下一个时钟上升沿,主设备可以拉高ARVALID、AWVALID与WVALID信号,如下图所示:
7.3.1 握手过程
五个事务通道都使用VALID/READY作为握手信号,传输地址、数据和控制信息,使用这种握手方式,主从双方都可以对传输速度进行控制。源端产生VALID信号意味着其地址、数据或控制信息有效,目的端产生READY信号意味着它可以接收信息,只有当双方的VALID与READY信号都为高时传输才会开始。
在主从接口之间的输入输出信号间不能有组合路径。
1、VALID信号先有效,READY后有效
在下图中,源端在T1之后给出地址、数据或控制信息,并令VALID有效,在T2之后,目的端检测到VALID有效并给出READY有效信息,在T3阶段传输会发生,因此在T3阶段及之前,源端不能释放或改变需要传输的信息。
源端必须在令VALID信号有效之后再等待READY信号有效,一旦VALID有效,源端必须等待握手发生,即在保持VALID不变的情况下,等待目的端的READY信号有效。
2、READY信号先有效,VALID后有效
在下图中,目的端首先在T1阶段之后令READY信号有效,源端在T2阶段之后给出地址、数据或控制信息,并令VALID有效,然后在T3阶段开始传输,在这种情况下,传输只消耗了一个时钟周期,而在上面那种情况下,则消耗了两个时钟周期。
目的端可以在自身READY信号无效的情况下,等待源端的VALID信号有效,这一条规则和上一条规则必须同时遵守,否则可能造成死锁等待,同时,在VALID有效前,即使READY已经有效,也可以再次令READY无效。
3、VALID/READY信号同时有效
在下图中,两端的VALID/READY信号同时有效,则传输立刻在下一个时钟周期开始:
7.3.2 通道信号需求
每个通道都有自己的握手信号对:
1、写地址通道:
主设备仅当输出有效的地址和控制信息时才能使能AWVALID信号,在从设备的AWREADY信号有效后的第一个时钟上升沿,主设备的AWVALID信号必须保持有效。
AWREADY信号的默认状态可以为高也可以为低电平,规范推荐默认状态为高电平。当该信号为高电平时,意味着从设备一定可以接受任何有效的地址。
注意:规范不推荐AWREADY信号默认为低电平是因为这会强制使传输周期拉长到至少两个时钟周期,一个周期用于使能AWVALID信号,另一个周期则用于使能AWREADY信号。
2、写数据通道:
在写突发过程中,主设备可以仅当它输出有效数据时才使能WVALID信号,同样的,该信号必须在从设备WREADY信号有效后的第一个时钟上升沿保持有效。
WREADY信号默认可以为高电平,但这意味着从设备总是可以在一个时钟周期内接收待写入的数据。
主设备在进行突发事务中的最后一次写传输时,必须令WLAST信号有效。
3、写响应通道:
从设备输出有效的写响应信号后才能驱动BVALID信号,该信号在BREADY信号有效后的第一个时钟上升沿保持有效。
BREADY信号默认可以为高电平,但此时主设备必须总能在一个时钟周期内接收写响应。
4、读地址通道:
主设备仅当输出有效的地址和控制信息时才能使能ARVALID信号,在从设备的AWREADY信号有效后的第一个时钟上升沿,主设备的ARVALID信号必须保持有效。
ARREADY信号的默认状态可以为高也可以为低电平,规范推荐默认状态为高电平。当该信号为高电平时,意味着从设备一定可以接受任何有效的地址。
注意:规范不推荐ARREADY信号默认为低电平是因为这会强制使传输周期拉长到至少两个时钟周期,一个周期用于使能ARVALID信号,另一个周期则用于使能ARREADY信号。
5、读数据通道:
从设备只有在输出有效读数据时才能使能RVALID信号,同时在主设备的RREADY信号有效后的第一个时钟上升沿必须保持有效。即使从设备只有一个读数据源,它也必须在收到数据请求时才令RVALID信号有效。
主接口使用RREADY信号表示它可以接收数据,RREADY信号默认可以为高电平,但此时主设备启动读事务时必须能立即接收数据。
从设备在进行突发传输事务中的最后一次传输时必须使能RLAST信号。
AXI协议要求各个通道间必须保持如下关系:
除此之外,协议没有规定其它的任何关系,这意味着,在一个事务中,写数据信号可以提前于写地址信号,这种情况通常发生在写地址的通道的寄存器阶段要更多时, 同样,写数据可以和写地址信号同时出现。
注意:当互联器需要决定目标地址空间或从设备地址空间时,必须对地址和写数据重排,以确保写数据仅对其关联的从设备有效。
为了避免死锁,下列依赖规则必须遵守:
在任何事务中:
注意:VALID信号可以在READY信号之前有效,READY信号也可以在检测VALID信号之前有效,这些方式都会提升传输效率。
在下面的依赖图中:
7.5.1 读传输依赖
在读传输中:
总结就是:VALID信号发出方,必须首先使能VALID,才能等待READY信号;READY信号发出方,不必等待VALID有效,就可以发出READY信号,也可以等待VALID有效,再发出READY信号,同时,读数据通道的VALID信号不能保持常态有效。
依赖关系图如下:
7.5.2 写传输依赖
依赖关系图如下:
7.5.3 AXI4写响应依赖
注意:
依赖关系如下:
依赖关系图如下:
7.6.1 地址结构
AXI协议是基于突发的,主设备向从设备传送事务的控制信息和第一个字节的地址,然后,从设备必须在此后的每次传输中计算数据地址。
突发传输不能跨越4KB地址边界。
注意:避免突发传输跨越两个从设备的边界,同时,必须使用从设备支持的地址增量。
突发长度:
突发长度由下列字段指定:
AXI3支持1~16的突发长度。
AXI4:
AXI3中的突发长度定义如下:
突发长度 = AxLEN[3:0] + 1
AXI4中的突发长度定义如下:
突发长度 = AxLEN[7:0] + 1
在使用突发传输时,必须遵守如下规则:
在AXI4中,突发类型为INCR且突发长度大于16的突发传输可以转换为多个长度更短的突发传输,即使突发属性表明事务是不可修改的。在这种情况下,生成的突发事务必须保持与原始事务相同的事务特征,唯一的例外是:
注意:为了实现AXI3兼容性,将长突发传输转换为多个短突发传输是必要的,同时,这也可以减少长突发对QoS保证的影响。
突发大小:
该字段表示每次突发数据传输或每个节拍中中数据的字节数,由以下字段指定:
突发大小 = 2^AxSIZE
如果AXI的总线比突发大小宽,AXI接口每次传输就必须根据地址判断使用哪几条数据线,任何一次传输的大小都不能超过事务中任一代理的数据总线宽度。
AxSIZE[1:0] | bytes in transfer |
---|---|
000 | 1 |
001 | 2 |
010 | 4 |
011 | 8 |
100 | 16 |
101 | 32 |
110 | 64 |
111 | 128 |
突发类型:
AXI协议定义了三种突发类型:
在回绕传输中,有几点需要注意:
回绕突发方式的行为如下:
回绕突发方式通常用于Cache行的访问。
突发类型由如下字段指定:
字段取值如下:
AxBURST[1:0] | 突发类型 |
---|---|
00 | FIXED |
01 | INCR |
10 | WRAP |
11 | 保留 |
7.6.2 数据读写结构
写选通:
当WSTRB[i]为高电平时,对应的WDATA[(8i+7):8i]数据线有效,当WVALID为低电平时,写选通信号可以为任何值,不过标准推荐写选通信号全0或保持上一次的值。
狭窄传输(Narrow transfer):
当主设备产生一个数据宽度小于数据总线的传输时,地址和控制信号按照如何方式决定使用哪些字节线:
字节不变性(Byte invariance):
在访问单个存储器空间中的大小端混合数据时,AXI协议使用字节不变性大小端模式。
字节不变性大小端模式是指:
通常情况下,大多数小端组件可以直接连接到一个字节不变性接口,而只支持大端的组件则需要一个转换器。
非对齐传输:
AXI支持非对齐传输,对于任何数据宽度大于一个字节的突发传输而言,第一个字节的访问都可能是非对齐的。
一个主设备可以:
注意:
7.6.3 数据读写响应结构
AXI协议提供了读写事务中的响应信号:
响应共有四种类型:
RRESP与BRESP的取值如下:
RRESP/BRESP[1:0] | 响应 |
---|---|
00 | OKAY |
01 | EXOKAY |
10 | SLVERR |
11 | DECERR |
对于写事务而言,只有当整个突发事务结束时才会发出一个响应。
对于读事务而言,从设备可以针对突发事务中的每个传输发送不同的响应。
协议规定,指定数量的数据传输必须全部被执行,即使发生了错误。
下面详细介绍不同的响应所对应的可能的情况:
OKAY响应可能在下列情况出现时产生:
EXOKAY响应可能在下列情况出现时产生:
对于SLVERR响应,为了简化系统监控和调试,规范推荐这种错误响应只用于错误条件,而不用于除了事件外的一般通知,SLVERR响应可能在下列情况出现时发生:
对于DECERR响应,只有当互联器不能找到对应的从设备时才会返回。规范推荐互联器此时路由到一个默认的从设备,并由该默认从设备返回DECERR响应。
AXI协议要求事务中的全部数据传输必须都被完成,即使发生了错误,因此任何给定DECERR响应的组件满足这个需求。
从设备可以分为以下两种类型:
AXI协议定义了一整套支持存储器和外设从设备的事务属性,使用ARCACHE与AWCACHE信号来表示(后面使用AxCACHE指代这两个信号),这些信号控制事务通过系统进行的方式与系统级Cache处理事务的方式。
在AXI3中,AxCache[3:0]指定了事务的可Buffer(Bufferable)、可Cache(Cacheable)与分配(Allocate)属性:
AxCACHE | 值 | 事务属性 |
---|---|---|
[0] | 0/1 | 不可Buffer/可Buffer |
[1] | 0/1 | 不可Cache/可Cache |
[2] | 0/1 | 不可读分配/可读分配 |
[3] | 0/1 | 不可写分配/可写分配 |
可Buffer(B)是指,互联器或者其它任何组件是否可以让事务延迟任意个周期到达目的端,通常该属性仅与写请求相关。
可Cache(C)是指,传输分配是否被允许,以及原始事务特征是否一定匹配最终的事务特征,即多次写事务是否可以被合并(对于写事务)或某个位置的内容是否可以被预取(对于读事务)或某个读操作是否可以被分解为多个读事务(对于读事务)。
可读分配(RA)是指:是否推荐事务进行读分配,但不是强制的,当不可Cache时,该位必须为0。
可写分配(WA)是指:是否推荐事务进行写分配,但不是强制的,当不可Cache时,该位必须为0。
AXI4做出了如下变更:
8.3.1 AxCACHE[1],可修改
在AXI4中,AxCACHE[1]位为可修改位,当该位为高时,表示事务特征可修改,当改位为低时,表示事务特征不可修改。
注意:该位仅仅是被重命名,因为新的名字能更好地描述该位的用途,而实际功能并未改变。
不可修改事务:
一个不可事务传输不能分割为多个事务,也不能和其它事务合并,下表中的参数也不能被改变:
参数 | 信号 |
---|---|
传输地址 | AxADDR以及AxREGION |
突发大小 | AxSIZE |
突发长度 | AxLEN |
突发类型 | AxBURST |
锁定类型 | AxLOCK |
保护类型 | AxPROT |
而AxCache信号仅被允许由可Buffer修改为不可Buffer,不允许其它的修改。
事务ID和QoS可被修改。
一个突发长度超过16的不可修改事务可被分割为多个事务,产生的事务仍然必须满足上述要求,除了:
对于独占的不可修改传输,在保持总访问字节数不变的情况下,允许修改AxSIZE与AxLEN。
注意:
可修改事务:
在可修改事务中,下列特征可以被修改:
下列特征不可以被修改:
存储器属性AxCACHE可以被修改,但是任何修改都必须确保事务的可见性不会因为阻止事务传播到所需的点或更改在Cache中寻找事务的需求而减少。任何对于存储器属性的修改都必须与相同地址范围内的其它事务一致。
传输ID和QoS可被修改。
当修改的结果出现如下情况时是不允许的:
8.3.2 不可修改事务的顺序要求
AXI4要求满足下列全部条件的任何事务集的顺序被保证:
无论事务的地址是什么,只要事务目标是同一个从设备,事务顺序都必须被保证。
注意:当读写通道上分别出现独立的事务时,如果一个事务在另一个事务的响应被收到后才发出,则顺序可以被保证,否则顺序不能被保证。
8.3.3 读分配与写分配的更新含义
在AXI4中,读分配位表示事务中是否会发生分配,写分配位表示是否可能由于另一个事务而进行了分配。
对于读事务,写分配位被重定义用来表示:
对于写事务,读分配位被重定义用来表示:
这样变更意味着:
新的AWCACHE定义如下:
名称 | AXI4定义 | 描述 |
---|---|---|
AWCACHE[3] | Allocate | 当该位有效时,事务必须首先在Cache中查找,因为它可能被预先分配,同样的,如果AWCACHE[2]有效,事务同样需要预先在Cache中查找。而如果这两位都为0,事务则不必查找Cache。 |
AWCACHE[2] | Other Allocate | 当该位有效时,事务必须首先在Cache中查找,因为它可能由于其它的事务,即读事务或来自另一个主设备的事务,在Cache中被预先分配。 |
AWCACHE[1] | Modifiable | 当该位有效时,事务的特征可以修改,写事务可以被合并 |
AWCACHE[0] | Bufferable | 当该位无效时,如果AWCACHE[3:2]为00,写响应必须来自最终目的端。 当该位有效时,若AWCACHE[3:2]为00,写响应可以来自中间点,但写事务必须及时被最终目的端看到。 当该位无效时,如果AWCACHE[3:2]不为00,写响应可以来自中间点,但写事务必须及时被最终目的端看到。 当该位有效时,如果AWCACHE[3:2]不为00,写响应可以来自中间点,同时写传输可以不必被最终目的端看到。 |
新的ARCACHE定义如下:
名称 | AXI4定义 | 描述 |
---|---|---|
ARCACHE[3] | Other Allocate | 当该位有效时,事务必须首先在Cache中查找,因为它可能由于其它的事务,即写事务或来自另一个主设备的事务,在Cache中被预先分配,同样的,如果ARCACHE[2]有效,事务同样需要预先在Cache中查找。 |
ARCACHE[2] | Allocate | 当该位有效时,事务必须首先在Cache中查找,因为它可能被预先分配。 |
ARCACHE[1] | Modifiable | 当该位有效时,事务的特征可以修改,写事务可以被合并。 |
ARCACHE[0] | Bufferable | 当ARCACHE[3:1]为000时该位无用。 当ARCACHE[3:2]为00且ARCACHE[1]为1时,若该位无效,则读取的数据必须来自最终目的端,否则可以来自一个指向该目的端正在处理的写事务。 当ARCACHE[3]有效或ARCACHE[2]有效时,该位可以用来区分写穿和写回存储器类型。 |
下列的表中给出了AxCACHE的编码含义,其中有的类型拥有两种编码,其中括号内的是AXI3所采用的编码,其它则为AXI4所采用的编码,这主要是为了让AXI4具有向下兼容能力:
ARCACHE[3:0] | AWCACHE[3:0] | 存储器类型 |
---|---|---|
0000 | 0000 | 不可Buffer设备 |
0001 | 0001 | 可Buffer设备 |
0010 | 0010 | 一般不可Cache不可Buffer存储器 |
0011 | 0011 | 一般不可Cache可Buffer存储器 |
1010 | 0110 | 写穿不可分配存储器 |
1110(0110) | 0110 | 写穿可读分配存储器 |
1010 | 1110(1010) | 写穿可写分配存储器 |
1110 | 1110 | 写穿可读写分配存储器 |
1011 | 0111 | 写回不可分配存储器 |
1111(0111) | 0111 | 写回可读分配存储器 |
1011 | 1111(1011) | 写回可写分配存储器 |
1111 | 1111 | 写回可读写分配存储器 |
访问存储器相同区域的多个代理可以使用不同的内存属性,然而,为保证功能正确性,必须遵守如下几条规则:
8.5.1 改变存储器属性
一个特定存储器区域的属性可以被改变,不过这需要一个合适的流程来执行,通常如下所示:
AXI提供了访问权限信号用以阻止非法事务:
其中,信号定义如下:
AxPROT | 值 | 功能 |
---|---|---|
[0] | 0/1 | 非特权访问/特权访问 |
[1] | 0/1 | 安全访问/不安全访问 |
[2] | 0/1 | 数据访问/指令访问 |
8.6.1 非特权与特权访问
一些处理器支持多种特权级,但是AXI仅支持两种特权级,具体的映射方法可以参照具体处理器的文档。
8.6.2 安全与非安全访问
该定义与ARM安全扩展中所定义的一致。
8.6.3 指令与数据
在AXI协议规范中,该位仅仅是一种暗示,例如,若某个事务包含指令和数据的混合项,则推荐将该位设置为0,表示当前进行的是数据访问而不是指令访问。
AXI4在处理一些AxCACHE存储器属性时引入了额外的要求。
在AXI4中,所有使用相同ID且目的从设备相同的设备事务都必须按序排列。
注意:
该规范强烈推荐任何新的AXI3设计都应该实现AXI4的要求。
对于AxCACHE位名和存储器类型名,AX3组件可以使用AXI3或AXI4的名字。
AXI协议包含AXI ID事务标识符,主设备可以使用这个区分需要按序返回的事务。
AXI ID相同的事务必须保证顺序,但是AXI ID不同的事物则不能保证顺序,这意味着单个物理端口可以支持乱序事务,并据此模拟出多个逻辑端口,其中每个端口都是按序端口。
使用AXI ID,主设备可以在前面事务未完成的时候就发送新的事务,这可以提升系统效率,因为这允许事务的并行处理。
注意:这并没有要求主设备和从设备一定使用AXI事务ID,主设备和从设备可以同时只处理一个事务,这意味着所有的事务都是按序的,同时从设备返回的BID和RID必须和主设备发出的AXI ID一致。
每一个事务通道都拥有自己的事务ID,如下表所示:
事务通道 | 事务ID |
---|---|
写地址通道 | AWID |
写数据通道,仅AXI3 | WID |
写响应通道 | BID |
读地址通道 | ARID |
读数据通道 | RID |
注意:AXI4协议支持基于AXI ID的扩展顺序模型。
主设备可以使用AWID和ARID事务ID信号来表明它的顺序要求,具体情况如下:
注意:AXI3因为支持写数据交错,因此写数据通道中才含有WID信号,而在AXI4中,写数据的顺序必须和写地址的顺序一致,因此WID信号被移除。
9.3.1 事务ID信号的宽度
事务ID信号的宽度可以任意定义,然而,规范推荐下列事务ID信号宽度:
对于只支持单个按序接口的主设备,将事务ID信号置为一个常量,例如0,是可以接受的。
对于不使用顺序信息而将所有事务按序处理的从设备而言,事务ID信号可以在不改变从设备功能的情况下被加入。
9.3.2 遗留问题
大多数AXI3主设备不支持写交错,因此为了满足AXI4的要求不需要做任何改动,而支持写交错的AXI主设备必须要支持写交错深度的配置方法,通过将写交错深度设置为1来兼容AXI4。
注意:任何需要WID信号的AXI3的组件都可以从AWID信号生成WID信号。
AXI4协议支持基于AXI ID事务标识符的顺序模型。
对于相同ID的事务来说:
注意:在拥有多个主设备的AXI系统中,AXI ID中包含主设备的标识符,这意味着对于顺序模型对于每个主设备而言是独立的。
AXI顺序模型同时要求所有相同方向且AXI ID一致的事务的响应顺序必须与事务发出顺序一致。
因为读地址和写地址通道是独立的,如果需要让不同方向具有相同ID的事务有顺序关系,主设备就必须在发出第二个事务之前等待接收第一个事务的响应,否则是没有顺序保证的,注意在这种情况下,主设备必须要保证收到的响应来自一个合适的点,一个来自中间AXI组件(如互联器)的响应不能保证组件Buffer下游的组件收到事务的顺序。
一个在相同方向发送携带有相同ID的事务时可以得到如下的顺序保证:
所谓事务的地址相同或有重叠,指的是事务在相同的单拷贝原子地址范围内至少有一个字节发生重叠。
为了满足顺序模型的要求,互联器必须保证以下几点:
为了满足顺序模型的要求,从设备必须保证以下几点:
任何中间组件都可以在事务到达目的端之前发出响应,但必须确保,对于任何其它来自上游主设备的事务而言,该事务的可见性。
当访问全部类型的存储器时,任何针对相同或重叠地址的新事务都必须能够观察到中间组件发出响应对应的事务。
当访问设备存储器时,中间组件必须维护任何具有相同ID以及到相同从设备的事务的顺序。
只有当事务的AxCACHE属性表明中间组件可以直接发出响应时,中间组件才可以发出响应。
AXI协议要求,针对设备存储器的访问顺序保证是针对一般存储器的访问顺序保证的超集,这意味着当任何标记为一般存储器访问类型的事务被转换为设备存储器访问类型时不需要移除任何原先的顺序保证,为了满足这个要求,针对相同或重叠地址的设备存储器的访问行为必须与一般存储器访问行为一致,无论其ID是什么。
下表给出了不同存储器类型在ID是否相同、地址是否重叠不同组合下的顺序要求。
存储器类型 | ID是否相同 | 地址是否重叠 | 是否要求顺序 |
---|---|---|---|
设备存储器 | 是 | 是 | 是 |
设备存储器 | 是 | 否 | 是 |
设备存储器 | 否 | 是 | 是 |
设备存储器 | 否 | 否 | 否 |
一般存储器 | 是 | 是 | 是 |
一般存储器 | 是 | 否 | 否 |
一般存储器 | 否 | 是 | 是 |
一般存储器 | 否 | 否 | 否 |
这里说的一般存储器,同样适用于可Cache存储器,即AxCACHE[3:1]不为全0的存储器。
为了提升接口对不同顺序模型接口协议的兼容性,规范提供了Ordered_Write_Observation属性,该属性可针对单个接口设置为True或False,如果该属性设置为True,说明该端口拥有该属性,否则说明该接口不支持该属性。
一个支持Ordered_Write_Observation属性的接口可以支持生产者/消费者顺序模型以提升效率。
如果两个拥有相同ID的写事务可以被系统中的其它代理以与事务发出顺序相同的顺序观察到事务,则该接口可以声称其提供了Ordered_Write_Observation支持。
如果一个接口不支持Ordered_Write_Observation特性,则仅能保证针对相同ID到相同外设的写事务顺序。为了在这种情况下支持生产者/消费者顺序模型,在后续针对不同外设的写事务发出前,必须通过BRESP等待接收前一个写事务的响应。
AXI4协议引入了单拷贝原子大小的概念,这个术语定义了一个事务原子更新的最小字节数。AXI4协议要求大于一个单拷贝原子大小的事务必须更新至少为单拷贝原子大小的内存块。
注意:原子性并不定义数据更新的确切时刻。必须确保的是,没有一个主设备可以观察到原子数据的部分更新形式。例如,在使用许多系统数据结构例如由32bit原子元素构成的链表时,针对这些元素的原子更新操作必须同时更新整个32bit的值,任何一个主设备在某个时刻只观测到其中的16bit发生更新,而在另一个时刻观测到另外16bit发生更新的的这一行为是不可接受的。
更复杂的系统要求支持更大的原子元素,特别是64bit原子元素,以便主设备可以使用基于更大原子元素的数据结构通信。
系统所支持的单拷贝原子大小非常重要,因为给定通信中设计的所有组件都必须支持苏偶像的原子元素大小。如果两个主设备正在通过互联器和同一个从设备通信,则所有涉及到的组件都必须确保所需大小的事务被原子对待。
AXI4协议不要求特定的单拷贝原子大小,系统可以支持不同的单拷贝原子大小。
对于组内通信,不同的组件组可以拥有不同的单拷贝原子大小,在AXI4中,单拷贝原子组这一术语指的是一组可以以特定的原子性进行通信的组件。
下图展示了如下的一个系统:
事务的原子性只有在它的起始地址正确对齐时才能得到保证,例如,对于一个64bit的单拷贝原子组来说,如果突发事务的地址没有对齐到8字节边界,那么该事务就没有任何64bit单拷贝原子保证。
事务的字节选通信号不会影响单拷贝原子大小。
11.1.1 多拷贝写原子性
要指定一个系统提供多拷贝原子性,必须定义Multi_Copy_Atomicity属性。
如果这个属性被设置为True,则该系统拥有这个能力,否则该系统不拥有这个能力。
如果以下条件满足,则可以说明一个系统具有多拷贝原子性:
多拷贝原子性可以通过如下手段来保证:
注意:如果一个系统使用了ARM v8架构处理器,则该系统必须拥有Multi_Copy_Atomicity属性。该属性用来支持获取加载和释放存储指令,释放存储指令要求存储操作是多拷贝原子性的。
独占访问机制提供了信号量类型的操作,利用该机制时,不需要在整个访问周期内让总线被一个主设备所独占,这意味着信号量类型操作不会影响总线访问延迟以及最大可实现带宽。
AxLOCK信号选择独占访问,RRESP和BRESP信号则分别表示独占读和独占写操作的成功与否。
从设备要求额外的逻辑实现独占访问,当主设备访问一个不支持独占访问的从设备时,AXI协议提供了一种机制用来通知该主设备其所访问的从设备不支持独占访问操作。
11.2.1 独占访问过程
独占访问的基本机制如下:
主设备或许不会完成独占事务的写部分,独占访问监视硬件对于每一个事务ID只会监视一个地址。如果一个主设备没有完成独占事务的写部分,接下来这个主设备又以相同的事务ID对另一个地址发起了独占读事务,则独占访问监视的地址就会被改变。
11.2.2 从主设备视角看待独占访问
一个主设备通过执行一个独占读事务的方式开始一个独占操作,如果事务成功,从设备就会返回EXOKAY响应,表示从设备已经记录了要监视的地址。
如果主设备尝试向不支持独占访问的从设备发出独占读事务请求,从设备会返回OKAY响应而不是EXOKAY响应。
注意:主设备可以将OKAY响应作为独占访问不支持的错误响应看待,规范推荐主设备接下来不要执行独占操作的写部分。
在独占读操作之后的一段时间后,主设备尝试对相同位置发起独占写事务,如果从独占读事务开始时到现在对应地址的内容始终没有发生改变,独占写操作就会成功,从设备返回EXOKAY响应,并更新对应的存储器位置,否则,独占写操作就会失败,从设备返回OKAY响应而不是EXOKAY响应,独占写操作不会更新对应的存储器位置。
主设备或许不会完成独占操作的写部分,如果发生了这种情况,从设备将会继续监视独占访问的地址直到针对该从设备的另一个独占读事务启动一个新的独占访问序列。
主设备在独占访问序列的读部分完成后才会开始独占访问序列的写部分。
11.2.3 从从设备视角看待独占访问
不支持独占访问的从设备可以忽略AxLOCK信号,这样的从设备对于一般和独占访问都必须提供OKAY响应信号。
支持独占访问的从设备必须拥有监视硬件,规范推荐对于每一个支持独占的事务ID而言都准备一个监视单元。ARM规范参考手册,ARMv7-A和ARMv7-R版本定义了一种独占访问监视器,一个单端口的从设备可以拥有一个外接的独占访问监视器,而一个多端口的从设备则或许需要实现内部监视器。
独占访问监视器需要记录任何独占读操作的地址和ARID,然后需要监视指定的位置,直到针对该位置的写操作发生或者使用相同ARID的另一个独占读操作复位监视器并将地址设置为另一个值。
当从设备接收到一个独占写事务时,监视器就会根据给定的AWID检查指定的地址是否被监视,如果是,这表示从独占读操作开始以来没有发生写操作,然后就会处理写操作并完成整个独占访问过程,返回EXOKAY响应,并更新存储器。
如果在进行独占写时,地址不再被相同AWID的监视硬件监视,则表明发生了下列情况之一:
在以上两种情况中,独占写事务都不会更新对应的存储器位置,从设备必须返回OKAY而不是EXOKAY响应。
11.2.4 独占访问限制
独占访问存在以下限制:
不遵守这些限制将会导致不可预测的结果。
在独占操作过程中监视的最小字节数由事务的突发长度和突发大小所定义,而从设备可以选择监视更大的字节数(最大不超过128字节),但当相邻的字节被更新时,这会导致本应成功的独占访问操作变为失败状态。
11.2.5 不支持独占访问的从设备
RRESP与BRESP响应信号在表示一般访问成功时使用OKAY信号,而在表示独占访问成功时使用EXOKAY信号,这意味着不支持独占访问的从设备会使用OKAY信号表示独占访问操作的失败。
注意:
AXI4不支持锁定事务,而AXI3实现则必须支持锁定事务。
AXI4由于以下原因移除了锁定事务的支持:
当主设备使用AxLOCK信号表示当前事务是一个锁定事务时,互联器就必须确保只有当前主设备可以访问目标从设备区域,直到该主设备发出解锁事务为止,互联器的仲裁器必须强制执行此限制。
在主设备开始读事务或写事务的锁定序列前,该主设备必须确保没有其它等待完成的事务。
任何携带AxLOCK信号的事务都是锁定事务,这会强制互联器锁定接下来的事务,因此,一个锁定序列只有当主设备发出无AxLOCK信号事务时才会终止,这个终止事务包含在锁定序列中并实际上移除了锁。
在即将完成锁定序列时,必须首先确保所有的锁定事务都已经完成,然后才能发出终止解锁事务,并必须确保在进行接下来的任何事务之前该解锁事务已经执行完成。
主设备必须确保一个锁定序列中的全部事务都拥有相同的AxID值。
注意:锁定访问事务需要互联器在锁定序列进行中时避免任何其它的事务发生,这会对互联器的效率产生影响,因此,该规范推荐锁定访问事务只用于支持早期设备。
该规范推荐下列的限制(但不是强制性的):
11.3.1 原子访问信号
在AXI3中,AxLOCK信号用于指定一般、独占和锁定访问,下表为AXI3规范对于AxLOCK信号的编码:
AxLOCK[1:0] | 访问类型 |
---|---|
00 | 一般访问 |
01 | 独占访问 |
10 | 锁定访问 |
11 | 保留 |
AXI4移除了锁定事务,仅使用1bit锁定信号,下表为AXI4规范对于AxLOCK信号的编码:
AxLOCK | 访问类型 |
---|---|
0 | 一般访问 |
1 | 独占访问 |
11.3.2 遗留问题
在AXI4环境中,任何AXI3锁定事务可以按照下列方式被转换:
该规范推荐任何组件执行这样的转换,一般是互联器,可以包含一个可选的机制用于检测和标记这样的事务发生。
如果某些组件执行了这样的转换后不能正确工作,则这样的组件不能在AXI4环境中使用。
注意:对于许多早期使用锁定事务的例子,例如SWP指令的执行,或许需要通过修改软件的方式来避免使用强制使用锁定事务的指令。
12.1.1 QoS接口信号
AXI4信号集支持两个4bit的QoS标识符:
协议并没有指定QoS标识符的精确使用方法,规范推荐AxQOS的值用于优先级指示器,更大的值表示更高优先级的事务。
当使用默认值0000时表示接口不参与任何QoS方案。
12.1.2 主设备问题
一个主设备可以产生自己的AxQOS值,如果它可以产生多个传输流,则可以为这些流分配不同的QoS值。
为了支持QoS,需要对正在使用的QoS方案有系统级的理解,同时需要全部的组件之间互相配合,因此,规范推荐主设备组件支持精确控制QoS值的机制用于任何给定的场景。
如果主设备组件不支持任何可编程的QoS方案,则它可以使用QoS值代表事务的相对优先级,然后可以将这些值映射到备用的系统级QoS值。
不能产生AxQOS值的主设备必须使用默认值。
注意:规范期望一些互联组件实现一些可编程寄存器,这些寄存器可以用于分配QoS值到连接的主设备,覆盖掉主设备原先的QoS值。
12.1.3 系统问题
AXI4中定义的QoS信号可以用于任何兼容的系统级QoS方法。
QoS默认的系统级实现是,任何组件可以选择处理多个事务时,都会选择QoS值较高的事务优先处理。这个选择仅当没有其他要求事务需要按特定顺序处理的约束时才会发生。
注意:这意味着AXI顺序规则优先于QoS。
可以实现兼容默认方案的更复杂的QoS方案。
12.2.1 附加接口信号
AXI4接口信号集支持两个4bit区域标识符(可选):
4bit区域标识符可以用于唯一地标识16个不同的区域,区域标识符可以提供更高阶的地址位译码,但在任何4KB地址空间内必须保持不变。
区域标识符的使用意味着从设备的单个物理接口可以提供多个逻辑接口,每一个都位于系统地址映射中的不同位置,区域标识符的使用也意味着从舍尔必不支持不同逻辑接口间的地址译码。
这个协议期望互联器在为拥有多个逻辑接口的单个从设备执行地址译码功能时产生AxREGION信号,如果一个从设备在系统地址映射中只有一个物理接口,则互联器必须使用默认的AxREGION值。
从设备必须确保两个位于不同区域但拥有相同的AXI ID的事务以正确地顺序响应。
如果从设备实现的区域少于16个时,从设备必须确保在任何主设备尝试访问不支持的区域时给出正确的协议信号,而这需要具体实现自行定义,例如,从设备或许需要通过下列方式来确保上述事宜:
AxREGION信号仅提供了对从设备可使用的现存地址空间的地址译码功能,以消除对地址译码功能的需求,这个信号并没有创建新的独立地址空间。
AxREGION只能出现在地址译码功能的下游接口上。
AXI4接口信号集在每个通道上包含了一些用户定义信号,一般情况下,规范推荐用户不使用用户信号,因为AXI协议并没有定义这些信号的功能,贸然使用可能会导致两个组件之间出现互操作性的问题,因为两个组件可能以不兼容的方法使用了相同的用户信号。
12.3.1 信号命名
每个AXI4通道定义的用户信号名称如下:
12.3.2 使用问题
协议并不要求所有通道都支持用户信号。
规范推荐互联器包含用户信号,然而,并没有要求主设备和从设备包含用户信号。
规范推荐互联组件包含用户信号的支持,以便互联组件可以将用户信号在主设备和从设备之间传送,用户定义信号的宽度是具体实现定义的,对于每个通道都可以是不同的。
低功耗接口是AXI协议的可选扩展,以如下两类外设为目标:
低功耗时钟控制接口包含如下信号:
13.2.1 外设时钟要求
CACTIVE信号表示外设是否需要时钟信号,当外设需要时钟使能的时候就会拉高CACTIVE信号,此时系统时钟控制器就必须立即使能时钟。当外设不需要时钟的时候就会拉低CACTIVE信号,系统时钟控制器可以关闭该时钟,但也可以不关闭。
如果一个外设在任何时候都允许其时钟被使能或禁用,则可以永久性地拉低CATIVE信号,若一个外设要求其时钟永久使能,则必须永久性地拉高CACTIVE信号。
CACTIVE仅用于没有下电或上电序列支持的某些外设的时钟控制。
13.2.2 下电或上电握手
对于一个拥有下电或上电序列的外设而言,只有在系统时钟控制器发出请求之后外设才会进入低功耗状态,AXI协议提供了请求/响应握手信号用于支持这个功能:
下列是这CSYSREQ与CSYSACK信号的时序图:
在序列开始时,CSYSREQ与CSYSACK信号都为高电平,在T1时刻,系统时钟控制器拉低CSYSREQ表示请求外设进入低功耗状态,外设在T2时刻拉低CSYSACK信号响应请求,在T3时刻,系统时钟控制器拉高CSYSREQ信号请求外设退出低功耗状态,在T4时刻,外设拉高CSYSACK信号响应请求。
外设可以同意或拒绝系统时钟控制器进入低功耗状态的请求,在外设响应请求的时候通过将CACTIVE信号拉高或拉低来表示接受或拒绝请求。
13.2.3 接受低功耗请求
下图是外设接受系统低功耗请求时的时序图:
在T1时刻,系统时钟控制器拉低CSYSREQ信号以请求外设进入低功耗状态,在外设识别到这个请求后,执行了自己的下电序列,并在T2时刻拉低了CACTIVE信号用来表示时钟信号可以被移除。在T3时刻,外设拉低CSYSACK信号通知系统时钟控制器该外设已进入低功耗模式,
外设只有在拉低CACTIVE至少一个时钟之后才能拉低CSYSACK信号。
13.2.4 拒绝低功耗请求
下图是外设拒绝系统低功耗请求时的时序图:
在T1时刻,系统时钟控制器拉低CSYSREQ信号以请求外设进入低功耗状态,在T2时刻外设响应该请求,但此时仅拉低了CSYSACK信号而并没有拉低CACTIVE信号,因此系统时钟控制器必须维持时钟,并且在执行了低功耗状态退出序列后才能发起另一个低功耗请求。在T3时刻,系统时钟控制器通过拉高CSYSREQ开始了低功耗状态退出序列,在T4时刻,外设拉高CSYSACK表示完成了低功耗状态退出序列。
13.2.5 退出低功耗状态
无论是系统时钟控制器还是外设都可以请求退出低功耗状态,外设要求CACTIVE与CSYSREQ信号在整个低功耗状态期间保持为低电平,这两个信号之一变为高电平都会触发低功耗状态退出序列的启动。
系统时钟控制器触发退出序列:
在T1时刻,系统时钟控制器拉高CSYSREQ信号以请求退出低功耗状态,然后使能时钟,外设识别到CSYSREQ信号为高电平后开始执行其自身的上电序列,并在T2时刻拉高CACTIVE信号表示它需要时钟信号,然后外设在T3时刻拉高CSYSACK完成退出序列。
外设触发退出序列:
在T1时刻外设拉高CACTIVE信号以通知其需要时钟信号,然后系统时钟控制器必须恢复时钟。
在T2时刻系统时钟控制器拉高CSYSREQ信号以便继续握手序列,外设接下来会拉高CSYSACK信号以完成退出序列。
注意:外设可以让CSYSACK保持数个周期的低电平以完成自身的退出序列。
13.2.6 组合低功耗域中的外设
系统时钟控制器可以组合一些不同的外设到一个相同的低功耗时钟域中,它可以将时钟域看作一个单独的外设,但要求下列规则必须遵守:
AXI协议并不要求一个组件使用AXI接口的完整可用信号集。
下列互操作性原则针对AXI3和AXI4组件。
作为一个一般性原则,组件必须支持全部的输入组合,但不必生成全部的输出组合,例如,从设备必须支持不同可能突发长度,但主设备可以只生成它所用的突发类型,这个策略保证全部的组件都能配合其它的组件工作。
AXI接口可以省略信号的条件如下:
注意:互联组件在合适的时候也可以忽略信号,例如,当一个信号仅输出默认值,则该信号就不需要被互联器转发,该信号可以直接在其目的端生成,类似地,如果一个信号不被任何目的端所使用,那么就不需要互联器转发该信号。
14.2.1 读写接口
读写接口包含下列AXI通道:
14.2.2 只读接口
只读接口仅支持读事务,因此只包含下述通道:
注意:只读接口不支持独占访问。
14.2.3 只写接口
只写接口仅支持写事务,因此只包含下述通道:
注意:只写接口不支持独占访问。
14.2.4 存储器从设备和外设从设备
AXI从设备分为存储器从设备与外设从设备。
存储器从设备必须正确地处理全部事务类型。
规范期望外设从设备拥有一个定义的访问方法,该方法建立了可以用于访问设备的事务类型以及对设备访问方式的限制。通常,定义的访问方法在组件的datasheet中描述,任何未定义的访问方法或许都会造成外设从设备失败,但规范期望以协议兼容的失败-安全方法完成访问以避免系统死锁,但不要求外设从设备继续进行正确的操作。
因为只有当使用外设定义的访问方法时才要求外设正常工作,因此外设从设备可以拥有接口信号的极小子集。
注意:规范期望所有外设都支持C语言定义的访问方法,如8bit/16bit/32bit对齐访问事务。并不存在要求支持的最小子集,因为每个组件支持的事务子集都可以不同,例如,一个外设可能只支持16bit访问事务,但另一个外设只支持32bit访问事务。
规范建议,一般而言,为了最大限度地重用IP,一个AXI组件接口包含所有的信号,这样就降低了设计流程中系统集成阶段出现错误的风险,它还可以帮助一些不能有效支持缺少信号的默认值的设计流程。
下列的几个表展示了AXI强制和可选信号,同时给出了可选信号的默认值。
主接口写通道信号和默认值:
信号 | 描述 | 方向 | 是否强制 | 默认值 |
---|---|---|---|---|
ACLK | 公共时钟 | 输入 | 强制 | - |
ARESETn | 公共复位 | 输入 | 强制 | - |
AWID | 写地址ID | 输出 | 可选 | 全0 |
AWADDR | 写地址 | 输出 | 强制 | - |
AWREGION | 写区域 | 输出 | 可选 | 全0 |
AWLEN | 突发长度 | 输出 | 可选 | 全0,长度1 |
AWSIZE | 突发大小 | 输出 | 可选 | 数据总线宽度 |
AWBURST | 突发类型 | 输出 | 可选 | 01,递增模式 |
AWLOCK | 锁定类型 | 输出 | 可选 | 全0,一般访问 |
AWCACHE | Cache类型 | 输出 | 可选 | 0000 |
AWPROT | 保护类型 | 输出 | 强制 | - |
AWQOS | QoS值 | 输出 | 可选 | 0000 |
AWVALID | 写地址有效 | 输出 | 强制 | - |
AWREADY | 写地址准备好 | 输入 | 强制 | - |
WDATA | 写数据 | 输出 | 强制 | - |
WSTRB | 写字节使能 | 输出 | 可选 | 全0 |
WLAST | 写最后 | 输出 | 强制 | - |
WVALID | 写有效 | 输出 | 强制 | - |
WREADY | 写准备好 | 输入 | 强制 | - |
BID | 响应ID | 输入 | 可选 | - |
BRESP | 写响应 | 输入 | 可选 | - |
BVALID | 写响应有效 | 输入 | 强制 | - |
BREADY | 响应准备好 | 输出 | 强制 | - |
存储器从接口写通道信号和默认值:
信号 | 描述 | 方向 | 是否强制 | 默认值 |
---|---|---|---|---|
ACLK | 公共时钟 | 输入 | 强制 | - |
ARESETn | 公共复位 | 输入 | 强制 | - |
AWID | 写地址ID | 输入 | 强制 | - |
AWADDR | 写地址 | 输入 | 强制 | - |
AWREGION | 写区域 | 输入 | 可选 | - |
AWLEN | 突发长度 | 输入 | 强制 | - |
AWSIZE | 突发大小 | 输入 | 强制 | - |
AWBURST | 突发类型 | 输入 | 强制 | - |
AWLOCK | 锁定类型 | 输入 | 可选 | - |
AWCACHE | Cache类型 | 输入 | 可选 | - |
AWPROT | 保护类型 | 输入 | 可选 | - |
AWQOS | QoS值 | 输入 | 可选 | - |
AWVALID | 写地址有效 | 输入 | 强制 | - |
AWREADY | 写地址准备好 | 输出 | 强制 | - |
WDATA | 写数据 | 输入 | 强制 | - |
WSTRB | 写字节使能 | 输入 | 强制 | - |
WLAST | 写最后 | 输入 | 可选 | - |
WVALID | 写有效输入 | 输入 | 强制 | - |
WREADY | 写准备好 | 输出 | 强制 | - |
BID | 响应ID | 输出 | 强制 | - |
BRESP | 写响应 | 输出 | 可选 | 00,OKAY |
BVALID | 写响应有效 | 输出 | 强制 | - |
BREADY | 响应准备好 | 输入 | 强制 | - |
主接口读通道信号和默认值:
信号 | 描述 | 方向 | 是否强制 | 默认值 |
---|---|---|---|---|
ARID | 读地址ID | 输出 | 可选 | 全0 |
ARADDR | 读地址 | 输出 | 强制 | - |
ARREGION | 读区域 | 输出 | 可选 | 0x0 |
ARLEN | 突发长度 | 输出 | 可选 | 全0,长度1 |
ARSIZE | 突发大小 | 输出 | 可选 | 数据总线宽度 |
ARBURST | 突发类型 | 输出 | 可选 | 01,递增模式 |
ARLOCK | 锁定类型 | 输出 | 可选 | 全0,一般访问 |
ARCACHE | Cache类型 | 输出 | 可选 | 0000 |
ARPROT | 保护类型 | 输出 | 强制 | - |
ARQOS | QoS值 | 输出 | 可选 | 0000 |
ARVALID | 读地址有效 | 输出 | 强制 | - |
ARREADY | 读地址准备好 | 输入 | 强制 | - |
RID | 读数据ID | 输入 | 可选 | - |
RDATA | 读数据 | 输入 | 强制 | - |
RRESP | 读响应 | 输入 | 可选 | - |
RLAST | 读最后 | 输入 | 可选 | - |
RVALID | 读有效 | 输入 | 强制 | - |
RREADY | 读准备好 | 输出 | 强制 | - |
存储器从接口读通道信号和默认值:
信号 | 描述 | 方向 | 是否强制 | 默认值 |
---|---|---|---|---|
ARID | 读地址ID | 输入 | 强制 | - |
ARADDR | 读地址 | 输入 | 强制 | - |
ARREGION | 读区域 | 输入 | 可选 | - |
ARLEN | 突发长度 | 输入 | 强制 | - |
ARSIZE | 突发大小 | 输入 | 强制 | - |
ARBURST | 突发类型 | 输入 | 强制 | - |
ARLOCK | 锁定类型 | 输入 | 可选 | - |
ARCACHE | Cache类型 | 输入 | 可选 | - |
ARPROT | 保护类型 | 输入 | 可选 | - |
ARQOS | QoS值 | 输入 | 可选 | - |
ARVALID | 读地址有效 | 输入 | 强制 | - |
ARREADY | 读地址准备好 | 输出 | 强制 | - |
RID | 读数据ID | 输出 | 强制 | - |
RDATA | 读数据 | 输出 | 强制 | - |
RRESP | 读响应 | 输出 | 可选 | 00,OKAY |
RLAST | 读最后 | 输出 | 强制 | - |
RVALID | 读有效 | 输出 | 强制 | - |
RREADY | 读准备好 | 输入 | 强制 | - |
14.3.1 主设备地址
AxADDR:规范并没有规定该信号的最小长度,如果系统地址总线比主设备地址信号更宽,则额外的高地址位全部设为0,如果更窄,则多余的高地址位不能连接到系统地址总线。
注意:一般情况下主设备支持32bit地址,主设备可选支持到至多64bit地址。
14.3.2 从设备地址
AxADDR:规范并没有规定该信号的最小长度,同时规范也不要求从设备对系统数据总线宽度内的数据使用低地址位进行寻址,并假设这些低地址位为全0,如果从设备的地址线比互联器更宽,则多余的高低地址位默认全0。
通常一个存储器从设备至少能够完全译码整个4KB地址空间。
14.3.3 存储器从设备
AxLOCK:规范不要求存储器从设备使用AxLOCK输入信号,然而,支持独占访问事务的存储器从设备需要这些信号。
AxCACHE:规范不要求存储器从设备使用AxCACHE信号,如果一个存储器从设备不支持Cache行为或所有的事务以相同的方式Cache,则该设备不需要这个信号。
14.3.4 写事务
WSTRB[3:0]:如果主设备总是执行整个数据总线宽度的写事务,则规范不要求主设备使用写字节使能信号,写字节使能的默认值是全1。
WLAST:规范不要求从设备使用WLAST信号,因为已定义写突发长度,从设备可以根据突发长度AWLEN[7:0]信号计算出最后一次写数据传输。
14.3.5 读事务
RLAST:规范不要求主设备使用RLAST信号,因为已定义读突发长度,主设备可以根据突发长度ARLEN[7:0]信号计算出最后一次读数据传输。
14.3.6 响应信号
RRESP,BRESP:如果主设备不需要执行独占访问事务也不需要事务错误通知,则主设备可以不使用RRESP与BRESP输入信号;如果从设备不需要支持独占访问事务也不需要生成错误响应,则从设备可以不使用RRESP与BRESP输出信号。
14.3.7 不安全和安全访问
AxPROT:规范不要求从设备区分非安全和安全访问,也不要求任何额外的保护支持,因此不要求从设备支持AxPROT输入信号。
注意:要特别注意AxPROT信号,AxPROT[1]信号表示事务是否为安全事务,不正确的设置可能会导致不正确的系统行为。