AHB协议学习

1. 简介

       AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。

1.1 AHB总线的架构

      下面先看几个贯穿全文的术语:

  • 总线周期(bus cycle): 总线周期是总线时间的基本单位,其实就是总线时钟的频率。对于 AMBA AHB 或者 APB 协议总线周期定义为从一个上升沿到临界的上升沿的变化区间。总线信号时序总是参考总线时钟周期。
  • 总线传输: AMBA AHB 或者 ASB 总线传输是对数据目标的读写操作,可能会持续一个或者多个总线周期。总线传输在收到从机地址的完成响应后终止。AMBA ASB 总线支持的传输大小包括字节(8 位)、半字(16 位)、字(32 位)。 AMBA AHB 又支持较宽的数据传输,包括 64 位和 128 位的数据传输。 AMBA APB 总线传输是对数据目标的读写操作,总是需要 2个总线周期
  • 突发(Burst)传输突发传输定义了一个或多个数据传输,由主线总机发起,在地址空间增加时,传输宽度保持不变。每次传输增加的步长(地址),由传输大小决定(字节,半字,字),APB不支持突发传输。

AHB总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线主机、各种拥有AHB接口的控制器等等连接起来构成一个独立的完整的SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统。AHB可以成为一个完整独立的SOC芯片的骨架。
         下图是典型的AHB系统总线的结构示意图:

1.2 AHB基本特性

  • 分块处理
  • 单周期总线主机移交
  • 单时钟沿操作
  • 无需三态门的实现方式
  • 更宽的数据总线架构(64位或者128位)
  • 流水线操作
  • 可支持多个总线主设备(最多16个)

2. AHB总线的组成

        AHB总线由AHB总线主机(Master)、AHB总线从机(Slave)和Infrastructure构成。Infrastructure由仲裁器、数据多路选择器、地址控制多路选择器、译码器构成。 

        AMBA  AHB 总线协议设计使用一个中央多路选择器互联方案。该方案中,所有总线主机设备输出地址和控制信号来指示它们想执行的传输,同时仲裁器决定哪一个主机能够将它的地址和控制信号连通到所有的从机当然也需要一个译码器来控制读数据和响应多路信号选择器,多路信号选择器选中来自传输中所包含从机的适当信号。

        下图实现包含三个主机和四个从机的AMBA AHB设计的结构要求。

image

典型的 AMBA AHB 系统设计包含以下的部分

  • AHB 主机: 总线主机能够通过提供地址和控制信息发起读写操作。任何时候只允许一个总线主机处于有效状态并能使用总线。
  • AHB 从机: 总线从机在给定的地址空间范围内响应读写操作。总线从机将成功、失败或者等待数据传输的信号返回给有效的主机。
  • AHB 仲裁器: 总线仲裁器确保每次只有一个总线主机被允许发起数据传输。即使仲裁协议已经固定,任何一种仲裁算法,比如最高优先级或者公平访问都能够根据应用要求而得到执行。AHB 必须只包含一个仲裁器,尽管在单总线主机系统中这显得并不重要。
  • AHB 译码器: AHB 译码器用来对每次传输进行地址译码并且在传输中包含一个从机选择信号。所有 AHB 执行都必须仅要求有一个中央译码器。

3. 信号描述

        所有 AMBA 信号的命名都用名称的第一个字母来指示信号和哪个总线相关联。信号名称中用一个小写的 n 表示该信号低电平有效,否则信号的名称总是用大写字母来表示。

        测试信号有一个前缀T而与总线类型无关。

         AHB信号前缀:H 表示一个 AHB 信号。例如, HREADY 是用来指示 AHB 部分数据传输完毕的信号。该信号高电平有效。

        本节是AHB信号的简单描述。

名称来源描述

HCLK

总线时钟

时钟源时钟为所有总线传输提供时序。所有信号时序都和HCLK的上升沿相关。

HRESETn

复位

复位控制器总线复位信号,低电平有效,用来复位系统和总线。这是唯一低电平有效的信号。
名称来源描述

HADDR[31:0]

地址总线

主机32位地址总线

HTRANS[1:0]

传输类型

主机表示当前传输的类型,可以是连续,不连续,空闲和忙

HWRITE

传输方向

主机该信号为高表示一个写传输,为低表示一个读传输

