1.独占传输介绍
AHB5定义了Exclusive_Transfers
属性。这个属性定义了一个接口是否支持独占传输的概念。如果这个属性没有定义,那么接口就不支持独占传输。
独占传输提供了一种支持类似semaphore操作的机制。
一个独占访问序列是一个单一master发起的一系列独占传输,操作步骤如下:
- 从一个地址执行一个独占读取(Exclusive Read)传输。
- 基于从独占读取获得的数据计算一个新数据,以便存储到该地址。
- 在独占读取和独占写入之间可以有其他的非独占传输。
- 对同一个地址用新数据执行一个独占写入(Exclusive Write)传输:
- 如果自从独占读取传输以来没有其他master写入该位置,独占写入传输就成功并更新内存。
- 如果自从独占读取传输以来另一个master已经写入了该位置,独占写入传输就失败,内存位置不会被更新。
- 对独占写传输的响应表明传输是成功还是失败。
这个序列确保只有在存储到内存时,该位置仍然保持用于计算要写入该位置的新值的相同值时,才更新内存位置。
如果独占写入传输失败,预期master将重复整个独占访问序列。
如果在独占读传输之后,同一个master更新相同或重叠的位置,是否会导致相关的独占写传输成功或失败,这是硬件实现定义的。
2.独占访问监视器
为了支持独占访问序列,需要一个独占访问监视器,该监视器必须确定独占写入传输是成功还是失败。
独占访问监视器必须能够同时监控系统中每个能够进行独占访问的master的至少一个地址位置。
独占访问监视器在系统中的位置没有定义。然而,它必须被放置在能够观察到用于独占访问序列的所有地址位置的地方。例如,如果一个系统包括多个内存控制器,那么所有的访问都必须通过包含独占访问监视器的中心点进行路由,或者在每个内存控制器处需要一个单独的独占访问监视器。
系统不要求对所有地址位置支持独占访问序列。对于不支持独占访问序列的访问,提供了一个故障安全机制。通常,系统会对主内存支持独占访问序列,但不会对任何外围设备支持。
3. 独占访问信号
与独占传输相关联的额外信号包括:
-
HEXCL 独占传输。表明当前传输是独占访问序列的一部分。这个信号是地址阶段信号,并且具有与HADDR相同的有效性约束。
-
HMASTER[m:0] master标识。具有多个独占传输能力的线程的master必须生成这个信号来区分不同的线程。 由master生成的HMASTER值将与互连生成的值结合,以确保呈现给独占访问监视器的HMASTER值是唯一的。 这个信号是地址阶段信号,并且具有与HADDR相同的有效性约束。
-
HEXOKAY 独占确认。增加了一个额外的响应信号来指示独占传输的成功或失败。
HMASTER[m:0]信号的宽度是硬件设计定义的。然而,本规范推荐以下宽度:
- 对于master组件,根据支持独占传输能力的线程数量实现所需的位宽。
- 对于master连接的互连端口,实现4位。互连可以选择性地支持更大的位宽配置。
- 对于slave或监视器组件,实现8位。slave或监视器组件可以选择性地支持更大的位宽配置。
HMASTER信号的使用不限于独占传输,系统内的互连和slave组件可以使用这个信号来区分系统中的不同master,并相应地调整它们的行为。因此,对于所有传输,而不仅仅是独占传输,必须提供有效的HMASTER指示。
3.1 响应信号
HEXOKAY信号用于指示独占传输的成功或失败:
- 当HEXOKAY被断言时,表明独占传输已成功,并且对于独占写传输,表明内存位置已被更新。
- 当HEXOKAY未被断言时,表明独占传输已失败。这可能是因为:
- 尝试对不支持独占传输的地址位置进行独占传输。
- 独占写传输失败,因为自匹配的独占读传输以来,内存位置没有保持不变。在这种情况下,内存位置不会被更新。
master可以通过确保首先对位置执行独占读传输,来确保它不会尝试对不支持独占传输的地址位置执行独占写传输。
对HEXOKAY适用以下约束:
- HEXOKAY只能在HREADY被断言的同一周期内被断言。
- HEXOKAY不能在HRESP被断言的同一周期内被断言。
4. 独占传输限制
独占传输必须遵守以下限制条件:
- 必须有一次单数据传输。
- 突发类型必须被指示为SINGLE或INCR(增量)。
- 不得包含BUSY传输。
- 地址必须根据HSIZE指示的数据大小对齐。
- HPROT信号的值必须保证独占访问监视器能够看到传输。
注意:
- 如果独占访问监视器位于系统缓存的下游,则传输必须是不可缓存的;如果独占访问监视器位于系统缓存的上游,则允许传输是可缓存的。
独占读传输和独占写传输被认为是同一独占访问序列的一部分,以下信号对于两次传输都必须相同:
- HADDR,地址。
- HSIZE,数据大小。
- HPROT,保护控制。
- HBURST,突发类型。
- HMASTER,主设备标识。
- HNONSEC,非安全(如果适用)。
允许master发出一个独占读传输而不在同一独占访问序列中跟随一个独占写传输。
允许master发出一个独占写传输,该传输未在相同独占访问序列中先前进行独占读传输。在这种情况下,独占写传输必须失败,并且必须取消断言HEXOKAY响应信号。
一个master不得在同一时间点有两个未完成的独占传输。在早期独占传输的数据阶段进行中时,不得发出独占传输的地址阶段,无论传输是否是同一独占访问序列的一部分。
允许在不同HMASTER值的早期独占传输的数据阶段进行中时,发出具有特定HMASTER值的独占传输的地址阶段。
注意: 独占传输的地址阶段被定义为HEXCL被断言且HTRANS指示为NONSEQ时。当HTRANS指示IDLE(空闲)时,HEXCL的断言不被视为独占传输的地址阶段。