AHB总线协议(二)

下图是8拍回环字突发传输:地址将在 32 字节边界处回环因此地址 0x3C 之后的地址是 0x20。

image

下图是8增量半字突发传输,所以地址每次增加 2 个字节并且突发在递增因此地址连续增加通过了 16 字节边界。


image

下图是未定义长度的增量突发。

两个半字传输在地址 0x20 处开始。半字传输地址增加为 2。 三个字传输在地址 0x5C 处开始。字传输地址增加为 4。


image


6 、地址译码

对于每个总线上的从机来说使用一个中央地址译码器提供选择信号, HSELx。选择信号是高位地址信号的组合译码,并且建议使用简单的译码方案以避免复杂译码逻辑和确保高速操作。
从机只能在 HREADY 信号为高时采样地址和控制信号以及 HSELx, HSELx 为高表示当前传输已经完成。在特定的情况下有可能在 HREADY 为低时采样 HSELx,但是被选中的从机将会在当前传输完成后变更。
能够分配给单个从机的最小地址空间是 1KB。所有总线主机必须被设计为不能执行超过 1KB 地址边界的增量传输,因此确保了一个突发绝不会超过地址译码的边界。

在系统设计中如果有包含一个存储器映射并未完全填满(存储空间)的情况时应该设置一个额外的默认从机以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间时这个默认从机应该提供一个 ERROR 响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的 OKAY 响应。典型默认从机的功能将以作为中央地址译码器的一部分来实现。

image

7、从机传输响应

在主机发起传输后,由从机决定传输该如何进行。 AHB 规范中没有做出总线主机在传输已经开始后取消传输的规定。
只要从机被访问那它必须提供一个表示传输状态的响应。 HREADY 信号被用来扩展传输并且和响应信号 HRESP[1: 0]相结合,以提供传输状态。
从机能够用许多种方式来完成传输。它能:
立刻完成传输;
插入一个或者多个等待状态以允许有时间来完成传输;
发出一个错误信号来表示传输失败;
延时传输的完成,但是允许主机和从机放弃总线,把总线留给其他传输使用。

  • 传输完成:
  • HREADY 信号用来扩展一次 AHB 传输的数据部分。当 HREADY 信号为低时表示传输将被扩展而当其为高时表示传输完成。

    注:每个从机必须有一个预先确定的在从机放弃总线之前插入的最大等待状态数目,以便能够计算访问总线的延时。建议但不强制规定,从机不要插入多于 16 个等待状态以阻止任何单个访问将总线锁定较长
    的时钟周期。

  • 传输响应:
  • 典型的从机将会用 HREADY 信号在传输中插入适当数量的等待状态而传输在HREADY 为高时完成并且给出 OKAY 响应,表示传输成功完成。
    ERROR 响应被从机用来表示某种形式的错误条件和相关的传输。典型的是被用作保护错误,例如试图写一个只读的存储空间。
    SPLIT 和 RETRY 响应组合允许从机延长传输完成的时间,但是释放总线给其他主机使用。这些响应组合通常仅由有高访问延时的从机请求并且从机能够利用这些响应编码来确保其他主机在长时间内不被阻止访问总线。
    关于SPLIT和RETRY的完整描述参见分块和重试。

    当从机需要插入一定数量的等待状态优于决定将要给出何种响应时从机必须将响应驱动为 OKAY。


    HRESP[1: 0]的编码、传输响应信号和每个响应的描述参见下表:

    HRESP[1]HRESP[0]响应描述
    00OKAY

    当 HREADY 为高表示传输已经成功完成。 OKAY 响
    应也被用来插入任意一个附加周期,当 HREADY 为
    低时,优先给出其他三种响应之一。

    01ERROR

    该响应表示发生了一个错误。错误条件应该发信号给
    总线主机以便让主机意识到传输失败。
    一个错误条件需要双周期响应。

    10RETRY

    RETRY(重试)信号表示传输并未完成,因此总线
    主机应该重试传输。主机应该继续重试传输直到完成
    为止。
    要求双周期的 RETRY 响应。

    11SPLIT

    传输并未成功完成。总线主机必须在下一次被授予访
    问总线时重试传输。当传输能够完成时从机将请求代
    替主机访问总线。
    要求双周期的 SPLIT 响应。

  • 双周期响应

