目录
简介
AHB是为提出高性能可综合设计的要求而产生的新一代AMBA总线。它是一种支持多总线主机和提供高带宽操作的高性能总线。
AMBA AHB 实现了高性能,高时钟频率系统的以下特征要求:
突发传输;
分块处理;
单周期总线主机移交;
单时钟沿操作;
非三态执行;
更宽的数据总线架构(64位或者128位)。
总线互联
AMBAAHB总线协议设计使用一个中央多路选择器互联方案。使用该方案所有总线主机设备输出地址和控制信号来指示它们想执行的传输同时仲裁器决定哪一个主机能够将它的地址和控制信号连通到所有的从机。当然也需要一个译码器来控制读数据和响应多路信号选择器,多路信号选择器选中来自传输中所包含从机的适当信号。
操作概括
在一次AMBAAHB传输开始之前总线主机必须被授予访问总线。这个过程开始于总线主机向仲裁器断言一个请求信号。仲裁器指示主机何时能够被授予使用总线。被授权的总线主机通过驱动地址和控制信号来发起一次AMBA AHB传输。这些信号提供关于地址、方向和传输宽度的信息,以及表示传输类型是否为一次突发传输的部分。允许有两种不同类型的突发传输:
增量突发,在地址边界处不回环;、
回环突发,在特定的地址边界上回环。
写数据总线用来将数据从主机传输到从机上,而读数据总线用来将数据从从机传输到主机上。
每次传输包含:
一个地址和控制周期;
一个或多个数据周期。
地址不长期有效所以所有从机必须在这个时段(传输地址时)采样地址。然而,通过HREADY信号可以延长数据。当该信号为低时导致在传输中插入等待状态同时允许从机有额外的时间提供或者采样数据。
在传输中从机通过使用响应信号来表示状态,HRESP[1: 0]:
OKAY OKAY响应用来表示传输进展正常并且当HREADY变高时表示传输成功完成。
ERROR ERROR响应表示发生了一个传输错误并且传输失败。
RETRY和SPLIT RETRY和SPLIT两个传输响应都表示传输不能立刻完成,但是总线主机应该继续尝试传输。
在常规操作中主机被允许在仲裁器授予另一个主机访问总线之前完成一个特定突发的所有传输。然而,为了避免过多的仲裁延时可能允许仲裁器打断一个突发并且这种情况下主机必须(申请)重新仲裁总线以完成剩下的突发传输。
基本传输
AHB传输包含两个截然不同的部分:
地址相位,只持续单个周期;
数据相位,可能需要多个周期。这通过使用HREADY信号实现。
在这个没有等待状态的简单传输中:
主机在HCLK的上升沿之后将地址和控制信号驱动到总线上;
然后在时钟的下一个上升沿从机采样地址和控制信息;
在从机采样了地址和控制信号后能够开始驱动适当的响应并且该响应被总线主机在第三个时钟的上升沿采样。
注:对写操作而言总线主机必须保持数据在整个扩展周期中稳定。对读传输从机没必要提供有效数据直到传输将要结束时。
当传输以这种方式扩展时随后的传输将会有地址相位扩展的副作用。
到地址A和C的传输都是零等待状态;
到地址B的传输是一个等待状态;
传输到地址B的扩展数据相位对传输到地址C的扩展地址相位有影响。
传输类型
每个传输都可以被分类为四个不同类型之一,如HTRANS[1:0]信号所表示的状态
HTRANS[1:0] | 类型 | 描述 |
00 | 空闲(IDLE) | 表示没有数据传输的要求。空闲传输类型在总线主机被授予总线,但并不希望执行一个数据传输时使用。 从机必须总是提供一个零等待状态OKAY来响应空闲传输并且该传输应该被从机忽略。 |
01 | 忙(BUSY) | 忙传输类型允许总线主机在突发传输中间插入空闲周期。这种传输类型表示总线主机正在连续执行一个突发传输,但是下一次传输不能立即发生。当一个主机使用忙传输类型时地址和控制信号必须反映突发中的下一次传输。 这种传输应该被从机忽略。从机必须总是提供一个零等待状态OKAY响应,和从机响应空闲传输一样的方式。 |
10 | 非连续(NONSEQ) | 表示一次突发的第一个传输或者一个单一传输。地址和控制信号和前一次传输无关。 总线上的单一传输被视为(数据量为)一个的突发因此传输类型是非连续的。 |
11 | 连续(SEQ) | 突发中剩下的传输是连续传输并且地址是和前一次传输有关的。控制信息和前一次传输一样。地址等于前一次传输的地址加上传输大小(字节)。在回环突发的情况下传输地址在地址边界处回环,回环值等于传输大小乘以传输的次数(4、8或者16其中之一)。 (译者注:这里回环指从传输的结束地址边界跳回到传输的起始地址边界。) |
第一个传输是一次突发的开始所以传输类型为非连续;
主机不能立刻执行突发的第二次传输所以主机使用了忙传输来延时下一次传输的开始。在这个例子中主机在它准备还突发的下一次传输之前仅请求了一个忙周期,下一次传输的完成没有等状态;
主机立刻执行突发的第三次传输,但是这时从机不能完成(传输)并用HREADY来插入一个等待状态;
突发的最后一个传输以无等待状态完成。
突发操作
AMBA AHB协议定义了四、八和十六拍突发,也有未定长度的突发和信号传输。协议对增量和回环都支持:
增量突发访问连续地址并且突发中的每次传输地址仅是前一次地址的一个增量;对于回环突发,如果传输的起始地址并未和突发(x拍)中字节总数对齐那么突发传输地址将在达到边界处回环。例如,一个四拍回环突发的字(4字节)访问将在16字节边界回环。因此,如果传输的起始地址是0x34,那么它将包含四个到地址0x34、0x38、0x3C和Ox30;
突发信息通过使用HBURST[2:0]并且8中可能的类型在中定义如下:
HBURST[2:0] | 类型 | 描述 |
000 | SINGLE | 单一传输 |
001 | INCR | 未指定长度的增量突发 |
010 | WRAP4 | 4拍回环突发 |
011 | INCR4 | 4拍增量突发 |
100 | WRAP8 | 8拍回环突发 |
101 | INCR8 | 8拍增量突发 |
110 | WRAP16 | 16拍回环突发 |
111 | INCR16 | 16拍增量突发 |
突发禁止超过1KB的地址边界。因此重要的是主机不要尝试发起一个将要超过这个边界的定长增量突发。将执行单个传输时使用未指定长度的增量突发理解为长度为一的突发比较合理。一个增量突发可以是任何长度,但是(长度)上限由地址不能超过1KB边界这个事实限定了。
注:突发大小表示突发的节拍数量,并不是一次突发传输的实际字节数量。一次突发传输的数据总量可以用节拍数乘以每拍数据的字节数来计算,每拍字节数由HSIZE[2:0]指示。
所有突发传输必须将地址边界和传输大小对齐。例如,字传输必须对齐到字地址边界(也就是A[1:0]=00),半字传输必须对齐到半字地址边界(也就是A[0]=0)。
突发提前终止
当一个突发不允许完成的特定情况下对任一从机设计而言如果突发提前终止那么利用突发信息能够采取正确的动作显得很重要。从机能够通过监控HTRANS信号决定一个突发何时提前终止并且确保在突发开始之后每次传输有连续或者忙的标记。如果产生一个非连续或者空闲传输那么这表明一个新的突发已经开始因此前一次突发一定已经终止。
如果总线主机因为失去对总线的占有而不能完成一次突发那么它必须在下一次获取访问总线时正确地重建突发。例如,如果一个主机仅完成了一个四拍突发的一拍那么它必须用一个未定长度突发来执行剩下的三拍突发。
作为一次四拍字突发传输,地址将会在16字节边界回环,因此传输到地址0x3C之后接下来传输的地址是0x30。图3.8表示了(回环突发〉和增量突发的唯一不同,既是地址连续通过了16字节边界。
地址将在32字节边界处回环因此地址0x3C之后的地址是0x20。
图3.10中的突发使用半字传输,所以地址每次增加2个字节并且突发在递增因此地址连续增加通过了16字节边界。
图3.11表示两个突发:
两个半字传输在地址0x20 处开始。半字传输地址增加为2。·
三个字传输在地址Ox5C处开始。字传输地址增加为4。
控制信号
和传输类型和突发类型一样每次传输将会有一组控制信号以提供传输的附加信息。这些控制信号和地址总线有严格一致的时序。然而,在一次突发传输过程中它们必须保持不变。
传输方向
当HWRITE为高,该信号表示一个写传输并且主机将数据广播到写数据总线上,HWDATA[31:0]。当该信号为低时将会执行一个读传输并且从机必须产生数据到读数据总线HRDATA[31:0]。
传输大小
HSIZE[2:0]表示传输的大小
HSIZE[2] | HSIZE[1] | HSIZE[0] | 大小 | 描述 |
0 | 0 | 0 | 8位 | 字节 |
0 | 0 | 1 | 16位 | 半字 |
0 | 1 | 0 | 32位 | 字 |
0 | 1 | 1 | 64位 | - |
1 | 0 | 0 | 128位 | 4字节 |
1 | 0 | 1 | 256位 | 8字节 |
1 | 1 | 0 | 512位 | - |
1 | 1 | 1 | 1024位 | - |
(传输)大小被用来和 HBURST[2:0]信号一起决定回环突发的地址边界。
保护控制
保护控制信号,HPROT[3:0],提供总线访问的附加信息并且最初打算是给那些希望执行某种保护级别的模块使用的(见下表)。
这些信号表示传输是否是:
一次预取指或者数据访问;
特权模式访问或者用户模式访问;
对于带有存储器管理单元的总线主机来说这些信号也表示当前访问是带高速缓存的( cache)还是带缓冲的( buffer)。
HPROT[3] 高速缓存 | HPROT[2] 带缓冲的 | HPROT[1] 特权模式 | HPROT[0] 数据/预取指 | 描述 |
- | - | - | 0 | 预取指 |
- | - | - | 1 | 数据访问 |
- | - | 0 | - | 用户访问模式 |
- | - | 1 | - | 特权模式访问 |
- | 0 | - | - | 无缓冲 |
- | 1 | - | - | 带缓冲 |
0 | - | - | - | 无高速缓存 |
1 | - | - | - | 带高速缓存 |
并不是所有总线主机都能产生正确的保护信息,因此建议从机在没有严格必要的情况下不要使用HPROT信号。
地址译码
对于每个总线上的从机来说使用一个中央地址译码器提供选择信号,HSELx。选择信号是高位地址信号的组合译码,并且建议使用简单的译码方案以避免复杂译码逻辑和确保高速操作。
从机只能在HREADY信号为高时采样地址和控制信号以及HSELx,HSELx为高表示当前传输已经完成。在特定的情况下有可能在HREADY为低时采样HSELx,但是被选中的从机将会在当前传输完成后变更。
能够分配给单个从机的最小地址空间是1KB。所有总线主机必须被设计为不能执行超过1KB地址边界的增量传输,因此确保了一个突发绝不会超过地址译码的边界。
在系统设计中如果有包含一个存储器映射并未完全填满(存储空间)的情况时应该设置一个额外的默认从机以在访问任何不存在的地址空间时提供响应。如果一个非连续或者连续传输试图访问一个不存在的地址空间时这个默认从机应该提供一个 ERROR 响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的OKAY响应。典型默认从机的功能将以作为中央地址译码器的一部分来实现。
图3.12表示了一个典型地址译码系统和从机选择信号。
从机传输响应
在主机发起传输后,由从机决定传输该如何进行。AHB规范中没有做出总线主机在传输已经开始后取消传输的规定。
只要从机被访问那它必须提供一个表示传输状态的响应。HREADY信号被用来扩展传输并且和响应信号HRESP[1:0]相结合,以提供传输状态。
从机能够用许多种方式来完成传输。它能:
立刻完成传输;
插入一个或者多个等待状态以允许有时间来完成传输;
发出一个错误信号来表示传输失败;
延时传输的完成,但是允许主机和从机放弃总线,把总线留给其他传输使用。
传输完成
HREADY信号用来扩展一次AHB传输的数据部分。当HREADY信号为低时表示传输将被扩展而当其为高时表示传输完成。
注:每个从机必须有一个预先确定的在从机放弃总线之前插入的最大等待状态数目,以便能够计算访问总线的延时。建议但不强制规定,从机不要插入多于16个等待状态以阻止任何单个访问将总线锁定较长的时钟周期。
传输响应
典型的从机将会用HREADY信号来在传输中插入适当数量的等待状态而传输在HREADY为高时完成并且给出OKAY响应,表示传输成功完成。
ERROR响应被从机用来表示某种形式的错误条件和相关的传输。典型的这被用作保护错误,例如试图写一个只读的存储空间。
SPLIT和RETRY响应组合允许从机延长传输完成的时间,但是释放总线给其他主机使用。这些响应组合通常仅由有高访问延时的从机请求并且从机能够利用这些响应编码来确保其他主机在长时间内不被阻止访问总线。
关于SPLIT和RETRY的完整描述参见分块和重试。
HRESP[1:0]的编码、传输响应信号和每个响应的描述参见下表。
HRESP[1] | HRESP[0] | 响应 | 描述 |
0 | 0 | OKAY | 当HREADY为高表示传输已经成功完成。OKAY响应也被用来插入任意一个附加周期,当HREADY为低时,优先给出其他三种响应之一。 |
0 | 1 | ERROR | 该响应表示发生了一个错误。错误条件应该发信号给总线主机以便让主机意识到传输失败。 一个错误条件需要双周期响应。 |
1 | 0 | RETRY | RETRY(重试)信号表示传输并未完成,因此总线主机应该重试传输。主机应该继续重试传输直到完成为止。 要求双周期的RETRY响应。 |
1 | 1 | SPLIT | 传输并未成功完成。总线主机必须在下一次被授予访问总线时重试传输。当传输能够完成时从机将请求代替主机访问总线。 要求双周期的SPLIT响应。 |
当从机需要插入一定数量的等待状态优于决定将要给出何种响应时从机必须将响应驱动为OKAY。
双周期响应
仅有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响应,由于当前传输不被重复,所以可以选择完成接下来的传输。
主机从地址A发起传输;
这次传输在接收到响应之前主机将地址移动到A+4;
从机在地址A不能立刻完成传输因此从机发出一个RETRY响应。该响指示主机在地址A的传输无法完成并且在地址A+4的传输被取消而用空闲传输替代。
图3.14表示了一个传输中从机请求一个周期来决定将要给出的响应(在HRESP为OKAY的时间段),之后从机用一个双周期的ERROR响应结束了传输。
错误响应
如果从机提供一个错误响应那么主机可以选择取消突发中剩下的传输。然而,这并不是一个严格要求同时主机继续突发中剩下的传输也是可以接受的。
分块和重试
分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输因此允许更高优先级的主机能够访问主机。
分块(SPLIT)和重试(RETRY)的不同之处在于仲裁器在发生SPLIT和RETRY后分配总线的方式:
对RETRY而言仲裁器将继续使用常规优先级方案因此只有拥有更高优先级的主机将获准访问总线;
对于SPLIT传输而言仲裁器将调整优先级方案以便其他任何主机请求总线即能获得访问(总线),即使是优先级较低的主机。为了完成一个SPLIT传输从机必须通知仲裁器何时数据可用。
SPLIT传输都增加了仲裁器和从机的复杂性,但是却有可以完全释放总线给其他主机使用的优点,但是RETRY(响应)的情况就只允许较高优先级的主机使用总线。
总线主机应该以同样的方式来对待SPLIT和RETRY(响应)。主机应该继续请求总线并尝试传输直到传输成功完成或者遇到ERROR响应时终止。
(待补充。。。。。。)