目录
简介
AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,他可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
AHB的组成
- Master:能够发起读写操作,提供地址和控制信号,同一时间只有一个Master会被激活。
- Slave:在给定的地址范围内对读写操作作响应,并对Master返回成功、失败或者等待等状态。
- Arbiter:负责保证总线上一次只有一个Master在工作。仲裁协议是规定的,但是仲裁算法可以根据应用决定。
- Decoder:负责对地址进行解码,并提供片选信号到各Slave。
单个master的AHB结构
针对单个master的AHB,在设计时可以省去arbiter。
AHB的操作
- master通过驱动地址和控制信号开始传输。这些信号提供有关传输地址、方向、宽度的信息,并指示该传输是否构成burst的一部分。传输包括:
•single
•incrementing bursts(不在在地址边界回环)
•wrapping bursts(在特定的地址边界进行回环)
- 写数据总线将数据从master移动到slave,读数据总线将数据从slave移动到master。
每次传输包括:
address phase(地址阶段):地址和控制周期。
data phase(数据阶段):数据的一个或多个周期。
- slave不能请求扩展地址阶段,因此所有slave必须能够在此期间对地址进行采样。然而,slave可以请求master使用HREADY扩展data phase。当这个信号拉低时,会在传输中插入一个等待状态,并使slave有额外的时间来提供或采样数据。
- slave使用HRESP来指示一个传输的成功或失败。
Signal Descriptions
1.Global signals
信号 | 来源 | 描述 |
---|---|---|
HCLK | Clock source | 时钟信号,所有的信号时序都与HCLK的上升沿有关。 |
HRESETn | Reset controller | 总线复位信号,拉低时有效。 |
2.Master signals
信号 | 目标 | 描述 |
---|---|---|
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传输中保持恒定。 |
3.Slave signals
信号 | 目标 | 描述 |
---|---|---|
HRDATA[31:0] | Multiplexor | 在读操作期间,读数据总线将数据从所选的slave传输到Multiplexor。然后Multiplexor将数据传输到master。建议数据总线宽度不小于32位 |
HREADYOUT | Multiplexor | 拉高时表面总线上的传输完成,为低则延迟传输时间。 |
HRESP | Multiplexor | 传输响应,在经过Multiplexor后,向master提供关于传输状态的附加信息。当HRESP信号拉低时表示传输状态为ok。当HRESP信号拉高时,表示传输状态为ERROR。 |
4.Decoder signals
信号 | 目标 | 描述 |
---|---|---|
HSELx | Slave | 每个AHB-Lite slave都有自己的slave选择信号HSELx,这个信号表明当前的传输是为所选的slave准备的。当slave最初被选中时,它还必须监视HREADY的状态,以确保之前的总线传输已经完成,然后才响应当前的传输。 |
5.Multiplexor signals
信号 | 目标 | 描述 |
---|---|---|
HRDATA[31:0] | Master | 读取数据总线,由decoder选择 |
HREADY | Master and slave | 当HREADY信号拉高时,向master和所有slave表示之前的传输已经完成。 |
HRESP | Master | 传输响应,由decoder选择。 |
Transfers
1.Basic transfers
AHB-Lite传输包括两个阶段:
Address phase:只适用于一个周期,除非之前的总线传输延长。
Data phase:可能需要几个周期。使用HREADY信号来控制完成传输所需的时钟周期数。
HWRITE控制数据传输的方向。因此,当:
•HWRITE拉高时,执行写传输,Master在写数据总线上广播数据HWDATA[31:0]。
•HWRITE拉低时,执行读传输,Slave在读数据总线HRDATA[31:0]上生成数据。
Read transfer
Write transfer
在一个没有等待状态的transfer中:
-
Master在HCLK上升沿后将地址和控制信号驱动到总线上。
-
然后Slave在HCLK的下一个上升沿上采样地址和控制信息。
-
在slave对地址和控制进行采样后,它可以开始驱动适当的HREADY响应。该响应由Master在HCLK的第三个上升沿上采样。
上面这个简单的示例演示了传输的address phase和 data phase是如何在不同的时钟周期中发生的。任何传输的address phase发生在前一个传输的data phase。这种地址和数据的重叠是总线流水线性质的基础,能够实现高性能操作,同时仍然为Slave提供足够的时间来对传输提供响应。
Slave可以在任何传输中插入等待状态,以增加完成的时间。
下面是有等待状态的读写传输。
Read transfer with wait states
Write transfer with wait state
对于写操作,Master在整个扩展周期内稳定地保存数据。
对于读传输,在传输即将完成之前,Slave不必提供有效的数据。
当以这种方式扩展一个传输时,它具有扩展下一个传输的address phase的副作用。
下图所示为3个不相关地址A、B和C的传输,地址C有一个扩展的address phase。
Multiple transfers
- 对地址A和C的传输是零等待状态的写操作。
- 到地址B的传输是有等待状态的读操作。
- 对地址B进行读操作时插入了等待,也影响了发送地址C的地址周期。
2.Transfer types
传输可分为四种类型,由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]信号发出。 |
T0-T1: 4拍的读操作从NONSEQ传输开始。
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提供最后一拍的读数据。
3.Locked transfers
- 如果master需要锁定访问,可以拉高HMASTLOCK信号。这个信号向任何slave表明当前的传输序列是不可分割的,因此必须在处理任何其他事务之前进行处理。
- 通常,Locked transfers用于维护信号量的完整性,通过确保slave在微处理器SWP指令的读和写阶段之间不执行其他操作。
- 在Locked transfers之后,建议master插入一个IDLE传输。
- 大多数slave没有实现HMASTLOCK的要求,因为它们只能按照接收到的顺序执行传输。可以被多个master访问的slave则必须实现HMASTLOCK信号。
4.Transfers size
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 | - |
- HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如,对于32位数据总线,HSIZE只能使用b000、b001或b010。
- 将HSIZE与HBURST结合使用,以确定wrapping burst的地址边界。
- HSIZE信号与地址总线具有完全相同的时序。然而,它们必须在整个burst传输过程中保持恒定。
5.Burst operation
AHB支持4、8和16拍的burst、未定义长度的burst以及单次传输。Burst传输包括 incrementing bursts和 wrapping bursts:
- Incrementing bursts顺序访问,并且在burst中每个传输的地址是前一个地址的增量。
- Wrapping bursts在跨越地址边界时进行wrap操作,地址边界为burst中节拍数与传输大小的乘积。节拍数由HBURST控制,传输大小由HSIZE控制。例如,对于一个四拍的word(4字节),如果传输的起始地址是0x34,那么它包含四个到地址0x34、0x38、0x3C和0x30的传输。
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,master可能会插入BUSY传输,然后决定不再需要数据传输。在这些情况下,master可以执行NONSEQ或IDLE传输以终止未定义长度的burst。
- 在burst开始后,如果需要更多的时间才能继续进行burst中的下一个传输,master就会使用BUSY传输。
- 对于incrementing INCR4, INCR8, INCR16 以及wrapping WRAP4, WRAP8, WRAP16,必须以SEQ传输结束。
- Master不允许在SINGLE bursts后立即执行BUSY传输。SINGLE bursts必须紧随一个IDLE传输或一个NONSEQ传输。
Four-beat wrapping burst, WRAP4
因为这个burst是一个四拍的word传输,所以地址在16byte边界进行wrap,在对地址0x3C的传输之后是对地址0x30的传输。
Four-beat incrementing burst, INCR4
在这个例中,地址没有在16字节边界进行wrap,地址0x3C之后是对地址0x40的传输。
Eight-beat wrapping burst, WRAP8
因为这个burst是一个八拍的wrod传输,所以地址在32字节边界进行wrap,对地址0x3C的传输后是对地址0x20的传输。
Eight-beat incrementing burst, INCR8
这个burst使用halfword传输,因此地址增加了2。因为burst类型是incrementing,地址保持递增。
Undefined length bursts, INCR
第一个burst是由从地址0x20开始的两个halfword传输组成的写操作,这些传输地址加2。
第二个burst是由从地址0x5C开始的三个word传输组成的读操作,这些传输地址加4。
6.Waited transfers
如果slave需要更多的时间来提供数据或采样数据,则使用HREADY来插入等待状态。
Transfer type changes during wait states
当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传输下一拍。
Address changes during wait states
当slave处于请求等待状态时,master只能修改一次地址,除了以下两种情况:
During an IDLE transfer
在等待传输期间,允许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的传输的下一拍。
After an ERROR response
在一个等待的传输过程中,如果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信号。
7.Protection control
保护控制信号HPROT[3:0]提供了关于总线访问的额外信息,主要用于对任何模块实现某种级别的保护。
信号主要指示本次transfer是:
- 操作码获取还是数据访问
- 特权模式访问还是用户模式访问。
- 对于具有内存管理单元的master,这些信号还表明当前访问是可缓存的还是可缓冲的。
总线互连
1.地址译码
中心地址解码器为总线上的每个slave提供一个片选信号HSELx。
当HREADY拉高时,slave必须只采样HSELx、地址和控制信号,表明当前传输正在完成。
解码器产生的HSELx slave片选信号如下图所示。
2.总线互连
AHB-Lite协议与中央读数据复用互连方案一起使用。master将地址和控制信号发送给所有slave,解码器decoder选择合适的slave。任何来自所选slave的响应数据,经过读数据多路复用器multiplexor传到master。
下图显示了实现具有三个slave的AHB-Lite设计所需的多路互连结构。