从零开始学AXI(八)
在AMBA AXI协议中与突发类型相关的一个可配置属性是Wrap_CLS_Modifiable该属性决定了当突发类型为环绕式WRAP时事务是否必须满足缓存行大小且可修改。若该属性取值为True则表示事务必须为缓存行大小且可修改若取值为False这也是默认值则事务无需满足缓存行大小且可以不可修改。需要注意的是环绕式原子比较操作不受此属性影响具体细节可参考关于原子事务的相关章节。该属性在主控方与从属方之间的兼容性遵循如下规则当主控方设为False时与从属方False兼容与从属方True不兼容当主控方设为True时无论从属方为False还是True均兼容。另一种突发类型是固定地址FIXED它用于对同一存储位置的重复访问例如加载或清空FIFO的场景。在FIXED突发中每次传输的地址都相同并且所有传输中有效的字节通道保持不变但在这些字节通道内部每次传输实际置位的写选通信号WSTRB的字节可以不同。该突发的长度最多可达16次传输并且FIXED突发类型只能与WriteNoSnoop或ReadNoSnoop操作码配合使用。由于FIXED突发类型并不常用协议定义了一个名为Fixed_Burst_Disable的属性用以指示组件是否支持该类型。当该属性为True时表示从属接口不支持FIXED突发请求且主控接口不会生成此类请求当为False默认值时从属接口支持FIXED突发请求主控接口可能生成此类请求。该属性的兼容性为若主控接口为False则与从属接口False兼容、与从属接口True不兼容若主控接口为True则与两者均兼容。关于传输地址的确定事务的起始地址通过AXI地址信号AWADDR或ARADDR给出这些信号的位宽由属性ADDR_WIDTH定义其取值范围为1到64位默认值为32位。协议允许具有不同物理地址空间大小的组件之间通信较小物理地址空间的组件必须位于较大地址空间的一个对齐窗口内通常位于底部但也允许偏移发起事务时需在地址中添加所需的高位接收事务时需检查地址是否在窗口内若是则将高位地址位移除后通过否则抑制该事务这些功能由互连结构负责实现。对于突发传输中每次传输的地址和字节通道计算协议使用了一系列公式。这些公式涉及的变量包括起始地址即主控发出的AxADDR、数据字节数数据通道宽度除以8、对齐地址起始地址除以传输大小后向下取整再乘以传输大小、第N次传输的地址、环绕边界用于WRAP突发定义为起始地址除以传输大小乘以突发长度的整数倍再乘以该乘积、低位字节通道和高位字节通道。对于突发中的第一次传输其地址即为起始地址。对于递增突发INCR以及尚未发生地址回绕的环绕突发WRAP后续传输的地址等于对齐地址加上N-1倍传输大小。对于WRAP突发环绕边界是起始地址除以传输大小乘以突发长度后向下取整再乘以该乘积的结果当某次传输的地址达到环绕边界加上传输大小乘以突发长度时当前传输的地址变为环绕边界之后的所有传输地址则等于对齐地址加上N-1倍传输大小再减去传输大小乘以突发长度即实现回绕。字节通道的计算方面第一次传输的低位字节通道等于起始地址减去起始地址除以数据字节数后向下取整再乘以数据字节数高位字节通道等于对齐地址加上传输大小减一再减去起始地址除以数据字节数向下取整后乘以数据字节数第一次之后的传输其低位字节通道等于当前地址减去当前地址除以数据字节数向下取整再乘以数据字节数高位字节通道等于低位字节通道加上传输大小减一。数据在相应的字节通道上传输即从第8倍高位字节位到第8倍低位字节加7位。此外事务容器描述了在地址对齐且选通信号激活的情况下该事务可能访问的所有字节其大小为传输大小乘以突发长度。对于INCR突发容器的下界为对齐地址上界为对齐地址加容器大小对于WRAP突发容器的下界为环绕边界上界为环绕边界加容器大小。