HSIZE[2:0]

传输大小

主机

表示传输的大小,三位表示0…7,分别对应8bits(byte), 16bits(halfword),32bits(word),

64bits, 128bits,256bits, 512bits,1024bits

HBRUST[2:0]

突发类型

主机表示传输是否组成了突发的一部分。支持4个,8个,16个节拍的突发传输,突发传输可以使增量或回环。

HPROT[3:0]

保护控制

主机

提供总线访问的附加信息,主要是给那些希望执行某种保护级别的模块使用的。

这个信号指示当前传输是否为预取指令或者数据传输,同时也表示传输是保护模式访问还是用户模式访问。

对带存储器管理单元的总线主机而言这些信号也用来指示当前传输是高速缓存的(cache)还是缓冲的(buffer)。

HWDATA[31:0]

写总线数据

主机

写数据总线用来在写操作期间从主机到总线从机传输数据。建议最小的数据总线宽度为 32 位。

在要求高带宽运行时扩展(数据总线)还是很容易的。

HSELx

从机选择

译码器

每个 AHB 从机都有自己独立的从机选择信号并且用该信号来表示当前传输是否是打算送给选中的从机。

该信号是地址总线的简单组合译码。

HRDATA[31:0]

读数据总线

从机

读数据总线用来在读操作期间从总线从机向总线主机传输数据。建议最小的数据总线宽度为 32 位。

在要求高带宽运行时扩展(数据总线)还是很容易的。

HREDAY

传输完成

从机

当 HREADY 为高时表示总线上的传输已经完成。在扩展传输时该信号可能会被拉低。
注意:总线上的从机要求 HREADY 作为输入输出信号。

HRESP[1:0]

传输响应

从机

传输响应给传输状态提供了附加信息。提供四种不同的响应: OKEY、 ERROR、 RETRY 和 SPLIT。

        AMBA  AHB也有许多信号请求支持多主机操作。这些仲裁信号用于点对点连接, 下表中后缀x用来表示信号来自模块x。例如,一个系统中会有许多的信号HBUSREQx,比如HBUSREQarm, HBUSREQdma和HBUSREQtic。

名称来源描述

HBUSREQx
总线请求

主机

从总线主机 x 传向总线仲裁器用来表示该主机请求(控
制 ) 总 线 的信 号 。 系 统中 每 个 总 线主 机 都 有 一个
HBUSREQx 信号,最多 16 个总线主机。

HLOCKx
锁定的传输

主机

当该信号为高时表示主机请求锁定对总线的访问并且
在该信号为低之前其他主机不应该被允许授予总线。

HGRANTx
总线授予

仲裁器

该信号用来表示总线主机 x 目前是优先级最高的主机。
当 HREADY 为高时传输结束,地址/控制信号的所有
权发生改变。所以主机应在 HREADY 和 HGRANTx
都为高时获得对总线的访问。

HMASTER[3: 0]
主机号

仲裁器

这些来自仲裁器的信号表示哪个总线主机正在执行传输和被支持分块传输的从机用来确定哪个主机正在尝
试一次访问。HMASTER 的时序和地址以及控制信号对齐。

HMASTLOCK
锁定顺序

仲裁器

表示当前主机正在执行一个锁定顺序的传输。该信号
和 HMASTER 有相同的时序。

HSPLITx[15: 0]
分块完成请求

从机(支持分块)

从机用这 16 位的分块总线来指示仲裁器总线主机应该被允许重试一个分块传输。
分块总线上的每一位对应一个总线主机。

4. AHB总线操作概括

        在一次 AMBA AHB 传输开始之前总线主机必须被授予访问总线。这个过程开始于总线主机向仲裁器断言一个请求信号。仲裁器指示主机何时能够被授予使用总线。被授权的总线主机通过驱动地址和控制信号来发起一次 AMBA AHB 传输。这些信号提供关于地址、方向和传输宽度的信息,以及表示传输类型是否为一次突发传输的部分。

允许有两种不同类型的突发传输:

  • 增量突发,在地址边界处不回环;
  • 回环突发,在特定的地址边界上回环。

