AHB
文章目录
AHB_full 与 ahb_lite的区别
ahb-lite 是整个ahb 协议的子集,只支持一个master,不需要仲裁器及相应的总线请求/授权协议,不支持retry 和 split 响应
多master & 单master
仲裁 & 多层互联
Multi-Layer AHB System (多层AHB总线架构)
优点:
- 可以开发更多可用总线带宽的多主机系统
- 可以构建灵活体系架构的复杂多主机系统;消除了在硬件设计阶段,就修改有关将系统资源分配给特定主机的设计决策要求
- 可以使用标准的AHB主从模块而不需要修改
- 每个AHB layer可以非常简单,因为只有一个主机,所以不需要仲裁,只需要MUX;
- 可以使用AHB-Lite协议,即不需要请求和授予,不需要RETRY/SPLIT事务;
- 仲裁器可以高效的为每一个外设进行点仲裁,并且仅当多个主机希望同时访问同一从机时,才有必要;
- AHB 基础架构是多路选择器块,完成多主机到外设的连接由于多层架构是基于AHB协议,可以复用之前设计的主机和从机,而不需要修改
busy传输
In Figure 1:
T0-T1 The 4-beat read starts with a NONSEQ transfer.
T1-T2 The master is unable to perform the second beat and inserts a BUSY transfer to delay the start of the second beat. The slave provides the read data for the first beat.
T2-T3 The master is now ready to start the second beat, so a SEQ transfer is signaled. (由于上一笔传输是busy传输)The master ignores any data that the slave provides on the read data bus.
T3-T4 The master performs the third beat. The slave provides the read data for the second beat.
T4-T5 The master performs the last beat. The slave is unable to complete the transfer and uses HREADY to insert a single wait state.
T5-T6 The slave provides the read data for the third beat.
T6-T7 The slave provides the read data for the last beat.
busy传输禁止发生在single传输
在busy传输后终止突发传输
- 突发传输开始后,master使用忙传输busy请求更多的时间来继续完成下一个突发传输;
- 在未定义长度突发传输中,master可能插入busy传输,然后决定没有数据需要传输; 这种情况下,可以接受master执行一个非连续或者空闲传输终止突发传输;
- 协议不允许master使用busy传输结束固定长度的突发传输,如INCR4,INCR8,INCR16和WRAP4, WRAP8, WRAP16;这些固定长度的突发传输类型必须用SEQ传输终止;
- master也不允许在single突发传输后,使用busy传输; single突发传输必须跟着空闲传输或者非连续传输;
提前终止突发
- 当slave错误回应或多层互连终止时,突发传输会终止;
- slave发出错误响应,master可以取消突发传输剩下的部分;但是,这不是严格的要求,也允许master继续传输剩下的; 如果master取消传输,它需要在两个错误响应周期中将HTRANS改为空闲(???);
- 当多master系统使用多层互连组件,master可以终止突发传输以便另一个master可以访问该slave;
single传输
SINGLE突发之后必须是IDLE传输或NONSEQ传输。
AHB中文翻译
介绍
出于说明目的,本规范中使用了32位数据总线。但允许额外的数据总线宽度,如后文6.3数据总线宽度所示。
关于协议
AMBA AHB是一个适合高性能可综合设计的总线接口。它定义了组件之间的接口,如主组件、互连组件和从组件。
最常见的AHB从机是内部存储器设备、外部存储器接口和高带宽外设。 尽管低带宽外设可以作为AHB从机,但出于系统性能原因,它们通常位于AMBA高级外设总线(APB)上。更高性能的AHB和APB之间的桥接是使用AHB从机完成的,称为APB桥。
图1-1显示了带有AHB主设备和三个AHB从设备的单主AHB系统设计。总线互连逻辑由一个地址解码器和一个从机到主机多路复用器组成。解码器监控来自主机的地址,以便选择合适的从机,多路复用器将相应的从机输出数据路由回主机。
AHB还通过使用互连组件支持多主机设计,该互连组件提供仲裁并将信号从不同主机路由到适当的从机。
主机
主机提供地址和控制信息来启动读写操作。图1-2显示了一个主机接口。
从机
从机响应系统中主机发起的传输。从机使用来自解码器的HSELx
选择信号来控制何时响应总线传输。
从机向主机发回信号:
- 总线传输的完成或延长。
- 总线传输的成功或失败。
图1-3显示了一个从机接口。
互连
互连组件提供系统中主设备和从设备之间的连接。
单个主系统只需要使用解码器和多路复用器,如下节所述。
多主机系统需要使用互连,该互连提供仲裁以及从不同主机到适当从机的信号路由。地址、控制和写数据信令需要这种路由。
解码器:
该组件对每次传输的地址进行解码,并为参与传输的从机提供选择信号。它还向多路复用器提供控制信号。在所有使用两个或更多从设备的实现中,都需要一个集中式解码器。
多路复用器:
需要一个从机到主机的多路复用器来多路复用从机到主机的读数据总线和响应信号。解码器为多路复用器提供控制。在所有使用两个或更多从机的实现中,都需要一个集中式多路复用器。
AHB修订版(略)
操作
主机通过驱动地址和控制信号开始传输。这些信号提供有关传输地址、方向、宽度的信息,并指示传输是否构成突发的一部分。传输可以是:
-
单次
-
不在地址边界换行的递增突发。
-
在特定地址边界换行的换行突发。
写数据总线将数据从主机移动到从机,读数据总线将数据从从机移动到主机。
每次传输包括:
地址阶段——一地址和控制周期。
数据阶段——数据的一个或多个周期。
从机不能请求延长地址阶段,因此所有从机必须能够在此期间对地址进行采样。但是,从机可以使用HREADY请求主机扩展数据阶段。该信号为低电平时,会将等待状态插入传输,使从机有额外时间提供或采样数据。从机使用HRESP来指示传输的成功或失败。
信号描述
全局信号
主机信号
从机信号
解码器信号
通常,解码器还向多路复用器提供HSELx
信号,或从HSELx
信号导出信号/总线,以使多路复用器能够将适当的信号从选定的从机路由到主机。重要的是,这些额外的多路复用器控制信号被重定时到数据阶段。
多路复用器信号
传输
基本传输(读写时序)
传输包括两个阶段:
Address:持续一个HCLK周期,除非它被前一个总线传输延长。
Data:可能需要几个时钟周期。使用HREADY信号控制完成传输所需的时钟周期数。
HWRITE控制与主机之间的数据传输方向。因此,当:
- HWRITE为高电平时,表示写传输,主机在写数据总线上广播数据,HWDATA[31:0];
- HWRITE为低电平时,执行读传输,从机在读数据总线上生成数据,HRDATA[31:0]。
最简单的传输没有等待状态,因此传输由一个地址周期和一个数据周期组成。图3-1显示了一个简单的读传输,图3-2显示了一个简单的写传输。
在没有等待状态的简单传输中:
- 主机在HCLK上升沿后将地址和控制信号驱动到总线上。
- 然后,从机在HCLK的下一个上升沿采样地址和控制信息。
- 从机对地址和控制进行采样后,可以开始驱动相应的HREADYOUT响应。主机在HCLK的第三个上升沿对该响应进行采样。
这个简单的示例演示了在不同的时钟周期内,传输的地址和数据阶段是如何发生的。任何传输的地址阶段都发生在前一次传输的数据阶段。 地址和数据的这种重叠是总线流水线特性的基础,能够实现高性能操作,同时仍然为从机提供足够的时间来响应传输。
从机可以在任何传输中插入等待状态,以获得额外的完成时间。每个从机都有一个HREADYOUT信号,在传输的数据阶段驱动。该互连负责组合来自所有从机的HREADYOUT信号,以生成用于控制整体进度的单个HREADY信号。
图3-3显示了具有两个等待状态的读传输。
图3-4显示了具有一个等待状态的写传输。
当以这种方式扩展传输时,它具有扩展下一次传输的地址阶段的副作用。 图3-5显示了对不相关地址A、B和C的三次传输,其中地址C的地址阶段延长。
在图3-5中:
- 到地址A和C的传输是零等待状态
- 到地址B的传输是一个等待状态
- 将到地址B传输的数据阶段扩展具有将到地址C传输的地址阶段扩展的效果
传输类型(HTRANS——IDLE,BUSY,NONSEQ,SEQ)
根据HTRANS[1:0]的控制,传输可以分为四种类型之一。表3-1列出了这些。
图3-6显示了NONSEQ、BUSY和SEQ传输类型的使用。
在图3-6中:
T0-T1 4拍读取从一次NONSEQ传输开始。
T1-T2 主机无法执行第二拍,插入一个BUSY传输来延迟第二拍的开始。从机提供第一拍的读取数据。
T2-T3 主机现在准备开始第二拍,所以SEQ传输信号出现。主机忽略从机在读数据总线上提供的任何数据。
T3-T4 主机执行第三拍。从机提供第二拍的读取数据。
T4-T5 主机执行最后一拍。从机无法完成传输,使用HREADYOUT插入单个等待状态。
T5-T6 从机提供第三拍的读取数据。
T6-T7 从机提供最后一拍的读取数据。
锁定传输(HMASTLOCK)
如果主机要求锁定访问,那么它还必须声明HMASTLOCK信号。该信号向任何从机指示当前传输序列不可分割,因此必须在处理任何其他传输之前进行处理。 通常,通过确保从机在微处理器SWP指令的读和写阶段之间不执行其他操作,锁定传输用于维护信号量的完整性。
图3-7显示了带有微处理器SWP指令的HMASTLOCK信号。
(锁定传输后,建议主机插入空闲传输。)
大多数从机不需要实现HMASTLOCK,因为它们只能按照接收的顺序执行传输。可以被多个主设备访问的从设备,例如,多端口内存控制器(MPMC)必须实现HMASTLOCK信号。
传输尺寸(HSIZE)
HSIZE[2:0]表示数据传输的大小。表3-2列出了可能的传输大小。
(HSIZE设置的传输大小必须小于或等于数据总线的宽度。 例如,对于32位数据总线,HSIZE必须只使用0b000、0b001或0b010。)
将HSIZE与HBURST结合使用,以确定换行突发的地址边界。HSIZE信号的时序与地址总线完全相同。然而,它们必须在整个突发传输中保持不变。
突发操作(HBURST——SINGLE,INCR4/8/16,WRAP4/8/16)
4拍、8拍和16拍的突发、长度不确定的突发和单次传输在该协议中定义。它支持递增和换行:
- 递增突发访问顺序位置,突发中每次传输的地址是前一个地址的增量。
- 换行突发跨越地址边界时换行。地址边界计算为突发中的节拍数和传输尺寸的乘积。拍数由HBURST控制,传输大小由HSIZE控制。例如,字(4字节)的四拍换行突发访问16字节边界时换行。因此,如果突发的起始地址是0x34,那么它包括4次到地址0x34、0x38、0x3C和0x30的传输。
HBURST[2:0]控制突发类型。表3-3列出了可能的突发类型。
主机不得试图启动跨越1KB地址边界(如0x400、0x800、0xc00及其倍数等)的递增突发。
主机可以使用以下任一方式执行单次传输:
- 单次传输突发。
- 长度为1的未定义长度突发。
突发中的所有传输必须与等于传输大小的地址边界对齐。 例如,字传输必须与字地址边界对齐(HADDR[1:0] = 0b00),半字传输必须与半字地址边界对齐(HADDR[0] = 0)。IDLE传输的地址也必须对齐,否则在仿真过程中,总线监控器可能会报告虚假警告。
BUSY传输后突发终止
突发开始后,如果主机需要更多时间才能继续突发中的下一次传输,则主机使用BUSY传输。
在未定义长度的突发期间,INCR,主机可能会插入BUSY传输,然后决定不再需要数据传输。在这种情况下,主机可以执行一次NONSEQ或IDLE传输,从而有效终止未定义长度的突发
。
对于以下类型的固定长度突发,协议不允许主机以BUSY传输结束突发:
-
递增INCR4、INCR8和INCR16。
-
换行WRAP4、WRAP8和WRAP16。
这些固定长度的突发类型必须以SEQ传输结束。
SINGLE突发后,主机不允许立即执行BUSY传输。SINGLE突发之后必须是IDLE传输或NONSEQ传输。
提前突发终止
突发可以通过以下方式终止:
从属错误响应:
如果从机提供错误响应,则主机可以取消突发中剩余的传输。
但是,这并不是严格的要求,主机在突发中继续其余传输也是可以接受的。如果主机取消突发中剩余的传输,则它必须在两个周期的错误响应期间将HTRANS更改为IDLE。如果主机没有完成该突发,则不要求它在下次访问该从机时重建该突发。例如,如果一个主机只完成了8拍脉冲串中的3拍,那么当它下一次访问该从机时,它不必完成剩余的5次传输。
多层互连终止:
尽管不允许主设备提前终止突发请求,但从设备必须设计为在突发未完成时正常工作。当多层互连组件用于多主机系统时,从设备可以终止突发,以便另一个主机可以访问从机。
如果发生这种情况,从机必须终止来自原主机的突发,然后对新主机做出适当响应。
突发示例
四拍换行突发,WRAP4:
图3-8显示了使用四拍换行突发的写传输,第一次传输增加了等待状态。
由于突发是一个四拍的字传输突发,因此地址在16字节边界处换行,在传输到地址0x3C后,再传输到地址0x30。
四拍递增突发, INCR4:
图3-9显示了使用四拍递增突发的读传输,第一次传输增加了等待状态。在这种情况下,地址不会在16字节的边界处换行,地址0x3C之后是到地址0x40的传输。
八拍换行突发,WRAP8:
图3-10显示了使用八拍换行突发的读传输。
因为突发是一个8拍的字传输突发,所以地址在32字节的边界处换行,在传输到地址0x3C之后是传输到地址0x20。
八拍递增突发,INCR8:
图3-11显示了使用八拍递增突发的写传输。
该突发使用半字传输,因此地址增加了2。因为突发是递增的,地址继续递增超过16字节的地址边界。
长度不确定的突发,INCR:
图3-12显示了长度不确定的递增突发。
图3-12显示了两个突发:
- 第一个突发是由两个半字传输组成的写操作,从地址0x20开始。这些传输地址增加2。
- 第二次突发是一次读取,包括从地址0x5C开始的三次字传输。这些传输地址递增4。
等待传输
如果从机需要更多时间来提供或采样数据,则使用HREADYOUT
插入等待状态。在等待传输期间,主机只能对传输类型和地址进行更改。
等待状态期间传输类型改变
当从机请求等待状态时,主机不得更改传输类型,除非按照如下所述
空闲传输:
在等待传输期间,允许主机将传输类型从IDLE更改为NONSEQ。 当HTRANS
传输类型变为NONSEQ时,主机必须保持HTRANS
不变,直到HREADY
为高电平。
图3-13显示了单个突发的等待传输,传输类型从IDLE更改为NONSEQ。
在图3-13中:
T0-T1——主机向地址A发起单次突发。
T1-T2——主机向地址Y插入一个空闲传输。从机插入一个等待状态,HREADYOUT
=LOW。
T2-T3——主机向地址z插入一个空闲传输。
T3-T4——主机将传输类型更改为NONSEQ,并向地址B发起一个INCR4传输。
T4-T6——如果HREADY
为低,主机必须保持HTRANS
不变。
T5-T6——到地址A的单次突发在HREADY
为高电平时完成,主机开始到地址B的第一拍。
T6-T7——到地址B的INCR4传输的第一拍完成,主机开始到地址B+4的下一拍。
BUSY传输,固定长度突发:
在固定长度突发的等待传输期间,允许主机将传输类型从BUSY更改为SEQ。
当HTRANS
传输类型更改为SEQ时,主机必须保持HTRANS
不变,直到HREADY为高。
因为BUSY传输只能在突发的连续节拍之间插入,所以这不适用于SINGLE突发。因此,这种情况适用于以下突发类型:
- INCR4、INCR8和INCR16。
- WRAP4、WRAP8和WRAP16。
图3-14显示了在固定长度突发中等待的传输,传输类型从BUSY变为SEQ。
在图3-14中:
T0-T1——主机向地址0x24发起INCR4突发的下一拍。
T1-T3——主机向地址0x28插入一个BUSY传输。从机插入等待状态,HREADYOUT
=LOW。
T3-T4——主机将传输类型更改为SEQ,并将突发的下一拍初始化为地址0x28。
T4-T6——当HREADY
为低电平时,主机必须保持HTRANS
恒定。
T5-T6——节拍到地址0x24完成,HREADY
为高。
T6-T7——向地址0x28传输的第三拍完成,主机开始向地址0x2C传输最后一拍。
BUSY传输,未定义长度的突发:
在等待未定义长度突发的传输期间,INCR,当HREADY为低电平时,主机被允许从BUSY转换到任何其他传输类型。 如果执行了SEQ传输,则突发继续,但是如果执行了IDLE或NONSEQ传输,则突发终止。
图3-15显示了在未定义长度的突发期间等待的传输,传输类型从BUSY变为NONSEQ。
在图3-15中:
T0-T1——主机将INCR突发的下一拍发送到地址0x64。
T1-T3——主机向地址0x68插入一个BUSY传输。从机插入等待状态,HREADYOUT
=LOW。
T3-T4——主机将传输类型更改为NONSEQ,并向地址0x10发起新的突发。
T4-T6——当HREADY
为低电平时,主机必须保持HTRANS
恒定。
T5-T6——未定义长度突发在HREADY为高电平时完成,主机开始第一拍至地址0x10。
T6-T7——向地址0x10传输的第一拍完成,主机开始向地址0x14传输下一拍。
等待状态期间的地址改变
当从机请求等待状态时,主机只能更改一次地址,如下所述:
在IDLE传输期间:
在等待传输期间,允许主机更改IDLE传输的地址。 当HTRANS传输类型更改为NONSEQ时,主机必须保持地址不变,直到HREADY为高。
图3-16显示了单个突发的等待传输,地址在IDLE传输期间发生变化。