AMBA高级处理器总线架构,不同的速率要求构成了高性能SOC设计的通信标准:
- AHB高级高性能总线
- APB高级外围总线
- AXI高级可拓展接口
什么是AHB总线协议
AHB:主要是针对高速率、高频宽及快速系统模块所设计的总线,可以连接在如微处理器、芯片上或芯片外的内存模块和DMA等高效率总线。AHB可以成为一个完整独立的SOC芯片的骨架,不仅如此还可以通过AHB-APB桥来连接APB总线系统。
特点:
- 高速总线,高性能
- 2级流水线操作
- 可支持多个总线主设备(最多16个)
- 支持burst传输
- 总线带宽:8、16、32、64、128bits
- 上升沿触发操作
- 对于一个新设计建议使用AHB
AHB总线组成
- MasterAHB主设备: 发起一次读/写操作;某一时刻只允许一个主设备使用总线
- SlaveAHB从设备: 响应一次读/写操作;通过地址映射来选择使用哪一个从设备
- ArbiterAHB仲裁器: 允许某一个主设备控制总线
- DecoderAHB译码器: 通过地址译码来决定选择哪一个从设备
AHB信号描述
信号 | 来源 | 描述 |
---|---|---|
HCLK | 总线时钟 | 总线时钟,上升沿采样 |
HRESENTn | 系统总线 | 复位信号,低有效 |
HADDR[31:0] | Master | 32位地址总线 |
HTRANS[1:0] | Master | 当前传输类型IDLE,BUSY,NONSEQ,SEQ |
HWRITE | Master | 1为写,0为读 |
HSIZE[2:0] | Master | 每一个transfer传输的数据大小,以字节为单位,最高支持1024位 |
HBURST[2:0] | Master | burst类型,支持4、8、16burst,incrementing/wrapping |
HPROT[3:0] | Master | 保护控制信号,需要slave带保护功能,一般不用 |
HWDATA[31:0] | Master | 写数据总线,Master到slave |
HRDATA[31:0] | Slave | 读数据总线,Slave到Master |
HSELx | Decoder | slave选择信号 |
HREADY | Slave | 控制HRDATA的读出数据周期,高:Slaves输出传输结束;低:Slave需延长传输周期 |
HRESP[1:0] | Slave | Slave发给Master的总线传输状态OKAY,ERROR,RETRY,SPLIT |
HRESP[1:0]:
- OKAY:单周期响应
- ERROR:两周期响应
- RETRY:两周期响应
- SPLIT:两周期响应
总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。
AHB传输
基本AHB传输:
- 两个阶段:地址周期,HREADY;数据周期,由HREADY信号决定需要几个cycle
- 流水线传送:先是地址周期,然后是数据周期
流水线操作: 当总线上有多个为处理完的请求,也就是当A请求被master执行后,slave做响应期间,紧接着master又收到新的请求B,这是master就要执行流水线一样的操作。
Bust传输
什么是Burst传输?
Burst(突发):是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所设计到存储单元的数量就是突发长度(Burst Lengths,简称BL)。就是地址执法一次,首个地址发出就决定了后面的地址是什么,而不是发送一个地址,再传送一个数据的方式。
为什么要使用Burst传输?
Burst传输就是提高了传输效率。如果不用burst,普通访问模式下,主设备发出的传输命令到达从设备,由于仲裁等原因,传输会产生一定的延时。如果主设备读一个数据,处理一个数据的话,由于延时的存在,处理速度会极低。在进行突发传输时,只需要发送一次地址,内存就会依次地自动对后面相应数量的存储单元进行读/写操作。而不再需要控制器连续地提供访问地址。所以,第一次数据的传输需要若干个周期,而其后每个数据只需一个周期的即可获得。
两种Burst模式:
- 增量突发(INCR): 地址递增,在地址边界处不回环
- 回环突发(WRAP): 地址递增,但会在特定的地址边界上回环;一般在需要填充cache line的时候使用。
HBURST[2:0] | Burst类型 | 描述 |
---|---|---|
000 | single transfer | 单个传输,HTRANS是NONSEQ或IDLE |
001 | INCR | 地址从开始地址开始递增,突发长度不固定 |
010 | WRAP4 | 突发4位,地址递增回环 |
011 | INCR4 | 突发4位,地址递增 |
100 | WRAP8 | 突发8位,地址递增回环 |
101 | INCR8 | 突发8位,地址递增 |
110 | WRAP16 | 突发16位,地址递增回环 |
111 | INCR16 | 突发16位,地址递增 |
注意:
- INCR类型和WRAP类型的Burst时,发送的地址不能跨过1KB的地址空间
- WRAP类型的Burst主要用于CPU中有cache line需要填充
地址的递增与HSIZE有关,当HSIZE指定单个传输数据位宽为半字(16bit)时,地址按每次加2递增。当HSIZE指定单个传输数据位宽为1个word(32位)时,地址是按每次加4递增。
HSIZE[2:0]
HSIZE[2:0] | 描述 |
---|---|
000 | 8bits |
001 | 16bits |
010 | 32bits |
011 | 64bits |
100 | 128bits |
101 | 256bits |
110 | 512bits |
111 | 1024bits |
增量Burst传输
有INCR、INCR4、INCR8和INCR16四种类型
INCR类型如下:
回环Burst传输
在0x3C地址之后,根据回环的地址边界,第四拍的地址变为0X30。4个地址(0x30、0x34、0x38、0x3c),每个地址各不相同,这四个地址是一个回环范围。起始地址决定了回环操作的回环范围。
参考:
哔哩哔哩大学
https://blog.csdn.net/SummerXRT/article/details/118077270