仅有 OKAY 响应可以在单个周期里给出。 ERROR、 SPLIT 和 RETRY 响应需要至少两个周期。为了完成这些响应中的任意一个那么在倒数第二个(最后一个的前一个)周期从机驱动 HRESP[1: 0]以表示 ERROR、 RETRY 或者 SPLIT 并同时驱动 HREADY 为低以给传输扩展一个额外的周期。在最后一个周期 HREADY 被驱动为高电平以结束传输,同时HRESP[1: 0]保持驱动以表示 ERROR、 RETRY 或者 SPLIT。
如果从机需要两个以上的周期以提供 ERROR、 SPLIT 或者 RETRY 响应那么额外的等待状态可能会在传输开始时被插入。在这段时间 HREADY 信号将为低电平同时响应必须被设为 OKAY。

需要双周期响应是因为总线通道的本质特征。在从机开始发出 ERROR、 SPLIT 或者RETRY 中任何一个响应时接下来传输的地址已经广播到总线上了。双周期响应允许主机有足够的时间来取消该地址并且在开始下一次传输之前驱动 HTRANS[1: 0]为空闲传输。
对于 SPLIT 和 RETRY 响应接下来的传输必须取消因为在当前传输完成之前禁止下一次传输发生。然而,对于 ERROR 响应,由于当前传输不被重复,所以可以选择完成接下来的传输。
下图表示了一次RETRY操作的例子。

主机从地址 A 发起传输;
这次传输在接收到响应之前主机将地址移动到 A + 4;

从机在地址 A 不能立刻完成传输因此从机发出一个 RETRY 响应。该响指示主机在
地址 A 的传输无法完成并且在地址 A + 4 的传输被取消而用空闲传输替代。

image

下图表示了一个传输中从机请求一个周期来决定将要给出的响应(在HRESP为OKAY的时间段),之后从机用一个双周期的ERROR响应结束了传输。

image


  • 分块与重试

分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输因此允许更高优先级的主机能够访问主机。
分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生 SPLIT 和 RETRY 后分配总线的方式:
对 RETRY 而言仲裁器将继续使用常规优先级方案因此只有拥有更高优先级的主机将获准访问总线;
对于 SPLIT 传输而言仲裁器将调整优先级方案以便其他任何主机请求总线即能获得访问(总线),即使是优先级较低的主机。为了完成一个 SPLIT 传输从机必须通知仲裁器何时数据可用。

SPLIT 传输增加了仲裁器和从机的复杂性,但是却有可以完全释放总线给其他主机使用的优点,但是 RETRY(响应)的情况就只允许较高优先级的主机使用总线。
总线主机应该以同样的方式来对待 SPLIT 和 RETRY(响应)。主机应该继续请求总线并尝试传输直到传输成功完成或者遇到 ERROR 响应时终止。

  • 数据总线

为了不使用三态驱动而又允许执行AHB系统所以要求分开读和写数据总线。最小的数据宽度规定为 32 位,但是总线宽度却可以增加,参见关于AHB数据总线的位宽这一节中的描述。
HWDATA[31: 0]
写数据总线在写传输期间由总线主机驱动。如果传输是扩展的那么总线主机必须保持数据有效直到传输完成,由 HREADY 为高表示。

