1、突发提前终止
在特定情况下,一个突发传输会被提前终止,此时,要求从机能根据突发信息采取正确的动作。从机能够通过监控HTRANS信号一个突发传输是否被提前终止。在突发传输开始后,从机每次传输都会监测HTRANS信号是否为SEQ或BUSY,当HTRANS信号上出现NONSEQ或者IDLE时,则表明前一次突发传输已经终止。
当一个主机因为仲裁失败导致突发传输未能完成,则在该主机下一次获得总线所有权时,必须能够保证重建该突发完成剩余传输。例如,当主机只完成一个4拍突发传输的一拍,那么它必须使用一个未定长度的突发来完成剩下的三拍传输。
下图表示了一个四拍的回环突发操作,从机在第一次传输插入了一个等待状态,该突发传输大小为4Byte,为4拍传输,所以地址将在16字节边界回环,因此传输到0x3C后,下一次的传输地址将返回到0x30:
下图表示了一个4拍增量突发,在第一次传输时从机也插入了一个等待状态,地址是连续的,跨过了16字节地址地址边界:
下图表示了一个8拍的回环突发传输,传输大小为4Byte,所以地址将在32字节边界回环,回环之后的地址为0x20:
下图表示8拍增量突发,传输大小为2Byte,所以地址增量为2,同时传输会跨过16字节的地址边界:
下图表示了未定义长度的突发传输,从图中可以看出,该图包含两个未定义长度的突发传输,第一个位起始地址为0x20,传输大小为2Byte;第二个突发起始地址为0x5C,传输大小为4Byte,地址增量为4:
2、控制信号
和传输类型可突发类型信号一样,每次传输都会有一组控制信号来提供传输的附加信息。这些控制信号和地址总线具有相同的时序,和地址信号不同的是,这些控制信号在突发传输的过程中,必须保持不变。
2.1 传输方向
HWRITE为高时,表示写传输,并且主机需要数据广播到写数据总线(HWDATA)上;该信号为低时,表示读传输,从机必须产生数据到读数据总线(HRDATA)。
2.1 传输大小
HSIZE[2:0]表示传输大小,见下表:
注:传输大小和传输类型一起被用于计算回环突发传输的地址边界。
2.3 保护控制
HPROT[3:0]为总线协议保护信号,用于定义存取的型态与特性,表示传输是否是:
一次预取址或者数据访问;
特权模式访问或者用户模式访问;
对于带有存储器管理单元的主机来说这些信号也表示当前访问是带高速缓存(cache)的或是带缓冲(buffer)的;
HPROT[3]高速缓存 | HPROT[2]带缓冲的 | HPROT[1]特权模式 | HPROT[0]数据/预取指 | 描述 |
---|---|---|---|---|
- | - | - | 0 | 预取指 |
- | - | - | 1 | 数据访问 |
- | - | 0 | - | 用户模式访问 |
- | - | 1 | - | 特权模式访问 |
- | 0 | - | - | 无缓冲 |
- | 1 | - | - | 带缓冲 |
0 | - | - | - | 无高速缓存 |
1 | - | - | - | 带高速缓存 |
注意:并非所有的主机都能产生正确的保护控制信号,因此建议从机没有严格必要的情况下,不要使用HPROT信号。
3、地址译码
AHB总线中,会使用一个中央译码器来产生HSELx信号,用于选择从机,选择信号由地址高位信号组合译码产生。建议使用简单的译码方案来保证高速操作。
从机只能在HREADY信号为高时,采样地址和控制信号以及HSELx,当HREADY信号为高时,表示传输完成。
AHB有几个特别的规定:
(1)每个从机至少都有 1KB 的内存空间。
(2)每个主机每次存取的空间不可超过 1KB。
(3)如果在 NONSEQ 或 SEQ 型态下存取到不存在的地址时,会有一个预设的从机发出 ERROR 的响
应信号。
(4)如果在 IDLE 或 BUSY 型态下存取到不存在的地址时,会有 OKAY 的响应信号。
(5)预设的从机是中央译码器的一部分。
(6)根据系统设计,使用地址的高位来产生从机选择信号。
(7)地址的低位送给从机以寻址其的内部存储器或缓存器
4、从机传输响应
主机发起传输后,由从机决定传输如何进行。一旦传输发起,协议不允许主机取消传输。
被访问的从机必须提供一个传输状态的响应。从机使用HREADY信号和HRESP[1:0]信号的组合,来提供传输状态。
从机可以提供多种方式来完成传输:
(1)立刻完成传输;
(2)插入一个或多个等待状态以获得充分时间来完成传输;
(3)发出一个错误应答表示传输失败;
(4)延时传输的完成,允许主机和从机放弃总线,让其他主机先完成传输,再完成剩下的传输。
4.1 传输完成
HREADY信号用于扩展AHB传输中的数据相位,HREADY为低表示传输被扩展,为高表示传输完成。
注意:每个从必须预先设定它放弃总线之前能插入的最大等待周期,用来计算访问总线的延时。推荐但不
必须的是, 等待状态最多只可使用 16 个周期,已防止任何访问长时间占用总线。
从机需要 HREADY 是双向信号(HREADY 做为总线上的信号,它是主机和从机的输入;同时每个从机自己的 HREADY 信号是输出。所以对于从机会有两个 HREADY 信号,一个来自总线的输入,一个自己给到多路器的输出。
4.2 传输响应
HRESP[1:0]的编码及传输响应信号如下表:
HRESP[1:0] | Reponse | Description |
---|---|---|
00 | OKAY | 从机可以用HREADY (拉高)与OKAY 的信号响应,代表传送已成功完成。HREADY 被拉低,加上OKAY的信号可插入在任何的响应信号(ERROR、 RETRY 或SPLIT) 之间,也就是当从机在未能正确的选择ERROR、RETRY 或SPLIT时,可以插入HREADY (拉低)与OKAY信号,但是等待状态最多只可使用16个周期 |
01 | ERROR | 此次数据传送发生错误,该信号必须维持两个时钟周期 |
10 | RETRY | 传输未完成,主机应尝试再次发起传输,直到传输完毕,该信号必须维持两个时钟周期 |
11 | SPLIT | 此信号必须维持两个周期,从机响应此信号表示此次的传送无法完成,要以分段传送方式来达成。等到从机可以完成时,会知会仲裁器,让重提数据传送要求的主机,完成传送 |
4.3 双周期响应
仅有OKAY响应可以在单周期给出,ERROR、RETRY、SPLIT响应至少需要两个周期。为了完成这些响应,从机会在倒数第二个周期驱动HRESP为ERROR或RETRY或SPLIT,同时拉低HREADY以获得一个额外的扩展周期。在最后一个周期,HREADY拉高,表示传输完成,同时保持HRESP。
如果从机需要两个以上的周期来完成ERROR、RETRY、SPLIT响应,则从机可能在传输开始时,插入等待状态。在这段周期内,从机拉低HREADY,同时只能给出OKAY响应。
需要双周期响应是AHB流水线传输的本质决定的,当从机发起ERROR、RETRY、SPLIT响应时,下一次传输的地址已经被广播到地址总线上了,双周期响应允许主机有足够的时间来取消该地址,并在下一次传输开始之前驱动HTRANS为IDLE。
下图表示了一个RETRY应答,从图中可知,传输的起始地址为A,传输大小为4Byte,主机在获得响应之前,已经将地址设置为A+4,从机在地址A不能立即完成传输,因此给出RETRY响应,这个响应指示主机地址A的传输未完成,并且地址A+4的传输被IDLE传输类型取代。
下图表示了传输中,从机需要一个周期(HRESP为OKAY)来决定给出何种响应的例子,之后从机给出双周期的ERROR响应结束了传输。
4.4 错误响应
当主机收到一个 ERROR响应时,它可以选择结束当前的批量数据传送,也可以继续传送剩下的批量数据,但通常不这样做。在从机送出 ERROR的信号之前必须先送出OKEY + HREADY (LOW)的信号,而 ERROR 信号至少需要维持两个周期。如上图所示。
(1)在第二个周期 S 送出 OKAY+ low HREADY 信号,使从机有充分的时间决定是否需要发出 ERROR
的信号;
(2)主机收到ERROR应答后,立刻结束当前的数据传送;
注意:从机必须维持ERROR至少两个周期
4.5 分块和重试
分块和重试响应给从机提供了在无法立刻给传输提供数据时释放总线的机制。这两种响应都允许在总线上结束传输,因此允许更高优先级的主机获得总线访问权。
SPLIT和RETRY的不同之处在于仲裁器在发生SPLIT和RETRY后分配总线的方式:
(1)对RETRY而言,仲裁器将继续使用常规优先级方案,因此只有拥有更高优先级的主机能获得总线访问权;
(2)对SPLIT而言,仲裁器将调整优先级方案,以便其他任何主机申请总线即能获取总线,即使这个主机拥有更低的优先级。为了完成SPLIT传输,从机必须通知仲裁器数据何时可用,以便相应主机完成传输。
SPLIT传输机制增加了仲裁器和从机的复杂度,却拥有完全释放总线给其他主机使用的有点;RETRY相应就只允许更高优先级的主机使用总线。
主机使用相同的方式处理SPLIT和RETRY相应。主机应继续请求总线,并尝试传输,知道传输完成或收到ERROR相应为止。
5、数据总线
为了避免使用三态数据总线,AHB协议将数据总线分开为读数据总线和写数据总线。最小的数据位宽为32位,且位宽可增加。
5.1 写数据总线HWDATA[31:0]
1、写出数据由主机发出;
2、主机必须将数据总线上的数据维持住,直到从机完成数据的接收 (HREADY HIGH);
3、所有传送所对应的地址都必须对齐,例如: 32 位的传送地址 Addr[1:0] = 00;
4、大端摆放法(big endian)或小端摆放法(little endian)都可使用
4.11小端摆放法(以 32 位为例)
(1)低字节在 HWDATA.的低字节地址
(2)Byte 0 (address offset = 0) 在 HWDATA[7:0]
(3)Byte 1 (address offset = 1) 在 HWDATA[15:8]
(4)Byte 2 (address offset = 2) 在 HWDATA[23:16]
(5)Byte 3 (address offset = 3) 在 HWDATA[31:24]
4.12大端摆放法
(1)低字节在 HWDATA.的高字节地址
(2)Byte 0 (address offset = 0) 在 HWDATA[31:24]
(3)Byte 1 (address offset = 1) 在 HWDATA[23:16]
(4)Byte 2 (address offset = 2) 在 HWDATA[15:8]
(5)Byte 3 (address offset = 3) 在 HWDATA[7:0]
5.2 读数据总线HRDATA[31:0]
读数据总线在读数据期间,由被选中的从机驱动,如果从机通过拉低HREADY信号来扩展传输,则从机只需在最后一个周期提供有效数据,由HREADY信号为高表示。
端结构与写数据总线相同。
从机只需要在OKAY响应周期提供有效数据,SPLIT、RETRY以及ERROR响应不需要提供有效的读数据。
6、总线仲裁机制
仲裁机制确保了任何时刻只有一个主机可以访问总线。仲裁器的功能如下:
(1)通过观察不同的总线请求信号,通过仲裁算法来决定哪个主机拥有最高优先级;
(2)接收从机的完成分段传送的请求
仲裁信号描述如下表所示:
Name | Width | Description |
---|---|---|
HBUSREQx | 1bit | 由主机到仲裁器,主机通过此信号对仲裁器提出使用总线的要求。主机可在任何时间要求仲裁器对于固定长度的传送,只要发起一次请求即可, 仲裁器会依据HBURST[2:0]来判断传送的长度。对于未定的传送长度,主机必须持续提出请求,直到完成全部的传送为止。当所有主机都不需要使用总线时,必须在HTRANS.上送出IDLE信号,仲裁器就会将总线的使用权交给预设主机(default M) |
HLOCKx | 1bit | 此信号必须与HBUSREQx配合,表示一个不可分段的传送动作,HLOCKx必须再指定地址之前使能一个周期 |
HGRANTx | 1bit | 由仲裁器输出到主机,仲裁器通知某个主机表示此主机得到总线的使用权.主机在HGRANT信号为高且HREADY信号也为高的那个 |
HCLK上升沿处获得总线使用权 | ||
HMASTER | 4bit | 仲裁器以此信号表示当前是哪一个主机在使用总线,此信号也可用来控制地址多任务器 |
HMASTERLOCK | 1bit | 仲裁器以此信号表示当前的总线是被锁住的,此信号与地址和控制信号具有相同的时序 |
HSPLIT | 16bit | 一个可执行分段传送的从机以此信号让仲裁器知道要让哪一个主机完成其未完成的分段传送 |
6.1 总线访问请求
主机可以在任何周期内使用HBUSREQx信号来请求总线。仲裁器会在时钟上升沿根据内部的优先级仲裁算法决定接下来哪一个主机将获得总线访问权。
通常仲裁器会在一个突发传输完成后才会授权另一个主机,但是如果需要的话,仲裁器也可以提前终止突发,将总线访问权授予更高优先级的主机。
如果一个主机需要锁定总线,那么它必须声明HLOCKx信号,告知仲裁器其他主机不应该被授予总线。
当主得到总线授权,并且正在执行一个定长的突发传输,它不需要继续总线请求即可完成这个 burst。仲裁器观察 突发的进程,并使用 HBURST[2:0]来决定主机有多少个传送。如果主机希望在当前正在进行的突发之后继续 1 次传输,它应在当前突发期间重新声明请求信号。
如果主机在突发传输过程中失去了总线访问权,那么它必须重新声明HBUSREQx信号以获得重新授权。
对于未定长度的突发,主机需持续声明HBUSREQx,知道最后一个传输已经开始。因为在未定长度的突发中,仲裁器不知道何时可以改变总线授权。
主机没有请求,也可能获得了总线控制权。这是因为当没有主机去请求总线时,总线会授权给一个默认的主机。 所以当某个主机不需要总线访问,它需要把传送类型 HTRANS 设置为 IDLE,这点很重要。
6.2 授予总线访问
仲裁器通过声明HGRANTx信号来表示当前拥有最高优先级的主机,HREADY信号为高时,主机将被授予总线,同时仲裁器改变HMASTER[3:0]来表示主机序号。
下图表示一个零等待的总线授予访问:
下图表示了有等待状态总线授予访问:
数据总线的拥有权必须比地址总线的拥有权晚释放出去, 这是因为数据周期发生在地址周期之后。
(1)在 T5 正沿,从机送出 HREADY 信号,表示 M1成功传送最后一次传输的地址及控制信号
(2)地址总线在 T5 正沿开始交换使用者,当 HGRANT_M2 AND HREADY = HIGH,表示地址总线交换成功
(3)仲裁器必须知道 M1还有多少笔数据要传送,才可正确的发出 HGRANT_M2 信号
(4)当仲裁器收到最后一个传输地址后,仲裁器就会改变 HGRANTx 信号
(5)T5 刚开始时, M2 送出地址与控制信号
(6)数据总线的交换只有在上一笔数据传送结束后才会开始
(7)在 T7 正沿,开始数据总线的交换
下图表示了仲裁器在一次突发结束后移交总线的例子:
(1)仲裁器在倒数第二个地址被采样时(T5),改变HGRANTx信号;
(2)新的HGRANTx信息将在最后一个地址被采样时(T7)同时被采样。
下图表示了HGRANTx和HMASTER信号在系统中是如何被使用的:
!注意:由于使用了中央地址译码器,每个主机可以立刻输出它想被执行的地址,而不用等到被授予总线。HGRANTx信号仅被主机用来决定它何时拥有总线,并考虑何时地址被选中的从机采样。HMASTER的延迟信号被用来控制写数据总线数据选择器。
6.3 锁定传输
仲裁必须从观察每一个主机的 HLOCKx 信号, 来决定什么时候主机希望执行一个锁定顺序传输。之后仲裁器负责确保没有其他主机被授权,直到这个锁定传输完成。
在一个连续锁定传输之后,仲裁将总是还会保持当前的主机的授权来传一个附加的传送来保证锁定传输的序列的最后一个传送已经成功完成,并且没有收到 SPLIT or RETRY 的应答之一。
所以推荐但并不是强制要求的做法是,主机在任何锁定传输后插入一个 IDLE 传输,在开始其它突传输之前,来提供一个仲裁切换的机会。
仲裁器也负责声明HMASTERLOCK信号,该信号与地址和控制信号具有相同的时序。该信号指示从机当前传输时锁定的,因此必须在其他主机被授予总线之前处理完成。
6.4 默认总线主机
每个系统都必须包含一个默认总线主机,当其他主机都不能使用总线时,该主机被授予总线。默认主机在获得授予总线时,只能执行IDLE传输。
如果所有主机都还在等待 SPLIT传输的完成,也会将总线使用权交给默认主机。
7、分段传输
从机可以用 SPLIT 来解决延迟太长的传输。
仲裁器必须观察响应信号并且遮掉(mask)已被分段传送的主机,使其等候 HSPLIT 信号的通知后才授予其总线使用权。
仲裁器必须在 HMASTER[3:0] 上产生一个标签表示哪一个主机正在执行数据传送。
当从机要执行分段传输的动作时,这个从机必须存下主机序号。
当从机可以完成被分段的传输时会在 HSPLITx[15:0]信号上,送出要完成传送的主机序号。
仲裁器以 HSPLITx[15:0] 来决定哪一个主机 可以重新获得 bus 的使用权。
仲裁器会在每个周期去观察 HSPLITx 信号。
当有多个 HSPLITx 信号时,会被逻辑或在一起传送给仲裁器。
7.1 分段传输顺序
1、主机送出地址与控制信号,开始传送。
2、被寻址到的从机立即提供数据,或者送出SPLIT应答信号(如果需要等些周期来获得数据)。在每次的传输,仲裁器会广播出当前是哪一个主机在使用总线。 从机需要记录主机序列号,以便后面重传使用。
3、有 SPLIT 信号响应时,仲裁器会将总线使用权交给别的主机使用,如果所有其它主机都收到SPLIT 信号,则移交给默认主机。
4、当从机要完成分段传送时, 从机会在 HSPLITx 上设定对应的主机 ID,来指示哪个主机可以被允许再次访问总线。
5、仲裁器会在每个周期观察 HSPLITx 信号,如果有变化,就更改正确的主机的优先权。
6、仲裁器将会允许重新要求使用权的主机,但如果有更高优先级的主机在用总线,可能会延迟。
7、从机会响应 OKAY 信号表示传送完成。
7.2 多重分段传输
只要一个主机有额外的 HBUSREQ 与 HGRANT 线, 即可发出超过一个以上的传送要求。
仲裁器将一组信号 (REQ and GNT) 视为一个主机。
可分段传输的从机可被设计去处理额外的传送要求而不需纪录额外的地址与控制信号,但要记录主机序号。
从机可利用 HSPLITx 来表示当前正在处理的是哪一个主机要完成分段传输。
仲裁器可重新仲裁这些主机的请求,高优先权的主机可被重新给予使用权。
7.3 预防死锁
Deadlock可能发生在很多不同的主机对同一个发出 SPLIT 和 RETRY 的从机身上, 而该从机又无法处理那么多 SPLIT and RETRY 时,便会发生 deadlock。
Deadlock 可以透过限制分段传送的数目(最多 16 个)来避免。
从机并不会记录下每个要求的地址与控制讯息,如果要作 SPLIT 的话,只会记录下当前传送对象的 ID 讯息。当 S 可完成分段传送时,才会锁定要求的地址与控制讯息。
从机会依序地让仲裁器知道从机要服务哪些要求。
从机可以任何顺序处理要求的服务。
重传:
当从机无法在很短的时间内完成传送的动作时, 它可以要求主机重传。 从机一次只可对一个主机发出 RETRY
信号,确定所服务的主机是同一个时, RETRY 的动作才能完成。如果 RETRY 是不同主机时可以采取下列措
施:
(1)给一个 error 回应
(2)通知仲裁器
(3)产生中断
(4)重置系统
7.4 分块传输的总线移交
当主机收到 SPLIT 或 RETRY 响应信号时,必须先进入 IDLE 状态并且重新请求总线使用权,一个新的主机会在 IDLE 周期结束前由仲裁器决定出来。主机在收到 SPLIT 或 RETRY 信号后须立刻进入 IDLE 状态。
(1)在 T2 与 T3, 从机会传两个周期的 SPILT 信号。
(2)该主机在 T3 正沿时发现有 SPLIT 响应信号,于是进入 IDLE 状态。
(3)仲裁器在 T3 正沿时,决定下一个总线的使用者。
(4)在 T4,新的主机送出地址与控制信号
评论 (0)