写数据总线用来将数据从主机传输到从机上,而读数据总线用来将数据从从机传输到主机上。
每次传输包含:

  • 一个地址和控制周期;
  • 一个或多个数据周期。

        地址不长期有效,所以所有从机必须在这个时段(传输地址时)采样地址。然而,通过HREADY 信号可以延长数据。当该信号为低时导致在传输中插入等待状态同时允许从机有额外的时间提供或者采样数据。

 在传输中从机通过使用响应信号 HRESP[1: 0]来表示状态:

OKAY 响应用来表示传输进展正常并且当 HREADY 变高时表示传输成功完成。

ERROR 响应表示发生了一个传输错误并且传输失败。

RETRY 和 SPLIT 两个传输响应都表示传输不能立刻完成,但是总线主机应该继续尝试传输。

        在常规操作中主机被允许在仲裁器授予另一个主机访问总线之前完成一个特定突发的所有传输。然而,为了避免过多的仲裁延时可能允许仲裁器打断一个突发并且这种情况下主机必须(申请)重新仲裁总线以完成剩下的突发传输。

5. 基本传输

        一笔传输由如下两部分组成:
         地址阶段:一个周期
         数据阶段:一个或多个周期,由HBURST信号决定需要几个有效周期,可以由HREADY发出请求延长一个周期。

5.1 没有等待状态的single transfer

         第一个周期的上升沿,主机将地址信息和控制信息发送到总线上;
         第二个周期的上升沿,从机采样地址和控制信号,并将HREADY拉高
         如果是写操作,主机会在第二个周期的上升沿过后传输要写入的数据;
如果是读操作,从机会在HREADY信号拉高后将读取的数据写入总线;
         第三个周期的上升沿,
         如果是写操作,主机获取HREADY高信号,表明从机已成功接收数据,操作成功; 如果是读操作,主机获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。
         需要注意,
HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保主机的正确采样。

5.2 slave插入等待状态的single transfer

         从机可以及时处理主机请求,但也可能存在从机太慢不能立即处理的情况。这时需要让主机稍微等一等,需要从机插入一些等待的状态。如下图所示,HREADY信号在第二和第三周期拉低,意在告诉主机,从机不能立即处理,需要主机等待2个周期。在这里需要注意2点:
         如果是写操作,主机要在等待期间保持写数据不变,直到本次传输完成;
         如果是读操作,从机不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

5.3 多个single transfer的pipeline操作

        扩展数据周期的一个负效应是必需延长相应的下一笔传输的地址周期。A和C为零等待传输,B加入了一个等待周期,因此相应的C地址周期要进行扩展。
         第一个周期,主机发起一个操作A,并驱动地址和控制信号;
         第二个周期,从机收到了来自总线的请求,将HREADY信号拉高;
         第二个周期上升沿后,主机发现有操作B需要执行,并且检查到上一周期的HREADY为高,则发起第二个操作B;
         第三个周期,主机获取HREADY信号为高,表示操作A已经完成;
         第三个周期上升沿后,主机发现有操作C需要执行,并且检查到上一周期的HREADY为高,则发起第三个操作C;
         第三个周期上升沿后,从机由于繁忙插入了一个等待状态,将HREADY拉低;
         第四个周期,主机获取HREADY信号为低,知道从机希望等待,于是主机保持和上一拍一样的信号;
         第四个周期,从机处理完了事务,将HREADY信号拉高,表示可以继续处理;
         第五个周期,主机获取HREADY信号为高,知道从机已经可以处理B操作;
         第五个周期上升沿后,B操作完成;
         第六个周期上升沿后,C操作完成。
         需要注意几点:
         HREADY在一定程度上表示了从机的pipeline能力,
在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,主机才能发起操作。

5.4 AHB控制信息

在介绍突发传输之前,我们再来看下AHB控制信息。

HWRITE - 这个信号是读写控制信号,也即transfer的方向控制信号。 高电平表示写操作,低电平表示读操作。

HSIZE - 这个信号是指明单次传输的数据宽度。表示传输的大小,三位表示0…7,分别对应8bits(byte), 16bits(halfword),32bits(word),64bits, 128bits,256bits, 512bits,1024bits

HPROT[3:0] - 为transfer提供额外的访问保护和控制权限信号。一般不用,在此不做介绍。

HTRANS[1:0] - 进行一次传输时的传输类型,这个信号由主机根据自己要进行的传输类型生成的控制信号。一共4种类型

HTRANS[1:0]

传输类型

Description

00

