AMBAAHB 总线协议详细说明(AHB5协议)
⼀、总线介绍
AHB总线⽤于性能要求较⾼的系统互连,⽐如内部memory、⾼带宽的外设、GMAC、eMMC/SD等,其仍然为分时独占式总线,也就是说⼀个时间点总线只会完成⼀个传输事件。下图是⼀个典型的AHB总线互连例⼦,图中Manager为总线的Master设备,Subordinate为总线的Slave设备。AHB总线互连逻辑包括⼀个地址译码器和⼀个多路选择器。地址译码器⽤于将Master发送的地址转换成合适的sel选择信号;多路选择器将各个Slave的输出数据合理的选择给Master。图中只画出了⼀个Master设备,实际上AHB总线⽀持多个Master对多个Slave结构。
⽬前最新AHB总线版本为AHB5和AHB-Lite,对于只有⼀个Master的总线,结构可以简化很多,因此可单独使⽤AHB-Lite协议。
总线信号
按照上述概念可将AHB总线信号分类,如下表所⽰:信号
⽅向
位宽
信号说明全局信号
HCLK 时钟→总线1时钟,上升沿数据有效。
HRESETn
复位→总线
1
复位,低有效,该信号可直接和系统总线复位连接。
Master端信号
HADDR Master→总线max=64AHB总线地址,最⼤64bits。
HBURST Master→总线max=3⽤于规定Burst传输次数和地址递增⽅式。HMASTLOCK Master→总线1锁定Master传输,锁定期间传输⽆法被打断。HPROT Master→总线0/4/7保护控制信号,⽤于指⽰本次传输类型。HSIZE Master→总线3⽤于指⽰每次传输的数据⼤⼩。HNONSEC Master→总线1指⽰当前传输是否安全。
HEXCL Master→总线1⽤于指⽰该传输是否为独占传输(Exclusive Access)。HMASTER
Master→总线
max=8
⽤于指⽰当前是哪个Master发起了传输,每个Master有⼀个唯⼀的HMASTER ID。
HTRANS
Master→总线
2
⽤于指⽰传输类型,有四种类型:IDLE、BUSY、
NONSEQUENTIAL、SEQUENTIAL,分别是空闲、忙、⾮连续传输、连续传输。
HWDATA
Master→总线
max=1024
写数据,最⼤位宽⽀持1024bits,建议在32bits - 256bits之间。HWSTRB
Master→总线
max=128
写数据字节使能,位宽为HWDATA的位宽除以8。
HWRITE Master→总线1读写指⽰信号,“1”为写,“0”为读。
Slave端信号
HRDATA Slave→总线max=1024读数据,最⼤位宽⽀持1024bits,建议在32bits - 256bits之
间。
HREADYOUT Slave→总线1Slave端设备准备就绪信号,⽤法和APB的PREADY类似。HRESP Slave→总线1Slave端设备的应答信号,表明当前传输是否成功,“1”错误。HEXOKAY Slave→总线1表⽰独占传输(Exclusive Transfer)是否成功。
译码器信号
HSELx总线→Slave1Slave设备选择信号,⽤法和APB的PSEL类似。当Slave被选中且
为⾮IDLE传输时,HSELx必须和地址、控制信号同⼀拍有效。
cacheable多路选择器信号
HREADY总线→Slave
总线→Master 1该信号由总线内部产⽣,⽤于通知Master和Slave上次传输已经结束,总线已经准备就绪开始下⼀次传输。
HTRANS[1:0]
HTRANS[1:0]类型说明
00IDLE IDLE表⽰没有数据传输,Master使⽤IDLE来表⽰⾮数据传输,⼀般⽤IDLE传输终⽌⼀次locked传输。Slave 必须⽴即响应Master发送的IDLE传输,并将OKAY应答送到HRESP上,传输内容Slave必须忽略。
01BUSY BUSY传输允许在Burst传输的中间插⼊空闲周期,以表⽰Master会继续burst但下⼀次传输不能⽴即发送。当Master使⽤BUSY传输时,下⼀次传输的地址和控制信号必须准备好。只有未定义长度的Burst可以在Burst结束的时候插⼊BUSY传输标志。Slave必须⽴即响应BUSY传输,并将传输内容忽略。
10NONSEQ NONSEQ⽤于指⽰⼀次Single传输,或⼀次burst传输的开始。地址和控制信号和前⼀次传输不同,会产⽣变化。
11SEQ Burst传输的剩余部分被标记为SEQ,表⽰连续传输,地址和控制信号和前⼀次保持⼀致。
HSIZE[2:0]
HSIZE[2:0]类型说明
000Byte8bits,传输⼀个字节。
001Halfword16bits,传输⼀个半字。
010Word32bits,传输⼀个字。
011DoubleWord64bits,传输两个字。
100  4 Words128bits,传输四个字。
1018 Words256bits,传输⼋个字。
11016 Words512bits,传输⼗六个字。
11132 Words1024bits,传输三⼗⼆个字。
HSIZE⽤于表⽰单次数据传输的⼤⼩,其数值⼩于等于数据宽度,⽐如数据宽度是32bits,那么HSIZE只能是000/001/010三个数值。在Burst传输过程中,该数值必须保持不变。
HBURST[2:0]
HBURST[2:0]类型说明
000SINGLE单次传输
001INCR未定义长度的增量Burst传输
010WRAP44拍回环Burst传输
011INCR44拍增量Burst传输
100WRAP88拍回环Burst传输
101INCR88拍增量Burst传输
110WRAP1616拍回环Burst传输
111INCR1616拍增量Burst传输
由表中可以看出,传输可分成SINGLE、INCR和WRAP类型,每种⼜按照每次Burst节拍数分成不同情况。⼀拍为Burst传输的最⼩传输单位,具体理解在后续介绍。INCR burst的每次传输的地址是连续的,且每次传输的地址数值相较于上⼀次是递增的。WRAP burst在地址增加到地址边界时,地址会返回到最开始地址。地址边界根据拍数和传输⼤⼩计算,HBURST和HSIZE确定总传输数据量⼤⼩。例如,⼀个WRAP4传输4bytes数据,如果开始地址为0x34,那么4拍的数据地址为0x34、0x38、0x3C和0x30。
单次传输可以使⽤SINGLE标识,或使⽤未定义⼤⼩的INCR标识,⼀般使⽤SINGLE标识。
HPROT[3:0](AHB5以下版本,⽤于数据保护)
HPORT[3:0]说明
[0]0: Opcode fetch 1: Data access
[1]0: User access
1: Privileged access
[2]0: Non-bufferable 1: Bufferable
[3]0: Non-cacheable 1: Cacheable
HPROT[6:0]( AHB5扩展内容,⽤于Memory,bit3不同于AHB5以下版本) HPORT[6:0]名称说明
[0]Data/Inst 0: Opcode fetch 1: Data access
[1]Privileged 0: unprivileged access 1: Privileged access
[2]Bufferable 如果[4:3]均⽆效的话,那么该bit位⽣效
0: Non-bufferable,写响应必须由最终的⽬的地址提供,⽽不是中间的buffer。1: Bufferable,写响应可由中间经过的节点提供,但需要及时传递写传输到⽬的端。
[3]Modifiable 0: 传输的数据不可纠正修改;1: 传输的数据等可纠正修改;
[4]Lookup 0: 传输不需要查cache,且必须传递到⽬的端;1: 传输必须查cache;
[5]Allocate0: 传输不会分配到cache;
1: 传输分配到cache;
[6]Shareable 0: 传输不可共享,访问的memory区域不能被其他Master访问,访问的应答不会确保被其他Master可见。Device类型的memory,该bit为0;
1: 传输可共享,访问的memory区域可以被其他Master访问。
对于Memory类型,可通过HPROT[6:2]判断memory类型,具体如下表所⽰:
HPROT[6]HPROT[5]HPROT[4]HPROT[3]HPROT[2]Memory类型
00000Device-nE
00001Device-E
00010Normal Non-cacheable,non-shareable
00/1110Write-through, Non-shareable
00/1111Write-back, Non-shareable
10010Normal Non-cacheable, Sahreable
10/1110Write-through, Shareable
10/1111Write-back, Shareable
⽤户信号
信号⽅向说明
HAUSER Master→总线⽤户⾃定义,推荐宽度0-128bits
HWUSER Master→总线⽤户⾃定义,推荐宽度0-DATA_WIDTH/2
HRUSER Slave→总线⽤户⾃定义,推荐宽度0-DATA_WIDTH/2
HBUSER Slave→总线⽤户⾃定义,推荐宽度0-16bits
该组信号为⽤户⾃定义信号,具体传输内容和含义需要⽤户⾃⼰决定,⼀般不建议使⽤该组信号。AHB协议不定义这些信号的功能,因此,在多个拥有⽤户⾃定义信号的系统中,可能会带来信号不兼容的问题。
总线传输
AHB传输分成两个阶段:地址阶段和数据阶段。地址阶段HWRITE、HADDR等控制信号同⼀拍有效,随后HREADY拉⾼表⽰当前地址已⽣效。数据阶段HWDATA、HRDATA等和数据相关的信号有效,表⽰数据读写的开始,数据阶段可能会跨多个HCLK时钟周期,根据传输数据量⼤⼩⽽定。
下图是AHB总线的单次读写传输,包括⽴即读写和等待读写传输,由于和APB总线类似,具体说明可参考APB总线。
注意地址阶段和数据阶段是可以pipeline的,如果有多次连续传输,但地址不同,可以采⽤如下图所⽰的时序完成。在A的数据阶段,可以启动下⼀次传输的B的地址阶段。
3.1 Burst传输
上图是Burst传输举例,各个时钟周期的动作如下:
T1时刻发起4拍读Burst传输,地址等控制信号送⼊总线;
T2时刻Master未能主板好第2拍burst,插⼊BUSY标志delay burst传输;
T3时刻Master发出第2拍burst,SEQ标志跟在BUSY后⾯,Slave忽略T3的数据;
T4时刻Master发出第3拍burst,过程和T3相同;
T5时刻Master发出最后⼀拍burst,过程和T3相同,Slave端HREADY拉低,T4时刻的读数据返回delay;
T6时刻Slave端的HREADY拉⾼有效,HRDATA返回T4时刻请求;
T7时刻Slave端的HREADY拉⾼有效,HRDATA返回T5时刻请求;
下图是WRAP4 Burst传输的⼀个例⼦,注意地址在0x3c后回环到0x30。
下图是INCR4 Burst传输的⼀个例⼦,地址⼀直增加到0x34。
下图是WRAP8 Burst传输的⼀个例⼦,注意在0x3C之后地址回环到0x20。