所有传输必须对齐到和传输大小相等的地址边界。例如,字传输必须对齐到字地址边界(也就是 A[1: 0] = 00),半字传输必须对齐到半字地址边界(也就是 A[0] = 0)。
对于宽度小于总线宽度的传输,例如一个在 32 位总线上的 16 位传输,那么总线主机仅需要驱动相应的字节通道。从机必须负责从正确的字节通道选择写数据。 下面两个表中分别表示了小端系统和大端系统中哪个字节通道有效。如果有要求,这些信息可以在更宽的总线应用中扩展。传输大小小于数据总线宽度的突发传输将在每拍突发中有不同有效字节通道。
有效字节通道取决于系统的端结构,但是 AHB 并不指定要求的端结构。因此,总线上所有主机和从机的端结构相同这点很重要。
HRDATA[31: 0]
读数据总线在读传输期间由合适的从机驱动。如果从机通过拉低 HREADY 扩展读传输那么从机只需要在传输的最后一个周期提供有效数据,由 HREADY 为高表示。
对于宽度小于总线宽度的传输从机仅需要在有效的字节通道提供有效数据,如下两个表所示。总线主机负责从正确的字节通道中选择数据。
当传输以 OKAY 响应完成时从机仅需提供有效数据。 SPLIT、 RETRY 和 ERROR 响应不需要提供有效的读数据。

image

为了使系统正确运行事实上所有模块都是相同端结构的并且任何数据通路或者桥接器也是相同端结构的。
不支持动态端结构,因为在大多数嵌入式系统中,这将导致明显的硅晶片较高,也就是多余的。
对于模块设计者而言建议只有应用场合非常宽泛的模块才应该被设计为双端结构的,通过一个配置引脚或者内部控制位来选择端结构。对于更多的特定用途的模块,固定端结构为大端或者小端将产生体积更小、功耗更低、性能更高的接口

7、仲裁

仲裁机制用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成 SPLIT 传输的请求。
任何没有能力执行 SPLIT 传输的从机不需要了解仲裁的过程,除非它们需要检测因为总线所有权改变而导致突发传输不能完成的情况。

以下给出对每个仲裁信号的简短描述:
HBUSREQx 被总线主机用来请求访问总线的总线请求信号。每个总线主机都有自己的连接到仲裁器的 HBUSREQx 信号并且任何一个系统中都可以有高达 16 个独立的总线主机
HLOCKx 由主机在请求总线的同时时断言的锁定信号。这提示仲裁器主机正在执行一系列不可分割的传输并且一旦锁定传输的第一个传输已经开始仲裁器不能授予任何其他主机访问总线。 HLOCKx 必须在涉及到的地址被寻址到之前至少断言一个周期,以防止仲裁器改变授予信号。
HGRANTx 授予信号由仲裁器产生并且表示相关主机是当前请求总线的主机中优先级最高的主机,(优先)考虑锁定传输和 SPLIT 传输。
主机在 HGRANTx 为高时获取地址总线的所有权并且在HCLK 的上升沿 HREADY 为高电平。
HMASTER[3: 0] 仲裁器使用 HMASTER[3: 0]信号表示哪一个主机当前被授予总线并且该信号可被用来控制中央地址和控制多路选择器。有 SPLIT 传输能力的从机也可以请求主机的序号以便它们能够提示仲裁器哪个主机能够完成一个 SPLIT 传输。
HMASTLOCK 仲裁器通过断言 HMASTLOCK 信号指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。
HSPLIT[15: 0] 这 16 位有完整分块能力的总线被有分块(SPLIT)能力的从机用来指示哪个总线主机能够完成一个 SPLIT 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。

下列小节提供更多的信息:
请求总线访问;
授予总线访问;
突发提前终止;
锁定传输。

7.1请求总线访问

总线主机使用 HBUSREQx 信号来请求访问总线并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。
如果主机请求锁定访问(总线),那么主机也必须断言 HLOCKx 信号来提示仲裁器其它主机不应该被授予总线。
当一个主机被授予总线并且正在执行一个固定长度的突发,那么就没有必要继续请求总线以便完成传输。仲裁器监视突发的进程并且使用 HBURST[2: 0]信号来决定主机请求了多少个输入。如果主机希望在当前正在进行的传输之后执行另一个突发那么主机需要在突发中重新断言请求信号。
如果主机在一次突发当中失去对总线的访问那么它必须重新断言 HBUSREQx 请求线以重新获取访问总线。
对未定长度的突发主机应该继续断言请求直到已经开始最后一次传输。在未定长度的突发结束时仲裁器不能预知何时改变仲裁。
对于主机而言有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机并没请求访问总线那么它驱动传输类型 HTRANS 来表示空闲传输显得很重要。

