深入理解AXI协议中Atomic传输

文摘   2024-12-29 21:03   北京  

——————————————————————————————

版权声明:

本文作者:烓围玮未。主要从事ISP/MIPI/SOC/车规芯片设计/SOC架构设计

首发于知乎专栏:芯片设计进阶之路

微信公众号:芯片设计进阶之路(x_chip)

转发必须授权,同时保留这段声明,盗版必究!

——————————————————————————————

最近在工作中发现,虽然从使用AXI到现在已经十几年了,但是对有些概念的理解还是不太深入,比如Atomic 传输和Narrow burst。下面总结一下Atomic 传输。

Atomic 传输

AXI协议中的Atomic传输是一种用于实现在多核处理器系统中对内存进行原子操作的机制。

  1. 原子操作

原子操作(Atomic Operation)是指在多任务或多线程环境中,一个操作或者一系列操作作为一个不可分割的单元执行,要么完全执行,要么完全不执行,不存在中间状态。这种操作对于保证数据一致性、实现同步机制以及防止竞争条件(Race Condition)非常重要。

在计算机科学中,原子操作通常有以下几个方面的特点:

  • 不可分割性:原子操作在执行过程中不会被任何其他任务或线程中断。

  • 一致性:原子操作保证了在并发环境中对共享数据的访问是一致的,不会出现不一致的中间状态。

  • 顺序性:在多线程环境中,原子操作的执行顺序对于所有线程都是可见的,即在一个线程中观察到的操作顺序与在其他线程中观察到的顺序是一致的。

原子操作的常见类型包括:

  • 原子比较并交换(Compare-and-Swap, CAS):这是一种常用的原子操作,它比较内存中的值与预期值,如果相同则更新为新值。

  • 原子交换(Swap):将内存位置的值与提供的值交换。

  • 原子添加(Add):将一个值添加到内存位置的现有值。

  • 原子或/与/异或(Logical Operations):对内存位置的值执行逻辑操作。

在硬件层面,许多处理器提供了对原子操作的支持,例如通过特定的CPU指令来实现。在软件层面,编程语言和库通常提供了原子操作的抽象,使得程序员可以在不直接依赖硬件特性的情况下实现线程安全的操作。

在多核处理器系统中,原子操作对于实现锁和其他同步机制至关重要,因为它们可以用来实现对共享资源的安全访问。例如,原子操作可以用来实现互斥锁(Mutex),在多线程程序中同步对共享数据的访问。

虽然软件层面也能实现原子操作,但是随着异构多核系统越来越复杂,纯软件的支持代价太大甚至不能实现,所以都需要硬件层面从CPU到总线整个系统的支持。

  1. AXI3的原子操作

在AXI3协议中,原子操作主要有两种类型:Exclusive(独占)和Locked(锁定)。

AXI3中的原子操作通过AxLOCK信号来实现。当AxLOCK信号被置位时,表示正在进行原子操作。如果AxLOCK为'b10,表示Locked访问;如果为'b01,则表示Exclusive访问。

Locked访问则是一种较老的机制,它在AXI3中使用,但对总线性能影响较大,因为它会锁定整个从设备,阻止其他主设备在锁定期间对其的访问。Locked访问在AXI4中被舍弃,因为这种模式会阻塞整个总线,影响性能。

Exclusive访问允许多个主设备同时访问不同的从设备地址,但不允许其他主设备访问已被标记为独占的特定地址。这种机制不会阻塞整个总线,而是通过Monitor来记录独占访问的地址,从而确保原子性。

实际的SOC中,很少有使用Locked的访问,这个对系统影响太大。我们了解一下就可以,实际基本不会使用。如果你设计了一个IP必须支持locked访问,估计都不会有公司愿意买。

  1. AXI4的原子操作

在AXI4中,为了提高性能和减少对总线性能的影响,只有Exclusive访问被保留,而Locked访问模式被舍弃。

Exclusive访问通过AxLOCK信号和响应信号(RRESP和BRESP)来实现,其中EXOKAY表示独占访问成功,而OKAY则表示独占访问失败。

注意:这里EXOKAY才表示独占访问成功!

AXI3和AXI4对比如下:

AXI3的AxLOCK有2个bit,AXI4只有一个bit。

AXI4中这个信号名只是为了延续,其实有一定的误导性,AxLOCK并没有LOCK的功能。

  1. AXI5的原子操作

到了AXI5协议,引入了更多类型的原子操作,包括Atomic Store、Atomic Load、Atomic Swap和Atomic Compare。这些操作允许在数据所在的位置上执行操作,而不需要将数据移动到发起操作的代理处。这种机制减少了系统中其他代理无法访问数据的时间,提高了效率。AXI5中的原子操作通过新增的AWATOP信号来标识原子操作的类型和具体的操作类型。

