【AXI】解读AXI协议原子化访问

解读AXI协议原子化访问

    • 一、写在前面
    • 二、解读AXI协议的原子化访问
      • 2.1 AXI协议中原子的大小
      • 2.2 信号列表
        • 2.2.1 AXI3.0版AxLOCK信号列表
        • 2.2.2 AXI4.0版AxLOCK信号列表
        • 2.2.3 反馈信号xRESP
          • 2.2.3.1 解读OKAY信号
          • 2.2.3.2 解读EXOKAY信号
      • 2.3 排他性访问(Exclusive accesses)
        • 2.3.1 排他性访问过程
        • 2.3.2 排他性访问要求
      • 2.3 正常访问 (Normal accesses)
      • 2.4 为什么从AXI3到AXI4取消了Locked Type?
    • 三、其他数字IC基础协议解读
      • 3.1 UART协议
      • 3.2 SPI协议
      • 3.3 I2C协议
      • 3.4 AXI协议

一、写在前面

AXI协议相较于UART,SPI,I2C来说,无论是内容还是难度都上了一个层级,放在一篇文章中进行解读未免篇幅过长,因此,有关AXI一些共性的、通用的问题,作者单独以前缀为【AXI】的标题进行小范围的串联,最终再汇总为深入浅出解读AXI协议,与从零开始的Verilog AXI协议设计,此为作者所思所考的推进顺序,单看【AXI】的每一篇,可能很多读者未免感到有些管中窥豹的疑惑,但若等作者更完此专栏再行观看,从头到尾进行阅读,应该就会有有茅塞顿开的收获与领悟。

二、解读AXI协议的原子化访问

本次讨论的内容,原子化访问,其实是数字IC芯片设计中软硬件结合的一个很好的范例,如果读者是软件背景,那么对于这个概念一定不陌生,无论是NV的CUDA还是Intel的CPU,包括各类高级编程语言,如C#和JAVA中很多都会出现这个概念。理解原子化访问的最重要的部分就是对于 AXI协议中AxLOCK这组信号的理解,当然,原子化访问这一部分AXI3.0和AXI4.0的差异也很大,后文讨论的内容更多的是从AXI4.0的角度来进行的。

原子化访问的名字,其实很形象的描述了它的意义,原子通常不可分割,反映在原子化访问上,也是体现其不可分割的特性对于什么不可分割呢?

我们将一段32bit的地址,当成一个原子,那不就代表在执行原子化访问的这部分时间内,这部分的地址的对应的数据不能改变(比如跟着burst操作想单独改变它的高16位,或者单独改变它的低16位,不就相当于把原子拆开了),必须将它视为一个整体

2.1 AXI协议中原子的大小

多大的地址,能在AXI协议中作为最小的原子单位呢?协议中用“single copy atomicity size”来表示这个概念,外设的复杂程度不一样,因此针对于不同的外设“single copy atomicity size”的大小不一致也是显而易见的,对于复杂一点的设备,通常情况下使用的“single copy atomicity size”为64 bits,而对于简单一些的设备,使用的“single copy atomicity size”为32 bits即可。以下的图片可以很好的说明64bits与32bits的划分原则

【AXI】解读AXI协议原子化访问_第1张图片

2.2 信号列表

2.2.1 AXI3.0版AxLOCK信号列表

AxLOCK[1:0] Access Type
0b00 Normal access
0b01 Exclusive access
0b10 Locked access
0b11 Reserved

2.2.2 AXI4.0版AxLOCK信号列表

AxLOCK Access Type
0b0 Normal access
0b1 Exclusive access

在AXI4.0中,ARM取消了对Locked access的支持,仅保留正常访问和排他性访问两种访问形式。因此后文中我们讨论的更多也是Normal access和Exclusive access这两种方式

2.2.3 反馈信号xRESP

这里出现的xRESP,实际上是指RRESP和BRESP这两个信号,RRESP[1:0]是对于AXI协议读操作的反馈信号(读数据通路),BRESP[1:0]是对于AXI协议写操作的反馈信号(写回复通路)。四种状态如下面的表格所示,不过在讨论原子化操作的过程中,其实仅需要理解OKAY和EXOKAY这两种状态即可