7.2授予总线访问

仲裁器通过断言适当的 HGRANTx 信号来表示请求总线的主机中哪个是当前优先级最高的。当前传输完成后,由 HREADY 为高时所表示,那么主机将被授予(总线)并且仲裁器将改变 HMASTER[3: 0]信号来表示总线主机序号。
下图表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程。

image

下图表示了在总线移交时等待状态的影响。

image

数据总线的所有权延时在地址总线的所有权之后。一次传输无论何时完成(由HREADY为高时所表示)然后占有地址总线的主机才能使用数据总线并且将继续占有数据总线直到传输完成。 下图表示当在两个总线主机之间移交总线时数据总线的所有权是如何转移的。

image

下图表示一个仲裁器如何能在一次突发传输结束时移交总线的例子。

仲裁器在倒数第二个(最后一个之前的)地址被采样时改变 HGRANTx 信号。新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样。

image

下图表示了HGRANTx和HMASTER信号是如何在系统中使用的。

image

注:因为使用了中央多路选择器,每个主机可以立刻输出它希望执行的地址而不需要等到被授予总线。HGRANTx 信号是仅被主机用来决定它何时拥有总线并因此需要考虑何时让地址被合适的从机采样。HMASTER 总线的延时版本被用来控制写数据多路选择器。

7.3 突发提前终止

通常仲裁器在突发传输结束之前不会将总线移交给一个新的主机。但是,如果仲裁器决定突发必须被提前终止以防止过长的总线访问时间那么它可能会在一个突发完成之前将(总线)授予转移给另外一个总线主机。
如果主机在突发传输中间失去了对总线的所有权那么它必须重新断言总线(请求)以完成突发。主机必须确保 HBURST 和 HTRANS 信号都被更新以反映主机不再执行一个完整的 4、 8 或者 16 拍的突发。
例如,如果一个主机仅能完成一个 8 拍突发的 3 个传输,那么当它重新获得总线时必须使用一个合法的突发编码来完成剩下的 5 个传输。主机可以使用任何合法组合,因此无论是5 拍未定长度的突发或者是 4 拍固定长度的突发然后跟上一个单拍未定长度的突发都是可以接受的。

7.4 锁定传输

仲裁器必须监视来自各个主机的 HLOCKx 信号以确定何时主机希望执行一个锁定连续传输。之后仲裁器负责确保没有其他总线主机被授予总线直到锁定传输完成。
在一个连续锁定传输之后仲裁器将总是为一个附加传输保持总线主机被授予(总线)以确保锁定序列的最后一个传输成功完成并且没有接收到 SPLIT 或者 RETRY 响应。因此建议但不规定,主机在任何锁定连续传输之后插入一个空闲传输以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。
仲裁器也负责断言 HMASTLOCK 信号, HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的因此必须在其他主机被授予总线之前被处理掉。

7.5默认总线主机

每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。
如果没有请求总线那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机将因此受益而被授予总线。
授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制并且也是预先进入低功耗操作模式的有用步骤。
如果其他所有主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。

7.6 分块传输

