1.简介
AHB总线规范是amba总线的一部分,全称是Advanced high performance bus。AMBA总线常用的有AXI,AHB,APB。APB 的全称:Advanced Peripheral Bus 作为 AMBA 总线的一层,APB 总线是为了功耗最小化和减低接口复杂度而设计的。APB 总线应该用于低带宽和不需要高性能流水线总线接口的外设。APB 总线上的所有信号都在正时钟沿发生变化,这个特性决定了 APB 可以更容易地整合到各种设计流程里。
以amba总线的SOC架构,以AHB系统为主干,挂上CPU,内存和DMA设备。
AHB系统总线可以给大量数据传输的模块之间提供高带宽的接口。
APB主要是提供给低速外设连接总线的桥梁。
AHB总线结构
2. AHB的特性包括:
2.1 Burst 传输
2.2 Split 传输
2.3 单时钟周期总线Master移交
2.4 单时钟沿操作
2.5 非3态电路(这个是为啥我也不清楚)
2.6 更宽的数据线宽度(64或128位)
AHB被推荐用于所有新设计,不仅因为它提供了更高的带宽解决方案,还因为单时钟边缘协议导致与典型ASIC开发期间使用的设计自动化工具更平滑地集成。
3.AHB总线互联结构
结构 | 功能描述 |
AHB 主 | 提供读写操作,提供地址和控制信号,同一时间只有 1 个主会被激活 |
AHB 从 | 对读写操作在一定的地址范围内作出响应,并对主返回成功,失败或者等待等状态即hresp |
AHB Arbiter | 仲裁器主要负责让总线上同时只有 1 个主在工作。 |
AHB Decoder | 负责对地址进行解码,即AHB给与的地址信息,并提供片选信号到slave。每个 AHB 总线都需要 1 个中decoder |
4.AHB总线信号
Name | Source | Description |
HCLK | 时钟源 | 所有的总线时钟对应时钟的上升沿 |
HRESETn | 复位控制 | 低有效的复位时钟 |
HADDR[31:0] | MASTER | 给予总线地址 |
HWRITE | MASTER | 1:写 0:读 |
HTRANS[1:0] | MASTER | 00:IDLE 01:BUSY 10:NONSEQ 11:SEQ |
HSIEZ | MASTER | 单次传输的数据量Byte, half_word,word。注意:32位的总线只能最大是word(即32bit)。这个单次传输最大可以达到1024bit。 |
HBURST[2:0] | MASTER | 就是看increment还是wrap |
HPROT[3:0] | MASTER | 保护信号 |
HWDATA[31:0] | MASTER | 写入数据 |
HRDATA[31:0] | SLAVE | 读的数据 |
HSEL | Decoder | 片选信号 |
HREADY | SLAVE | Hready为高,表示是否传输完成 |
HRESP | SLVAE | 一个传输的状态:OKAY,ERROR,RETRY,SPLIT |
5.点对点信号
Name | Source | Description |
HBUSREQx | MASTER | 表明是哪个master请求总线。最多16个 |
HLOCKx | MASTER | Master向arbiter发出的总线占用请求信号。Arbiter同意后,必须要保证hlockx为low时,才可以获得ARBITER授权来访问 |
HGRANTx | ARBITER | 只有在HGRANT和HREADY都有效的时候,MASTER才能访问总线 |
HMASTER[3:0] | ARBITER | 这些来自仲裁器的信号表明当前哪个总线主正在执行传输,支持SPLIT传输的从服务器使用这些信号来确定哪个总线主正在尝试访问。HMASTER的时间与地址和控制信号的时间保持一致。 |
HMASTLOCK | ARBITER | 锁定正在传输的传输序列 |
HSPLITx[15:0] | SLAVE | 从机用这 16 位的分块总线来指示仲裁器总线主机应该允许重试一个分块传输 |
6.HREADY信号
heady信号是slave回复主,表示读写操作是否完成的信号,可以通过拉低来延长传输。
注意:HREADY会有两个,一个是总线给的输入hready_in,一个是SLAVE给出的hready_out。
这个示意图是指在传输过程中,在需要延迟传送的周期,会把HREADY拉低(数据的周期),此时地址和数据都需要保持。
因为是流水线的设计,本次操作data 对应下一个address ,所以作为Slave必须先判断一下Master对上一次其它Slave设备的操作是否已经完成。如果完成,则响应主设备的操作;如果没有完成,则等待完成,然后才响应操作。
7.HTRANS
HTRANS[1:0] | ||
00 | IDLE | Slave忽略掉此时的传输 |
01 | BUSY | 表示master正在处理数据,slave需要忽略掉此时的传输 |
10 | NONSEQ | 表明当前是单笔的数据,或者是Burst的第一笔数据 |
11 | SEQ | 是Burst传输的剩余数据 |
T1:标明是busrt传输,这是burst的第一笔数据。
T2:HTANS是busy状态,表明当前传输延迟。
T3:继续传输,但是此时是没有数据的,所以是空白
T4:slave传输发现没法完成,拉低了Hready,
T5:master收到 延迟的信息,在T6时刻,随着hready拉高而受到数据。
8.HBURST
这个递增和回绕是指的地址,递增就是随着上一地址增加,回绕就是数据传输到一个边界内返回。这个边界是由hsize和hburst共同决定的。注意边界不能超过1KB。
1. 在 T1 正沿触发时,第一个传送地址 0x68 送出, NONSEQ 表示这是第一笔的传送; WARP4 表明是4个数据要回绕地址。
S 在 T3 时,回传一笔数据。注意地址 0x60 为一延伸周期,其数据在 T6 正沿才被接收到 (对读而言)或写入 S (对写而言)。
这个图就是T1-T3是一笔传输,T3-T6是一笔传输。
第一笔传输从0x68开始,16位传输,第二笔是32Bit,从0x108开始。