在AXI5协议中,Atomic传输得到了增强,支持更多的原子操作类型,包括原子存储(Atomic store)、原子加载(Atomic load)、原子交换(Atomic swap)和原子比较(Atomic compare)。这些操作允许处理器在不锁定总线的情况下,对内存中的数据执行原子级别的读写操作。

  • Atomic store:发送单个数据值与地址和要执行的原子操作,目标执行使用发送的数据和地址位置的值作为操作数的操作,并将结果存储在地址位置,通过B通道返回单个响应而不带数据。

  • Atomic load:发送单个数据值与地址和要执行的原子操作,返回原始数据值,目标执行使用发送的数据和地址位置的值作为操作数的操作,并将结果存储在地址位置,通过R通道返回访问地址空间的原始数据。

  • Atomic swap:发送单个数据值与地址,不需要原子操作,目标交换地址位置的值与提供的值,返回原始数据值,通过B通道返回单个响应而不带数据。

  • Atomic compare:发送两个数据值,比较值和交换值,到地址位置,比较地址位置的数据值与比较值,如果匹配则写入交换值,否则不写入,返回原始数据值,通过B通道返回单个响应而不带数据。

在AXI4和AXI5协议中,原子操作通过AW和W通道发送请求,并通过B和R通道返回响应。AW通道在AXI4的基础上增加了AWATOP[5:0]信号,用于标识原子操作的类型和具体的操作类型;W通道传递原始的操作数。Atomic store和atomic load操作都需要通过AW和W通道发送地址、长度、原子类型和操作,都需要从内存读取地址位置的原始数据,都需要进行ALU运算,然后将新值存回地址位置。两者的主要区别在于原子操作完成后的响应和数据返回:atomic store通过B通道返回一个原子响应;而atomic load通过R通道返回访问地址空间的原始数据。

总结一下:

  1. AXI3 协议中的原子操作主要是通过Exclusive和Locked访问来实现的,Locked访问在后续被放弃,可以只做了解。

  2. AXI4和AXI5都只支持Exclusive,这个是AXI协议支持原子操作的重点;

  3. AXI5引入了更多类型的原子操作,增加了AWATOP[5:0]信号,但是AXI5 协议在现实中用的比较少,还是AXI4比较常见,可以只做了解,具体使用的时候去查协议对照就行,不用花太多时间。


  1. 举例说明

下面是两个成功的独占访问序列的例子,这两个访问序列都PASS了。

下图展示了一个包含管理器及其AXI管理器接口和从属设备的系统:

从属接口包括可以为每个事务保存ID和访问地址的独占访问监控硬件。

下表描述了示例序列中的不同事务。表中的所有事务都是独占访问:

表格中显示的事务序列按如下方式进行:

  1. 第一笔传输是管理器从地址0xA000进行带有ID 0的独占读取事务。独占访问监控硬件在其表中保存了此事务的ID和地址,从属设备以读取数据0x1作为响应。由于这个从属设备支持独占访问,独占访问监控硬件以EXOKAY响应作为回应。

  2. 第二笔传输管理器从地址0xB000执行带有ID 1的新的独占读取事务。同样,独占访问监控硬件在表中保存了这个新事务的详细信息,从属设备以读取数据0x2作为响应。由于这个从属设备支持独占访问,独占访问监控硬件再次以EXOKAY响应作为回应。此时,有两笔独立的独占序列正在进行。

  3. 第三笔传输管理器对地址0xA000执行带有ID 0的独占写入事务。独占访问监控硬件在表中检查此事务的详细信息,并且由于存在带有ID 0和地址0xA000的现有记录,以EXOKAY响应回复管理器。这意味着没有其他管理器访问过这个内存位置,从属设备用它接收到的新值更新它,在这个例子中是0x3。独占访问监控硬件从其表中移除了这个事务的ID和地址,因为对该地址位置的独占访问序列现在已完成。

  4. 第四笔传输管理器对地址0xB000执行带有ID 1的新的独占写入事务。独占访问监控硬件在表中检查此事务的详细信息。看到存在带有ID 1和地址0xB000的现有记录,它再次以EXOKAY响应回复管理器。这意味着没有其他管理器访问过这个内存位置,从属设备用它接收到的新值更新它,在我们的示例中是0x4。同样,独占访问监控硬件从其表中移除了这个事务的ID和地址,因为对该地址位置的独占访问序列现在已完成。

下面是一个成功的独占访问序列和一个失败的独占访问序列的例子。

下图包含管理器及其AXI管理器接口和从属设备的系统,两个独占访问序列,第一个成功,第二个失败。

从属接口包括可以为每个事务保存访问的ID和地址的独占访问监控硬件。下表描述了示例序列中的不同事务。表中的所有事务都是独占访问:

表格中显示的事务序列按如下方式进行:

  1. 第一笔传输是管理器地址0xA000进行带有ID 0的独占读取事务。独占访问监控硬件在其表中保存了此事务的ID和地址,从属设备以读取数据0x1作为响应。由于这个从属设备正确支持独占访问,独占访问监控硬件以EXOKAY响应作为回应。

  2. 第二笔传输管理器从与第一笔交易相同的地址0xA000执行了带有ID 1的新独占读取事务。独占访问监控硬件在表中保存了这个新事务的详细信息,从属设备以读取数据0x1作为响应。同样,因为这个从属设备正确支持独占访问,独占访问监控硬件再次以EXOKAY响应作为回应。在我们的示例中,此刻我们有两个针对相同内存位置的不同进行中的独占序列。

  3. 第三笔传输管理器对地址0xA000执行了带有ID 0的独占写入事务。独占访问监控硬件检查表中此事务的详细信息,并看到有记录显示ID 0和地址0xA000,于是以EXOKAY响应回复管理器。这意味着没有其他管理器更新过这个内存位置,从属设备可以用接收到的新值更新它,在我们的例子中是0x3。因为地址位置0xA000的内容已被修改,独占访问监控硬件从其表中移除了所有匹配该位置地址的条目。

  4. 第四笔传输管理器再次对地址0xA000执行了带有ID 1的新独占写入事务。独占访问监控硬件检查表中此事务的详细信息。没有找到任何带有地址0xA000的记录,它以OKAY响应作为回应。OKAY响应意味着之前在这个内存位置上执行了写入操作,该操作更新了数据。在这种情况下,从属设备无法用新值0x4更新内存位置。这种情况是独占访问失败。在这种情况下,管理器必须重新启动完整的独占访问序列,从独占读取开始,然后再执行独占写入。

这两个例子展示了独占访问如何实现非阻塞行为。由于LOCK访问基本不用,这里就不举例说明了。

总的来说,AXI协议中的Atomic传输是一种重要的机制,它允许在多核系统中安全地执行对共享内存的原子操作,从而保证了数据的一致性和系统的稳定性。而ARM更新AXI协议也主要是为了它的CPU服务的,在其他非cpu核心的ip中碰到Atomic传输的概率比较小,但是对整个SOC系统来说,Atomic传输还是必须掌握的知识。

当然大家现在都知道,RSIC-V才是未来,那么RSIC-V是怎么支持原子操作的呢?

  1. RISC-V的原子操作

RISC-V通过指令的A扩展(Atomic Extensions)来实现原子操作指令。RISC-V 的 A 扩展提供了两种指令集来实现原子操作:一种是 LR/SC(Load-Reserved/Store-Conditional)指令对,另一种是 AMO(Atomic Memory Operations)指令。

下面简要介绍这两种指令集:

  1. LR/SC(Load-Reserved/Store-Conditional)指令对

    1. Load-Reserved (LR):这条指令用于加载一个内存地址的值,并且“保留”这个地址,意味着在之后的一段时间内,其他处理器对这个地址的访问将会被阻塞,直到与之配对的Store-Conditional (SC) 指令执行。这为执行原子操作提供了一种机制。

    2. Store-Conditional (SC):这条指令尝试将一个新值存储到之前由Load-Reserved保留的内存地址中。如果自从执行Load-Reserved以来,没有其他处理器对这个地址进行了写入,那么Store-Conditional会成功更新内存并返回成功信号;如果有其他处理器进行了写入,它会失败并返回失败信号,此时通常需要重试整个操作。

  2. AMO(Atomic Memory Operations)指令

    1. RISC-V的AMO指令集提供了一组丰富的原子操作,包括加法、减法、逻辑操作(AND、OR、XOR)以及比较和交换(CAS)等。这些操作直接在内存上执行,不需要使用Load-Reserved和Store-Conditional指令。

    2. AMO指令包括:AMOSWAP(原子交换)、AMOADD(原子加法)、AMOAND(原子AND)、AMOOR(原子OR)、AMOXOR(原子XOR)、AMOMAX(原子最大值)、AMOMIN(原子最小值)、AMOMAXU(原子无符号最大值)、AMOMINU(原子无符号最小值)等。

    3. 这些指令通常用于实现无锁数据结构和同步原语,因为它们确保了在多处理器系统中对共享数据的安全访问。

这两种指令集各有优势和适用场景。LR/SC提供了一种灵活的原子操作机制,适合实现复杂的同步原语,如锁和条件变量。而AMO指令集则提供了更直接、更高效的原子操作,适合实现简单的原子更新和无锁编程。在实际应用中,开发者可以根据具体需求选择合适的原子指令集。

后记

技术很重要,技术背后的思想更重要!

处芯积律
处芯积律,而后知所至。一个芯片人的技术和行业研究分享。
 最新文章