IDLE

主设备占用总线,但没进行传输
两次突发传输中间主设备可发IDLE
此时就算从机被使能,也不会从总线上获取任何的数据信号。如果此时从机被选中,那么每一个IDLE周期从机都要通过HRESP[1:0]返回一个OKAY响应

01

BUSY

主设备占用总线,但是在突发传输过程中还没有准备好进行下一次传输
一次突发传输中间主设备可发BUSY
这时从机不会从总线上收取数据而是等待,并且通过HRESP[1:0]返回一个OKAY响应。需要注意的是,这个传输需要给出下一拍的地址和控制信号,尽管从机不会去采样。

10

NONSEQ

表明一次单个数据的传输或者一次突发传输的第一个数据
地址和控制信号与上一次传输无关

11

SEQ

突发传输中剩下的传输是连续传输并且地址是和前一次传输有关的。控制信息和前一次传输一样。地址等于前一次传输的地址加上传输大小(字节)。在回环突发的情况下传输地址在地址边界处回环,回环值等于传输大小乘以传输的次数(4、 8 或者 16 其中之一)。

        这个信号只有在突发传输中出现。当从机收到这个信号时,表明当前的传输是一个突发中的某一拍。这时,总线上的控制信号应当与之前的保持一致,地址视情况递增或者回环。(这些信号其实是由主机决定的,从机不用考虑,只需要单方面接收即可)
         T1,主机传入地址和控制信号,因为是新的突发传输开始,所以传输的类型是NONSEQ;
         T2,由于主机不能在第二个周期里处理第二拍,所以主机使用BUSY传输来为自己延长一个周期的时间。注意,虽然是延长了一个周期,但是主机需要给出第二个传输的地址和控制信号;
         T3,从机采集到了主机发来的BUSY,知道主机需要等待一拍,所以从机会忽略这个BUSY传输;
         T3,主机发起了第二个传输,因为是同一个burst的第二个传输,所以传输的类型是SEQ;
         T5,从机将HREADY信号拉低,告诉主机需要等待一个周期;
         T8时刻完成最后一个传输。
         需要注意的 虽然从机会忽略掉BUSY传输,但是主机也需要给出下一拍的地址和控制信号。

5.5 突发操作

        AMBA AHB 协议定义了四、八和十六拍突发,也有未定长度的突发和信号传输。协议支持增量和回环操作:增量突发访问连续地址并且突发中的每次传输地址仅是前一次地址的一个增量;对于回环突发,如果传输的起始地址并未和突发(x 拍)中字节总数对齐那么突发传输地址将在达到边界处回环。例如,一个四拍回环突发的字(4 字节)访问将在16 字节边界回环。因此,如果传输的起始地址是 0x34,那么它将包含四个到地址0x34、 0x38、 0x3C 和 0x30;
突发信息通过使用 HBURST[2: 0]并且 8 种可能的类型在中定义如下:

HBURST[2:0]

类型

描述
000SINGLE单一传输
001INCR未指定长度的增量突发
010WRAP44拍回环突发
011INCR44拍增量突发
100WRAP88拍回环突发
101INCR88拍增量突发
110WRAP1616拍回环突发
111INCR1616拍增量突发

        突发禁止超过 1KB 的地址边界。因此重要的是主机不要尝试发起一个将要超过这个边界的定长增量突发。将执行单个传输时使用未指定长度的增量突发理解为长度为一的突发比较合理。一个增量突发可以是任何长度,但是(长度)上限由地址不能超过 1KB 边界这个事实限定了。
        注:突发大小表示突发的节拍数量,并不是一次突发传输的实际字节数量。一次突发传输的数据总量可以用节拍数乘以每拍数据的字节数来计算,每拍字节数由 HSIZE[2: 0]指示。所有突发传输必须将地址边界和传输大小对齐。例如,字传输必须对齐到字地址边界(也就是 A[1: 0] = 00),半字传输必须对齐到半字地址边界(也就是 A[0] = 0)。

        当一个突发不允许完成的特定情况下,对任一从机设计而言,如果突发提前终止,那么利用突发信息能够采取正确的动作显得很重要。从机能够通过监控 HTRANS 信号决定一个突发何时提前终止并且确保在突发开始之后每次传输有连续或者忙的标记。如果产生一个非连续或者空闲传输那么这表明一个新的突发已经开始,因此前一次突发一定已经终止。
        如果总线主机因为失去对总线的占有而不能完成一次突发那么它必须在下一次获取访问总线时正确地重建突发。例如,如果一个主机仅完成了一个四拍突发的一拍那么它必须用一个未定长度突发来执行剩下的三拍突发。

        下图表示了一个四拍回环突发并且第一次传输伴随一个附加等待状态。        

        作为一次四拍字突发传输,地址将会在 16 字节边界回环,因此传输到地址 0x3C之后接下来传输的地址是 0x30。 下图表示了(回环突发)和增量突发的唯一不同,既是地址连续通过了 16 字节边界,并不回环,而是递增。

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

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

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

