下图是8拍回环字突发传输:地址将在 32 字节边界处回环所以地址 0x3C 以后的地址是 0x20。算法
下图是8增量半字突发传输,因此地址每次增长 2 个字节而且突发在递增所以地址连续增长经过了 16 字节边界。并发
下图是未定义长度的增量突发。异步
两个半字传输在地址 0x20 处开始。半字传输地址增长为 2。 三个字传输在地址 0x5C 处开始。字传输地址增长为 4。性能
对于每一个总线上的从机来讲使用一个中央地址译码器提供选择信号, HSELx。选择信号是高位地址信号的组合译码,而且建议使用简单的译码方案以免复杂译码逻辑和确保高速操做。
从机只能在 HREADY 信号为高时采样地址和控制信号以及 HSELx, HSELx 为高表示当前传输已经完成。在特定的状况下有可能在 HREADY 为低时采样 HSELx,可是被选中的从机将会在当前传输完成后变动。
可以分配给单个从机的最小地址空间是 1KB。全部总线主机必须被设计为不能执行超过 1KB 地址边界的增量传输,所以确保了一个突发毫不会超过地址译码的边界。编码
在系统设计中若是有包含一个存储器映射并未彻底填满(存储空间)的状况时应该设置一个额外的默认从机以在访问任何不存在的地址空间时提供响应。若是一个非连续或者连续传输试图访问一个不存在的地址空间时这个默认从机应该提供一个 ERROR 响应。空闲或者忙传输访问不存在的空间(默认从机)应该给出一个零等待状态的 OKAY 响应。典型默认从机的功能将以做为中央地址译码器的一部分来实现。spa
在主机发起传输后,由从机决定传输该如何进行。 AHB 规范中没有作出总线主机在传输已经开始后取消传输的规定。
只要从机被访问那它必须提供一个表示传输状态的响应。 HREADY 信号被用来扩展传输而且和响应信号 HRESP[1: 0]相结合,以提供传输状态。
从机可以用许多种方式来完成传输。它能:
马上完成传输;
插入一个或者多个等待状态以容许有时间来完成传输;
发出一个错误信号来表示传输失败;
延时传输的完成,可是容许主机和从机放弃总线,把总线留给其余传输使用。设计
HREADY 信号用来扩展一次 AHB 传输的数据部分。当 HREADY 信号为低时表示传输将被扩展而当其为高时表示传输完成。3d
注:每一个从机必须有一个预先肯定的在从机放弃总线以前插入的最大等待状态数目,以便可以计算访问总线的延时。建议但不强制规定,从机不要插入多于 16 个等待状态以阻止任何单个访问将总线锁定较长
的时钟周期。blog
典型的从机将会用 HREADY 信号在传输中插入适当数量的等待状态而传输在HREADY 为高时完成而且给出 OKAY 响应,表示传输成功完成。
ERROR 响应被从机用来表示某种形式的错误条件和相关的传输。典型的是被用做保护错误,例如试图写一个只读的存储空间。
SPLIT 和 RETRY 响应组合容许从机延长传输完成的时间,可是释放总线给其余主机使用。这些响应组合一般仅由有高访问延时的从机请求而且从机可以利用这些响应编码来确保其余主机在长时间内不被阻止访问总线。
关于SPLIT和RETRY的完整描述参见分块和重试。接口
当从机须要插入必定数量的等待状态优于决定将要给出何种响应时从机必须将响应驱动为 OKAY。
HRESP[1: 0]的编码、传输响应信号和每一个响应的描述参见下表:
HRESP[1] | HRESP[0] | 响应 | 描述 |
0 | 0 | OKAY | 当 HREADY 为高表示传输已经成功完成。 OKAY 响 |
0 | 1 | ERROR | 该响应表示发生了一个错误。错误条件应该发信号给 |
1 | 0 | RETRY | RETRY(重试)信号表示传输并未完成,所以总线 |
1 | 1 | 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 的传输被取消而用空闲传输替代。
下图表示了一个传输中从机请求一个周期来决定将要给出的响应(在HRESP为OKAY的时间段),以后从机用一个双周期的ERROR响应结束了传输。
分块和重试响应给从机提供了在没法马上给传输提供数据时释放总线的机制。这两种机制都容许在总线上结束传输所以容许更高优先级的主机可以访问主机。
分块(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 响应不须要提供有效的读数据。
为了使系统正确运行事实上全部模块都是相同端结构的而且任何数据通路或者桥接器也是相同端结构的。
不支持动态端结构,由于在大多数嵌入式系统中,这将致使明显的硅晶片较高,也就是多余的。
对于模块设计者而言建议只有应用场合很是宽泛的模块才应该被设计为双端结构的,经过一个配置引脚或者内部控制位来选择端结构。对于更多的特定用途的模块,固定端结构为大端或者小端将产生体积更小、功耗更低、性能更高的接口。
仲裁机制用来确保任意时刻只有一个主机可以访问总线。仲裁器的功能是检测许多不一样的使用总线的请求和决定当前请求总线的主机中哪个的优先级最高。仲裁器也接收来自从机须要完成 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 传输。仲裁器须要这些信息以便于授予主机访问总线完成传输。
下列小节提供更多的信息:
请求总线访问;
授予总线访问;
突发提早终止;
锁定传输。
总线主机使用 HBUSREQx 信号来请求访问总线而且能够在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求而后使用内部优先级算法来决定哪一个主机将会下一个得到访问总线。
若是主机请求锁定访问(总线),那么主机也必须断言 HLOCKx 信号来提示仲裁器其它主机不该该被授予总线。
当一个主机被授予总线而且正在执行一个固定长度的突发,那么就没有必要继续请求总线以便完成传输。仲裁器监视突发的进程而且使用 HBURST[2: 0]信号来决定主机请求了多少个输入。若是主机但愿在当前正在进行的传输以后执行另外一个突发那么主机须要在突发中从新断言请求信号。
若是主机在一次突发当中失去对总线的访问那么它必须从新断言 HBUSREQx 请求线以从新获取访问总线。
对未定长度的突发主机应该继续断言请求直到已经开始最后一次传输。在未定长度的突发结束时仲裁器不能预知什么时候改变仲裁。
对于主机而言有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线而且仲裁器将访问(总线)授予一个默认的主机时发生。所以,若是一个主机并没请求访问总线那么它驱动传输类型 HTRANS 来表示空闲传输显得很重要。
仲裁器经过断言适当的 HGRANTx 信号来表示请求总线的主机中哪一个是当前优先级最高的。当前传输完成后,由 HREADY 为高时所表示,那么主机将被授予(总线)而且仲裁器将改变 HMASTER[3: 0]信号来表示总线主机序号。
下图表示了当全部传输都为零等待状态而且HREADY信号为高时的处理过程。
下图表示了在总线移交时等待状态的影响。
数据总线的全部权延时在地址总线的全部权以后。一次传输不管什么时候完成(由HREADY为高时所表示)而后占有地址总线的主机才能使用数据总线而且将继续占有数据总线直到传输完成。 下图表示当在两个总线主机之间移交总线时数据总线的全部权是如何转移的。
下图表示一个仲裁器如何能在一次突发传输结束时移交总线的例子。
仲裁器在倒数第二个(最后一个以前的)地址被采样时改变 HGRANTx 信号。新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样。
下图表示了HGRANTx和HMASTER信号是如何在系统中使用的。
注:由于使用了中央多路选择器,每一个主机能够马上输出它但愿执行的地址而不须要等到被授予总线。HGRANTx 信号是仅被主机用来决定它什么时候拥有总线并所以须要考虑什么时候让地址被合适的从机采样。HMASTER 总线的延时版本被用来控制写数据多路选择器。
一般仲裁器在突发传输结束以前不会将总线移交给一个新的主机。可是,若是仲裁器决定突发必须被提早终止以防止过长的总线访问时间那么它可能会在一个突发完成以前将(总线)授予转移给另一个总线主机。
若是主机在突发传输中间失去了对总线的全部权那么它必须从新断言总线(请求)以完成突发。主机必须确保 HBURST 和 HTRANS 信号都被更新以反映主机再也不执行一个完整的 四、 8 或者 16 拍的突发。
例如,若是一个主机仅能完成一个 8 拍突发的 3 个传输,那么当它从新得到总线时必须使用一个合法的突发编码来完成剩下的 5 个传输。主机可使用任何合法组合,所以不管是5 拍未定长度的突发或者是 4 拍固定长度的突发而后跟上一个单拍未定长度的突发都是能够接受的。
仲裁器必须监视来自各个主机的 HLOCKx 信号以肯定什么时候主机但愿执行一个锁定连续传输。以后仲裁器负责确保没有其余总线主机被授予总线直到锁定传输完成。
在一个连续锁定传输以后仲裁器将老是为一个附加传输保持总线主机被授予(总线)以确保锁定序列的最后一个传输成功完成而且没有接收到 SPLIT 或者 RETRY 响应。所以建议但不规定,主机在任何锁定连续传输以后插入一个空闲传输以提供给仲裁器在着手另一个突发传输以前改变(总线授予)的机会。
仲裁器也负责断言 HMASTLOCK 信号, HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每一个从机当前传输是锁定的所以必须在其余主机被授予总线以前被处理掉。
每一个系统必须包含一个默认总线主机,若是全部其余主机不能使用总线时该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。
若是没有请求总线那么仲裁器能够授予默认主机(访问总线)或者访问总线延时较低的主机将所以受益而被授予总线。
授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制而且也是预先进入低功耗操做模式的有用步骤。
若是其余全部主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。
分块传输经过根据从机的响应操做来分离(或者分块)主机操做以给从机提供地址和合适的数据,提升了总线的整体使用率。
当传输产生时若是从机认为传输的执行将占据大量的时钟周期那么从机可以决定发出一个 SPLIT 响应。该信号提示仲裁器尝试此次传输的主机不该该被授予访问总线,直到从机表示它准备好了完成传输时。所以仲裁器负责监视响应信号而且在内部屏蔽已是 SPLIT传输主机的任何请求。
在传输的地址相位期间仲裁器在 HMASTER[3: 0]产生一个标记,或者总线主机序号,以表示正在执行传输的主机。任何一个发出 SPLIT 响应的从机必须表示它有能力完成这个传输,而且经过记录 HMASTER[3: 0]信号上的主机序号来实现。以后,当从机可以完成传输时,它就根据主机序号在从从机到主机的 HSPLITx[15: 0]信号上断言适当的位。而后仲裁器使用这个信息来解除来自主机请求信号的屏蔽而且主机将被及时授予访问总线以重试传输。仲裁器在每一个时钟周期采样 HSPLITx 总线所以从机只须要断言适当的位一个周期以便仲裁器可以识别。
若是系统中有多个具备 SPLIT 能力的从机那么每一个从机的 HSPLITx 总线能够逻辑或在一块儿以提供给仲裁器单个 HSPLIT 总线。
大多数系统中并无用到最大 16 个总线主机的能力所以仲裁器仅要求一个位数和总线主机数量同样的 HSPLIT 总线。可是,建议全部有 SPLIT 能力的从机被设计成支持高达 16个主机。
分块传输顺序
SPLIT 传输的基本步骤以下:
一、 主机以和其余传输同样的方式发起传输并发出地址和控制信息;
二、 若是从机可以马上提供数据那么它能够立刻提供数据。若是从机确认获取数据可能会占据较多的周期那么它给出一个 SPLIT 传输响应;
每次传输中仲裁器广播一个序号或者标记,表示哪一个主机正在使用总线。从机必须记录该序号,以便用来在以后的一段时间从新发起传输;
三、 仲裁器授予其余主机使用总线而且 SPLIT 响应的动做容许主机移交总线。若是全部其余主机也接收到一个 SPLIT 响应那么默认主机将被授予总线;
四、 当从机准备完成传输那么它断言 HSPLITx 总线中的适当位给仲裁器以指示哪一个主机应该被从新授予访问总线;
五、 仲裁器每一个时钟周期监视 HSPLITx 信号,而且当 HSPLITx 中的任何一位被断言仲裁器将恢复对应主机的优先级;
六、 最后仲裁器将授予(SPLIT 的)主机总线,所以主机能从新尝试传输。若是一个优先级更高的主机正在使用总线的话这可能不会马上发生;
七、 当传输终于开始后从机以一个 OKAY 传输响应来结束(传输)。
多重分块传输
总线协议只容许每一个总线主机有一个未完成的处理。若是任何主机模块可以处理多于一个未完成的处理那么它须要为可以处理的每一个未完成处理设置一个额外的请求和授予信号。
在协议级上一个信号模块能够表现为许多不一样总线主机,每一个主机只能有一个未完成的处理。
然而,可能一个有 SPLIT 能力的从机会接收比它能并发处理的(传输)还要多的传输请求。若是这种状况发生那么从机能够不用记录对应传输的地址和控制信息而仅须要记录主机序号就发出 SPLIT 响应。以后从机能够经过断言 HSPLITx 总线中适当的位给以前被给出SPLIT 响应的全部主机来表示它能处理另一个传输,可是从机没有记录地址和控制信息。
以后仲裁器可以从新授予这些主机访问总线而且它们将重试传输,给出从机要求的地址和控制信息。这表示一个主机能够在它最终完成它要求的传输以前被屡次授予总线。
预防死锁
SPLIT 和 RETRY 传输响应都必须在使用中注意预防总线死锁。单个传输决不会锁定AHB,由于每一个从机必须被设计成能在预先肯定的周期数内完成传输。可是,若是多个不一样主机试图访问同一个从机,从机发出 SPLIT 或者 RETRY 响应以表示从机不能处理,那么就有可能发生死锁
分块传输
从机能够发出 SPLIT 传输响应,经过确保从机可以承受系统中每一个主机(最多 16 个)的单个请求来预防死锁。从机并不须要存储每一个主机的地址和控制信息,它只须要简单的记录传输请求已经被处理和 SPLIT 响应已经发出的事实便可。最后全部主机将处在低优先级而后从机能够有次序的来处理这些请求,指示仲裁器正在服务于哪一个请求,于是确保了全部请求最终都被服务。
当从机有许多未完成的请求时它可能以任何顺序(随机的)来选择处理这些请求,尽管从机须要注意锁定传输必须在任何其余传输继续以前完成。
从机使用 SPLIT 响应而不用锁存地址和控制信息显得很是合法(合适)。从机仅须要记录特定主机作出的传输尝试而且稍后的时间段从机经过指示本身已经准备好完成传输就能获取地址和控制信息。主机将被授予总线并将从新广播传输,容许从机锁存地址和控制信息而且马上应答数据,或者发出另一个 SPLIT 响应若是还须要额外的一些周期的话。
理想状况下从机不该该有多于它能支持的未完成传输,可是要求支持这种机制以防止总线死锁。
重试传输
发出 SPLIT 响应的从机必须一次只能被一个主机访问。在总线协议中并无强制而在系统体系结构中应该确保这一点。大多数状况下发出 RETRY 响应的从机必须是一次只能被一个主机访问的外设,所以这会在一些更高级协议中获得确保。
硬件保护和多主机访问 RETRY(响应)的从机相违背并非协议中的要求,可是可能会在下文描述的设计中获得执行。仅有的总线级要求是从机必须在预先肯定的时钟周期内驱动 HREADY 为高。
若是要求硬件保护那么这能够被 RETRY(响应)的从机本身执行。当一个从机发出一个 RETRY 信号后它可以采样主机序号。在这以后和传输最终完成以前 RETRY 的从机能够检查作出的每次传输尝试以确保主机序号是相同的。若是从机发现主机号不一致那么它能够选择下列的行动方式:
一个错误响应;
一个信号给仲裁器;
一个系统级中断;
一个彻底的系统复位。
协议要求主机在接收到一个SPLIT或者RETRY响应后马上执行一个空闲传输以容许总线转移给另一个主机。 图 3.20表示了发生一个分块(SPLIT)传输的顺序事件。
须要注意如下的要点:
传输的地址在时间 T1 以后出如今总线上。在时钟沿 T2 和 T3 后从机返回两个周期的 SPLIT 响应;
在第一个响应周期的末尾,也就是 T3,主机可以检测到传输将会被分块所以(主机)改变接下来的传输控制信号以表示一个空闲传输; 一样也在时间 T3 处仲裁器采样响应信号并肯定传输已经被分块。以后仲裁器能够调整仲裁优先权而且在接下来的周期改变授予信号,这样新的主机可以在时间 T4后被授予地址总线;
新主机能够保证马上访问(总线)由于空闲传输老是在一个周期内完成。
复位
复位信号, HRESETn,是 AMBA AHB 规范中惟一的低有效信号而且是全部总线设备的主要复位源。复位能够异步方式断言,可是却在 HCLK 的上升沿被同步地撤消断言。
在复位期间全部主机必须确保地址和控制信号在有效电平而且 HTRANS[1: 0]信号表示空闲。
关于AHB数据总线的位宽
一种能提升总线带宽而不用提升操做频率的方法是使片上总线的数据通道更宽。金属层的增长和大容量片上存储模块(例如嵌入式 DRAM)的使用都是更宽片上总线使用的推进因素。
指定一个固定宽度的总线将意味着在大多数场合下总线宽度在应用中并非最佳的。所以容许可变总线宽度的途径已经被采纳,可是必须确保模块在设计中高移植性。
协议容许 AHB 数据总线能够是 八、 1六、 3二、 6四、 12八、 25六、 512 或者 1024 位宽。然而,建议使用中最低的总线宽度为 32 位而且预计最大 256 位宽的总线将适合几乎全部应用。
对读和写传输而言接收模块都必须从总线上正确的字节通道选择数据。并不要求将数据复制到全部字节通道上。