xRESP[1:0] Response Description
0b00 OKAY 正常访问(Normal access)成功
0b01 EXOKAY 排他性访问(Exclusive access okay)成功
0b10 SLVERR 从设备错误
0b11 DECERR 解码器错误
2.2.3.1 解读OKAY信号

OKAY信号是对于绝大多数transaction操作的反馈信号,具体返回OKAY的可能有以下几种情况

  1. normal access成功
  2. exclusive access失败
  3. 针对于主设备向不支持排他性操作的从设备发送exclusive access访问的反馈
2.2.3.2 解读EXOKAY信号

若xRESP反馈EXOKAY这个信号,只存在一种可能,就是 排他性访问 (Exclusive access)成功。

2.3 排他性访问(Exclusive accesses)

2.3.1 排他性访问过程

  1. 主设备针对于某个地址,执行读取操作,其中AxLOCK设定为排他性访问,从设备在步骤一后就开始监测该地址信号了。
  2. 一段时间后,主设备针对于相同的地址,进行“写操作”,其中AxLOCK同样设定为排他性访问步骤二的AWID需要和步骤一的ARID相匹配
  3. 反馈信号:
    成功(EXOKAY)!意味着在这段时间内,没有其它的主设备企图去改变步骤一读取操作中锁定的地址,那么步骤二的排他性写操作可以更新memory
    失败(OKAY)!意味着在这段时间内,有其他的主设备改变了步骤一读操作中锁定的地址,那么memory不能更新

2.3.2 排他性访问要求

Exclusive accesses对于从设备的硬件提出了新的要求,一般情况下是新增加了一个monitor去监测来自主设备的transaction传输信号,假如在这段时间内其他主设备对地址没有操作,皆大欢喜,更新地址对应的数据即可,但是假如排他性访问失败,monitor会去阻挡主设备对这段地址的写入,并将反馈返回给主设备(比如CPU),这样,CPU根据自身的要求重新分配地址或者过一段时间再尝试,通过这种形式,我们保证了读写这一整个过程中,软件知道“是不是只有一个线程(Master)在写这段地址(其他线程在这个过程可以读)”,避免了线程之间的冲突。
当然对于排他性访问还有如下的要求

  • 1 ARID与AWID需要相同
  • 2 读和写的地址,burst size、burst length、其他控制信号需要保持相同
  • 3 排他性访问的burst lentgh transfer不能超过16
  • 4 排他性传输的地址需要对齐transaction的总字节数
  • 5 AxCACHE信号需要确保正处于监测状态的从设备可以接收到transaction(换言之AxCACHE不能是Cacheable的)

2.3 正常访问 (Normal accesses)

在正常访问的状态下,没有monitor,也没有监测,按照burst突发传输的机制,也就是最简单的状况去,读写memory数据即可。

2.4 为什么从AXI3到AXI4取消了Locked Type?

我们之所以讨论原子化操作,其实是为了避免多线程的冲突,那么用更为简单的方式,直接将这段地址锁定上,只允许一个固定的主设备去操作它,任何其它的设备的访问都被拒绝,在硬件层面上用更简单粗暴的方式实现线程互锁,可不可行呢?
肯定是可行的,这也就是AXI3中Locked Type所想实现的功能,只有当解锁信号到的时候,其他设备才可以访问这段地址,但是这种方式对性能影响很大(特殊地址的长时间占用,完全完成才解锁,对比只有写的时候去判断一下更新可不可行再给主设备反馈),所以取消了Locked Type

三、其他数字IC基础协议解读

3.1 UART协议

  • 【数字IC】深入浅出理解UART
  • 【数字IC】从零开始的Verilog UART设计

3.2 SPI协议

  • 【数字IC】深入浅出理解SPI协议
  • 【数字IC】从零开始的Verilog SPI设计

3.3 I2C协议

  • 【数字IC】深入浅出理解I2C协议

3.4 AXI协议

  • 【AXI】解读AXI协议双向握手机制的原理
  • 【AXI】解读AXI协议中的burst突发传输机制
  • 【AXI】解读AXI协议事务属性(Transaction Attributes)
  • 【AXI】解读AXI协议乱序机制
  • 【AXI】解读AXI协议原子化访问

你可能感兴趣的:(#,AXI协议,fpga开发,verilog,fpga,硬件架构,芯片)