两个半字传输在地址 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 and retry)

        分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输因此允许更高优先级的主机能够访问主机。
        分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生 SPLIT 和 RETRY 后分配总线的方式:

对 RETRY 而言仲裁器将继续使用常规优先级方案因此只有拥有更高优先级的主机将获准访问总线;
对于 SPLIT 传输而言仲裁器将调整优先级方案以便其他任何主机请求总线即能获得访问(总线),即使是优先级较低的主机。为了完成一个 SPLIT 传输从机必须通知仲裁器何时数据可用。

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

  • 数据总线

        为了不使用三态驱动而又允许执行AHB系统所以要求分开读和写数据总线。最小的数据宽度规定为 32 位,但是总线宽度却可以增加,参见关于AHB数据总线的位宽这一节中的描述。

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

        读数据总线在读传输期间由合适的从机驱动。如果从机通过拉低 HREADY 扩展读传输那么从机只需要在传输的最后一个周期提供有效数据,由 HREADY 为高表示。
        对于宽度小于总线宽度的传输从机仅需要在有效的字节通道提供有效数据,如下两个表所示。总线主机负责从正确的字节通道中选择数据。
        当传输以 OKAY 响应完成时从机仅需提供有效数据。 SPLIT、 RETRY 和 ERROR 响应不需要提供有效的读数据。

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

8、仲裁

        仲裁机制用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成 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 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。

8.1请求总线访问

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

8.2授予总线访问

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

image

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

image

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

image

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

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

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

image

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

8.3 突发提前终止

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

8.4 锁定传输

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

8.5 默认总线主机

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

8.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 的从机可以检查做出的每次传输尝试以确保主机序号是相同的。如果从机发现主机号不一致那么它可以选择下列的行动方式:一个错误响应;一个信号给仲裁器;一个系统级中断;
一个完全的系统复位。

8.7分块传输的总线移交

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

image

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理——引导滤波

一、概述 引导滤波是由何恺明等人于2010年发表在ECCV的文章《Guided Image Filtering》中提出的,后续于2013年发表。引导过滤器根据局部线性模型原理,通过考虑引导图像的内容来计算过滤输出,引导图像可以是输入图像本身或另一个不同的图像。具…

Ubuntu 18.04换国内源

2019独角兽企业重金招聘Python工程师标准>>> 参考文档: https://blog.csdn.net/zhangjiahao14/article/details/80554616 https://blog.csdn.net/xiangxianghehe/article/details/80112149 1.复制源文件备份,以防万一 我们要修改的文件是sour…

数字后端——布图规划

布图规划(floorplan)与布局(place)在芯片设计中占据着重要的地位,它的合理与否直接关系到芯片的时序收敛、布线通畅、电源稳定以及良品率。所以在整个芯片设计中,从布图规划到完成布局一般需要占据整个物理…

利用SSH传输文件

在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件scp usernameservername:/path/filename /var/www/local_dir(本地目录) 2、上传本地文件到服务器scp /path/filename usernameservername:/path 例如scp /var/www/test.php root19…

App WebView实例化

a,高级设置里的环境变量 jdk的配置 b,下载Google的sdk,里面直接包含eclipse 1,新建一个项目 2,起个名字 3,设么走不做,next 4,只操作选择显示的三种方式 5,next什么都不做…