分块传输通过根据从机的响应操作来分离(或者分块)主机操作以给从机提供地址和合适的数据,提高了总线的总体使用率。
当传输产生时如果从机认为传输的执行将占据大量的时钟周期那么从机能够决定发出一个 SPLIT 响应。该信号提示仲裁器尝试这次传输的主机不应该被授予访问总线,直到从机表示它准备好了完成传输时。因此仲裁器负责监视响应信号并且在内部屏蔽已经是 SPLIT传输主机的任何请求。
在传输的地址相位期间仲裁器在 HMASTER[3: 0]产生一个标记,或者总线主机序号,以表示正在执行传输的主机。任何一个发出 SPLIT 响应的从机必须表示它有能力完成这个传输,并且通过记录 HMASTER[3: 0]信号上的主机序号来实现。之后,当从机能够完成传输时,它就根据主机序号在从从机到主机的 HSPLITx[15: 0]信号上断言适当的位。然后仲裁器使用这个信息来解除来自主机请求信号的屏蔽并且主机将被及时授予访问总线以重试传输。仲裁器在每个时钟周期采样 HSPLITx 总线因此从机只需要断言适当的位一个周期以便仲裁器能够识别。
如果系统中有多个具有 SPLIT 能力的从机那么每个从机的 HSPLITx 总线可以逻辑或在一起以提供给仲裁器单个 HSPLIT 总线。
大多数系统中并没有用到最大 16 个总线主机的能力因此仲裁器仅要求一个位数和总线主机数量一样的 HSPLIT 总线。但是,建议所有有 SPLIT 能力的从机被设计成支持高达 16个主机。

分块传输顺序
SPLIT 传输的基本步骤如下:
1、 主机以和其他传输一样的方式发起传输并发出地址和控制信息;
2、 如果从机能够立刻提供数据那么它可以马上提供数据。如果从机确认获取数据可能会占据较多的周期那么它给出一个 SPLIT 传输响应;
每次传输中仲裁器广播一个序号或者标记,表示哪个主机正在使用总线。从机必须记录该序号,以便用来在之后的一段时间重新发起传输;
3、 仲裁器授予其他主机使用总线并且 SPLIT 响应的动作允许主机移交总线。如果所有其他主机也接收到一个 SPLIT 响应那么默认主机将被授予总线;
4、 当从机准备完成传输那么它断言 HSPLITx 总线中的适当位给仲裁器以指示哪个主机应该被重新授予访问总线;
5、 仲裁器每个时钟周期监视 HSPLITx 信号,并且当 HSPLITx 中的任何一位被断言仲裁器将恢复对应主机的优先级;
6、 最后仲裁器将授予(SPLIT 的)主机总线,因此主机能重新尝试传输。如果一个优先级更高的主机正在使用总线的话这可能不会立刻发生;
7、 当传输终于开始后从机以一个 OKAY 传输响应来结束(传输)。
多重分块传输
总线协议只允许每个总线主机有一个未完成的处理。如果任何主机模块能够处理多于一个未完成的处理那么它需要为能够处理的每个未完成处理设置一个额外的请求和授予信号。
在协议级上一个信号模块可以表现为许多不同总线主机,每个主机只能有一个未完成的处理。
然而,可能一个有 SPLIT 能力的从机会接收比它能并发处理的(传输)还要多的传输请求。如果这种情况发生那么从机可以不用记录对应传输的地址和控制信息而仅需要记录主机序号就发出 SPLIT 响应。之后从机可以通过断言 HSPLITx 总线中适当的位给之前被给出SPLIT 响应的所有主机来表示它能处理另外一个传输,但是从机没有记录地址和控制信息。
之后仲裁器能够重新授予这些主机访问总线并且它们将重试传输,给出从机要求的地址和控制信息。这表示一个主机可以在它最终完成它要求的传输之前被多次授予总线。
预防死锁
SPLIT 和 RETRY 传输响应都必须在使用中注意预防总线死锁。单个传输决不会锁定AHB,因为每个从机必须被设计成能在预先确定的周期数内完成传输。但是,如果多个不同主机试图访问同一个从机,从机发出 SPLIT 或者 RETRY 响应以表示从机不能处理,那么就有可能发生死锁

