AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,他可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
单个master的AHB结构
针对单个master的AHB,在设计时可以省去arbiter。
•single
•incrementing bursts(不在在地址边界回环)
•wrapping bursts(在特定的地址边界进行回环)
每次传输包括:
address phase(地址阶段):地址和控制周期。
data phase(数据阶段):数据的一个或多个周期。
信号 | 来源 | 描述 |
---|---|---|
HCLK | Clock source | 时钟信号,所有的信号时序都与HCLK的上升沿有关。 |
HRESETn | Reset controller | 总线复位信号,拉低时有效。 |
信号 | 目标 | 描述 |
---|---|---|
HADDR[31:0] | Slave and decoder | 32位系统地址总线 |
HBURST[2:0] | Slave | 表示该传输是单个传输还是burst的一部分。 |
HMASTLOCK | Slave | 拉高时,该信号表明当前传输是locked sequence的一部分。它具有与地址和控制信号相同的时序。 |
HPROT[3:0] | Slave | 此信号提供了关于总线访问的附加信息,主要用于任何想要实现某种级别保护的模块。这些信号指示传输是操作码获取还是数据访问,以及传输是特权模式访问还是用户模式访问。对于具有内存管理单元的主机,这些信号还指示当前访问是可缓存的还是可缓冲的。 |
HSIZE[2:0] | Slave | 指示传输的大小,通常为一个byte、半个word或一个word。该协议允许更大的传输大小,最高可达1024位。 |
HTRANS[1:0] | Slave | 当前传输的传输类型。IDLE、BUSY、NONSEQUENTIAL和SEQUENTIAL。 |
HWDATA[31:0] | Slave | 写数据总线在写操作期间从master向slave传输数据。建议数据总线宽度不小于32位。 |
HWRITE | Slave | 传输方向。拉高时表示写传输;拉低时表示读传输。它与地址信号具有相同的时序,然而,它必须在整个burst传输中保持恒定。 |
信号 | 目标 | 描述 |
---|---|---|
HRDATA[31:0] | Multiplexor | 在读操作期间,读数据总线将数据从所选的slave传输到Multiplexor。然后Multiplexor将数据传输到master。建议数据总线宽度不小于32位 |
HREADYOUT | Multiplexor | 拉高时表面总线上的传输完成,为低则延迟传输时间。 |
HRESP | Multiplexor | 传输响应,在经过Multiplexor后,向master提供关于传输状态的附加信息。当HRESP信号拉低时表示传输状态为ok。当HRESP信号拉高时,表示传输状态为ERROR。 |
信号 | 目标 | 描述 |
---|---|---|
HSELx | Slave | 每个AHB-Lite slave都有自己的slave选择信号HSELx,这个信号表明当前的传输是为所选的slave准备的。当slave最初被选中时,它还必须监视HREADY的状态,以确保之前的总线传输已经完成,然后才响应当前的传输。 |
信号 | 目标 | 描述 |
---|---|---|
HRDATA[31:0] | Master | 读取数据总线,由decoder选择 |
HREADY | Master and slave | 当HREADY信号拉高时,向master和所有slave表示之前的传输已经完成。 |
HRESP | Master | 传输响应,由decoder选择。 |
AHB-Lite传输包括两个阶段:
Address phase:只适用于一个周期,除非之前的总线传输延长。
Data phase:可能需要几个周期。使用HREADY信号来控制完成传输所需的时钟周期数。
HWRITE控制数据传输的方向。因此,当:
•HWRITE拉高时,执行写传输,Master在写数据总线上广播数据HWDATA[31:0]。
•HWRITE拉低时,执行读传输,Slave在读数据总线HRDATA[31:0]上生成数据。
Master在HCLK上升沿后将地址和控制信号驱动到总线上。
然后Slave在HCLK的下一个上升沿上采样地址和控制信息。
在slave对地址和控制进行采样后,它可以开始驱动适当的HREADY响应。该响应由Master在HCLK的第三个上升沿上采样。
上面这个简单的示例演示了传输的address phase和 data phase是如何在不同的时钟周期中发生的。任何传输的address phase发生在前一个传输的data phase。这种地址和数据的重叠是总线流水线性质的基础,能够实现高性能操作,同时仍然为Slave提供足够的时间来对传输提供响应。
Slave可以在任何传输中插入等待状态,以增加完成的时间。
下面是有等待状态的读写传输。
对于读传输,在传输即将完成之前,Slave不必提供有效的数据。
当以这种方式扩展一个传输时,它具有扩展下一个传输的address phase的副作用。
下图所示为3个不相关地址A、B和C的传输,地址C有一个扩展的address phase。
传输可分为四种类型,由HTRANS[1:0]控制。
HTRANS[1:0] | 类型 | 描述 |
---|---|---|
b00 | IDLE | 表示不需要数据传输。当master不想执行数据传输时,它使用IDLE传输。建议主服务器用IDLE传输终止Locked transfers。slave必须始终为IDLE传输提供一个零等待状态的OKAY响应,并且该传输必须被slave忽略。 |
b01 | BUSY | BUSY传输类型允许master在burst中间插入空闲周期。这种传输类型表明master正在以burst继续,但下一个传输不能立即发生。当主机使用BUSY传输类型时,地址和控制信号必须反映burst中的下一个传输。只有未定义长度的burst才能将BUSY传输作为burst的最后一个周期。slave必须始终为BUSY传输提供一个零等待状态的OKAY响应,并且传输必须被slave忽略。 |
b10 | NONSEQ | 表示单次传输或burst的第一次传输。地址和控制信号与之前的传输无关。总线上的单个传输被视为长度为1的burst,因此传输类型是非连续的。 |
b11 | SEQ | 在一个burst中剩余的传输,地址与前一次传输有关。控制信息与前一次传输相同。该地址等于前一个传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]信号发出。 |
T1-T2: Master无法执行第二拍,并插入一个BUSY传输来延迟第二拍的开始。Slave为第一拍提供读数据。
T2-T3: Master现在准备开始第二拍,所以一个SEQ传输被发出信号。Master忽略Slave在读数据总线上提供的任何数据。
T3-T4: Master执行第三拍。Slave为第二拍提供读数据。
T4-T5: Master执行最后一拍。slave无法完成传输,使用HREADY插入一个等待状态。
T5-T6: Slave为第三拍提供读数据。
T6-T7: Slave提供最后一拍的读数据。
HSIZE[2:0]表示数据传输的大小。
HSIZE[2:0] | 大小(bits) | 描述 |
---|---|---|
000 | 8 | Byte |
001 | 16 | Halfword |
010 | 32 | Word |
011 | 64 | Doubleword |
100 | 128 | 4-word line |
101 | 256 | 8-word line |
110 | 512 | - |
111 | 1024 | - |
AHB支持4、8和16拍的burst、未定义长度的burst以及单次传输。Burst传输包括 incrementing bursts和 wrapping bursts:
HBURST[2:0]控制burst类型。
HBURST[2:0] | 大小(bits) | 描述 |
---|---|---|
b000 | SINGLE | Single burst |
b001 | INCR | Incrementing burst of undefined length |
b010 | WRAP4 | 4-beat wrapping burst |
b011 | INCR4 | 4-beat incrementing burst |
b100 | WRAP8 | 8-beat wrapping burst |
b101 | INCR8 | 8-beat incrementing burst |
b110 | WRAP16 | 16-beat wrapping burst |
b111 | INCR16 | 16-beat incrementing burst |
因为这个burst是一个四拍的word传输,所以地址在16byte边界进行wrap,在对地址0x3C的传输之后是对地址0x30的传输。
在这个例中,地址没有在16字节边界进行wrap,地址0x3C之后是对地址0x40的传输。
因为这个burst是一个八拍的wrod传输,所以地址在32字节边界进行wrap,对地址0x3C的传输后是对地址0x20的传输。
这个burst使用halfword传输,因此地址增加了2。因为burst类型是incrementing,地址保持递增。
第一个burst是由从地址0x20开始的两个halfword传输组成的写操作,这些传输地址加2。
第二个burst是由从地址0x5C开始的三个word传输组成的读操作,这些传输地址加4。
如果slave需要更多的时间来提供数据或采样数据,则使用HREADY来插入等待状态。
当slave处于请求等待状态时,master不能改变传输类型,除非以下情况:
• IDLE transfer
在等待传输期间,允许master器将传输类型从IDLE更改为NONSEQ。当HTRANS传输类型变为NONSEQ时,master必须保持HTRANS不变,直到HREADY为HIGH。
下图为SINGLE burst的等待传输,传输类型从IDLE转换为NONSEQ。
T0-T1:master机向地址a发起SINGLE burst。
T1-T2:master向地址Y插入一个IDLE传输。slave插入HREADY = LOW的等待状态。
T2-T3:master插入一个IDLE传输到地址Z。
T3-T4 :master改变传输类型为NONSEQ,并发起INCR4传输到地址B
T4-T6:HREADY LOW时,master必须保持HTRANS不变。
T5-T6:到地址A的SINGLE burst以HREADY HIGH结束,master开始到地址B的第一排。
T6-T7: INCR4传送到地址B的第一拍完成,master开始下一拍去处理地址B+4。
• BUSY transfer, fixed length burst
在一个固定长度的burst等待传输期间,允许master将传输类型从BUSY更改为SEQ。当HTRANS传输类型更改为SEQ时,master必须保持HTRANS不变,直到HREADY为HIGH。
因为忙碌传输必须只插入一个burst的连续几拍之间,这并不适用于SINGLE burst。因此,这种情况适用于以下几种突发类型:
INCR4, INCR8和INCR16
WRAP4、WRAP8、WRAP16。
下图为固定长度burst的等待传输,传输类型从BUSY转换为SEQ。
T0-T1:master发起INCR4的下一个节拍到地址0x24。
T1-T3:master插入一个BUSY传输到地址0x28。 slave插入HREADY = LOW的等待状态。
T3-T4:master将传输类型改为SEQ,并启动下一个节拍到达地址0x28的突发burst。
T4-T6: HREADY LOW时,master必须保持HTRANS不变。
T5-T6:到地址0x24的这一拍以HREADY HIGH完成。
T6-T7: INCR4向地址0x28传输的第三拍完成,master开始向地址0x2C传输的最后一拍。
• BUSY transfer, undefined length burst
在一个未定义长度的burst(INCR)有等待状态的传输期间,当HREADY为LOW时,允许master从BUSY切换到任何其他传输类型。如果SEQ传输被执行,burst将继续,但是如果IDLE或NONSEQ传输被执行,burst将终止。
下图显示了一个未定义长度的burst的等待传输,传输类型从BUSY转换为NONSEQ。
T0-T1:master发起INCR burst的下一拍到地址0x64。
T1-T3:master插入一个BUSY传输到地址0x68。slave插入HREADY = LOW的等待状态。
T3-T4:master改变传输类型为NONSEQ,并发起一个地址为0x10的新burst。
T4-T6:HREADY拉低时,master必须保持HTRANS不变。
T5-T6:未定义长度的burst以HREADY HIGH结束,master开始第一拍到地址0x10。
T6-T7: INCR4向地址0x10传输的第一拍完成,master开始向地址0x14传输下一拍。
当slave处于请求等待状态时,master只能修改一次地址,除了以下两种情况:
在等待传输期间,允许master为IDLE传输更改地址。当HTRANS传输类型改变为NONSEQ时,master必须保持地址不变,直到HREADY为HIGH。
下图所示为SINGLE burst等待传输,在IDLE传输过程中地址发生了变化。
T0-T1:master向地址A发起SINGLE burst。
T1-T2:master向地址Y插入一个IDLE传输,slave插入一个HREADY = LOW的等待状态。
T2-T3:master插入一个IDLE传输到地址Z。
T3-T4:master将传输类型改为NONSEQ,并向地址b发起INCR4传输,直到HREADY状态为HIGH,不再允许地址变更。
T5-T6:到地址A的SINGLE burst以HREADY HIGH结束,master开始到地址B的第一拍。
T6-T7: INCR4向地址B传输的第一拍完成,master开始向地址B+4的传输的下一拍。
在一个等待的传输过程中,如果slave回应一个ERROR响应,那么当HREADY为LOW时,master会被允许改变地址。
下图显示了一个等待的传输,在slave的ERROR响应后的地址改变。
T0-T1:master发起burst的下一拍到地址0x24。
T1-T3:master发起burst的下一拍到地址0x28。slave响应OKAY信号。
T3-T4: slave响应ERROR信号。
T4-T5:当HREADY为LOW时,master将传输类型改为IDLE,并且被允许修改地址。slave完成ERROR响应。
T5-T6:地址为0xC0的slave响应OKAY信号。
保护控制信号HPROT[3:0]提供了关于总线访问的额外信息,主要用于对任何模块实现某种级别的保护。
信号主要指示本次transfer是:
中心地址解码器为总线上的每个slave提供一个片选信号HSELx。
当HREADY拉高时,slave必须只采样HSELx、地址和控制信号,表明当前传输正在完成。
解码器产生的HSELx slave片选信号如下图所示。
AHB-Lite协议与中央读数据复用互连方案一起使用。master将地址和控制信号发送给所有slave,解码器decoder选择合适的slave。任何来自所选slave的响应数据,经过读数据多路复用器multiplexor传到master。