1、AHB总线概述
AHB:Advanced High-performance Bus,即高级高性能总线。AHB总线是SOC芯片中应用最为广泛的片上总线。下图是一个典型的基于AMBA AHB总线的微控制器系统:
SOC架构
基于AMBA AHB的设计中可以包含一个或多个总线主机,通常一个系统里至少包含一个处理器和一个测试接口;DMA和DSP作为总线主机同样是比较常见的。
典型的AHB总线设计包括一下几个部分:
(1)AHB主机:主机可以通过提供地址和控制信息发起读写操作;同一时刻总线上只允许一个主机占用总线。
(2)AHB从机:从机需在给定的地址空间范围内响应总线上的读或写操作;从机通过信号将成功、失败、等待数据传输等信息返回至有效的主机。
(3)AHB仲裁器:总线仲裁器确保同一时刻只有一个主机被允许发起传输。所有的AHB总线都必须包含一个仲裁器,即使是在单主机总线系统中。
(4)AHB译码器:译码器的作用是对传输中的地址信号进行译码,并提供给从机一个选择信号。所有的AHB总线中都必须包含一个中央译码器。
2、总线互联
AMBA AHB总线协议被设计为一个使用中央多路选择器的互联方案,如下表:
基于这种方案,所有的主机在需要发起传输时,都可以驱动地址和控制信号,由仲裁器决定哪一个主机的地址和控制信号(写传输时包含写数据信号)连通到总线上的所有从机。同时总线需要一个中央译码器,用于控制读数据和应答信号的多路数据选择器,该多路数据选择器用于选择传输中涉及的从机的相关信号。
3、AHB信号
AHB信号以字母H作为前缀,如下表所示
Name | Width | Source | Description |
---|---|---|---|
HCLK | 1bit | 时钟源 | 总线所有传输都基于此时钟,所有信号的时序都与时钟上升沿有关 |
HRESETn | 1bit | 复位控制器 | 总线复位信号,总线上唯一低电平有效的信号 |
HADDR | 32bit | 主机 | 32位地址总线 |
HTRANS | 2bit | 主机 | 表明当前传输的类型 |
HSIZE | 2bit | 主机 | 表明传输的大小,典型的是字节(8-bit)、 半字(16-bit)、字(32-bit), 协议允许最大传输大小是1024 bit |
HWRITE | 1bit | 主机 | 传输写信号,高电平表示写传输,低电平表示读传输 |
HBURST | 3bit | 主机 | 有自己的HBURST信号有自己的HBURST信号 |
HPROT | 4bit | 主机 | 保护控制信号。主要应用于期望实现某些程度的保护级别的模块中 |
HWDATA | 32bit | 主机 | 写传输数据。要求最低位宽位32位 |
HSELx | 1bit | 译码器 | 从机选择信号,每个AHB从机都有自己的HSEL信号,该信号有效时,表明选中相应从机 |
HRDATA | 32bit | 从机 | 读数据总线,用于读操作期间从机向主机传输数据 |
HREADY | 1bit | 从机 | 该信号为高时,表明总线传输完成。也可以拉低该信号用以扩展传输 |
HRESP | 2bit | 从机 | 传输响应信号。提供四种响应OKAY、ERROR、RETRY、SPLIT |
AMBA AHB也需要一些信号用于支持多主机总线操作,其中一些仲裁信号需要点对点连接:
Name | Width | Source | Description |
---|---|---|---|
HBUSREQx | 1bit | 主机 | 主机x发送至仲裁器的总线请求信号,总线系统中最多有16个主机,每个主机都有一个HBUSREQ信号 |
HLOCKx | 1bit | 主机 | 该信号为高时,表示主机x发起锁定传输 |
HGRANTx | 1bit | 仲裁器 | 表明主机x在当前总线上拥有最高的优先级,当HREADY信号为高时,地址/控制信号的所有权将发生变化,故主机x需在HREADY与HGRANTx信号同时为高时,获得总线控制权 |
HMASTER | 4bit | 仲裁器 | 表明哪一个主机当前拥有地址/控制信号的所有权 |
HMASTLOCK | 1bit | 仲裁器 | 表明当前传输为锁定顺序传输,此信号与HMASTER具有相同时序 |
HSPLITx | 16bit | 从机 | 用于指示仲裁器,哪一个主机可以继续完成分块传输 |
4、AMBA AHB操作概述
在一次AHB传输开始之前,主机必须被授予总线访问权。这个过程起始于主机向仲裁器发出一个总线请求,由仲裁器决定该主机何时被授予总线使用权。被授权的主机通过驱动地址和控制信号来发起一次AHB传输,这些信号提供了地址、传输方向、传输宽度等信息,以及会表明当前传输是否为突发传输的一部分。AHB支持两种形式的突发传输:
(1)增量突发,在地址边界不进行回环;
(2)回环突发,在特定地址边界回环
写数据总线用于将数据从主机发送到从机,读数据总线用于将数据从从机传输到主机。
每次数据传输包含:
(1)一个地址和控制周期;
(2)一个或多个数据周期
由于地址不支持扩展,所以所有的从机必须在地址周期内采样地址,而数据可以通过HREADY信号进行扩展延长,当HREADY信号为低,总线将插入等待状态,以此提供从机额外的采样数据或者提供数据的时间。
在传输中,从机使用应答信号HRESP[1:0]来表示传输状态:
(1)OKAY:OKAY响应表示传输正常,且当HREADY信号为高时,表示传输成功;
(2)ERROR:ERROR响应表示发生了传输错误,并且传输失败;
(3)RETRY and SPLIT:RETRY和SPLIT都表示当前传输未能即刻完成,但是主机应继续尝试传输
一般而言,仲裁器授权另一个主机前,允许当前被授权主机完成突发传输。然而,为了避免过多的仲裁延迟(当前主机占用过多总线周期),总线可以打断一个突发传输,在这种情况下,主机必须重新申请总线,以完成后续的突发传输。
5、基本传输
一个AHB传输包含两个部分:
(1)地址相位,仅包含一个时钟周期;
(2)数据相位,可以使用HREADY信号,维持多个时钟周期
下图表示了一个无等待状态的简单传输:
在无等待的简单传输中,主机在HCLK的上升沿驱动地址和控制信号到总线上,在下一个时钟上升沿时,从机对地址和控制信号进行采样,从机采样得到地址和控制信息后,可以驱动应答信号给与主机适当的响应,主机在第三个时钟的上升沿对应答信号进行采样。
这个简单的例子演示了在不同的时钟周期地址和数据相位是怎样产生的。实际上,当前传输的地址相位都对应于前一次传输的数据相位,这种地址和数据交叠现象,是总线能够进行流水线传输的基础,这样不仅能够获得更高的传输性能,也能为从机进行响应提供充足的时间。
从机可以在数据相位中,插入等待状态,以此获得更多得时间来完成传输:
注意:
(1)在写传输中,主机需要在整个扩展周期内保持写数据信号稳定
(2)在读传输中,从机没必要提供有效数据,知道传输结束时
当传输以这种方式做扩展时,将对下一个传输的地址相位产生一个扩展的副作用,如下图所示:
该图表示了三个不相关的地址A、B、C上的传输,图中地址A和C的传输都没有等待状态,地址B的传输通过HREADY信号的拉低插入了一个等待的数据相位,这样导致了地址C传输的地址相位进行了扩展。
6、传输类型
AHB传输类型可以分为四种,通过HTRANS[1:0]的取值来划分:
HTRANS | Type | Description |
---|---|---|
00 | IDLE | 表明没有数据传输的要求。IDLE 用于主机被授予总线,但不希望进行数据传输的情况。对于IDLE传输,从机必须提供一个零等待的OKAY应答,并且忽略该传输 |
01 | BUSY | BUSY传输类型允许主机在突发传输中插入空闲周期。表明主机正在进行突发传输,但下次传输不能立即有效。当主机使用BUSY传输类型时,地址和控制信号必须对应突发中的下一次传输。从机必须提供一个零等待的OKAY应答,并且忽略该传输。 |
10 | NONSEQ | 表示突发传输中的第一次传输或者非突发的单次传输,地址和控制信号与前次传输无关. |
11 | SEQ | 突发传输中剩余的传输时连续的,地址和前一次传输是相关的,当前地址值等于前一次传输的地址值加上传输大小(字节), 控制信息和前一次传输相同。在回环的突发传输中,传输的地址在地址边界处回环,回环值的大小等于传输大小(字节) 乘以传输次数(4、8或16) ) |
下图是一个不同传输类型的例子:
从图中可以看出:
第一个传输为以此突发传输的开始(T1),所以其传输类型为NONSEQ;
主机不能立刻执行突发传输中的第二次传输,所以使用了BUSY的传输类型(T2)来延迟下一次传输的开始,注意此时地址已经时下次传输的地址,控制信号和下次传输保持一致,主机只插入了一个BUSY,所以T3执行第二次传输;
主机执行第三次传输(T4),由于从机将HREADY信号拉低,插入了一个等待周期,引起地址相位的扩展;
T6周期完成第三次传输,T7周期完成第四次传输(图中T8边沿)。
7、突发操作
AMBA AHB协议定义了4、8和16拍的突发,未定义长度的突发传输以及单次传输;协议支持增量和回环的突发方式。
增量突发方式访问连续地址空间,每次传输的地址是前一次传输地址增加一个增量偏移;
回环突发中,如果传输的其实地址并未和突发中的字节总数对齐,则突发传输地址将在达到边界处回环。例如:一个4拍回环突发的字(4字节)访问将在16字节的边界处回环,如果传输的起始地址为0x34,那么突发中将包含4个地址:0x34,0x38,0x3C,0x30。
AMBA AHB 有8种突发操作,使用信号HBRUST[2:0]表示:
HTRANS | Type | Description |
---|---|---|
000 | SINGLE | 单一传输 |
001 | INCR | 未指定长度的增量突发 |
010 | WRAP4 | 4拍回环突发 |
011 | INCR4 | 4拍增量突发 |
100 | WRAP8 | 8拍回环突发 |
101 | INCR8 | 8拍增量突发 |
110 | WRAP16 | 16拍回环突发 |
111 | INCR16 | 16拍增量突发 |
突发不能超过1K的地址边界,所以主机尽量不要发起将要跨过地址边界的定长的增量突发。
一次突发传输的数据总量,等于节拍数乘以每拍包含的字节数。所以突发传输必须将地址边界和数据大小对齐,例如,字传输必须对齐到字地址边界,即A[1:0]=00;半字传输必须对齐到半字地址边界,即A[0]=0。
评论 (0)