分块传输
从机可以发出 SPLIT 传输响应,通过确保从机能够承受系统中每个主机(最多 16 个)的单个请求来预防死锁。从机并不需要存储每个主机的地址和控制信息,它只需要简单的记录传输请求已经被处理和 SPLIT 响应已经发出的事实即可。最后所有主机将处在低优先级然后从机可以有次序的来处理这些请求,指示仲裁器正在服务于哪个请求,因而确保了所有请求最终都被服务。
当从机有许多未完成的请求时它可能以任何顺序(随机的)来选择处理这些请求,尽管从机需要注意锁定传输必须在任何其他传输继续之前完成。
从机使用 SPLIT 响应而不用锁存地址和控制信息显得非常合法(合适)。从机仅需要记录特定主机做出的传输尝试并且稍后的时间段从机通过指示自己已经准备好完成传输就能获取地址和控制信息。主机将被授予总线并将重新广播传输,允许从机锁存地址和控制信息并且立刻应答数据,或者发出另外一个 SPLIT 响应如果还需要额外的一些周期的话。
理想情况下从机不应该有多于它能支持的未完成传输,但是要求支持这种机制以防止总线死锁。
重试传输
发出 SPLIT 响应的从机必须一次只能被一个主机访问。在总线协议中并没有强制而在系统体系结构中应该确保这一点。大多数情况下发出 RETRY 响应的从机必须是一次只能被一个主机访问的外设,因此这会在一些更高级协议中得到确保。
硬件保护和多主机访问 RETRY(响应)的从机相违背并不是协议中的要求,但是可能会在下文描述的设计中得到执行。仅有的总线级要求是从机必须在预先确定的时钟周期内驱动 HREADY 为高。
如果要求硬件保护那么这可以被 RETRY(响应)的从机自己执行。当一个从机发出一个 RETRY 信号后它能够采样主机序号。在这之后和传输最终完成之前 RETRY 的从机可以检查做出的每次传输尝试以确保主机序号是相同的。如果从机发现主机号不一致那么它可以选择下列的行动方式:
一个错误响应;
一个信号给仲裁器;
一个系统级中断;

一个完全的系统复位。

7.7分块传输的总线移交

协议要求主机在接收到一个SPLIT或者RETRY响应后立刻执行一个空闲传输以允许总线转移给另外一个主机。 图 3.20表示了发生一个分块(SPLIT)传输的顺序事件。

image

需要注意以下的要点:
传输的地址在时间 T1 之后出现在总线上。在时钟沿 T2 和 T3 后从机返回两个周期的 SPLIT 响应;
在第一个响应周期的末尾,也就是 T3,主机能够检测到传输将会被分块因此(主机)改变接下来的传输控制信号以表示一个空闲传输; 同样也在时间 T3 处仲裁器采样响应信号并确定传输已经被分块。之后仲裁器可以调整仲裁优先权并且在接下来的周期改变授予信号,这样新的主机能够在时间 T4后被授予地址总线;
新主机可以保证立刻访问(总线)因为空闲传输总是在一个周期内完成。

复位
复位信号, HRESETn,是 AMBA AHB 规范中唯一的低有效信号并且是所有总线设备的主要复位源。复位可以异步方式断言,但是却在 HCLK 的上升沿被同步地撤消断言。
在复位期间所有主机必须确保地址和控制信号在有效电平并且 HTRANS[1: 0]信号表示空闲。
关于AHB数据总线的位宽
一种能提高总线带宽而不用提高操作频率的方法是使片上总线的数据通道更宽。金属层的增加和大容量片上存储模块(例如嵌入式 DRAM)的使用都是更宽片上总线使用的推动因素。
指定一个固定宽度的总线将意味着在大多数场合下总线宽度在应用中并不是最佳的。因此允许可变总线宽度的途径已经被采纳,但是必须确保模块在设计中高移植性。
协议允许 AHB 数据总线可以是 8、 16、 32、 64、 128、 256、 512 或者 1024 位宽。然而,建议使用中最低的总线宽度为 32 位并且预计最大 256 位宽的总线将适合几乎所有应用。

对读和写传输而言接收模块都必须从总线上正确的字节通道选择数据。并不要求将数据复制到所有字节通道上。

posted on 2019-05-23 09:10  迈克老狼2012  阅读(11077)  评论(0编辑  收藏  举报

导航