AMBA总线规范的学习总结(转载)----AHB
AHB总线包含请求信号,用以支持多主机操作。上面表中后缀x用来表示信号来自主机x。
4.2 AHB总结操作
(1)地址相位,只维持单个周期;
(2)数据相位,可能需要多个周期。这通过使用HREADY信号实现。
在这个没有插入等待状态的简单传输中:
- 主机在HCLK的上升沿之后将地址和控制信号驱动到总线上;
- 然后在时钟的下一个上升沿,从机采样地址和控制信息;
- 在从机采样了地址和控制信号后,开始驱动适当的响应,总线主机在第三个时钟的上升沿采样该响应。
上面的例子演示了在不同的时钟阶段传输的地址和数据相位是如何产生的。事实上,任何传输的地址相位在前一次传输的数据相位期间出现。这种地址和数据的交叠是总线传输通道的基本性质,这样既确保了高性能的总线操作,又给从机提供了足够的时间来产生传输响应。
从机也可能插入等待周期到任意传输中,如下图1.3所示,这样扩展了传输完成允许的附加时间。
图1.3 插入等待的传输
注:1.对写操作而言,总线主机必须保持写数据在整个扩展周期内稳定;当传输以这种方式扩展后,随后的传输将会有地址相位扩展的副作用。如图1.4所示,表示了三次传输的地址和相位关系。
图1.4 多重传输
在上图中:
- 到地址A和地址C相位的传输都是零等待状态;
- 到地址B相位的传输是一个等待状态;
- 传输到地址B的扩展数据相位对传输到地址C的扩展地址相位有影响。
4.2.2 传输类型
传输类型分为四个类型,用HTRANS[1:0]信号状态来表示这四种类型。如下表1.2所示:
下图1.5表示了一组不同类型的传输。
图1.5 传输类型实例
在上图中:
- 第一个传输是一次突发的开始,所以传输类型为非连续类型;
- 总线主机不能立即执行突发的第二次传输,所以主机使用了忙传输来延时下一次传输的开始。在这个例子中主机在它准备还突发的下一次传输之前仅请求了一个忙周期,下一次传输的完成没有等待状态;
- 总线主机立刻执行突发状态的第三次传输,但是这时从机不能完成传输,并用HREADY来插入一个等待状态;
- 突发的最后一个传输以无等待状态完成。
- 增量突发访问连续地址并且突发中的每次传输地址仅是前一次地址的一个增量;
- 对于回环突发,如果传输的起始地址并未和突发(x拍)中字节总数对齐,那么突发传输地址将在到达边界处回环。例如,一个四拍回环突发的字(4字节)访问将在16字节边界回环。因此,如果传输的起始地址是0x34,那么它将包含四个到地址0x34、0x38、0x3C和0x30;
一个增量突发可以是任何长度,但是(长度)上限由地址不能超过1KB边界这个事实限定了。
注:突发大小表示突发的节拍数量,并不是一次突发传输的实际字节数量。一次突发传输的数据总量可以用节拍数乘以每拍数据的字节数来计算,每拍 字节数由HSIZE[2:0]指示。
所有突发传输必须将地址边界和传输大小对齐。例如,字传输必须对齐到字地址边界(也就是A[1:0] = 00),半字传输必须对齐到半字地址边界(也就是A[0] = 0)。
当一个突发不允许完成的特定情况下,对任一从机设计而言,如果突发提前终止,那么利用突发信息能够采取正确的动作显得很重要。从机能够通过监控HTRANS信号决定一个突发何时提前终止,并且确保在突发开始之后每次传输有连续或者忙的标记。如果产生一个非连续或者空闲传输,那么这表明一个新的突发已经开始,因此前一次突发一定已经终止。
如果总线主机因为失去对总线的占有而不能完成一次突发,那么它必须在下一次获取访问总线时正确地重建突发。例如,如果一个主机仅完成了一个四拍突发的一拍,那么它必须用一个未定长度突发来执行剩下的三拍突发。
以下是一些例子:
- 图1.6表示一个四拍回环突发;
- 图1.7表示一个四拍增量突发;
- 图1.8表示一个八拍回环突发;
- 图1.9表示一个八拍增量突发;
- 图1.10表示一个未定长度的突发。
图1.6表示了一个四拍回环突发,并且第一次传输伴随一个附加等待状态。
图1.6 四拍回环突发
图1.7 四拍增量突发
图1.8 八拍回环突发
图1.9 八拍增量突发
图1.10表示未定义长度的增量突发。
图1.10 未定长度的突发
图1.10表示两个突发:
- 两个半字传输在地址0x20处开始。半字传输地址增加为2;
- 三个字传输在地址0x5C处开始。字传输地址增加为4。
4.2.4 控制信号
和传输类型和突发类型一样,每次传输将会有一组控制信号用以提供传输的附加信息。这些控制信号和地址总线有严格一致的时序。然而,在一次突发传输过程中它们必须保持不变。
4.2.4.1 传输方向
当HWRITE为高,该信号表示一个写传输,并且主机将数据广播到写数据总线HWDATA[31:0]上。当该信号为低时,将会执行一个读传输,并且从机必须产生数据到读数据总线HRDATA[31:0]上。
4.2.4.2 传输大小
HSIZE[2:0]信号表示传输的大小,如下表1.4所示:
传输大小HSIZE[2:0]被用来和HBURST[2:0]信号一起决定回环突发的地址边界。
4.2.5 保护控制 保护控制信号HPROT[3:0],提供总线访问的附加信息,并且最初打算是给那些希望执行某种保护级别的模块使用的(见表 1.5)。
这些信号表示传输是否是:
- 一次预取指或者数据访问;
- 特权模式访问或者用户模式访问。
对于带有存储器管理单元的总线主机来说,这些信号也表示当前访问是带高速缓存的(cache)还是带缓冲的(buffer)。
并不是所有总线主机都能产生正确的保护信息,因此建议从机在没有严格必要的情况下不要使用HPROT信号。
4.2.6 地址译码 中央地址译码器提供的选择信号HSELx,被用来选择总线上的从机。选择信号是高位地址信号的组合译码,并且建议使用简单的译码方案以避免复杂译码逻辑和确保高速操作。
从机只能在HREADY信号为高时采样地址和控制信号以及HSELx,HSELx为高表示当前传输已经完成。在特定的情况下有可能在HREADY为低时采样HSELx,但是被选中的从机将会在当前传输完成后变更。
能够分配给单个从机的最小地址空间是1KB。所有总线主机必须被设计为不能执行超过1KB地址边界的增量传输,因此确保了一个突发绝不会超过地址译码的边界。
在系统设计中,如果存在包含一个存储器映射并未完全填满(存储空间)的情况,应该设置一个额外的默认从机,以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间,这个默认从机应该提供一个ERROR响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的OKAY响应。典型默认从机的功能将以作为中央地址译码器的一部分的方式来实现。
图 1.11表示了一个典型地址译码系统和从机选择信号。
图1.11 从机选择信号
4.2.7 从机传输响应 在主机发起传输后,由从机决定传输该如何进行。AHB规范中没有做出总线主机在传输已经开始后取消传输的规定。
只要从机被访问那它必须提供一个表示传输状态的响应。HREADY信号被用来扩展传输并且和响应信号HRESP[1:0]相结合,以提供传输状态。
从机能够用许多种方式来完成传输。它能:
- 立刻完成传输;
- 插入一个或者多个等待状态,以允许有时间来完成传输;
- 发出一个错误信号来表示传输失败;
- 延时传输的完成,但是允许主机和从机放弃总线,把总线留给其他传输使用。
4.2.7.1 传输完成
HREADY信号用来扩展一次AHB传输的数据部分。当HREADY信号为低时,表示传输将被扩展,而当其为高时表示传输完成。
注:每个从机必须有一个预先确定的在从机放弃总线之前插入的最大等待状态数目,以便能够计算访问总线的延时。建议但不强制规定,从机不要插入多于16个等待状态以阻止任何单个访问将总线锁定较长的时钟周期。
4.2.7.2 传输响应
典型的从机将会用HREADY信号来在传输中插入适当数量的等待状态,而传输在HREADY为高时完成并且给出OKAY响应,表示传输成功完成。
ERROR响应被从机用来表示某种形式的错误条件和相关的传输。典型地,这种响应被用作错误保护,例如试图写一个只读的存储空间。
SPLIT和RETRY响应组合允许从机延长传输完成的时间,但是释放总线给其他主机使用。这些响应组合通常仅由有高访问延时的从机请求,并且从机能够利用这些响应编码来确保其他主机在长时间内不被阻止访问总线。
HRESP[1:0]的编码、传输响应信号和每个响应的描述参见表 1.6。
当从机需要插入一定数量的等待状态优于决定将要给出何种响应时,从机必须将响应驱动为OKAY。
4.2.7.3 双周期响应 仅有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响应,由于当前传输不被重复,所以可以选择完成接下来的传输。
图 1.12表示了一次RETRY操作的例子。
图1.12 带RETRY响应的传输
图中包含以下事件:
- 主机从地址A发起传输;
- 这次传输在接收到响应之前,主机将地址移动到A+4;
- 从机在地址A不能立刻完成传输, 因此从机发出一个RETRY响应。该响指示主机在地址A的传输无法完成并且在地址A + 4的传输被取消而用空闲传输替代。
图 1.13表示了一个传输中从机请求一个周期来决定将要给出的响应(在HRESP为OKAY的时间段),之后从机用一个双周期的ERROR响应结束了传输。
图1.12 ERROR响应传输
4.2.7.4 错误响应
如果从机提供一个错误响应,那么主机可以选择取消突发中剩下的传输。然而,这并不是一个严格要求,同时主机继续突发中剩下的传输也是可以接受的。
4.2.7.5 分块和重试分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输,因此允许更高优先级的主机能够访问总线。
分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生SPLIT和RETRY后分配总线的方式:
- 对RETRY而言仲裁器将继续使用常规优先级方案,因此只有拥有更高优先级的主机将获准访问总线;
- 对于SPLIT传输而言,仲裁器将调整优先级方案以便其他任何主机请求总线即能获得访问(总线),即使是优先级较低的主机。为了完成一个SPLIT传输从机必须通知仲裁器何时数据可用。
总线主机应该以同样的方式来对待SPLIT和RETRY(响应)。主机应该继续请求总线并尝试传输直到传输成功完成或者遇到ERROR响应时终止。
为了不使用三态驱动而又允许执行AHB系统,所以要求分开读和写数据总线。最小的数据宽度规定为32位,但是总线宽度却可以增加。
4.2.8.1 写数据总线HWDATA[31:0]
写数据总线在写传输期间由总线主机驱动。如果传输是扩展的,那么总线主机必须保持数据有效直到传输完成,由HREADY为高表示。
所有传输必须对齐到和传输大小相等的地址边界。例如,字传输必须对齐到字地址边界(也就是A[1:0] = 00),半字传输必须对齐到半字地址边界(也就是A[0] = 0)。
对于宽度小于总线宽度的传输,例如一个在32位总线上的16位传输,那么总线主机仅需要驱动相应的字节通道。从机必须负责从正确的字节通道选择写数据。表 1.6和表 1.7分别表示了小端系统和大端系统中哪个字节通道有效。如果有要求,这些信息可以在更宽的总线应用中扩展。传输大小小于数据总线宽度的突发传输将在每拍突发中有不同有效字节通道。
有效字节通道取决于系统的端结构,但是AHB并不指定要求的端结构。因此,总线上所有主机和从机的端结构相同这点很重要。
4.2.8.2 读数据HRDATA[31:0]
读数据总线在读传输期间由合适的从机驱动。如果从机通过拉低HREADY扩展读传输,那么从机只需要在传输的最后一个周期提供有效数据,由HREADY为高表示。
对于宽度小于总线宽度的传输从机仅需要在有效的字节通道提供有效数据,如表 1.6和表 1.7所示。总线主机负责从正确的字节通道中选择数据。
当传输以OKAY响应完成时从机仅需提供有效数据。SPLIT、RETRY和ERROR响应不需要提供有效的读数据。
表1.6 小端系统
表1.7 大端系统
4.2.9 仲裁
仲裁机制被用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的要使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成SPLIT传输的请求。
任何没有能力执行SPLIT传输的从机不需要了解仲裁的过程,除非它们需要检测因为总线所有权改变而导致突发传输不能完成的情况。
4.2.9.1 信号描述
以下给出对每个仲裁信号的简短描述:
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传输。仲裁器需要这些信息以 便于授予主机访问总线完成传输。
4.2.9.2 请求总线访问总线主机使用HBUSREQx信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求,然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。
如果主机请求锁定访问(总线),那么主机也必须断言HLOCKx信号来提示仲裁器其他主机不应该被授予总线。
当一个主机被授予总线并且正在执行一个固定长度的突发,那么就没有必要继续请求总线以便完成传输。仲裁器监视突发的进程并且使用HBURST[2:0]信号来决定主机请求了多少个传输。如果主机希望在当前正在进行的传输之后执行另一个突发,那么主机需要在突发中重新断言请求信号。
如果主机在一次突发当中失去对总线的访问,那么它必须重新断言HBUSREQx请求线以重新获取访问总线。
对未定长度的突发,主机应该继续断言请求直到已经开始最后一次传输。在未定长度的突发结束时仲裁器不能预知何时改变仲裁。
对于主机而言,有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机没有请求访问总线,那么它驱动传输类型HTRANS来表示空闲传输显得很重要。
4.2.9.3 授予总线访问
仲裁器通过断言适当的HGRANTx信号来表示请求总线的主机中哪个是当前优先级最高的。当当前传输完成,由HREADY为高时所表示,那么主机将被授予(总线)并且仲裁器将改变HMASTER[3:0]信号来表示总线主机序号。
图 1.13表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程。
图1.13 无等待状态授予总线
图1.14 有等待状态授予总线
数据总线的所有权延时在地址总线的所有权之后。一次传输无论何时完成(由HREADY为高时所表示),占有地址总线的主机才能使用数据总线并且将继续占有数据总线直到传输完成。图 1.15表示当在两个总线主机之间移交总线时数据总线的所有权是如何转移的。图 1.15 数据总线所有权移交过程
4.2.9.4 突发提前终止
通常仲裁器在突发传输结束之前不会将总线移交给一个新的主机。但是,如果仲裁器决定突发必须被提前终止以防止过长的总线访问时间那么它可能会在一个突发完成之前将(总线)授予转移给另外一个总线主机。
如果主机在突发传输中间失去了对总线的所有权那么它必须重新断言总线(请求)以完成突发。主机必须确保HBURST和HTRANS信号都被更新以反映主机不再执行一个完整的4、8或者16拍的突发。
例如,如果一个主机仅能完成一个8拍突发的3个传输,那么当它重新获得总线时必须使用一个合法的突发编码来完成剩下的5个传输。主机可以使用任何合法组合,因此无论是5拍未定长度的突发或者是4拍固定长度的突发然后跟上一个单拍未定长度的突发都是可以接受的。
4.2.9.5 锁定传输
仲裁器必须监视来自各个主机的HLOCKx信号以确定何时主机希望执行一个锁定连续传输。之后仲裁器负责确保没有其他总线主机被授予总线直到锁定传输完成。
在一个连续锁定传输之后仲裁器将总是为一个附加传输保持总线主机被授予(总线)以确保锁定序列的最后一个传输成功完成并且没有接收到SPLIT或者RETRY响应。因此建议但不规定,主机在任何锁定连续传输之后插入一个空闲传输以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。
仲裁器也负责断言HMASTLOCK信号,HMASTLOCK信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的因此必须在其他主机被授予总线之前被处理掉。
4.2.9.6 默认总线主机
每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。
如果没有请求总线那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机将因此受益而被授予总线。
授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制并且也是预先进入低功耗操作模式的有用步骤。
如果其他所有主机都在等待SPLIT传输完成时默认主机必须被授予总线。
4.3 总线接口连接
图1.18 AHB总线从机接口
图1.19 AHB总线主机接口
图1.20 AHB总线仲裁器接口
图1.21 AHB总线译码器接口