[动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现

前言 关于动态代理的系列文章,到此便进入了最后的“一出好戏”。前俩篇内容分别展开了:从源码上,了解JDK实现动态代理的原理;以及从动态代理切入,学会看class文件结构的含义。 如果还没有看过这俩篇文章的小伙伴&#…

数字后端——电源规划

电源规划是给整个芯片的供电设计出一个均勻的网络,它是芯片物理设计中非常关键的一部分。电源规划在芯片布图规划后或在布图规划过程中交叉完成,它贯穿于整个设计中,需要在芯片设计的不同阶段对电源的供电网络进行分析并根据要求进行修改。,主…

逆向project实战--Acid burn

0x00 序言 这是第二次破解 crackme 小程序,感觉明显比第一次熟练。破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程。以下将具体介绍。 0x01 初次执行 刚開始拿到 crackme 先执行程序。看看有哪些明显…

PyCharm使用技巧(六):Regullar Expressions的使用

2019独角兽企业重金招聘Python工程师标准>>> PyCharm v2018.2最新版本下载 使用正则表达式查找和替换文件中的文本 示例代码 使用正则表达式查找和替换字符串 假设您想用扩展标记<title> </title>替换元素&#xff08;title&#xff09;中的属性&#x…

jQuery笔记总结

来源于&#xff1a;http://blog.poetries.top/2016/10/20/review-jQuery/ http://www.jianshu.com/p/f8e3936b34c9 首先&#xff0c;来了解一下jQuery学习的整体思路 第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑&#xff0c;通…

芯片生产流程

每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。 一、晶圆加工 所有半导体工艺都始于一粒沙子&#xff01;因为沙子所含的硅是生产晶圆所需要的原材料。晶圆是将硅(Si)或砷…

GRE Sub math 报名

Step1 注册ETS帐号 Step2 登录帐号&#xff0c;点击Register/Find Test Centers, Dates Step3 按照提示查询考场 如果没有结果而是出现了如下提示&#xff0c;意味着这个地方没有考位了&#xff0c;需要选择其他地方的考位 Step 4 接下来就和GRE general test的过程一样了&…

示例解读 Python 2 和 Python 3 之间的主要差异

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 每门编程语言在发布更新之后&#xff0c;主要版本之间都会发生很大的变化。 在本文中&#xff0c;Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异&#xff0c;以帮助说明…

数字后端——时钟树综合

在数字集成电路设计中&#xff0c;时钟信号是数据传输的基准&#xff0c;它对于同步数字系统的功能、性能和稳定性起决定性作用&#xff0c;所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必…

52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)

MySQL创建用户以及授权 默认用户是root用户&#xff0c;不可能所有人员都用root用户&#xff0c;创建用户防止误删除&#xff0c;因为mysql里边有多个库每个库里有很多表&#xff0c;所以需要给单独的用户做一些授权我只需要它对某一个数据库有权限&#xff0c;或者说对某个数据…

20145225 《信息安全系统设计基础》第14周学习总结

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一&#xff0c;它是对主存的一个抽象 三个重要能力&#xff1a; 它将主存看成是一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xf…

数字后端——布线

布线是继布局和时钟树综合之后的重要物理实施任务&#xff0c;其内容是将分布在芯片核内的模块、标准单元和输入输出接口单元( I /O pad&#xff09;按逻辑关系进行互连&#xff0c;其要求是百分之百地完成它们之间的所有逻辑信号的互连&#xff0c;并为满足各种约束条件进行优…

streamsets 集成 minio s3测试

具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考&#xff1a; https://www.cnblogs.com/rongfengliang/p/9197315.html 创建bucket &#xff08;crate 集成使用&#xff09; 测试的csv 文件从https://www.s…

【codecombat】 试玩全攻略 第十四关 已知敌人

第十四关 已知敌人 在这一关里&#xff0c;我们的英雄获得了一副可以看见敌人的眼镜&#xff0c;所以他很强势的学会了“发现敌人”的技能。 hero.findNearestEnemy()命令&#xff0c;单词多了&#xff0c;首字母都要大写了&#xff0c;不然分不出来。玩过wow的小伙伴用过 宏命…

数字后端——信号完整性分析

随着光刻和集成电路制造工艺的不断进步&#xff0c;以及芯片的特征尺寸从深亚微米到纳米的迅速采用&#xff0c;人们一方面因为芯片的功能极大提高而受益&#xff0c;另一方面&#xff0c;当逻辑门的沟道长度减小时&#xff0c;门的开关时间会减小&#xff0c;这意味着输出驱动…